Çfarë duhet të ndërtojmë një blockchain?

E gjithë historia e njerëzimit është një proces i vazhdueshëm i heqjes së zinxhirëve dhe krijimit të zinxhirëve të rinj, madje edhe më të fortë. (autor anonim)

Duke analizuar projekte të shumta blockchain (Bitshares, Hyperledger, Exonum, Ethereum, Bitcoin, etj.), Unë e kuptoj se nga pikëpamja teknike, ato janë ndërtuar të gjitha mbi të njëjtat parime. Blockchains të kujtojnë shtëpitë, të cilat, me gjithë shumëllojshmërinë e dizajneve, dekoreve dhe qëllimeve, kanë një themel, mure, çati, dritare, dyer që lidhen me njëra-tjetrën në mënyra të caktuara. Dhe nëse i kuptoni parimet themelore të projektimit të ndërtesave dhe i njihni vetitë e materialeve të përdorura, atëherë mund të përcaktoni qëllimin e synuar të një shtëpie të veçantë. Aktualisht, është krijuar një situatë me blockchain që të gjithë kanë dëgjuar për të, por pak njerëz e kuptojnë arkitekturën dhe parimet e funksionimit. Prandaj, ka një keqkuptim se pse dhe si ka kuptim përdorimi i teknologjive blockchain.

Në këtë artikull do të analizojmë vetitë dhe parimet e përbashkëta për të gjitha zinxhirët e bllokimit. Më pas, le të shohim problemet që mund të zgjidhen duke përdorur blockchain dhe për të përforcuar materialin, le të ndërtojmë një blockchain të vogël por real në faqen tonë virtuale!

Pra, le të kujtojmë se cilat probleme zgjidhi fillimisht blockchain.

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

Unë preferoj të filloj të studioj çdo teknologji duke lexuar standardet, pasi të gjithë artikujt dhe librat mbi temën në studim bazohen në to. Por aktualisht nuk ka standarde blockchain; ISO ka krijuar vetëm komitetet për zhvillimin e tyre. Aktualisht, çdo projekt publik blockchain ka dokumentin e tij White White, i cili në thelb është një specifikim teknik. Projekti i parë i blockchain i njohur publikisht është rrjeti Bitcoin. Shkoni në faqen zyrtare të rrjetit dhe shikoj ku filloi gjithçka.

Sfida e Blockchain

Pra, detyra që zgjidhi blockchain në rrjetin pionier të Bitcoin është të kryejë një transferim të besueshëm të pronësisë së aseteve (aseteve) dixhitale në një mjedis jo të besuar pa ndërmjetës. Për shembull, në rrjetin Bitcoin, një aktiv dixhital janë monedhat dixhitale bitcoin. Dhe të gjitha zgjidhjet teknike të Bitcoin dhe blockchains të tjerë zbresin në zgjidhjen e këtij problemi.

Problemet që zgjidh blockchain

Supozoni se një organizatë e caktuar financiare thotë se ka ndërtuar një rrjet në mbarë botën me ndihmën e të cilit është e mundur të transferohen para te çdo person. A do ta besoni atë? Nëse kjo organizatë është Visa ose MasterCard, me shumë mundësi do ta besoni, por nëse, duke folur relativisht, AnonymousWorldMoney, ndoshta nuk do ta besoni. Pse? Por sepse ne e dimë shumë mirë se si sistemet e shpërndara bëhen nga kompanitë private, për çfarë qëllimesh dhe çfarë mund të çojë kjo. Le të hedhim një vështrim më të afërt në problemet e sistemeve të tilla dhe se si ato mund të zgjidhen duke përdorur teknologjitë blockchain.

Le të themi se në AnonymousWorldMoney të kushtëzuar ka serverë me baza të të dhënave, dhe është mirë nëse ka disa prej tyre në qendra të ndryshme të të dhënave. Kur dërguesi transferon para, regjistrohet një transaksion, i cili përsëritet në të gjithë serverët dhe paratë arrijnë te marrësi.

Çfarë duhet të ndërtojmë një blockchain?

Në një botë ideale, kjo skemë funksionon mirë, por në botën tonë lindin problemet e mëposhtme:

  1. Problemi i identifikimit të pjesëmarrësve nga njëra anë dhe nevoja për anonimitetin e transaksioneve nga ana tjetër. ato. ju duhet të transferoni para te një marrës specifik dhe në mënyrë të tillë që askush të mos dijë për këtë transaksion përveç pjesëmarrësve në transaksion. Bankat kanë numra llogarie dhe karta bankare të lidhura me një person të caktuar fizik ose juridik dhe sekreti bankar mbron informacionin e transaksionit. Dhe kush garanton që AnonymousWorldMoney me kusht nuk përdor të dhënat personale dhe informacionin e transaksionit për qëllimet e veta?
  2. Si të sigurohemi që marrësi ka marrë saktësisht shumën që i është transferuar? Duke folur relativisht, dërguesi transferoi 100 dollarë dhe marrësi mori 10 dollarë. Dërguesi vjen në zyrën e AnonymousWorldMoney me faturën e tij dhe nëpunësi tregon versionin e tij, ku shkruhet se dërguesi ka transferuar vetëm 10 dollarë.
  3. Problemi i një mjedisi të pabesueshëm, për shembull, një mashtrim i quajtur shpenzime të dyfishta. Një pjesëmarrës i paskrupullt mund të shpenzojë bilancin e tij disa herë derisa pagesa të përsëritet në të gjithë serverët. Teorema CAP, sigurisht, askush nuk anuloi, dhe marrëveshja në fund do të arrihet, por dikush nuk do të marrë para për shërbimet ose mallrat e ofruara. Prandaj, nëse nuk ka besim të plotë në organizatën e pagesave ose pjesëmarrësit në transaksione, atëherë është e nevojshme të ndërtohet një rrjet i bazuar jo në besim, por në kriptografi.
  4. AnonymousWorldMoney i kushtëzuar ka një numër të kufizuar serverësh që mund të bëhen të padisponueshëm pa dashje ose për shkak të qëllimit keqdashës.
  5. AnonymousWorldMoney do të marrë komisionin e vet të prekshëm.
  6. Mundësia e kontrollit. Gjatë funksionimit të Bitcoin, rezultoi se njerëzit duan jo vetëm të transferojnë monedha tek njëri-tjetri, por edhe të kontrollojnë kushte të ndryshme për transaksionin, të programojnë skenarët e punës, të kryejnë automatikisht veprime në varësi të kushteve, etj.

Si i zgjidh blockchain këto probleme

  1. Identifikimi i pjesëmarrësve kryhet duke përdorur një palë çelësa: privat dhe publik, dhe algoritmi i nënshkrimit dixhital identifikon në mënyrë unike dërguesin dhe marrësin, duke i lënë identitetet e tyre anonime.
  2. Transaksionet mblidhen në blloqe, hash-i i bllokut llogaritet dhe shkruhet në bllokun tjetër. Kjo sekuencë e regjistrimit të hasheve në blloqe i jep emrin teknologjisë blockchain, dhe gjithashtu e bën të pamundur ndryshimin / fshirjen e padukshme të blloqeve ose transaksioneve individuale nga blloqet. Kështu, nëse një transaksion përfshihet në blockchain, mund të jeni të sigurt që të dhënat e tij do të mbeten të pandryshuara.
  3. Mashtrimi me shpenzime të dyfishta parandalohet duke arritur një konsensus rrjeti se cilat të dhëna të konsiderohen të vlefshme dhe cilat të hidhen. Në rrjetin Bitcoin, konsensusi arrihet me anë të vërtetimit të punës (PoW).
  4. Besueshmëria e rrjetit arrihet nga fakti që blockchain është publik, ku secili pjesëmarrës mund të drejtojë nyjen e tij, të marrë një kopje të plotë të blockchain dhe, për më tepër, të fillojë në mënyrë të pavarur të kontrollojë transaksionet për korrektësi. Duhet të theksohet se blockchains moderne bëjnë të mundur ndërtimin jo vetëm të blockchaineve publike (të hapura), por edhe private (të mbyllura), si dhe përdorimin e skemave të kombinuara.
  5. Blockchain nuk do të shpëtojë plotësisht nga komisionet, sepse... ju duhet të paguani njerëzit që mbështesin rrjetin, por në blockchain nevoja për një komision vërtetohet aq bindshëm sa nuk ka dyshim për domosdoshmërinë e tij.
  6. Blockchain moderne kanë aftësinë për të zbatuar logjikën e biznesit, e cila në blockchain quhet Smart Contracts. Logjika e kontratave inteligjente zbatohet në gjuhë të ndryshme të nivelit të lartë.

Më tej, ne do t'i shqyrtojmë këto zgjidhje në më shumë detaje.

Arkitektura e Blockchain

Komponentët e Blockchain

Secili pjesëmarrës mund të nisë nyjen e tij me një kopje të plotë të blockchain (nyja e plotë). Nyjet e plota që mund të regjistrojnë transaksione në blockchain quhen nyjet e konsensusit (dëshmitar) ose minatorë (minator). Nyjet e plota që kontrollojnë vetëm korrektësinë e transaksioneve quhen nyjet e auditimit (auditim). Klientë të lehtë (klientët e lehtë) nuk ruajnë kopje të plota të blockchain, por ndërveprojnë me rrjetin duke përdorur nyje të plota.
Shumica e përdoruesve përdorin klientë të lehtë ose kuleta në internet për të kryer transaksione. Të gjitha nyjet janë të lidhura me njëra-tjetrën. Me këtë grup elementësh, arkitektura e rrjetit bëhet më e qëndrueshme:

Çfarë duhet të ndërtojmë një blockchain?

Cikli jetësor i transaksionit

Le të shohim ciklin jetësor të transaksionit dhe ta ndajmë atë pjesë-pjesë:

Çfarë duhet të ndërtojmë një blockchain?

Teknologjitë e Blockchain

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

identifikim

Çdo transaksion blockchain duhet të nënshkruhet në mënyrë dixhitale. Prandaj, për të përfunduar një transaksion, çdo pjesëmarrës duhet të ketë një palë çelësash: privat / publik. Ndonjëherë një palë çelësa quhet portofol, sepse çelësat lidhen në mënyrë unike me adresën dhe balancën unike dixhitale të pjesëmarrësit. Në realitet, çelësat dhe adresat janë vetëm vargje numrash në sisteme të ndryshme numrash. Shembuj të çelësave dhe adresave të portofolit:

Private key: 0a78194a8a893b8baac7c09b6a4a4b4b161b2f80a126cbb79bde231a4567420f
Public key: 0579b478952214d7cddac32ac9dc522c821a4489bc10aac3a81b9d1cd7a92e57ba
Address: 0x3814JnJpGnt5tB2GD1qfKP709W3KbRdfb27V

Për të krijuar një nënshkrim dixhital në blockchains, përdoret një algoritëm i bazuar në kthesa eliptike: Algoritmi i nënshkrimit dixhital të kurbës eliptike (ECDSA). Që ai të funksionojë, çelësi privat (numri 256-bit) zakonisht merret rastësisht. Numri i opsioneve kryesore është 2 në fuqinë 256, kështu që mund të flasim për pamundësinë praktike të përputhjes së vlerave të çelësave privatë.

Më pas, çelësi publik merret nga ai privat duke shumëzuar vlerën e tij me koordinatat e një pike të vendosur në kurbën eliptike, duke rezultuar në koordinatat e një pike të re në të njëjtën kurbë. Ky veprim siguron që ju të merrni një çift çelësash të përshtatshëm për nënshkrimin dixhital të transaksioneve. Së fundi, adresa e portofolit rrjedh në mënyrë unike nga çelësi publik.

Ka shumë artikuj me detaje mbi kriptografinë e përdorur në blockchain, për shembull: Bitcoin me pak fjalë – Kriptografia

Çelësi privat duhet të jetë rreptësisht konfidencial dhe të mbahet i sigurt. Çelësi publik është i njohur për të gjithë. Nëse çelësi privat humbet, qasja në aktiv (monedha) nuk mund të rikthehet dhe paratë do të humbasin përgjithmonë. Prandaj, detyra e ruajtjes së sigurt të çelësave privatë është jashtëzakonisht e rëndësishme, sepse Kjo nuk është një bankë ku mund të vini gjithmonë me pasaportën tuaj dhe të rivendosni llogarinë tuaj. Ekziston një industri e tërë për prodhimin e të ashtuquajturave kuleta kripto të ftohta, të ngjashme me disqet flash:

Çfarë duhet të ndërtojmë një blockchain?

ose mund të përdorni metoda më të besueshme, për shembull, duke vulosur vlerën e çelësit privat në shenja:

Çfarë duhet të ndërtojmë një blockchain?

transaksionet

Më shumë detaje rreth strukturës së transaksionit mund të gjenden në artikull Bitcoin me pak fjalë – Transaksion. Është e rëndësishme për ne të kuptojmë se çdo transaksion ka të paktën të dhënat e mëposhtme:

From: 0x48C89c341C5960Ca2Bf3732D6D8a0F4f89Cc4368 - цифровой адрес отправителя
To: 0x367adb7894334678b90аfe7882a5b06f7fbc783a - цифровой адрес получателя
Value: 0.0001 - сумма транзакции
Transaction Hash: 0x617ede331e8a99f46a363b32b239542bb4006e4fa9a2727a6636ffe3eb095cef - хэш транзакции

Më pas, transaksioni nënshkruhet me një çelës privat dhe dërgohet (shih detajet mbi funksionimin e protokollit Bitcoin me pak fjalë-Protokoll) për të gjitha nyjet në blockchain që kontrollojnë transaksionet për vlefshmëri. Algoritmi i verifikimit të transaksionit është jo i parëndësishëm dhe përfshin dy duzina hapa.

Blloqet e transaksioneve

Pas kontrollit të vlefshmërisë së transaksioneve, nyjet formojnë blloqe prej tyre. Përveç transaksioneve, hash-i i bllokut të mëparshëm dhe një numër (Nonce counter) shkruhen në bllok, dhe hash-i i bllokut aktual llogaritet duke përdorur algoritmin SHA-256. Hashi duhet të ketë krijuar kushte kompleksiteti. Për shembull, në rrjetin Bitcoin, vështirësia e hash-it ndryshohet automatikisht çdo 2 javë në varësi të fuqisë së rrjetit në mënyrë që një bllok të gjenerohet afërsisht një herë në 10 minuta. Kompleksiteti përcaktohet nga kushti i mëposhtëm: hash-i i gjetur duhet të jetë më i vogël se një numër i paracaktuar. Nëse ky kusht nuk plotësohet, atëherë Nonce i shtohet 1 dhe puna e llogaritjes së hash-it përsëritet. Për të zgjedhur një hash, përdoret fusha Nonce, sepse Këto janë të vetmet të dhëna në bllok që mund të ndryshohen; pjesa tjetër duhet të mbetet e pandryshuar. Një hash i vlefshëm duhet të ketë një numër të caktuar zerosh kryesore, si p.sh. një nga hash-et reale:

000000000000000000000bf03212e7dd1176f52f816fa395fc9b93c44bc11f91

Gjetja me sukses e një hash është provë e punës së kryer (Proof-of-Work, PoW) për rrjetet Bitcoin ose Ethereum. Procesi i gjetjes së hasheve quhet minierë, i ngjashëm me nxjerrjen e arit. Emri përcakton mjaft saktë thelbin e procesit, sepse ekziston një kërkim i thjeshtë i opsioneve, dhe nëse dikush gjen një hash të përshtatshëm, atëherë ky është me të vërtetë fat. Është si të gjesh një copëz të vërtetë ari në tonelata shkëmbinjsh të mbeturinave. Shpërblimi i bllokut tani është 12.5 BTC dhe nëse e shumëzoni me normën aktuale të Bitcoin prej 3900 dollarësh, ju merrni më shumë se një kilogram ar të pastër. Ka diçka për të luftuar!

Pas gjetjes me sukses të një hash, blloku dhe vetë hash-i i gjetur shkruhen në blockchain si blloku tjetër. Më shumë detaje mbi strukturën e blloqeve mund të gjenden në artikull Bitcoin me pak fjalë - Blockchain, dhe më poshtë është një diagram i thjeshtuar:

Çfarë duhet të ndërtojmë një blockchain?

Blockchain fillon me një bllok që nuk ka ende hash-in e bllokut të mëparshëm. Ekziston vetëm një bllok i tillë në blockchain dhe ka emrin e tij Genesis block. Blloqet e mbetura kanë të njëjtën strukturë dhe ndryshojnë vetëm në numrin e transaksioneve. Transaksionet dhe blloqet reale që po krijohen aktualisht në Bitcoin ose Ethereum mund të shihen në Blloko Explorer.

Madhësia e blloqeve në Bitcoin është e kufizuar në 1MB dhe me një sasi minimale informacioni në një transaksion prej rreth 200 bajt, numri maksimal i transaksioneve në një bllok mund të jetë rreth 6000. Nga këtu, meqë ra fjala, ndjek performancën e Bitcoin, me të cilën të gjithë qeshin: një bllok gjenerohet afërsisht një herë në 10 minuta * 60 sekonda = 600 sekonda, që jep një performancë formale prej rreth 10 TPS. Edhe pse në fakt, ky nuk është produktivitet, por një algoritëm i punës i zbatuar qëllimisht. Në Ethereum, për konkurrencë, ata thjesht e bënë kohën e gjenerimit të bllokut 15 sekonda. dhe produktiviteti u rrit zyrtarisht. Prandaj, në blockchains që përdorin PoW si konsensus, nuk ka kuptim të krahasohet fare performanca, sepse varet drejtpërdrejt nga kompleksiteti i llogaritjes së cache-it, i cili mund t'i caktohet çdo vlere.

Pirunët

Çfarë ndodh nëse, për shembull, disa nyje gjejnë hash që plotësojnë kushtet e kompleksitetit, por janë të ndryshëm në vlerë (me fjalë të tjera, ata arritën në konsensus të ndryshëm) dhe shkruanin blloqe në blockchain? Le të shohim se si blockchain mbron nga kjo situatë. Në këtë rast, ndodh një i ashtuquajtur fork, dhe blockchain ka dy versione të zinxhirit:

Çfarë duhet të ndërtojmë një blockchain?

Çfarë ndodh më pas? Më pas, një pjesë e rrjetit fillon të punojë në bllokun N+2 nga një zinxhir, dhe një pjesë nga një tjetër:

Çfarë duhet të ndërtojmë një blockchain?

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

Çfarë duhet të ndërtojmë një blockchain?

Në të njëjtën kohë, mund të lindë një situatë kur transaksioni i një pjesëmarrësi ishte vetëm në një nga blloqet e pirunit, i cili u anulua. Prandaj, për t'u siguruar që transaksioni i dëshiruar është regjistruar në blockchain, ekziston një rekomandim i përgjithshëm - përpara se t'i besoni transaksionit, duhet të prisni derisa blloqet e ardhshme të shtohen në blockchain. Rekomandimet për numrin e blloqeve për të pritur për blloqe të ndryshme ndryshojnë. Për shembull, për rrjetin Bitcoin minimumi është 2 blloqe, maksimumi është 6.

E njëjta pamje me pirunët e bllokut do të vërehet gjatë të ashtuquajturit sulm 51% - kjo është kur një grup minatorësh përpiqen të rritin një zinxhir alternativ blloku, duke kërkuar të anulojnë zinxhirin me transaksionet e tyre mashtruese. Edhe pse aktualisht, në vend të mashtrimit, është më e dobishme të shpenzoni fuqinë tuaj në minierat e ndershme.

Konsensusi

Për të regjistruar një bllok në blockchain, rrjeti duhet të arrijë një konsensus. Le të kujtojmë detyrën e arritjes së konsensusit në rrjetet e komunikimit kompjuterik. Problemi është formuluar si detyrë e gjeneralëve bizantinë BFT (Toleranca ndaj fajit bizantin). Duke lënë mënjanë përshkrimin piktoresk të problemeve të ushtrisë bizantine, problemi mund të formulohet si më poshtë: si mund të vijnë nyjet e rrjetit në një rezultat të përbashkët nëse disa nyje rrjeti mund t'i shtrembërojnë ato qëllimisht. Algoritmet ekzistuese për zgjidhjen e problemit BFT tregojnë se rrjeti mund të funksionojë saktë nëse ka më pak se 1/3 e mashtruesve. Pse nuk është aplikuar 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 fiks nyjesh, por në një zinxhir publik, numri i nyjeve është i paparashikueshëm dhe, për më tepër, nyjet mund të ndizen dhe fiken në mënyrë të rastësishme.
  • Është e nevojshme të motivohen njerëzit për të nisur nyjet blockchain. Për ta bërë këtë, njerëzit duhet të shpërblehen. Në BFT nuk ka zyrtarisht asgjë për të marrë një shpërblim, por çfarë është shpërblimi në PoW është e qartë për të gjithë në një nivel intuitiv: për energjinë elektrike të konsumuar nga procesori në procesin e gjetjes së hash-it të bllokut.

Përveç PoW, ka disa konsensuse të tjera që përdoren në blockchains moderne, për shembull:

  • PoS (Proof-of-Stake) - në blockchain Hyperledger
  • DPoS (Delegated Proof-of-Stake) - në blockchain BitShares
  • Modifikimet e BFT: SBFT (BFT e thjeshtuar) dhe PBFT (BFT praktike), për shembull në blockchain Eksonum

Le të ndalemi pak në konsensusin PoS, sepse... Është PoS dhe varietetet e tij që janë më të përhapura në blloqe private. Pse në privat? Nga njëra anë, karakteristikat e PoS janë më të mira në krahasim me PoW, sepse Për të arritur konsensus, nevojiten më pak burime kompjuterike, që do të thotë se shpejtësia e shkrimit të të dhënave në blockchain rritet. Por nga ana tjetër, PoS ka më shumë mundësi për mashtrim, ndaj për të neutralizuar këtë, duhet të njihen të gjithë pjesëmarrësit në blockchain.

Konsensusi PoS bazohet në zgjedhjen e një nyje që mund të shkruajë një bllok me transaksione në blockchain në varësi të sasisë së fondeve në llogari, ose më saktë, jo në llogari, por në kolateral, d.m.th. Sa më shumë fonde të keni si kolateral, aq më shumë ka gjasa që rrjeti të zgjedhë nyjen tuaj për të shkruar një bllok. Depozita nuk do të kthehet nëse blloku është i pavlefshëm. Kjo siguron mbrojtje kundër mashtrimit. Ekzistojnë variacionet e mëposhtme të PoS:

  • Konsensusi i Deleguar PoS (DPoS) i ndan pjesëmarrësit në "votues" dhe "validues". Mbajtësit e monedhave (pjesëmarrësit në votim) delegojnë fuqinë e tyre për të verifikuar dhe regjistruar transaksionet në blockchain te pjesëmarrësit e tjerë. Kështu, vërtetuesit bëjnë të gjithë punën llogaritëse dhe marrin një shpërblim për të, dhe prania e pjesëmarrësve në votim garanton ndershmërinë e vlerësuesve, sepse ato mund të ndryshohen në çdo kohë.
  • Konsensusi LPoS (prova e aksioneve me qira) ju lejon të jepni me qira fondet tuaja në nyje të tjera në mënyrë që ata të kenë një shans më të mirë për të vërtetuar blloqet. Se. Ju mund të merrni një komision për transaksionet pa marrë pjesë në verifikimin aktual të transaksionit dhe minierën e bllokut.

Ka një numër konsensusesh të tjera që nuk janë përdorur ende gjerësisht, unë thjesht do t'i rendis këtu për informacion dhe një përmbledhje e vetë algoritmeve të konsensusit mund të gjendet, për shembull, në artikull: Algoritmet e konsensusit në Blockchain.

  • PoET (Proof-of-Elapsed Time)
  • PoC (Proof-of-Capacity)
  • PoB (prova e djegies)
  • Po Pesha (prova e peshës)
  • PoA (Proof-of-Activity) – PoW + PoS
  • PoI (prova e rëndësisë)

Modelet e besueshmërisë dhe vendosjes së blockchains

Blockchain publik

stabilitet Publik ose një emër tjetër Blockchain pa leje Kjo arrihet duke lejuar këdo të lidhet dhe të shikojë informacionin apo edhe të lidhë nyjen e vet, dhe besimi ndërtohet mbi konsensusin PoW.

Blockchain privat

privat ose Blockchain me leje private. Në këto blockchains, vetëm një grup i caktuar pjesëmarrësish (organizata ose njerëz) kanë akses në informacion. Blockchain të tillë ndërtohen nga organizata me qëllim të rritjes së përfitimit ose efikasitetit të përgjithshëm. Besueshmëria e tyre sigurohet nga qëllimet e përbashkëta të pjesëmarrësve dhe nga algoritmet e konsensusit PoS dhe BFT.

Konsorciumi Blockchain

Atje shoqëri ose Blockchain me leje publike. Këto janë zinxhirë bllokimi me të cilët çdokush mund të lidhet për t'i parë, por një pjesëmarrës mund të shtojë informacion ose të lidhë nyjen e tij vetëm me lejen e pjesëmarrësve të tjerë. Blockchain të tillë ndërtohen nga organizatat për të rritur besimin nga ana e klientëve ose konsumatorëve të produkteve ose shoqërisë në tërësi. Këtu, besueshmëria arrihet gjithashtu nga prania e besimit midis pjesëmarrësve dhe të njëjtave algoritme konsensusi PoS dhe BFT.

Kontratat e zgjuara

Blockchains të zbatuara pas Bitcoin kanë shtuar, në një shkallë ose në një tjetër, aftësinë për të ekzekutuar kontrata inteligjente. Në thelb, një kontratë inteligjente është një transaksion në të cilin kodi i programit vendoset për ekzekutim. Kontratat inteligjente në rrjetin Ethereum ekzekutohen në EVM (Makina Virtuale Ethereum). Për të filluar ekzekutimin e një kontrate inteligjente, ajo duhet të lançohet në mënyrë eksplicite nga një transaksion tjetër, ose duhet të plotësohen parakushtet për ekzekutim. Rezultatet e ekzekutimit të kontratës inteligjente do të regjistrohen gjithashtu në blockchain. Marrja e të dhënave nga jashtë blockchain është e mundur, por jashtëzakonisht e kufizuar.

Çfarë logjike biznesi mund të zbatohet duke përdorur një kontratë inteligjente? Në fakt, nuk ka shumë, për shembull, kontrollimi i kushteve duke përdorur të dhëna nga blockchain, ndryshimi i pronarëve të aseteve dixhitale në varësi të këtyre kushteve, regjistrimi i të dhënave në një ruajtje të përhershme brenda blockchain. Logjika zbatohet në një gjuhë speciale të nivelit të lartë Solidity.

Një shembull klasik i funksionalitetit që zbatohet duke përdorur kontrata inteligjente është lëshimi i argumenteve për ICO. Për shembull, unë zbatova një kontratë inteligjente për të lëshuar një AlexToken modeste prej 500. Nga lidhje në Etherscan është

kodi burimor i kontratës inteligjente 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 paraqitjen binar siç e sheh rrjeti

60806040526000600355600060045533600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560146101000a81548160ff021916908360028111156200006f57fe5b0217905550620001036b019d971e4fe8401e74000000600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200024a6401000000000262000b1d179091906401000000009004565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620001986b019d971e4fe8401e740000006001546200024a6401000000000262000b1d179091906401000000009004565b6001819055506b033b2e3c9fd0803ce8000000600481905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6b019d971e4fe8401e740000006040518082815260200191505060405180910390a362000267565b600081830190508281101515156200025e57fe5b80905092915050565b611cb880620002776000396000f300608060405260043610610112576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146104c7578063095ea7b31461055757806318160ddd146105bc57806323b872dd146105e7578063313ce5671461066c578063355274ea146106a3578063518ab2a8146106ce57806366188463146106f957806370a082311461075e57806389311e6f146107b55780638da5cb5b146107cc578063903a3ef61461082357806395d89b411461083a578063a9059cbb146108ca578063bf5839031461092f578063c7876ea41461095a578063cbcb317114610985578063d73dd623146109b0578063dd62ed3e14610a15578063f2fde38b14610a8c575b60008060008060006001600281111561012757fe5b600560149054906101000a900460ff16600281111561014257fe5b14151561014e57600080fd5b60003411151561015d57600080fd5b600060045411151561016e57600080fd5b3494506101a7670de0b6b3a764000061019968056bc75e2d6310000088610acf90919063ffffffff16565b610b0790919063ffffffff16565b9350600092506b033b2e3c9fd0803ce80000006101cf85600354610b1d90919063ffffffff16565b111561024c576101f66003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b915061022e670de0b6b3a764000061022068056bc75e2d6310000085610b0790919063ffffffff16565b610acf90919063ffffffff16565b90506102438186610b3990919063ffffffff16565b92508094508193505b61026184600354610b1d90919063ffffffff16565b6003819055506102886003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b6004819055506000831115610344573373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156102dd573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35b610395846000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a361045184600154610b1d90919063ffffffff16565b600181905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f193505050501580156104bf573d6000803e3d6000fd5b505050505050005b3480156104d357600080fd5b506104dc610b52565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561051c578082015181840152602081019050610501565b50505050905090810190601f1680156105495780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561056357600080fd5b506105a2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b8b565b604051808215151515815260200191505060405180910390f35b3480156105c857600080fd5b506105d1610c7d565b6040518082815260200191505060405180910390f35b3480156105f357600080fd5b50610652600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c87565b604051808215151515815260200191505060405180910390f35b34801561067857600080fd5b50610681611041565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b3480156106af57600080fd5b506106b8611046565b6040518082815260200191505060405180910390f35b3480156106da57600080fd5b506106e3611056565b6040518082815260200191505060405180910390f35b34801561070557600080fd5b50610744600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061105c565b604051808215151515815260200191505060405180910390f35b34801561076a57600080fd5b5061079f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112ed565b6040518082815260200191505060405180910390f35b3480156107c157600080fd5b506107ca611335565b005b3480156107d857600080fd5b506107e16113eb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561082f57600080fd5b50610838611411565b005b34801561084657600080fd5b5061084f6114ab565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561088f578082015181840152602081019050610874565b50505050905090810190601f1680156108bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108d657600080fd5b50610915600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114e4565b604051808215151515815260200191505060405180910390f35b34801561093b57600080fd5b50610944611703565b6040518082815260200191505060405180910390f35b34801561096657600080fd5b5061096f611709565b6040518082815260200191505060405180910390f35b34801561099157600080fd5b5061099a611716565b6040518082815260200191505060405180910390f35b3480156109bc57600080fd5b506109fb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611726565b604051808215151515815260200191505060405180910390f35b348015610a2157600080fd5b50610a76600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611922565b6040518082815260200191505060405180910390f35b348015610a9857600080fd5b50610acd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119a9565b005b600080831415610ae25760009050610b01565b8183029050818382811515610af357fe5b04141515610afd57fe5b8090505b92915050565b60008183811515610b1457fe5b04905092915050565b60008183019050828110151515610b3057fe5b80905092915050565b6000828211151515610b4757fe5b818303905092915050565b6040805190810160405280600981526020017f416c6578546f6b656e000000000000000000000000000000000000000000000081525081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600154905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610cc457600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d1157600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d9c57600080fd5b610ded826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e80826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f5182600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b601281565b6b033b2e3c9fd0803ce800000081565b60035481565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508083111561116d576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611201565b6111808382610b3990919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561139157600080fd5b60028081111561139d57fe5b600560149054906101000a900460ff1660028111156113b857fe5b141515156113c557600080fd5b6001600560146101000a81548160ff021916908360028111156113e457fe5b0217905550565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561146d57600080fd5b60028081111561147957fe5b600560149054906101000a900460ff16600281111561149457fe5b141515156114a157600080fd5b6114a9611b01565b565b6040805190810160405280600381526020017f414c54000000000000000000000000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561152157600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561156e57600080fd5b6115bf826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611652826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b60045481565b68056bc75e2d6310000081565b6b019d971e4fe8401e7400000081565b60006117b782600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a0557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611a4157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6002600560146101000a81548160ff02191690836002811115611b2057fe5b021790555060006004541115611c0a57611ba5600454600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015611c89573d6000803e3d6000fd5b505600a165627a7a723058205bbef016cc7699572f944871cb6f05e69915ada3a92a1d9f03a3fb434aac0c2b0029

Më shumë detaje rreth kontratave inteligjente mund të gjenden në artikull: Cilat janë kontratat inteligjente në Ethereum.

Përfundim

Ne kemi renditur teknologjitë mbi të cilat ndërtohen blockchains moderne dhe si lidhen me njëri-tjetrin. Tani le të formulojmë se cilat probleme mund të zgjidhen duke përdorur blockchain dhe cilat zgjidhje do të jenë, në rastin më të mirë, joefektive. Pra, përdorimi i blockchain nuk është i nevojshëm nëse:

  • Transaksionet kryhen në një mjedis të besuar;
  • Prania e një komisioni ndërmjetësues nuk e përkeqëson jetën e pjesëmarrësve;
  • Pjesëmarrësit nuk kanë pronë që mund të përfaqësohet si asete dixhitale;
  • Nuk ka shpërndarje në asetet dixhitale, d.m.th. vlera zotërohet ose ofrohet nga vetëm një pjesëmarrës.

Çfarë sjell e ardhmja për blockchain? Tani mund të spekulojmë vetëm për mënyrat e mundshme për zhvillimin e teknologjive të blockchain:

  • Blockchain do të bëhet e njëjta teknologji e zakonshme e bazës së të dhënave si, për shembull, SQL ose NoSQL për zgjidhjen e gamës specifike të problemeve;
  • Blockchain do të bëhet një protokoll i përhapur, siç është HTTP për internetin;
  • Blockchain do të bëhet baza për një sistem të ri financiar dhe politik në planet!

Në pjesën tjetër do të shohim se çfarë blockchain ekzistojnë aktualisht dhe pse ato përdoren në industri të ndryshme.

Ky eshte vetem fillimi!

Burimi: www.habr.com

Shto një koment