Çfarë na kushton të ndërtojmë blockchain?

E gjithë historia e njerëzimit është një çlirim i vazhdueshëm nga zinxhirët dhe krijimi i të tjerëve, edhe më të fortë. (Autor anonim)

Duke analizuar projektet e shumta blockchain (Bitshares, Hyperledger, Exonum, Ethereum, Bitcoin etj.), kuptoj se nga pikëpamja teknike, të gjitha ato janë ndërtuar mbi të njëjtat parime. Blockchain të ngjajnë me shtëpi, të cilat, pavarësisht diversitetit të ndërtimit, dekorit dhe qëllimeve, kanë një themel, mure, çati, dritare dhe dyer, të cilat janë të lidhura me njëri-tjetrin në mënyra të caktuara. Nëse kupton parimet themelore të ndërtimit të ndërtesave dhe di njëherësh karakteristikat e materialeve të përdorura, atëherë mund të përcaktoni qëllimin e caktuar të një shtëpie. Aktualisht, situata me blockchain është se të gjithë kanë dëgjuar për të, por pak kush e kupton arkitekturën dhe parimet e funksionimit. Prandaj, lind ngathtësi se për çfarë dhe si ka kuptim përdorimi i teknologjive blockchain.

Në këtë artikull do të shqyrtojmë pronat dhe parimet që janë të përbashkëta për të gjitha blockchain-et. Më pas do të shohim detyrat që mund të zgjidhen me anë të blockchain-it dhe për të konsoliduar materialin, do të ndërtojmë një blockchain të vogël, por të vërtetë në pronën tonë virtuale!

Pra, le të kujtojmë cilat ishin problemet që blockchain fillimisht zgjidhte.

Jam i sigurt se shumë do të thonë për bazën e dhënave të shpërndarë, decentralizuar, publike dhe të pandryshueshme. Por përse ishte e nevojshme gjithë kjo?

Unë preferoj të filloj studimin e çdo teknologjie me leximin e standardeve, sepse pikërisht mbi to mbështeten të gjitha artikujt dhe librat mbi temën e shqyrtuar. Por standardet e blockchain-it aktualisht mungojnë, në ISO janë krijuar vetëm komitete për zhvillimin e tyre. Aktualisht, çdo projekt publik blockchain ka dokumentin e tij White paper, i cili në thelb është një dokument teknik. Projekti i parë i njohur blockchain është rrjeti Bitcoin. Të hyjmë në faqen zyrtare të rrjetit dhe të shohim nga fillimet e tij.

Detyra e blockchain-it

Pra, detyra që zgjidhi blockchain në rrjetin pionier Bitcoin është përcaktimi i transferimit të besueshëm të pronësisë mbi asetet digitale në një mjedis të pasigurt pa ndërmjetës. Për shembull, në rrjetin Bitcoin, aktivi dixhital është monedha dixhitale bitcoin. Të gjitha zgjidhjet teknike të Bitcoin dhe blockchain-eve të tjera përfshihen në zgjidhjen e kësaj detyre.

Problemet që zgjidh blockchain-i

Supozoni se një organizatë financiare thotë se ka ndërtuar një rrjet në mbarë botën, me të cilin mund të dërgosh para çdo personi. A do t'i besonit asaj? Nëse kjo organizatë është Visa ose MasterCard, ndoshta do t'i besoni, por nëse, për shembull, është AnonymousWorldMoney, ndoshta jo. Pse kështu? Sepse ne e dimë mirë se si ndërtohen sistemet e shpërndara nga kompani private, me cilat qëllime dhe çfarë pasojash mund të sjellë kjo. Le të shqyrtojmë më në detaje problemet e këtyre sistemeve dhe si mund të zgjidhen ato duke përdorur teknologjitë e blockchain.

Le të supozojmë se në AnonymousWorldMoney ka serverë me baza të dhënash, dhe është mirë nëse ka disa në qendra të ndryshme të të dhënave. Kur dërguesi dërgon para, regjistrohet një transaksion, i cili riprodhohet në të gjithë serverat, dhe paratë arrijnë te marrësi.

Çfarë na kushton të ndërtojmë blockchain?

Në një botë ideale, një skemë e tillë funksionon mrekullisht, por në të tonën lindin problemet e mëposhtme:

  1. Problemi i identifikimit të pjesëmarrësve nga njëra anë dhe nevoja për anonimitet në transaksione nga ana tjetër. Pra, duhet të dërgosh para një marrësi të caktuar dhe kështu që askush përveç pjesëmarrësve në marrëveshje të mos e dijë për këtë transaksion. Bankat kanë numra llogarish dhe kartash bankare të lidhura me persona fizikë ose juridikë të caktuar, dhe sekreti bankar mbron informacionin mbi transaksionet. Dhe kush garanton se AnonymousWorldMoney nuk përdor të dhënat personale dhe informacionin mbi transaksionet për qëllimet e saj?
  2. Si të jeni të sigurt se marrësi mori saktësisht atë shumë që iu dërgua? Supozoni se dërguesi dërgoi $100, por marrësi mori $10. Dërguesi shkon në zyrën e AnonymousWorldMoney me faturën e tij, por punonjësi tregon versionin e tij, ku është shënuar se dërguesi dërgoi vetëm $10.
  3. Problemi i një ambienti të pasigurt, për shembull, mashtrimi i quajtur double-spending. Një pjesëmarrës jodinjitet mund të shpenzojë bilancin e tij disa herë para se pagesa të riprodhohet në të gjithë serverat. Teorema CAP, sigurisht, nuk është anuluar, dhe një konsistencë do të arrihet në fund, por dikush nuk do të marrë paratë për shërbimet ose produktet e ofruara. Prandaj, nëse nuk ka besim të plotë tek organizata e pagesave ose tek pjesëmarrësit e transaksioneve, atëherë duhet ndërtuar një rrjet që nuk bazohet në besim, por në kriptografi.
  4. Kushtueshmëria AnonymousWorldMoney ka një numër përcaktues serverash që mund të bëhen të paarritshëm, qoftë pa dashje ose me keqdashje.
  5. AnonymousWorldMoney do të marrë një komision të dukshëm.
  6. Mundësia e menaxhimit. Gjatë përdorimit të Bitcoin, u zbulua se njerëzit duan jo vetëm të transferojnë monedha nga njëri-tjetri, por gjithashtu të kontrollojnë kushte të ndryshme të kalimit të transaksionit, të programojnë skenarë të funksionimit, të realizojnë veprimet automatikisht në përputhje me kushtet, etj.

Si e zgjidh blockchain këto probleme

  1. Identifikimi i pjesëmarrësve bëhet përmes një çifti çelësash: një çelës privat dhe një çelës publik, ndërsa algoritmi i nënshkrimit digjital identifikon në mënyrë unike dërguesin dhe marrësin, duke mbajtur identitetet e tyre anonim.
  2. Transaksionet mblidhen në blloqe, një hash i bllokut llogaritet dhe shkruhet në bllokun tjetër. Kjo renditje e shkruarjes së hash-eve në blloqe i dha emrin teknologjisë blockchain dhe gjithashtu e bën të pamundur ndryshimin ose fshirjen e heshtur të blloqeve ose transaksioneve të veçanta nga blloqet. Prandaj, nëse një transaksion ka hyrë në blockchain, mund të jeni të sigurt se të dhënat e tij do të mbeten të pandryshueshme.
  3. Mashtrimi i double-spending parandalitet duke arritur konsensus në rrjet për ato të dhëna që duhen konsideruar si të vërteta dhe cilat duhet të hodhen poshtë. Në rrjetin Bitcoin, konsensusi arrihet përmes provës së punës PoW (Proof-of-Work).
  4. Besueshmëria e funksionimit të rrjetit arrihet përmes faktit se blockchain është publik, ku çdo pjesëmarrës mund të nisë nodën e tij, të marrë një kopje të plotë të blockchain dhe, më tepër, të fillojë vetë të verifikojë transaksionet për saktësi. Duhet të theksohet se blockchain-et moderne lejojnë ndërtimin e blockchain-eve jo vetëm publike (të hapura), por edhe private (të mbyllura), si dhe përdorimin e skemave të kombinuara.
  5. Nuk mund të eliminohet plotësisht komisioni në blockchain, pasi duhet paguar për njerëzit që mbështesin rrjetin, por në blockchain nevoja për komisionin provohet në mënyrë kaq bindëse sa nuk ka dyshim për nevojën e tij.
  6. Blockchain-et moderne kanë mundësinë të realizojnë logjikën e biznesit, e cila në blockchain quhet Smart Contracts. Logjika e kontratave të mençura realizohet në gjuhë të ndryshme të nivelit të lartë.

Tani do t'i shqyrtojmë këto zgjidhje më në detaje.

Arkitektura e blockchain

Pjesët përbërëse të blockchain

Çdo pjesëmarrës mund të nisë një nod me një kopje të plotë të bllokut (full node). Nodat e plota, të cilat mund të regjistrojnë transaksionet në bllok, quhen nodat e konsensit (witness) ose minatorë (miner). Nodat e plota, të cilat verifikojnë vetëm saktësinë e transaksioneve quhen nodat e auditi (audit). Klinetat e lehta (light clients) nuk mbajnë kopje të plota të bllokut, por interagojnë me rrjetin duke përdorur nodat e plota.
Shumica e përdoruesve për të kryer transaksione përdorin pikërisht klinetat e lehta ose portofolat web. Të gjitha nodat janë të lidhura me njëra-tjetrën. Me këtë grup elementësh, arkitektura e rrjetit bëhet më e qëndrueshme:

Çfarë na kushton të ndërtojmë blockchain?

Cikli i jetës së transaksionit

Le të shohim ciklin e jetës së transaksionit dhe ta analizojmë atë sipas pjesëve:

Çfarë na kushton të ndërtojmë blockchain?

Teknologjitë e bllokut

Do të ndalemi më në detaje mbi zgjidhjet teknike dhe lidhjet e tyre me njëra-tjetrën.

Identifikimi

Çdo transaksion në bllok duhet të nënshkruhet me një nënshkrim dixhital. Prandaj, për të kryer një transaksion, çdo pjesëmarrës duhet të ketë një çift çelësh: private / public. Ndonjëherë çift çelesh quhet portofol (wallet), sepse çelësat lidhen njëherë me një adresë dixhitale unike dhe bilancin e pjesëmarrësit. Në realitet, çelësat dhe adresat janë thjesht vargje numrash në sisteme të ndryshme numërimi. Shembuj të çelësave dhe adresës së portofolit:

Çelësi privat: 0a78194a8a893b8baac7c09b6a4a4b4b161b2f80a126cbb79bde231a4567420f
Çelësi publik: 0579b478952214d7cddac32ac9dc522c821a4489bc10aac3a81b9d1cd7a92e57ba
Adresa: 0x3814JnJpGnt5tB2GD1qfKP709W3KbRdfb27V

Për krijimin e nënshkrimit dixhital në blloqe përdoret një algoritëm i bazuar në kurvat eliptike: Algoritmi i Nënshkrimit Dixhital të Kurvave Eliptike (ECDSA). Për funksionimin e tij, çelësi privat (një numër 256-bit) zakonisht merret rastësisht. Numri i mundësive për çelësat është 2 në fuqinë 256, prandaj mund të flasim për pamundësinë praktike të përputhjes së vlerave të çelësave privat.

Pastaj, çelësi publik merret nga çelësi privat duke shumëzuar vlerën e tij me koordinatat e një pike që ndodhet në kurbën eliptike, duke rezultuar në koordinatat e një pike të re në të njëjtën kurbë. Ky veprim garanton marrjen e një çifti çelësash të përshtatshëm për nënshkrimet dixhitale të transaksioneve. Dhe përfundimisht adresën e portofolit e llogaritet njëherësisht nga çelësi publik.

Ka shumë artikuj me detaje mbi kriptografinë e përdorur në bllok, për shembull: Bitcoin në një pasqyrë — Kriptografia

Çelësi privat duhet të mbetet strikt sekret dhe të ruhet në siguri. Çelësi publik është i njohur nga të gjithë. Në rast se humbet çelësi privat, rikthimi i aksesit në aset (monedha) nuk është i mundur dhe paratë do të humbasin përherë. Prandaj, ruajtja e besueshme e çelësave privatë është jashtëzakonisht e rëndësishme, pasi kjo nuk është një bankë, ku mund të shkosh gjithmonë me pasaportë dhe të rikthesh llogarinë. Ekziston një industri e tërë për prodhimin e ashtuquajturëve portofola të ftohtë për kriptovaluta, të ngjashëm me usb flash drives:

Çfarë na kushton të ndërtojmë blockchain?

ose mund të përdoren mënyra më të sigurta, si p.sh., të gdhendesh vlerën e çelësit privat në monedha:

Çfarë na kushton të ndërtojmë blockchain?

Transaksionet

Për më shumë informacione rreth strukturës së transaksionit, mund të konsultoheni me artikullin Bitcoin në një përmbledhje — Transaksioni. Na intereson të kuptojmë se çdo transaksion ka të paktën të dhënat e mëposhtme:

Nga: 0x48C89c341C5960Ca2Bf3732D6D8a0F4f89Cc4368 - adresa digjitale e dërguesit
Në: 0x367adb7894334678b90аfe7882a5b06f7fbc783a - adresa digjitale e marrësit
Vlera: 0.0001 - shuma e transaksionit
Heshi i Transaksionit: 0x617ede331e8a99f46a363b32b239542bb4006e4fa9a2727a6636ffe3eb095cef - hashi i transaksionit

Pastaj transaksioni nënshkruhet me çelësin privat dhe shpërndahet (shiko detajet e funksionimit të protokollit Bitcoin në një përmbledhje - Protokolli) për të gjithë nodet në bllokçinë, të cilat verifikojnë transaksionet për vlefshmëri. Algoritmi i verifikimit të transaksionit është jo trivial dhe përfshin dyzet hapa.

Blloqet e transaksioneve

Pas verifikimit të vlefshmërisë së transaksioneve, nodet formojnë blloqe prej tyre. Përveç transaksioneve, në bllok regjistrohet hashi i bllokut të mëparshëm, një numër (numëratori Nonce), dhe ndodh llogaritja e hashes së bllokut aktual sipas algoritmit SHA-256. Hashi duhet të përmbushë kushte të caktuara për vështirësi. Për shembull, në rrjetin Bitcoin, vështirësia e hashes automatikisht ndryshon çdo 2 javë, në varësi të fuqisë së rrjetit, në mënyrë që blloku të gjenerohet rreth çdo 10 minuta. Vështirësia përcaktohet nga kushti i mëposhtëm: hashi i gjetur duhet të jetë më i vogël se një numër i paracaktuar. Nëse ky kusht nuk përmbushet, atëherë Nonce-s i shtohet 1, dhe puna për llogaritjen e hashes përsëritet. Për të gjetur hashin, përdoret fusha Nonce, pasi këto janë të dhëna të vetme në bllok që mund të ndryshohen, ndërsa të tjerat duhet të mbeten të pandryshueshme. Hashi i saktë duhet të ketë një numër të caktuar zerosh në fillim, për shembull, një nga hashes reale:

000000000000000000000bf03212e7dd1176f52f816fa395fc9b93c44bc11f91

Gjetja e suksesshme e hash-it është prova e punës së kryer (Proof-of-Work, PoW) për rrjetet Bitcoin ose Ethereum. Procesi i gjetjes së hash-eve quhet minería, duke e krahasuar me nxjerrjen e arit. Emri e përcakton me saktësi natyrën e procesit, pasi ndodh një provë e thjeshtë e mundësive, dhe nëse dikush gjen një hash të përshtatshëm, atëherë kjo është me të vërtetë fat. Është si të gjesh një ar në mes të tonelatave të gurit të zbrazët. Shpërblimi për bllok aktualisht është 12.5 BTC dhe nëse e shumëzojmë me çmimin aktual të bitcoin $3900, atëherë rezulton më shumë se një kilogram ar të pastër. Ka shumë për të luftuar!

Pas gjetjes së suksesshme të hash-it, blloku dhe vetë hash-i i gjetur regjistrohen në blockchain si blloku i ardhshëm. Më shumë rreth strukturës së bllokëve mund të shihni në artikullin Bitcoin në një përmbledhje - Blockchain, dhe më poshtë do të paraqes një diagram të thjeshtuar:

Çfarë na kushton të ndërtojmë blockchain?

Blockchain fillon me një bllok, i cili nuk ka ende hash-in e bllokut të mëparshëm. Ky bllok në blockchain është i vetëm dhe ka emrin Genesis block. Të tjerët kanë një strukturë të njëjtë dhe ndryshojnë vetëm në numrin e transaksioneve. Transaksionet reale dhe bllokët që krijohen aktualisht në Bitcoin ose Ethereum mund të shihen në Block Explorer.

Madhësia e bllokëve në Bitcoin është e kufizuar në 1Mb dhe me një volum minimal informacioni në transaksion rreth 200 byte, maksimal në një bllok mund të ketë rreth 6000 transaksione. Nga kjo, së këndejmi, buron edhe performanca e Bitcoin, për të cilën të gjithë qeshin: blloku krijohet rreth çdo 10 minuta * 60 sek = 600 sek, që jep një performancë formale rreth 10 TPS. Megjithatë, në të vërtetë — kjo nuk është performancë, por një algoritëm i realizuar me qëllim. Në Ethereum, për konkurencë thjesht e bënë kohën e krijimit të bllokut 15 sekonda dhe performanca u rrit formalish. Prandaj, në blockchainet që përdorin PoW si konsensus, nuk ka kuptim të krahasohet performanca, pasi ajo varet drejtpërdrejt nga vështirësia e llogaritjes së hash-it, të cilën mund ta caktoni sipas dëshirës.

Forks

Çfarë ndodh nëse, për shembull, disa nyje gjejnë hash-e që përmbushin kushtet e vështirësisë, por janë të ndryshme në vlerë (me fjalë të tjera, arrijnë konsensa të ndryshme) dhe regjistrojnë blloqe në blockchain? Le të shohim se si e mbron blockchain nga ky situatë. Në këtë rast ndodh ajo që quhet fork (‘ndara’), dhe blockchain ka dy versione të zinxhirit.

Çfarë na kushton të ndërtojmë blockchain?

Çfarë ndodh më pas? Më pas një pjesë e rrjetit fillon të punojë mbi bllokun N+2 nga një zinxhir, ndërsa një pjesë nga tjetri:

Çfarë na kushton të ndërtojmë blockchain?

Një nga këto blloqe do të gjendet më shpejt dhe do të dërgohet në blockchain, dhe atëherë sipas rregullave, blockchain do të duhet të kalojë në zinxhirin më të gjatë dhe të anulojë të gjitha transaksionet nga blloku alternativ:

Çfarë na kushton të ndërtojmë blockchain?

Në këtë mënyrë, mund të krijohet një situatë kur transaksioni i një pjesëmarrësi ndodhej vetëm në një nga blloqet e fork-ut, i cili u anulua. Prandaj, për të siguruar që transaksioni i nevojshëm u regjistrua në blockchain, ka një rekomandim të përgjithshëm — para se të besoni një transaksioni, duhet të prisni disa blloqe të tjera të shtohen në blockchain. Rekomandimet për sa blloqe duhet pritur për blockchain të ndryshme ndryshojnë. Për shembull, për rrjetin Bitcoin minimumi është 2 blloqe, maksimumi 6.

I njëjti skenar me fork-un e blloqeve do të vërehet edhe gjatë asaj që quhet sulmi 51% — kur një grup minierësh përpiqet të krijojë një zinxhir alternativ blloqesh, duke tentuar të anulojë zinxhirin me transaksionet e tyre të falsifikuara. Megjithatë, aktualisht, përkundrazi, është më e dobishme të shpenzohet kapaciteti për minimin e ndershëm.

Konsensusi

Për të regjistruar një bllok në blockchain, rrjeti duhet të arrijë një konsensus. Le të rikujtojmë problemin e arritjes së konsensusit në rrjetet kompjuterike të komunikimit. Problemi formulohet si problemi i gjeneralëve bizantinë BFT (tolerancë ndaj gabimeve bizantine). Duke lënë mënjanë përshkrimin e ngjashëm të problemeve të ushtrisë bizantine, problemi mund të formulohet kështu: si të arrijnë nyjet e rrjetit në një rezultat të përbashkët, nëse një pjesë e nyjeve të rrjetit mund ta deformojnë qëllimisht. Algoritmet ekzistuese për zgjidhjen e problemit BFT tregojnë se rrjeti mund të funksionojë siç duhet, nëse mashtruesit janë më pak se 1/3. Pse nuk u aplikua konsensusi BFT në rrjetin Bitcoin? Pse ishte e nevojshme të përdorej PoW? Ka disa arsye:

  • BFT funksionon mirë me një grup të vogël fikse të nodëve, ndërsa në blockchain publik numri i nodëve është i paparashikueshëm dhe, më tepër, nodet mund të aktivizohen dhe të deaktivizohen pa paralajmërim.
  • Është e nevojshme të motivohet njerëzit për të nisur nodet e blockchain-it. Për këtë, njerëzit duhet të marrin shpërblim. Në BFT nuk ka një motiv formal për të marrë shpërblim, ndryshe nga shpërblimi në PoW, i cili kuptohet intuitivisht nga të gjithë: për elektricitetin e konsumuar nga procesori gjatë gjetjes së hash-it të blokut.

Përveç PoW, ekzistojnë disa konsensus të tjera që përdoren në blockchain-e moderne, për shembull:

  • PoS (Proof-of-Stake) — në blockchain-in Hyperledger
  • DPoS (Delegated Proof-of-Stake) — në blockchain-in BitShares
  • Modifikimet e BFT: SBFT (Simplified BFT) dhe PBFT (Practical BFT), për shembull, në blockchain-in Exonum

Të ndalemi pak mbi konsensusin PoS, pasi pikërisht PoS dhe variantet e tij kanë marrë shpërndarjen më të madhe në blockchain-et private. Pse pikërisht në private? Nga njëra anë, karakteristikat e PoS janë më të mira krahasuar me PoW, sepse për të arritur konsensusin janë të nevojshme burime më të vogla kompjuterike, duke rritur kështu shpejtësinë e regjistrimit të të dhënave në blockchain. Por nga ana tjetër, PoS ofron më shumë mundësi për mashtrim, prandaj për të neutralizuar këtë, të gjithë pjesëmarrësit e blockchain-it duhet të jenë të njohur.

Konsensusi PoS bazohet në zgjedhjen e një nodi që mund të regjistrojë një blok me transaksionet në blockchain në varësi të shumës së mjeteve në llogari, më saktësisht, jo në llogari, por në kolateral, dmth. sa më shumë mjete të kesh në kolateral, aq më shumë gjasa ka që rrjeti të zgjedhë nodin tënd për të regjistruar blokun. Kolaterali nuk do të kthehet në rast se bloku rezulton jo i vlefshëm. Kështu realizohet mbrojtja nga mashtrimi. Ka variacione të mëposhtme të PoS:

  • Konsensusi Delegated PoS (DPoS) ndan pjesëmarrësit në "votues" dhe "validues". Mbajtësit e monedhave (pjesëmarrësit që votojnë) delegojnë të drejtat e tyre për të verifikuar dhe regjistruar transaksionet në blockchain te pjesëmarrësit e tjerë. Kështu, validuesit kryejnë të gjithë punën llogaritëse dhe marrin shpërblim për këtë, ndërsa prania e pjesëmarrësve që votojnë garanton ndershmërinë e validuesve, pasi ata mund të zëvendësohen në çdo moment.
  • Konsensusi LPoS (Leased Proof-of-Stake) lejon mundësi për të dhënë fondet e tua me qira për nodet e tjera, në mënyrë që ato të kenë më shumë shanse për të verifikuar blloqet. Kështu, mund të fitosh komision për transaksionet pa marrë pjesë në vetë verifikimin e transaksioneve dhe minierat e blloqeve.

Ekzistojnë edhe një sërë konsensusesh që nuk kanë arritur ende të përhapen gjerësisht, këtu thjesht do i përmend për informacion, ndërsa një pasqyrë e vetë algoritmeve të konsensusit mund të shihet, për shembull, në artikullin: Algoritmet e Konsensusit në Blockchain.

  • PoET (Proof-of-Elapsed Time)
  • PoC (Proof-of-Capacity)
  • PoB (Proof-of-Burn)
  • PoWeight (Proof-of-Weight)
  • PoA (Proof-of-Activity) — PoW + PoS
  • PoI (Proof-of-Importance)

Besueshmëria dhe modelet e implementimit të blockchain-eve

Blockchain publik

Qëndrueshmëria Publik ose emri tjetër Blockchain pa leje arrin të nxitet nga fakti që çdo kush mund të lidhet dhe të shikojë informacionin ose madje të lidhë nodin e tij, dhe besimi ndërtohet mbi konsensusin PoW.

Blockchain privat

Privat или Blockchain privat me leje. Në këto blockchain-e, vetëm një grup i caktuar pjesëmarsish (organizacione ose individë) ka akses në informacion. Këto blockchain-e ndërtohen nga organizata me qëllim rritjen e përfitimit të përgjithshëm ose efikasitetit. Besueshmëria e tyre sigurohet nga objektivat e përbashkëta të pjesëmarsve dhe algoritmet e konsensusit PoS dhe BFT.

Konsorciumi i blockchain

Ekzistojnë Konsorcium или Blockchain publik me leje. Këto janë blockchain-e ku kushdo mund të lidhet për të shikuar, por për të shtuar informacion ose për të lidhur nodin e tij, pjesëmarrësi mund ta bëjë këtë vetëm me lejen e pjesëmarsve të tjerë. Këto blockchain-e ndërtohen nga organizata me qëllim të rritjes së besimit nga klientët ose konsumatorët e produkteve ose shoqërisë në tërësi. Këtu, besueshmëria gjithashtu arrin duke pasur praninë e besimit mes pjesëmarsve dhe të njëjtat algoritme konsensusi PoS dhe BFT.

Kontratat Smart

Në blockchain-et e realizuara pas Bitcoin, në një masë të caktuar është shtuar mundësia për të realizuar kontrata smart. Në thelb, një kontratë smart është një transaksion në të cilin është vendosur një kod programi për ekzekutim. Kontratave smart në rrjetin Ethereum u jepet ekzekutimi në EVM (Ethereum Virtual Machine). Për të filluar ekzekutimin e kontratës smart, ajo duhet të niset qartë nga një transaksion tjetër, ose duhet të përmbushen kushtet për realizimin e saj. Rezultatet e ekzekutimit të kontratës smart gjithashtu do të regjistrohen në blockchain. Marrja e të dhënave jashtë blockchain-it është e mundur, por shumë e kufizuar.

Cila logjikë biznesi mund të realizohet me ndihmën e kontratave të mençura? Në të vërtetë, nuk ka aq shumë, për shembull, verifikimi i kushteve bazuar në të dhëna nga blockchain-i, ndryshimi i pronarëve të aktiveve digjitale në varësi të këtyre kushteve, regjistrimi i të dhënave në një ruajtje të përhershme brenda blockchain-it. Logjika implementohet në një gjuhë të veçantë të nivelit të lartë, Solidity.

Një shembull klasik i funksionalitetit që zbatohet duke përdorur kontratat e mençura është lëshimi i tokenëve për të realizuar ICO. Për shembull, unë kam zbatuar një kontratë të mençur për lëshimin e 500,000,000 AlexToken. Sipas linkut në Etherscan

kode burimi i kontratës së mençur në gjuhën Solidity

pragma solidity ^0.4.23;

library SafeMath {
    /**
     * @dev Multiplies two numbers, throws on overflow.
     **/
    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
        if (a == 0) {
            return 0;
        }
        c = a * b;
        assert(c / a == b);
        return c;
    }
    
    /**
     * @dev Integer division of two numbers, truncating the quotient.
     **/
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // assert(b > 0); // Solidity automatically throws when dividing by 0
/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
        // uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
        return a / b;
    }
    
    /**
     * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
     **/
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        assert(b <= a);
        return a - b;
    }
    
    /**
     * @dev Adds two numbers, throws on overflow.
     **/
    function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
        c = a + b;
        assert(c >= a);
        return c;
    }
}

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 **/
 
contract Ownable {
    address public owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev The Ownable constructor sets the original `owner` of the contract to the sender account.
     **/
   constructor() public {
      owner = msg.sender;
    }
    
    /**
     * @dev Throws if called by any account other than the owner.
     **/
    modifier onlyOwner() {
      require(msg.sender == owner);
      _;
    }
    
    /**
     * @dev Allows the current owner to transfer control of the contract to a newOwner.
     * @param newOwner The address to transfer ownership to.
     **/
    function transferOwnership(address newOwner) public onlyOwner {
      require(newOwner != address(0));
      emit OwnershipTransferred(owner, newOwner);
      owner = newOwner;
    }
}

/**
 * @title ERC20Basic interface
 * @dev Basic ERC20 interface
 **/
contract ERC20Basic {
    function totalSupply() public view returns (uint256);
    function balanceOf(address who) public view returns (uint256);
    function transfer(address to, uint256 value) public returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
}

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 **/
contract ERC20 is ERC20Basic {
    function allowance(address owner, address spender) public view returns (uint256);
    function transferFrom(address from, address to, uint256 value) public returns (bool);
    function approve(address spender, uint256 value) public returns (bool);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

/**
 * @title Basic token
 * @dev Basic version of StandardToken, with no allowances.
 **/
contract BasicToken is ERC20Basic {
    using SafeMath for uint256;
    mapping(address => uint256) balances;
    uint256 totalSupply_;
    
    /**
     * @dev total number of tokens in existence
     **/
    function totalSupply() public view returns (uint256) {
        return totalSupply_;
    }
    
    /**
     * @dev transfer token for a specified address
     * @param _to The address to transfer to.
     * @param _value The amount to be transferred.
     **/
    function transfer(address _to, uint256 _value) public returns (bool) {
        require(_to != address(0));
        require(_value <= balances[msg.sender]);
        
        balances[msg.sender] = balances[msg.sender].sub(_value);
        balances[_to] = balances[_to].add(_value);
        emit Transfer(msg.sender, _to, _value);
        return true;
    }
    
    /**
     * @dev Gets the balance of the specified address.
     * @param _owner The address to query the the balance of.
     * @return An uint256 representing the amount owned by the passed address.
     **/
    function balanceOf(address _owner) public view returns (uint256) {
        return balances[_owner];
    }
}

contract StandardToken is ERC20, BasicToken {
    mapping (address => mapping (address => uint256)) internal allowed;
    /**
     * @dev Transfer tokens from one address to another
     * @param _from address The address which you want to send tokens from
     * @param _to address The address which you want to transfer to
     * @param _value uint256 the amount of tokens to be transferred
     **/
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
        require(_to != address(0));
        require(_value <= balances[_from]);
        require(_value <= allowed[_from][msg.sender]);
    
        balances[_from] = balances[_from].sub(_value);
        balances[_to] = balances[_to].add(_value);
        allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
        
        emit Transfer(_from, _to, _value);
        return true;
    }
    
    /**
     * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
     *
     * Beware that changing an allowance with this method brings the risk that someone may use both the old
     * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
     * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     * @param _spender The address which will spend the funds.
     * @param _value The amount of tokens to be spent.
     **/
    function approve(address _spender, uint256 _value) public returns (bool) {
        allowed[msg.sender][_spender] = _value;
        emit Approval(msg.sender, _spender, _value);
        return true;
    }
    
    /**
     * @dev Function to check the amount of tokens that an owner allowed to a spender.
     * @param _owner address The address which owns the funds.
     * @param _spender address The address which will spend the funds.
     * @return A uint256 specifying the amount of tokens still available for the spender.
     **/
    function allowance(address _owner, address _spender) public view returns (uint256) {
        return allowed[_owner][_spender];
    }
    
    /**
     * @dev Increase the amount of tokens that an owner allowed to a spender.
     *
     * approve should be called when allowed[_spender] == 0. To increment
     * allowed value is better to use this function to avoid 2 calls (and wait until
     * the first transaction is mined)
     * From MonolithDAO Token.sol
     * @param _spender The address which will spend the funds.
     * @param _addedValue The amount of tokens to increase the allowance by.
     **/
    function increaseApproval(address _spender, uint _addedValue) public returns (bool) {
        allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
        emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
        return true;
    }
    
    /**
     * @dev Decrease the amount of tokens that an owner allowed to a spender.
     *
     * approve should be called when allowed[_spender] == 0. To decrement
     * allowed value is better to use this function to avoid 2 calls (and wait until
     * the first transaction is mined)
     * From MonolithDAO Token.sol
     * @param _spender The address which will spend the funds.
     * @param _subtractedValue The amount of tokens to decrease the allowance by.
     **/
    function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {
        uint oldValue = allowed[msg.sender][_spender];
        if (_subtractedValue > oldValue) {
            allowed[msg.sender][_spender] = 0;
        } else {
            allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
        }
        emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
        return true;
    }
}

/**
 * @title Configurable
 * @dev Configurable varriables of the contract
 **/
contract Configurable {
    uint256 public constant cap = 1000000000*10**18;
    uint256 public constant basePrice = 100*10**18; // tokens per 1 ether
    uint256 public tokensSold = 0;
    
    uint256 public constant tokenReserve = 500000000*10**18;
    uint256 public remainingTokens = 0;
}

/**
 * @title CrowdsaleToken 
 * @dev Contract to preform crowd sale with token
 **/
contract CrowdsaleToken is StandardToken, Configurable, Ownable {
    /**
     * @dev enum of current crowd sale state
     **/
     enum Stages {
        none,
        icoStart, 
        icoEnd
    }
    
    Stages currentStage;
    /**
     * @dev constructor of CrowdsaleToken
     **/
    constructor() public {
        currentStage = Stages.none;
        balances[owner] = balances[owner].add(tokenReserve);
        totalSupply_ = totalSupply_.add(tokenReserve);
        remainingTokens = cap;
        emit Transfer(address(this), owner, tokenReserve);
    }
    
    /**
     * @dev fallback function to send ether to for Crowd sale
     **/
    function () public payable {
        require(currentStage == Stages.icoStart);
        require(msg.value > 0);
        require(remainingTokens > 0);
        
        uint256 weiAmount = msg.value; // Calculate tokens to sell
        uint256 tokens = weiAmount.mul(basePrice).div(1 ether);
        uint256 returnWei = 0;
        
        if(tokensSold.add(tokens) > cap){
            uint256 newTokens = cap.sub(tokensSold);
            uint256 newWei = newTokens.div(basePrice).mul(1 ether);
            returnWei = weiAmount.sub(newWei);
            weiAmount = newWei;
            tokens = newTokens;
        }
        
        tokensSold = tokensSold.add(tokens); // Increment raised amount
        remainingTokens = cap.sub(tokensSold);
        if(returnWei > 0){
            msg.sender.transfer(returnWei);
            emit Transfer(address(this), msg.sender, returnWei);
        }
        
        balances[msg.sender] = balances[msg.sender].add(tokens);
        emit Transfer(address(this), msg.sender, tokens);
        totalSupply_ = totalSupply_.add(tokens);
        owner.transfer(weiAmount);// Send money to owner
    }
    

    /**
     * @dev startIco starts the public ICO
     **/
    function startIco() public onlyOwner {
        require(currentStage != Stages.icoEnd);
        currentStage = Stages.icoStart;
    }
    

    /**
     * @dev endIco closes down the ICO 
     **/
    function endIco() internal {
        currentStage = Stages.icoEnd;
        // Transfer any remaining tokens
        if(remainingTokens > 0)
            balances[owner] = balances[owner].add(remainingTokens);
        // transfer any remaining ETH balance in the contract to the owner
        owner.transfer(address(this).balance); 
    }

    /**
     * @dev finalizeIco closes down the ICO and sets needed varriables
     **/
    function finalizeIco() public onlyOwner {
        require(currentStage != Stages.icoEnd);
        endIco();
    }
    
}
 
/**
 * @title LavevelToken 
 * @dev Contract to create the Lavevel Token
 **/
contract AlexToken is CrowdsaleToken {
    string public constant name = "AlexToken";
    string public constant symbol = "ALT";
    uint32 public constant decimals = 18;
}

dhe përfaqësimi binar, siç e sheh rrjeti

60806040526000600355600060045533600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560146101000a81548160ff021916908360028111156200006f57fe5b0217905550620001036b019d971e4fe8401e74000000600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200024a6401000000000262000b1d179091906401000000009004565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620001986b019d971e4fe8401e740000006001546200024a6401000000000262000b1d179091906401000000009004565b6001819055506b033b2e3c9fd0803ce8000000600481905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6b019d971e4fe8401e740000006040518082815260200191505060405180910390a362000267565b600081830190508281101515156200025e57fe5b80905092915050565b611cb880620002776000396000f300608060405260043610610112576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146104c7578063095ea7b31461055757806318160ddd146105bc57806323b872dd146105e7578063313ce5671461066c578063355274ea146106a3578063518ab2a8146106ce57806366188463146106f957806370a082311461075e57806389311e6f146107b55780638da5cb5b146107cc578063903a3ef61461082357806395d89b411461083a578063a9059cbb146108ca578063bf5839031461092f578063c7876ea41461095a578063cbcb317114610985578063d73dd623146109b0578063dd62ed3e14610a15578063f2fde38b14610a8c575b60008060008060006001600281111561012757fe5b600560149054906101000a900460ff16600281111561014257fe5b14151561014e57600080fd5b60003411151561015d57600080fd5b600060045411151561016e57600080fd5b3494506101a7670de0b6b3a764000061019968056bc75e2d6310000088610acf90919063ffffffff16565b610b0790919063ffffffff16565b9350600092506b033b2e3c9fd0803ce80000006101cf85600354610b1d90919063ffffffff16565b111561024c576101f66003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b915061022e670de0b6b3a764000061022068056bc75e2d6310000085610b0790919063ffffffff16565b610acf90919063ffffffff16565b90506102438186610b3990919063ffffffff16565b92508094508193505b61026184600354610b1d90919063ffffffff16565b6003819055506102886003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b6004819055506000831115610344573373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156102dd573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35b610395846000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a361045184600154610b1d90919063ffffffff16565b600181905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f193505050501580156104bf573d6000803e3d6000fd5b505050505050005b3480156104d357600080fd5b506104dc610b52565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561051c578082015181840152602081019050610501565b50505050905090810190601f1680156105495780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561056357600080fd5b506105a2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b8b565b604051808215151515815260200191505060405180910390f35b3480156105c857600080fd5b506105d1610c7d565b6040518082815260200191505060405180910390f35b3480156105f357600080fd5b50610652600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c87565b604051808215151515815260200191505060405180910390f35b34801561067857600080fd5b50610681611041565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b3480156106af57600080fd5b506106b8611046565b6040518082815260200191505060405180910390f35b3480156106da57600080fd5b506106e3611056565b6040518082815260200191505060405180910390f35b34801561070557600080fd5b50610744600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061105c565b604051808215151515815260200191505060405180910390f35b34801561076a57600080fd5b5061079f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112ed565b6040518082815260200191505060405180910390f35b3480156107c157600080fd5b506107ca611335565b005b3480156107d857600080fd5b506107e16113eb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561082f57600080fd5b50610838611411565b005b34801561084657600080fd5b5061084f6114ab565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561088f578082015181840152602081019050610874565b50505050905090810190601f1680156108bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108d657600080fd5b50610915600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114e4565b604051808215151515815260200191505060405180910390f35b34801561093b57600080fd5b50610944611703565b6040518082815260200191505060405180910390f35b34801561096657600080fd5b5061096f611709565b6040518082815260200191505060405180910390f35b34801561099157600080fd5b5061099a611716565b6040518082815260200191505060405180910390f35b3480156109bc57600080fd5b506109fb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611726565b604051808215151515815260200191505060405180910390f35b348015610a2157600080fd5b50610a76600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611922565b6040518082815260200191505060405180910390f35b348015610a9857600080fd5b50610acd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119a9565b005b600080831415610ae25760009050610b01565b8183029050818382811515610af357fe5b04141515610afd57fe5b8090505b92915050565b60008183811515610b1457fe5b04905092915050565b60008183019050828110151515610b3057fe5b80905092915050565b6000828211151515610b4757fe5b818303905092915050565b6040805190810160405280600981526020017f416c6578546f6b656e000000000000000000000000000000000000000000000081525081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600154905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610cc457600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d1157600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d9c57600080fd5b610ded826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e80826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f5182600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b601281565b6b033b2e3c9fd0803ce800000081565b60035481565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508083111561116d576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611201565b6111808382610b3990919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561139157600080fd5b60028081111561139d57fe5b600560149054906101000a900460ff1660028111156113b857fe5b141515156113c557600080fd5b6001600560146101000a81548160ff021916908360028111156113e457fe5b0217905550565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561146d57600080fd5b60028081111561147957fe5b600560149054906101000a900460ff16600281111561149457fe5b141515156114a157600080fd5b6114a9611b01565b565b6040805190810160405280600381526020017f414c54000000000000000000000000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561152157600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561156e57600080fd5b6115bf826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611652826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b60045481565b68056bc75e2d6310000081565b6b019d971e4fe8401e7400000081565b60006117b782600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a0557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611a4157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6002600560146101000a81548160ff02191690836002811115611b2057fe5b021790555060006004541115611c0a57611ba5600454600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015611c89573d6000803e3d6000fd5b505600a165627a7a723058205bbef016cc7699572f944871cb6f05e69915ada3a92a1d9f03a3fb434aac0c2b0029

Më shumë detaje rreth kontratave të mençura mund të gjenden në artikull: Çfarë janë kontratat e mençura në Ethereum.

Përfundim

Ne kemi renditur teknologjitë mbi të cilat janë ndërtuar blockchain-et moderne dhe si janë të lidhura me njëra-tjetrën. Tani le të formulonim se cilat probleme mund të zgjidhen përmes blockchain-it, dhe cilat do të ishin, në rastin më të mirë, joefikase. Pra, përdorimi i blockchain-it nuk është domosdoshmërisht i nevojshëm nëse:

  • Transaksionet kryhen në një ambient të besueshëm;
  • Prania e komisioneve të ndërmjetësve nuk e përkeqëson jetën e pjesëmarrësve;
  • Pjesëmarrësit nuk kanë pronësi që mund të përfaqësohet si asete digjitale;
  • Nuk ka shpërndarje në asetet digjitale, dmth, vlera kontrollohet ose ofrohet vetëm nga një pjesëmarrës.

Cila është e ardhmja e blockchain-it? Tani mund të supozojmë vetëm rrugët e mundshme të zhvillimit të teknologjive blockchain:

  • Blockchain do të bëhet një teknologji e zakonshme e bazave të të dhënave, si p.sh., SQL ose NoSQL për zgjidhjen e një rrethi të caktuar problemesh;
  • Blockchain do të bëhet një protokoll i përhapur gjerësisht, si HTTP për internetin;
  • Blockchain do të bëhet baza e një sistemi të ri financiar dhe politik të planetit!

Ne në pjesën tjetër do të shikojmë se cilat blockchain-e ekzistojnë tani dhe për çfarë aplikohen ato në industria të ndryshme.

Ky është vetëm fillimi!

Burimi: habr.com

Blini hostim të besueshëm për faqe interneti me mbrojtje DDoS, serverë VPS VDS 🔥 Blini hostim të besueshëm për faqe interneti me mbrojtje DDoS, serverë VPS VDS - ProHoster