Wat moatte wy bouwe in blockchain?

De hiele skiednis fan it minskdom is in kontinu proses fan it kwytreitsje fan keatlingen en it meitsjen fan nije, noch sterker. (Anonyme skriuwer)

It analysearjen fan tal fan blockchain-projekten (Bitshares, Hyperledger, Exonum, Ethereum, Bitcoin, ensfh.), Ik begryp dat se út in technysk eachpunt allegear boud binne op deselde prinsipes. Blockchains dogge tinken oan huzen, dy't, nettsjinsteande alle ferskaat oan ûntwerpen, dekor en doelen, hawwe in stifting, muorren, dak, finsters, doarren dy't binne ferbûn op bepaalde wizen. En as jo de basisprinsipes fan it ûntwerp fan it gebou begripe en de eigenskippen fan 'e brûkte materialen kenne, dan kinne jo it beëage doel fan in bepaald hûs bepale. Op it stuit is in situaasje ûntstien mei blockchain dat elkenien der oer heard hat, mar in pear minsken begripe de arsjitektuer en prinsipes fan operaasje. Dêrom is d'r in misferstân fan wêrom en hoe't it sin makket om blockchain-technologyen te brûken.

Yn dit artikel sille wy de eigenskippen en prinsipes analysearje dy't mienskiplik binne foar alle blockchains. Litte wy dan nei de problemen sjen dy't kinne wurde oplost mei de blockchain en om it materiaal te fersterkjen, litte wy in lyts, mar echte blockchain bouwe op ús firtuele side!

Dat, lit ús ûnthâlde hokker problemen blockchain yn earste ynstânsje oplost.

Ik bin der wis fan dat in protte sille sizze oer in ferspraat, desintralisearre, iepenbiere en ûnferoarlike databank. Mar wêrom wie dit alles nedich?

Ik leaver om te begjinnen mei it studearjen fan elke technology troch de noarmen te lêzen, om't alle artikels en boeken oer it ûnderwerp ûnder stúdzje binne basearre op har. Mar d'r binne op it stuit gjin blockchain-standerts; ISO hat allinich makke kommisjes foar harren ûntwikkeling. Op it stuit hat elk iepenbier blockchain-projekt in eigen Witboekdokumint, dat is yn wêzen in technyske spesifikaasje. It earste iepenbier bekende blockchain-projekt is it Bitcoin-netwurk. Gean nei de offisjele webside fan it netwurk en Wy sjogge hoe't it allegear begûn.

Blockchain Challenge

Dat, de taak dy't blockchain oplost yn it Bitcoin-pioniernetwurk is om in fertroude oerdracht fan eigendom fan digitale aktiva (aktiva) út te fieren yn in net-fertroude omjouwing sûnder intermediaries. Bygelyks, yn it Bitcoin netwurk is in digitale asset bitcoin digitale munten. En alle technyske oplossingen fan Bitcoin en oare blockchains komme del om dit probleem op te lossen.

Problemen dy't blockchain oplost

Stel dat in beskate finansjele organisaasje seit dat it in netwurk om 'e wrâld boud hat wêrmei't it mooglik is om jild oer te dragen oan elke persoan. Sille jo har leauwe? As dizze organisaasje Visa of MasterCard is, sille jo it wierskynlik leauwe, mar as, relatyf sjoen, AnonymousWorldMoney, sille jo it wierskynlik net. Wêrom? Mar om't wy hiel goed witte hoe't ferspraat systemen wurde makke troch partikuliere bedriuwen, foar hokker doelen, en wat dit kin liede ta. Litte wy in tichterby sjen nei de problemen fan sokke systemen en hoe't se kinne wurde oplost mei blockchain-technologyen.

Litte wy sizze dat yn 'e betingsten AnonymousWorldMoney d'r tsjinners binne mei databases, en it is goed as d'r ferskate fan har binne yn ferskate datasintra. As de stjoerder jild oerbringt, wurdt in transaksje registrearre, dy't wurdt replikearre nei alle tsjinners, en it jild berikt de ûntfanger.

Wat moatte wy bouwe in blockchain?

Yn in ideale wrâld wurket dit skema geweldich, mar yn ús komme de folgjende problemen foar:

  1. It probleem fan it identifisearjen fan dielnimmers oan 'e iene kant en de needsaak foar anonimiteit fan transaksjes oan' e oare. Dy. jo moatte oermeitsje jild oan in spesifike ûntfanger en op sa'n manier dat gjinien wit oer dizze transaksje útsein de dielnimmers oan de transaksje. Banken hawwe rekkennûmers en bankkaarten keppele oan in spesifike yndividu of juridyske entiteit, en bankgeheimen beskermet transaksjeynformaasje. En wa garandearret dat de betingst AnonymousWorldMoney gjin persoanlike gegevens en transaksjeynformaasje brûkt foar har eigen doelen?
  2. Hoe kinne jo derfoar soargje dat de ûntfanger krekt it bedrach krige dat him oerdroegen is? Relatyf sprutsen, de stjoerder oerdroegen $100, en de ûntfanger krige $10. De stjoerder komt nei it AnonymousWorldMoney-kantoar mei syn ûntfangst, en de klerk lit syn ferzje sjen, wêr't skreaun is dat de stjoerder mar $10 oerdroegen hat.
  3. It probleem fan in ûnfertroude omjouwing, bygelyks, in scam neamd dûbele útjeften. In gewetenloze dielnimmer kin syn saldo ferskate kearen besteegje oant de betelling wurdt replikearre nei alle tsjinners. CAP teorem, fansels, gjinien annulearre, en oerienkomst sil úteinlik wurde berikt, mar immen sil net ûntfange jild foar tsjinsten of guod levere. Dêrom, as der gjin folslein fertrouwen is yn 'e betellingsorganisaasje of dielnimmers oan transaksjes, dan is it nedich om in netwurk te bouwen basearre net op fertrouwen, mar op kryptografy.
  4. Betingst AnonymousWorldMoney hat in beheind oantal servers dy't ûnbedoeld of troch kweade bedoelingen net beskikber wurde kinne.
  5. AnonymousWorldMoney sil har eigen taastbere kommisje nimme.
  6. Mooglikheid fan kontrôle. Tidens de operaasje fan Bitcoin die bliken dat minsken net allinich munten oan elkoar oerdrage wolle, mar ek ferskate betingsten foar de transaksje kontrolearje, programmawurksenario's, automatysk aksjes útfiere ôfhinklik fan 'e betingsten, ensfh.

Hoe blockchain dizze problemen oplost

  1. Identifikaasje fan dielnimmers wurdt útfierd mei in pear kaaien: privee en iepenbier, en it digitale hantekeningalgoritme identifisearret unyk de stjoerder en ûntfanger, wêrtroch't har identiteiten anonym litte.
  2. Transaksjes wurde sammele yn blokken, de hash fan it blok wurdt berekkene en skreaun yn it folgjende blok. Dizze folchoarder fan it opnimmen fan hashes yn blokken jout de blockchain-technology syn namme, en it makket it ek ûnmooglik om blokken as yndividuele transaksjes fan blokken ûnopmerklik te feroarjen / te wiskjen. Sa, as in transaksje is opnaam yn de blockchain, kinne jo der wis fan wêze dat syn gegevens sille bliuwe net feroare.
  3. Fraude mei dûbele útjeften wurdt foarkommen troch it berikken fan in netwurkkonsensus oer hokker gegevens jildich moatte wurde beskôge en hokker te ferwiderjen. Yn it Bitcoin-netwurk wurdt konsensus berikt troch bewiis fan wurk (PoW).
  4. De betrouberens fan it netwurk wurdt berikt troch it feit dat de blockchain iepenbier is, wêrby't elke dielnimmer har eigen knooppunt kin útfiere, in folsleine kopy fan 'e blockchain krije en, boppedat, selsstannich begjinne om transaksjes op korrektheid te kontrolearjen. Dêrby moat opmurken wurde dat moderne blockchains meitsje it mooglik om te bouwen net allinnich iepenbiere (iepen), mar ek privee (sletten) blockchains, likegoed as it brûken fan kombinearre regelingen.
  5. De blockchain sil kommisjes net folslein kwytreitsje, om't ... jo moatte de minsken betelje dy't it netwurk stypje, mar yn 'e blockchain is de needsaak foar in kommisje sa oertsjûgjend bewiisd dat der gjin twifel is oer de needsaak.
  6. Moderne blockchains hawwe de mooglikheid om saaklike logika te ymplementearjen, dy't yn 'e blockchain Smart Contracts hjit. De logika fan tûke kontrakten wurdt ymplementearre yn ferskate talen op heech nivo.

Folgjende, wy sille beskôgje dizze oplossings yn mear detail.

Blockchain arsjitektuer

Blockchain komponinten

Elke dielnimmer kin har eigen knooppunt starte mei in folsleine kopy fan 'e blockchain (folsleine knooppunt). Folsleine knopen dy't transaksjes kinne opnimme op 'e blockchain wurde neamd konsensusknooppunten (tsjûge) of mynwurkers (mynwurker). Folsleine knopen dy't allinich de krektens fan transaksjes kontrolearje wurde neamd audit knopen (kontrôle). Ljocht kliïnten (ljocht kliïnten) bewarje gjin folsleine kopyen fan 'e blockchain, mar ynteraksje mei it netwurk mei folsleine knopen.
De measte brûkers brûke ljochte kliïnten as web-wallets om transaksjes te meitsjen. Alle knooppunten binne ferbûn mei elkoar. Mei dizze set eleminten wurdt de netwurkarsjitektuer stabiler:

Wat moatte wy bouwe in blockchain?

Transaksje libben syklus

Litte wy nei de libbenssyklus fan 'e transaksje sjen en it stik foar stik útbrekke:

Wat moatte wy bouwe in blockchain?

Blockchain technologyen

Lit ús yn mear detail wenje op technyske oplossings en har ferbiningen mei elkoar.

Identifikaasje

Elke blockchain-transaksje moat digitaal ûndertekene wurde. Dêrom, om in transaksje te foltôgjen, moat elke dielnimmer in kaaipaar hawwe: privee / iepenbier. Soms in pear kaaien wurdt neamd in beurs, omdat de kaaien wurde unyk ferbûn mei de dielnimmer syn unike digitale adres en lykwicht. Yn 'e realiteit binne kaaien en adressen gewoan snaren fan nûmers yn ferskate nûmersystemen. Foarbylden fan kaaien en wallet-adressen:

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

Om in digitale hantekening te meitsjen yn blockchains, wurdt in algoritme basearre op elliptyske krommes brûkt: Elliptic Curve Digital Signature Algorithm (ECDSA). Om it te wurkjen, wurdt de privee kaai (256-bit nûmer) meast willekeurich nommen. It oantal kaaiopsjes is 2 foar de krêft fan 256, dus kinne wy ​​prate oer de praktyske ûnmooglikheid om de wearden fan partikuliere kaaien te passen.

Folgjende, de iepenbiere kaai wurdt krigen fan de privee ien troch fermannichfâldigje syn wearde troch de koördinaten fan in punt leit op de elliptyske kromme, resultearret yn de koördinaten fan in nij punt op deselde kromme. Dizze aksje soarget derfoar dat jo in kaaipaar krije dat geskikt is foar digitaal ûndertekenjen fan transaksjes. Uteinlik is it slúfadres unyk ôflaat fan 'e iepenbiere kaai.

D'r binne in protte artikels mei details oer de kryptografy brûkt yn blockchain, bygelyks: Bitcoin yn in notedop - Kryptografy

De privee kaai moat strikt fertroulik wêze en feilich hâlden. De iepenbiere kaai is bekend foar elkenien. As de privee kaai ferlern is, kin tagong ta de asset (munten) net werombrocht wurde en it jild sil foar altyd ferlern gean. Dêrom is de taak om privee kaaien feilich op te slaan ekstreem relevant, om't Dit is gjin bank wêr't jo altyd mei jo paspoart kinne komme en jo akkount weromsette kinne. D'r is in hiele yndustry foar de produksje fan saneamde kâlde krypto-wallets, fergelykber mei flash-driven:

Wat moatte wy bouwe in blockchain?

of jo kinne betrouberere metoaden brûke, bygelyks de wearde fan 'e privee kaai op tokens stimpelje:

Wat moatte wy bouwe in blockchain?

Transaksjes

Mear details oer de transaksjestruktuer kinne fûn wurde yn it artikel Bitcoin yn in notedop - Transaksje. It is wichtich foar ús om te begripen dat elke transaksje op syn minst de folgjende gegevens hat:

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

Dêrnei wurdt de transaksje tekene mei in privee kaai en útstjoerd (sjoch details oer de wurking fan it protokol Bitcoin yn in notedop-Protokol) nei alle knooppunten yn 'e blockchain dy't transaksjes kontrolearje op jildigens. It algoritme foar ferifikaasje fan transaksje is net-trivial en omfettet twa tsientallen stappen.

Transaksje blokken

Nei it kontrolearjen fan de jildichheid fan transaksjes foarmje knopen blokken fan har. Neist transaksjes wurde de hash fan it foarige blok en in nûmer (Nonce counter) yn it blok skreaun, en de hash fan it aktuele blok wurdt berekkene mei it SHA-256-algoritme. De hash moat kompleksiteitsbetingsten hawwe fêststeld. Bygelyks, yn it Bitcoin-netwurk wurdt de swierrichheid fan 'e hash automatysk elke 2 wiken feroare ôfhinklik fan de krêft fan it netwurk, sadat in blok sawat ien kear elke 10 minuten generearre wurdt. De kompleksiteit wurdt bepaald troch de folgjende betingst: de fûn hash moat minder wêze as in foarbepaald getal. As dizze betingst net foldien wurdt, wurdt 1 tafoege oan 'e Nonce, en it wurk fan it berekkenjen fan 'e hash wurdt werhelle. Om in hash te selektearjen, wurdt it Nonce-fjild brûkt, om't Dit is de ienige gegevens yn it blok dat kin wurde feroare; de ​​rest moat net feroare bliuwe. In jildige hash moat in bepaald oantal liedende nullen hawwe, lykas ien fan 'e echte hashes:

000000000000000000000bf03212e7dd1176f52f816fa395fc9b93c44bc11f91

It suksesfolle finen fan in hash is bewiis fan dien wurk (Proof-of-Work, PoW) foar de Bitcoin- of Ethereum-netwurken. It proses fan it finen fan hashes wurdt mynbou neamd, fergelykber mei goudwinning. De namme definiearret hiel sekuer de essinsje fan it proses, omdat d'r is in ienfâldich sykjen nei opsjes, en as immen in gaadlike hash fynt, dan is dit echt gelok. It is as it finen fan in echte goudklompe yn tonnen ôffalstiennen. De blokbeleanning is no 12.5 BTC en as jo it fermannichfâldigje mei it hjoeddeistige Bitcoin-taryf fan $ 3900, krije jo mear as in kilogram fan suver goud. Der is wat om foar te striden!

Nei it suksesfolle finen fan in hash, wurde it blok en de fûn hash sels skreaun nei de blockchain as it folgjende blok. Mear details oer de struktuer fan blokken kinne fûn wurde yn it artikel Bitcoin yn in notedop - Blockchain, en hjirûnder is in ferienfâldige diagram:

Wat moatte wy bouwe in blockchain?

De blockchain begjint mei in blok dat noch net de hash fan it foarige blok hat. D'r is mar ien sa'n blok yn 'e blockchain en hat syn eigen namme Genesis block. De oerbleaune blokken hawwe deselde struktuer en ferskille allinich yn it oantal transaksjes. Echte transaksjes en blokken dy't op it stuit makke wurde yn Bitcoin of Ethereum kinne wurde besjoen yn Explorer ûntsiferje.

De grutte fan blokken yn Bitcoin is beheind ta 1MB en mei in minimale hoemannichte ynformaasje yn in transaksje fan sawat 200 bytes kin it maksimale oantal transaksjes yn in blok sawat 6000 wêze. Fan hjir, troch de manier, folget de prestaasjes fan Bitcoin, dêr't elkenien laket om: in blok wurdt generearre likernôch ien kear elke 10 minuten * 60 sekonden = 600 sekonden, dat jout in formele prestaasje fan likernôch 10 TPS. Hoewol yn feite, dit is gjin produktiviteit, mar in bewust ymplementearre algoritme fan wurk. Yn Ethereum, foar konkurrinsje, makken se gewoan de blokgeneraasjetiid 15 sekonden. en produktiviteit formeel tanommen. Dêrom, yn blockchains dy't PoW as konsensus brûke, makket it gjin sin om prestaasjes te fergelykjen, om't it hinget direkt ôf fan 'e kompleksiteit fan' e cache-berekkening, dy't kin wurde tawiisd oan elke wearde.

Forks

Wat bart der as, bygelyks, ferskate knopen fûn hashes dy't foldogge oan de kompleksiteit betingsten, mar binne oars yn wearde (mei oare wurden, se kamen ta ferskillende konsensussen) en skreau blokken oan de blockchain? Litte wy sjen hoe't blockchain beskermet tsjin dizze situaasje. Yn dit gefal komt in saneamde gabel foar, en de blockchain hat twa ferzjes fan 'e keten:

Wat moatte wy bouwe in blockchain?

Wat bart der aanst? Dêrnei begjint in diel fan it netwurk te wurkjen op blok N + 2 fan ien ketting, en diel fan in oar:

Wat moatte wy bouwe in blockchain?

Ien fan dizze blokken sil earder fûn wurde en nei de blockchain stjoerd wurde, en dan, neffens de regels, sil de blockchain moatte oerstappe nei in langere ketting en alle transaksjes fan it alternative blok annulearje:

Wat moatte wy bouwe in blockchain?

Tagelyk kin in situaasje ûntstean as de transaksje fan in dielnimmer allinich yn ien fan 'e gabelblokken wie, dy't annulearre waard. Dêrom, om der wis fan te wêzen dat de winske transaksje is opnommen yn 'e blockchain, is d'r in algemiene oanbefelling - foardat jo de transaksje fertrouwe, moatte jo wachtsje oant de folgjende pear blokken wurde tafoege oan' e blockchain. Oanbefellings foar hoefolle blokken om te wachtsjen op ferskate blokken ferskille. Bygelyks, foar it Bitcoin-netwurk is it minimum 2 blokken, it maksimum is 6.

Itselde byld mei blokfoarken sil wurde waarnommen tidens de saneamde oanfal fan 51% - dit is as in groep miners besiket in alternatyf blokketen te groeien, besykje de ketting te annulearjen mei har frauduleuze transaksjes. Hoewol op it stuit, ynstee fan fraude, is it rendabeler om jo macht te besteegjen oan earlike mining.

Konsensus

Om in blok op 'e blockchain op te nimmen, moat it netwurk in konsensus berikke. Lit ús ûnthâlde de taak fan it berikken fan konsensus yn kompjûter kommunikaasje netwurken. It probleem wurdt formulearre as de taak fan 'e Byzantynske generaals BFT (Byzantynske fouttolerânsje). Troch de pittoreske beskriuwing fan de problemen fan it Byzantynske leger te weilitten, kin it probleem as folget formulearre wurde: hoe kinne netwurkknooppunten ta in mienskiplik resultaat komme as guon netwurkknooppunten se mei opsetsin ferdraaie kinne. Besteande algoritmen foar it oplossen fan it BFT-probleem litte sjen dat it netwurk goed kin funksjonearje as d'r minder dan 1/3 fan fraudeurs binne. Wêrom is BFT-konsensus net tapast op it Bitcoin-netwurk? Wêrom wie it nedich om PoW te brûken? D'r binne ferskate redenen:

  • BFT wurket goed mei in lytse fêste set knooppunten, mar yn in iepenbiere blockchain is it oantal knooppunten ûnfoarspelber en boppedat kinne knooppunten willekeurich yn- en útskeakele wurde.
  • It is needsaaklik om minsken te motivearjen om blockchain-knooppunten te lansearjen. Om dit te dwaan moatte minsken beleanne wurde. Yn BFT is d'r formeel neat om in beleanning foar te ûntfangen, mar wêr't de beleanning foar is yn PoW is dúdlik foar elkenien op in yntuïtyf nivo: foar de elektrisiteit konsumearre troch de prosessor yn it proses fan it finen fan de blokhash.

Neist PoW binne d'r ferskate oare konsensussen dy't wurde brûkt yn moderne blockchains, bygelyks:

  • PoS (Proof-of-Stake) - op 'e blockchain Hyperledger
  • DPoS (Delegated Proof-of-Stake) - op 'e blockchain BitShares
  • Oanpassingen fan BFT: SBFT (Simplified BFT) en PBFT (Praktyske BFT), bygelyks yn blockchain Exonum

Litte wy in bytsje stilhâlde by de PoS-konsensus, om't ... It is PoS en har fariëteiten dy't it meast wiidferspraat binne yn partikuliere blockchains. Wêrom yn privee? Oan 'e iene kant binne de skaaimerken fan PoS better yn ferliking mei PoW, om't Om konsensus te berikken binne minder komputerboarnen nedich, wat betsjut dat de snelheid fan it skriuwen fan gegevens nei de blockchain ferheget. Mar oan 'e oare kant hat PoS mear kânsen foar fraude, dus om dit te neutralisearjen, moatte alle dielnimmers yn' e blockchain bekend wêze.

PoS-konsensus is basearre op 'e seleksje fan in knooppunt dy't in blok skriuwe kin mei transaksjes nei de blockchain ôfhinklik fan it bedrach fan fûnsen yn' e akkount, of leaver, net yn 'e akkount, mar yn' e garânsje, d.w.s. Hoe mear fûnsen jo as garânsje hawwe, hoe wierskynliker it netwurk jo knooppunt sil kieze om in blok te skriuwen. De boarch sil net weromjûn wurde as it blok ûnjildich is. Dit soarget foar beskerming tsjin fraude. D'r binne de folgjende fariaasjes fan PoS:

  • De Delegated PoS (DPoS) konsensus ferdielt dielnimmers yn "kiezers" en "validators". Munthâlders (stimmende dielnimmers) delegearje har foech om transaksjes op 'e blockchain te ferifiearjen en op te nimmen oan oare dielnimmers. Sa dogge validators al it berekkeningswurk en krije dêr in beleanning foar, en de oanwêzigens fan stimmingsdielnimmers garandearret de earlikens fan validators, om't se kinne op elk momint feroare wurde.
  • LPoS (Leased Proof-of-Stake) konsensus lit jo jo fûnsen lease oan oare knopen, sadat se in bettere kâns hawwe om blokken te validearjen. Dat. Jo kinne in kommisje krije foar transaksjes sûnder diel te nimmen oan 'e eigentlike transaksjeferifikaasje en blokkearje mining.

D'r binne in oantal oare konsensussen dy't noch net in soad brûkt wurde, ik sil se hjir gewoan listje foar ynformaasje, en in oersjoch fan 'e konsensusalgoritmen sels is te finen, bygelyks yn it artikel: Konsensusalgoritmen yn 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-Importans)

Betrouwbaarheid en ynset modellen fan blockchains

Iepenbiere blockchain

Duorsumens Iepenbier of in oare namme Permissionless blockchain Dit wurdt berikt troch elkenien te tastean om ynformaasje te ferbinen en te besjen of sels har eigen knooppunt te ferbinen, en fertrouwen is boud op PoW-konsensus.

Private blockchain

private of Privee tastimming blockchain. Yn dizze blokken hat allinich in bepaalde groep dielnimmers (organisaasjes as minsken) tagong ta ynformaasje. Sokke blockchains wurde boud troch organisaasjes mei as doel it fergrutsjen fan totale foardiel of effisjinsje. Har betrouberens wurdt garandearre troch de mienskiplike doelen fan 'e dielnimmers en de PoS- en BFT-konsensusalgoritmen.

Blockchain konsortium

Dêr binne Konsortium of Publike tastimming blockchain. Dit binne blokken dy't elkenien kin ferbine mei om te besjen, mar in dielnimmer kin ynformaasje tafoegje of syn knooppunt allinich ferbine mei de tastimming fan oare dielnimmers. Sokke blockchains wurde boud troch organisaasjes om it fertrouwen fan klanten of konsuminten fan produkten as de maatskippij as gehiel te fergrutsjen. Hjir wurdt betrouberens ek berikt troch de oanwêzigens fan fertrouwen tusken dielnimmers en deselde PoS- en BFT-konsensusalgoritmen.

Tûke kontrakten

Blockchains útfierd nei Bitcoin hawwe, yn ien of oare graad, de mooglikheid tafoege om tûke kontrakten út te fieren. Yn essinsje is in tûk kontrakt in transaksje wêryn programmakoade wurdt pleatst foar útfiering. Slimme kontrakten op it Ethereum-netwurk wurde útfierd yn 'e EVM (Ethereum Virtual Machine). Om te begjinnen mei it útfieren fan in tûk kontrakt, moat it eksplisyt wurde lansearre troch in oare transaksje, of de betingsten foar útfiering moatte foldien wurde. De resultaten fan 'e útfiering fan' e tûke kontrakt wurde ek opnommen yn 'e blockchain. It ûntfangen fan gegevens fan bûten de blockchain is mooglik, mar ekstreem beheind.

Hokker saaklike logika kin wurde ymplementearre mei in tûk kontrakt? Yn feite is d'r net folle, bygelyks it kontrolearjen fan betingsten mei help fan gegevens fan 'e blockchain, it feroarjen fan de eigners fan digitale aktiva ôfhinklik fan dizze betingsten, it opnimmen fan gegevens yn in permaninte opslach binnen de blockchain. De logika wurdt ymplementearre yn in spesjale hege-nivo taal Solidity.

In klassyk foarbyld fan funksjonaliteit dy't wurdt ymplementearre mei tûke kontrakten is de útjefte fan tokens foar ICO's. Bygelyks, ik ymplementearre in tûk kontrakt om in beskieden 500 AlexToken út te jaan. Troch keppeling yn Etherscan is lizzend

boarnekoade fan it tûke kontrakt yn 'e Solidity-taal

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;
}

en de binêre fertsjintwurdiging sa't it netwurk it sjocht

60806040526000600355600060045533600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560146101000a81548160ff021916908360028111156200006f57fe5b0217905550620001036b019d971e4fe8401e74000000600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200024a6401000000000262000b1d179091906401000000009004565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620001986b019d971e4fe8401e740000006001546200024a6401000000000262000b1d179091906401000000009004565b6001819055506b033b2e3c9fd0803ce8000000600481905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6b019d971e4fe8401e740000006040518082815260200191505060405180910390a362000267565b600081830190508281101515156200025e57fe5b80905092915050565b611cb880620002776000396000f300608060405260043610610112576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146104c7578063095ea7b31461055757806318160ddd146105bc57806323b872dd146105e7578063313ce5671461066c578063355274ea146106a3578063518ab2a8146106ce57806366188463146106f957806370a082311461075e57806389311e6f146107b55780638da5cb5b146107cc578063903a3ef61461082357806395d89b411461083a578063a9059cbb146108ca578063bf5839031461092f578063c7876ea41461095a578063cbcb317114610985578063d73dd623146109b0578063dd62ed3e14610a15578063f2fde38b14610a8c575b60008060008060006001600281111561012757fe5b600560149054906101000a900460ff16600281111561014257fe5b14151561014e57600080fd5b60003411151561015d57600080fd5b600060045411151561016e57600080fd5b3494506101a7670de0b6b3a764000061019968056bc75e2d6310000088610acf90919063ffffffff16565b610b0790919063ffffffff16565b9350600092506b033b2e3c9fd0803ce80000006101cf85600354610b1d90919063ffffffff16565b111561024c576101f66003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b915061022e670de0b6b3a764000061022068056bc75e2d6310000085610b0790919063ffffffff16565b610acf90919063ffffffff16565b90506102438186610b3990919063ffffffff16565b92508094508193505b61026184600354610b1d90919063ffffffff16565b6003819055506102886003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b6004819055506000831115610344573373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156102dd573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35b610395846000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a361045184600154610b1d90919063ffffffff16565b600181905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f193505050501580156104bf573d6000803e3d6000fd5b505050505050005b3480156104d357600080fd5b506104dc610b52565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561051c578082015181840152602081019050610501565b50505050905090810190601f1680156105495780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561056357600080fd5b506105a2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b8b565b604051808215151515815260200191505060405180910390f35b3480156105c857600080fd5b506105d1610c7d565b6040518082815260200191505060405180910390f35b3480156105f357600080fd5b50610652600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c87565b604051808215151515815260200191505060405180910390f35b34801561067857600080fd5b50610681611041565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b3480156106af57600080fd5b506106b8611046565b6040518082815260200191505060405180910390f35b3480156106da57600080fd5b506106e3611056565b6040518082815260200191505060405180910390f35b34801561070557600080fd5b50610744600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061105c565b604051808215151515815260200191505060405180910390f35b34801561076a57600080fd5b5061079f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112ed565b6040518082815260200191505060405180910390f35b3480156107c157600080fd5b506107ca611335565b005b3480156107d857600080fd5b506107e16113eb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561082f57600080fd5b50610838611411565b005b34801561084657600080fd5b5061084f6114ab565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561088f578082015181840152602081019050610874565b50505050905090810190601f1680156108bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108d657600080fd5b50610915600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114e4565b604051808215151515815260200191505060405180910390f35b34801561093b57600080fd5b50610944611703565b6040518082815260200191505060405180910390f35b34801561096657600080fd5b5061096f611709565b6040518082815260200191505060405180910390f35b34801561099157600080fd5b5061099a611716565b6040518082815260200191505060405180910390f35b3480156109bc57600080fd5b506109fb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611726565b604051808215151515815260200191505060405180910390f35b348015610a2157600080fd5b50610a76600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611922565b6040518082815260200191505060405180910390f35b348015610a9857600080fd5b50610acd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119a9565b005b600080831415610ae25760009050610b01565b8183029050818382811515610af357fe5b04141515610afd57fe5b8090505b92915050565b60008183811515610b1457fe5b04905092915050565b60008183019050828110151515610b3057fe5b80905092915050565b6000828211151515610b4757fe5b818303905092915050565b6040805190810160405280600981526020017f416c6578546f6b656e000000000000000000000000000000000000000000000081525081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600154905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610cc457600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d1157600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d9c57600080fd5b610ded826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e80826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f5182600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b601281565b6b033b2e3c9fd0803ce800000081565b60035481565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508083111561116d576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611201565b6111808382610b3990919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561139157600080fd5b60028081111561139d57fe5b600560149054906101000a900460ff1660028111156113b857fe5b141515156113c557600080fd5b6001600560146101000a81548160ff021916908360028111156113e457fe5b0217905550565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561146d57600080fd5b60028081111561147957fe5b600560149054906101000a900460ff16600281111561149457fe5b141515156114a157600080fd5b6114a9611b01565b565b6040805190810160405280600381526020017f414c54000000000000000000000000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561152157600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561156e57600080fd5b6115bf826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611652826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b60045481565b68056bc75e2d6310000081565b6b019d971e4fe8401e7400000081565b60006117b782600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a0557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611a4157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6002600560146101000a81548160ff02191690836002811115611b2057fe5b021790555060006004541115611c0a57611ba5600454600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015611c89573d6000803e3d6000fd5b505600a165627a7a723058205bbef016cc7699572f944871cb6f05e69915ada3a92a1d9f03a3fb434aac0c2b0029

Mear details oer tûke kontrakten kinne fûn wurde yn it artikel: Wat binne smart kontrakten yn Ethereum.

konklúzje

Wy hawwe de technologyen neamd wêrop moderne blockchains binne boud en hoe't se mei elkoar ferbûn binne. Litte wy no formulearje hokker problemen kinne wurde oplost mei blockchain, en hokker oplossingen sille op syn bêst net effektyf wêze. Dat, it brûken fan blockchain is net nedich as:

  • Transaksjes wurde útfierd yn in fertroude omjouwing;
  • De oanwêzigens fan in kommisje fan intermediaries makket it libben fan 'e dielnimmers net minder;
  • Dielnimmers hawwe gjin eigendom dat kin wurde fertsjintwurdige as digitale aktiva;
  • Der is gjin distribúsje yn digitale aktiva, d.w.s. de wearde is eigendom of levere troch mar ien dielnimmer.

Wat hâldt de takomst foar blockchain? No kinne wy ​​​​allinich spekulearje oer mooglike manieren foar de ûntwikkeling fan blockchain-technologyen:

  • Blockchain sil deselde mienskiplike databanktechnology wurde as bygelyks SQL of NoSQL foar it oplossen fan har spesifike oanbod fan problemen;
  • Blockchain sil in wiidferspraat protokol wurde, lykas HTTP is foar it ynternet;
  • Blockchain sil de basis wurde foar in nij finansjeel en politike systeem op 'e planeet!

Yn it folgjende diel sille wy sjen nei hokker blockchains op it stuit besteane en wêrom se wurde brûkt yn ferskate yndustry.

Dit is noch mar it begjin!

Boarne: www.habr.com

Add a comment