Wat moet ons 'n blokketting bou?

Die hele geskiedenis van die mensdom is 'n voortdurende proses om van kettings ontslae te raak en nuwes, selfs sterkers te skep. (Anonieme skrywer)

Deur talle blokkettingprojekte (Bitshares, Hyperledger, Exonum, Ethereum, Bitcoin, ens.) te ontleed, verstaan ​​ek dat hulle uit 'n tegniese oogpunt almal op dieselfde beginsels gebou is. Blokkettings herinner aan huise wat, ten spyte van al die verskeidenheid ontwerpe, dekor en doeleindes, ’n fondament, mure, dak, vensters, deure het wat op sekere maniere aan mekaar verbind is. En as jy die basiese beginsels van bouontwerp verstaan ​​en die eienskappe van die materiaal wat gebruik word ken, kan jy die beoogde doel van 'n spesifieke huis bepaal. Tans het 'n situasie met blockchain ontstaan ​​wat almal daarvan gehoor het, maar min mense verstaan ​​die argitektuur en beginsels van werking. Daarom is daar 'n misverstand oor hoekom en hoe dit sin maak om blockchain-tegnologie te gebruik.

In hierdie artikel sal ons die eienskappe en beginsels ontleed wat algemeen is vir alle blokkettings. Kom ons kyk dan na die probleme wat opgelos kan word met behulp van die blokketting en om die materiaal te versterk, kom ons bou 'n klein maar regte blokketting op ons virtuele webwerf!

So, laat ons onthou watter probleme blockchain aanvanklik opgelos het.

Ek is seker dat baie sal sê oor 'n verspreide, gedesentraliseerde, publieke en onveranderlike databasis. Maar hoekom was dit alles nodig?

Ek verkies om enige tegnologie te begin bestudeer deur die standaarde te lees, aangesien alle artikels en boeke oor die onderwerp wat bestudeer word, daarop gebaseer is. Maar daar is tans geen blokkettingstandaarde nie; ISO het net geskep komitees vir hul ontwikkeling. Tans het elke openbare blokkettingprojek sy eie Witskrifdokument, wat in wese 'n tegniese spesifikasie is. Die eerste publiek bekende blokkettingprojek is die Bitcoin-netwerk. Gaan na die amptelike webwerf van die netwerk en kyk waar dit alles begin het.

Blockchain Uitdaging

Dus, die taak wat blockchain in die Bitcoin-pioniernetwerk opgelos is, is om 'n betroubare oordrag van eienaarskap van digitale bates (bates) uit te voer in 'n nie-vertroude omgewing sonder tussengangers. Byvoorbeeld, in die Bitcoin-netwerk is 'n digitale bate bitcoin digitale munte. En alle tegniese oplossings van Bitcoin en ander blokkettings kom daarop neer om hierdie probleem op te los.

Probleme wat blockchain oplos

Gestel 'n sekere finansiële organisasie sê dat hy 'n netwerk regoor die wêreld opgebou het met behulp waarvan dit moontlik is om geld aan enige persoon oor te dra. Sal jy haar glo? As hierdie organisasie Visa of MasterCard is, sal jy dit heel waarskynlik glo, maar as, relatief gesproke, AnonymousWorldMoney, sal jy waarskynlik nie. Hoekom? Maar omdat ons baie goed weet hoe verspreide stelsels deur private maatskappye gemaak word, vir watter doeleindes, en waartoe dit kan lei. Kom ons kyk van naderby na die probleme van sulke stelsels en hoe dit opgelos kan word met behulp van blockchain-tegnologie.

Kom ons sê dat daar in die voorwaardelike AnonymousWorldMoney bedieners met databasisse is, en dit is goed as daar verskeie van hulle in verskillende datasentrums is. Wanneer die sender geld oordra, word 'n transaksie geregistreer, wat na alle bedieners gerepliseer word, en die geld bereik die ontvanger.

Wat moet ons 'n blokketting bou?

In 'n ideale wêreld werk hierdie skema uitstekend, maar in ons s'n duik die volgende probleme op:

  1. Die probleem van die identifisering van deelnemers aan die een kant en die behoefte aan anonimiteit van transaksies aan die ander kant. Dié. jy moet geld na 'n spesifieke ontvanger oorplaas en op so 'n manier dat niemand van hierdie transaksie weet nie, behalwe die deelnemers aan die transaksie. Banke het rekeningnommers en bankkaarte wat aan 'n spesifieke individu of regsentiteit gekoppel is, en bankgeheimhouding beskerm transaksie-inligting. En wie waarborg dat die voorwaardelike AnonymousWorldMoney nie persoonlike data en transaksie-inligting vir sy eie doeleindes gebruik nie?
  2. Hoe om seker te maak dat die ontvanger presies die bedrag ontvang het wat aan hom oorgeplaas is? Relatief gesproke het die sender $100 oorgeplaas, en die ontvanger het $10 ontvang. Die sender kom na die AnonymousWorldMoney-kantoor met sy kwitansie, en die klerk wys sy weergawe, waar geskryf word dat die sender slegs $10 oorgeplaas het.
  3. Die probleem van 'n onbetroubare omgewing, byvoorbeeld, 'n bedrogspul wat dubbelbesteding genoem word. 'n Gewetenlose deelnemer kan sy balans verskeie kere spandeer totdat die betaling na alle bedieners gerepliseer word. CAP-stelling, natuurlik het niemand gekanselleer nie, en ooreenkoms sal uiteindelik bereik word, maar iemand sal nie geld ontvang vir dienste of goedere wat gelewer word nie. As daar dus geen volledige vertroue in die betalingsorganisasie of deelnemers aan transaksies is nie, is dit nodig om 'n netwerk te bou wat nie op vertroue gebaseer is nie, maar op kriptografie.
  4. Voorwaardelike AnonymousWorldMoney het 'n beperkte aantal bedieners wat onbedoeld of weens kwaadwillige bedoelings onbeskikbaar kan raak.
  5. AnonymousWorldMoney sal sy eie tasbare kommissie neem.
  6. Moontlikheid van beheer. Tydens die werking van Bitcoin het dit geblyk dat mense nie net munte aan mekaar wil oordra nie, maar ook verskeie voorwaardes vir die transaksie wil nagaan, werkscenario's programmeer, outomaties aksies uitvoer afhangende van die toestande, ens.

Hoe blockchain hierdie probleme oplos

  1. Identifikasie van deelnemers word uitgevoer met behulp van 'n paar sleutels: privaat en publiek, en die digitale handtekeningalgoritme identifiseer die sender en ontvanger uniek en laat hul identiteit anoniem.
  2. Transaksies word in blokke versamel, die hash van die blok word bereken en in die volgende blok geskryf. Hierdie volgorde van opname hashes in blokke gee die blokketting-tegnologie sy naam, en dit maak dit ook onmoontlik om blokke of individuele transaksies van blokke onopvallend te verander / te verwyder. Dus, as 'n transaksie in die blokketting ingesluit is, kan jy seker wees dat sy data onveranderd sal bly.
  3. Dubbelbestedingsbedrog word voorkom deur 'n netwerkkonsensus te bereik oor watter data as geldig beskou moet word en watter om weg te gooi. In die Bitcoin-netwerk word konsensus bereik deur bewys van werk (PoW).
  4. Die betroubaarheid van die netwerk word bereik deur die feit dat die blokketting publiek is, waar elke deelnemer hul eie nodus kan bestuur, 'n volledige kopie van die blokketting kan ontvang en boonop onafhanklik begin om transaksies vir korrektheid na te gaan. Daar moet kennis geneem word dat moderne blokkettings dit moontlik maak om nie net openbare (oop) maar ook private (geslote) blokkettings te bou, sowel as die gebruik van gekombineerde skemas.
  5. Die blokketting sal nie heeltemal van kommissies ontslae raak nie, want ... jy moet die mense betaal wat die netwerk ondersteun, maar in die blokketting word die behoefte aan 'n kommissie so oortuigend bewys dat daar geen twyfel is oor die noodsaaklikheid daarvan nie.
  6. Moderne blokkettings het die vermoë om besigheidslogika te implementeer, wat in die blokketting Smart Contracts genoem word. Die logika van slim kontrakte word in verskeie hoëvlaktale geïmplementeer.

Vervolgens sal ons hierdie oplossings in meer besonderhede oorweeg.

Blockchain argitektuur

Blockchain-komponente

Elke deelnemer kan hul eie nodus begin met 'n volledige kopie van die blokketting (volle node). Volle nodusse wat transaksies op die blokketting kan aanteken, word genoem konsensus nodusse (getuie) of mynwerkers (myner). Volle nodusse wat slegs die korrektheid van transaksies kontroleer, word genoem oudit nodusse (oudit). Ligte kliënte (ligte kliënte) stoor nie volledige kopieë van die blokketting nie, maar interaksie met die netwerk deur volledige nodusse te gebruik.
Die meeste gebruikers gebruik ligte kliënte of webbeursies om transaksies te maak. Alle nodusse is aan mekaar verbind. Met hierdie stel elemente word die netwerkargitektuur meer stabiel:

Wat moet ons 'n blokketting bou?

Transaksie lewensiklus

Kom ons kyk na die transaksielewensiklus en breek dit stukkie vir stukkie af:

Wat moet ons 'n blokketting bou?

Blockchain-tegnologieë

Laat ons in meer besonderhede stilstaan ​​by tegniese oplossings en hul verbande met mekaar.

identifikasie

Elke blokkettingtransaksie moet digitaal onderteken word. Daarom, om 'n transaksie te voltooi, moet elke deelnemer 'n sleutelpaar hê: privaat / publiek. Soms word 'n paar sleutels 'n beursie genoem, want die sleutels word uniek geassosieer met die deelnemer se unieke digitale adres en balans. In werklikheid is sleutels en adresse net stringe getalle in verskillende getallestelsels. Voorbeelde van sleutels en beursie-adresse:

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

Om 'n digitale handtekening in blokkettings te skep, word 'n algoritme gebaseer op elliptiese kurwes gebruik: Elliptic Curve Digital Signature Algorithm (ECDSA). Vir die werking daarvan word die private sleutel (256-bis-nommer) gewoonlik lukraak geneem. Die aantal sleutelopsies is 2 tot die krag van 256, so ons kan praat oor die praktiese onmoontlikheid om die waardes van private sleutels te pas.

Vervolgens word die publieke sleutel van die private een verkry deur die waarde daarvan te vermenigvuldig met die koördinate van 'n punt wat op die elliptiese kurwe geleë is, wat lei tot die koördinate van 'n nuwe punt op dieselfde kromme. Hierdie aksie verseker dat jy 'n sleutelpaar kry wat geskik is om transaksies digitaal te onderteken. Ten slotte, die beursie-adres is uniek afgelei van die publieke sleutel.

Daar is baie artikels met besonderhede oor die kriptografie wat in blockchain gebruik word, byvoorbeeld: Bitcoin in 'n neutedop - Kriptografie

Die privaat sleutel moet streng vertroulik wees en veilig gehou word. Die publieke sleutel is aan almal bekend. As die private sleutel verlore gaan, kan toegang tot die bate (munte) nie herstel word nie en sal die geld vir ewig verlore wees. Daarom is die taak om privaat sleutels veilig te stoor uiters relevant, want Hierdie is nie 'n bank waar jy altyd met jou paspoort kan kom en jou rekening kan herstel nie. Daar is 'n hele bedryf vir die vervaardiging van sogenaamde koue kripto-beursies, soortgelyk aan flash drives:

Wat moet ons 'n blokketting bou?

of jy kan meer betroubare metodes gebruik, byvoorbeeld om die waarde van die private sleutel op tokens te stempel:

Wat moet ons 'n blokketting bou?

Transaksies

Meer besonderhede oor die transaksiestruktuur kan in die artikel gevind word Bitcoin in 'n neutedop - Transaksie. Dit is vir ons belangrik om te verstaan ​​dat elke transaksie ten minste die volgende data het:

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

Vervolgens word die transaksie met 'n private sleutel onderteken en uitgestuur (sien besonderhede oor die werking van die protokol Bitcoin in 'n neutedop-protokol) na alle nodusse in die blokketting wat transaksies vir geldigheid nagaan. Die transaksieverifikasie-algoritme is nie-triviaal en sluit in twee dosyn treë.

Transaksie blokke

Nadat die geldigheid van transaksies gekontroleer is, vorm nodusse blokke daarvan. Benewens transaksies, word die hash van die vorige blok en 'n nommer (Nonce counter) in die blok geskryf, en die hash van die huidige blok word bereken deur die SHA-256-algoritme te gebruik. Die hash moet kompleksiteitstoestande hê. Byvoorbeeld, in die Bitcoin-netwerk word die moeilikheidsgraad van die hash outomaties elke 2 weke verander, afhangende van die krag van die netwerk, sodat 'n blok ongeveer een keer elke 10 minute gegenereer word. Die kompleksiteit word bepaal deur die volgende voorwaarde: die hash wat gevind word, moet minder as 'n voorafbepaalde getal wees. As hierdie voorwaarde nie nagekom word nie, word 1 by die Nonce gevoeg, en die werk om die hash te bereken word herhaal. Om 'n hash te kies, word die Nonce-veld gebruik, want Dit is die enigste data in die blok wat verander kan word; die res moet onveranderd bly. 'n Geldige hash moet 'n sekere aantal voorste nulle hê, soos een van die regte hashes:

000000000000000000000bf03212e7dd1176f52f816fa395fc9b93c44bc11f91

Om 'n hash suksesvol te vind, is 'n bewys van werk gedoen (Proof-of-Work, PoW) vir die Bitcoin- of Ethereum-netwerke. Die proses om hashes te vind, word mynbou genoem, soortgelyk aan goudmynbou. Die naam definieer redelik akkuraat die essensie van die proses, want daar is 'n eenvoudige soektog na opsies, en as iemand 'n geskikte hash vind, dan is dit regtig geluk. Dit is soos om 'n regte goue klontjie in tonne afvalrots te vind. Die blokbeloning is nou 12.5 BTC en as jy dit vermenigvuldig met die huidige Bitcoin-koers van $3900, kry jy meer as 'n kilogram suiwer goud. Daar is iets om voor te veg!

Nadat 'n hash suksesvol gevind is, word die blok en die gevind hash self na die blokketting geskryf as die volgende blok. Meer besonderhede oor die struktuur van blokke kan in die artikel gevind word Bitcoin in 'n neutedop - Blockchain, en hieronder is 'n vereenvoudigde diagram:

Wat moet ons 'n blokketting bou?

Die blokketting begin met 'n blok wat nog nie die hash van die vorige blok het nie. Daar is net een so 'n blok in die blokketting en het sy eie naam Genesis blok. Die oorblywende blokke het dieselfde struktuur en verskil slegs in die aantal transaksies. Werklike transaksies en blokke wat tans in Bitcoin of Ethereum geskep word, kan besigtig word Blokkeer Explorer.

Die grootte van blokke in Bitcoin is beperk tot 1MB en met 'n minimum hoeveelheid inligting in 'n transaksie van ongeveer 200 grepe, kan die maksimum aantal transaksies in 'n blok ongeveer 6000 wees. Van hier af, terloops, volg die prestasie van Bitcoin, waaroor almal lag: 'n blok word ongeveer een keer elke 10 minute gegenereer * 60 sekondes = 600 sekondes, wat 'n formele prestasie van ongeveer 10 TPS gee. Alhoewel dit in werklikheid nie produktiwiteit is nie, maar 'n doelbewus geïmplementeerde algoritme van werk. In Ethereum, vir mededinging, het hulle eenvoudig die blokgenerasietyd 15 sekondes gemaak. en produktiwiteit het formeel gestyg. Daarom, in blokkettings wat PoW as konsensus gebruik, maak dit glad nie sin om prestasie te vergelyk nie, want dit hang direk af van die kompleksiteit van die kasberekening, wat aan enige waarde toegeken kan word.

Vurke

Wat gebeur as, byvoorbeeld, verskeie nodusse hashes gevind het wat aan die kompleksiteitsvoorwaardes voldoen, maar verskil in waarde (met ander woorde, hulle het verskillende konsensusse bereik) en blokke na die blokketting geskryf het? Kom ons kyk hoe blockchain teen hierdie situasie beskerm. In hierdie geval vind 'n sogenaamde vurk plaas, en die blokketting het twee weergawes van die ketting:

Wat moet ons 'n blokketting bou?

Wat gebeur volgende? Vervolgens begin 'n deel van die netwerk werk op blok N+2 vanaf een ketting, en deel van 'n ander:

Wat moet ons 'n blokketting bou?

Een van hierdie blokke sal vroeër gevind word en na die blokketting gestuur word, en dan, volgens die reëls, sal die blokketting na 'n langer ketting moet oorskakel en alle transaksies van die alternatiewe blok kanselleer:

Wat moet ons 'n blokketting bou?

Terselfdertyd kan 'n situasie ontstaan ​​wanneer 'n deelnemer se transaksie slegs in een van die vurkblokke was, wat gekanselleer is. Daarom, om seker te maak dat die verlangde transaksie in die blokketting aangeteken is, is daar 'n algemene aanbeveling - voordat jy die transaksie vertrou, moet jy wag totdat die volgende paar blokke by die blokketting gevoeg word. Aanbevelings vir hoeveel blokke om vir verskillende blokkettings te wag, verskil. Byvoorbeeld, vir die Bitcoin-netwerk is die minimum 2 blokke, die maksimum is 6.

Dieselfde prentjie met blokvurke sal tydens die sogenaamde 51%-aanval waargeneem word - dit is wanneer 'n groep mynwerkers probeer om 'n alternatiewe blokketting te laat groei, wat probeer om die ketting met hul bedrieglike transaksies te kanselleer. Alhoewel dit tans, in plaas van bedrog, meer winsgewend is om jou krag op eerlike mynbou te spandeer.

Konsensus

Om 'n blok op die blokketting aan te teken, moet die netwerk 'n konsensus bereik. Kom ons onthou die taak om konsensus in rekenaarkommunikasienetwerke te bereik. Die probleem word geformuleer as die taak van die Bisantynse generaals BFT (Bisantynse fouttoleransie). Deur die skilderagtige beskrywing van die probleme van die Bisantynse leër weg te laat, kan die probleem soos volg geformuleer word: hoe kan netwerknodusse tot 'n algemene resultaat kom as sommige netwerknodusse dit doelbewus kan verdraai. Bestaande algoritmes vir die oplossing van die BFT-probleem wys dat die netwerk korrek kan funksioneer as daar minder as 1/3 bedrieërs is. Waarom is BFT-konsensus nie op die Bitcoin-netwerk toegepas nie? Hoekom was dit nodig om PoW te gebruik? Daar is verskeie redes:

  • BFT werk goed met 'n klein vaste stel nodusse, maar in 'n publieke blokketting is die aantal nodusse onvoorspelbaar en bowendien kan nodusse lukraak aan- en afgeskakel word.
  • Dit is nodig om mense te motiveer om blockchain nodusse te begin. Om dit te doen, moet mense beloon word. In BFT is daar formeel niks om 'n beloning voor te ontvang nie, maar waarvoor die beloning in PoW is, is duidelik vir almal op 'n intuïtiewe vlak: vir die elektrisiteit wat deur die verwerker verbruik word in die proses om die blokhash te vind.

Benewens PoW, is daar verskeie ander konsensusse wat in moderne blokkettings gebruik word, byvoorbeeld:

  • PoS (Proof-of-Stake) - op die blokketting Hyperledger
  • DPoS (Delegated Proof-of-Stake) - op die blokketting BitShares
  • Wysigings van BFT: SBFT (Vereenvoudigde BFT) en PBFT (Praktiese BFT), byvoorbeeld in blokketting Eksonum

Laat ons 'n bietjie stilstaan ​​by die PoS-konsensus, want ... Dit is PoS en sy variëteite wat die meeste in private blokkettings voorkom. Hoekom privaat? Aan die een kant is die eienskappe van PoS beter in vergelyking met PoW, want Om konsensus te bereik, is minder rekenaarhulpbronne nodig, wat beteken dat die spoed van die skryf van data na die blokketting toeneem. Maar aan die ander kant het PoS meer geleenthede vir bedrog, so om dit te neutraliseer, moet alle deelnemers aan die blokketting bekend wees.

PoS-konsensus is gebaseer op die keuse van 'n nodus wat 'n blok met transaksies na die blokketting kan skryf, afhangende van die hoeveelheid fondse in die rekening, of eerder, nie in die rekening nie, maar in die kollaterale, d.w.s. Hoe meer fondse jy as kollateraal het, hoe meer waarskynlik sal die netwerk jou nodus kies om 'n blok te skryf. Die deposito sal nie terugbetaal word as die blok ongeldig is nie. Dit bied beskerming teen bedrog. Daar is die volgende variasies van PoS:

  • Die Delegated PoS (DPoS) konsensus verdeel deelnemers in "kiesers" en "valideerders". Munthouers (stemdeelnemers) delegeer hul mag om transaksies op die blokketting te verifieer en aan te teken aan ander deelnemers. Sodoende doen valideerders al die berekeningswerk en ontvang 'n beloning daarvoor, en die teenwoordigheid van stemdeelnemers waarborg die eerlikheid van valideerders, want hulle kan enige tyd verander word.
  • LPoS (Leased Proof-of-Stake) konsensus laat jou toe om jou fondse aan ander nodusse te verhuur sodat hulle 'n beter kans het om blokke te valideer. Daardie. Jy kan 'n kommissie vir transaksies ontvang sonder om deel te neem aan die werklike transaksieverifikasie en blokmynbou.

Daar is 'n aantal ander konsensusse wat nog nie algemeen gebruik word nie, ek sal hulle net hier lys vir inligting, en 'n oorsig van die konsensus-algoritmes self kan gevind word, byvoorbeeld, in die artikel: Konsensus-algoritmes in Blockchain.

  • PoET (Bewys-van-verstreke tyd)
  • PoC (Bewys-van-kapasiteit)
  • PoB (Bewys-van-Brand)
  • PoGewig (Bewys-van-Gewig)
  • PoA (Bewys-van-aktiwiteit) – PoW + PoS
  • POI (Bewys-van-belangrike)

Betroubaarheid en ontplooiingsmodelle van blokkettings

Openbare blokketting

Volhoubaarheid Openbare of 'n ander naam Toestemminglose blokketting Dit word bereik deur enigiemand toe te laat om te koppel en inligting te bekyk of selfs hul eie nodus te koppel, en vertroue word gebou op PoW-konsensus.

Privaat blokketting

Privaat of Private Permissioned blockchain. In hierdie blokkettings het slegs 'n sekere groep deelnemers (organisasies of mense) toegang tot inligting. Sulke blokkettings word deur organisasies gebou met die doel om algehele voordeel of doeltreffendheid te verhoog. Hul betroubaarheid word verseker deur die gemeenskaplike doelwitte van die deelnemers en die PoS- en BFT-konsensusalgoritmes.

Blockchain-konsortium

Daar Consortium of Publieke Toestemming blockchain. Dit is blokkettings waarmee enigiemand kan koppel om te sien, maar 'n deelnemer kan inligting byvoeg of sy nodus verbind slegs met die toestemming van ander deelnemers. Sulke blokkettings word deur organisasies gebou om vertroue aan die kant van kliënte of verbruikers van produkte of die samelewing as geheel te verhoog. Hier word betroubaarheid ook bereik deur die teenwoordigheid van vertroue tussen deelnemers en dieselfde PoS- en BFT-konsensusalgoritmes.

Slim kontrakte

Blokkettings wat ná Bitcoin geïmplementeer is, het in een of ander mate die vermoë bygevoeg om slim kontrakte uit te voer. In wese is 'n slim kontrak 'n transaksie waarin programkode vir uitvoering geplaas word. Slim kontrakte op die Ethereum-netwerk word in die EVM (Ethereum Virtual Machine) uitgevoer. Om 'n slim kontrak te begin uitvoer, moet dit uitdruklik deur 'n ander transaksie geloods word, of die voorwaardes vir uitvoering moet nagekom word. Die resultate van die uitvoering van die slim kontrak sal ook in die blokketting aangeteken word. Die ontvangs van data van buite die blokketting is moontlik, maar uiters beperk.

Watter besigheidslogika kan geïmplementeer word deur 'n slim kontrak te gebruik? Trouens, daar is nie veel nie, byvoorbeeld om toestande na te gaan met behulp van data van die blokketting, die eienaars van digitale bates te verander na gelang van hierdie toestande, die opneem van data in 'n permanente berging binne die blokketting. Die logika word in 'n spesiale hoëvlaktaal Solidity geïmplementeer.

'N Klassieke voorbeeld van funksionaliteit wat met behulp van slim kontrakte geïmplementeer word, is die uitreiking van tokens vir ICO's. Ek het byvoorbeeld 'n slim kontrak geïmplementeer om 'n beskeie 500 AlexToken uit te reik. Deur skakel in Etherscan is

bronkode van die slimkontrak in die 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 die binêre voorstelling soos die netwerk dit sien

60806040526000600355600060045533600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560146101000a81548160ff021916908360028111156200006f57fe5b0217905550620001036b019d971e4fe8401e74000000600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200024a6401000000000262000b1d179091906401000000009004565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620001986b019d971e4fe8401e740000006001546200024a6401000000000262000b1d179091906401000000009004565b6001819055506b033b2e3c9fd0803ce8000000600481905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6b019d971e4fe8401e740000006040518082815260200191505060405180910390a362000267565b600081830190508281101515156200025e57fe5b80905092915050565b611cb880620002776000396000f300608060405260043610610112576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146104c7578063095ea7b31461055757806318160ddd146105bc57806323b872dd146105e7578063313ce5671461066c578063355274ea146106a3578063518ab2a8146106ce57806366188463146106f957806370a082311461075e57806389311e6f146107b55780638da5cb5b146107cc578063903a3ef61461082357806395d89b411461083a578063a9059cbb146108ca578063bf5839031461092f578063c7876ea41461095a578063cbcb317114610985578063d73dd623146109b0578063dd62ed3e14610a15578063f2fde38b14610a8c575b60008060008060006001600281111561012757fe5b600560149054906101000a900460ff16600281111561014257fe5b14151561014e57600080fd5b60003411151561015d57600080fd5b600060045411151561016e57600080fd5b3494506101a7670de0b6b3a764000061019968056bc75e2d6310000088610acf90919063ffffffff16565b610b0790919063ffffffff16565b9350600092506b033b2e3c9fd0803ce80000006101cf85600354610b1d90919063ffffffff16565b111561024c576101f66003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b915061022e670de0b6b3a764000061022068056bc75e2d6310000085610b0790919063ffffffff16565b610acf90919063ffffffff16565b90506102438186610b3990919063ffffffff16565b92508094508193505b61026184600354610b1d90919063ffffffff16565b6003819055506102886003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b6004819055506000831115610344573373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156102dd573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35b610395846000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a361045184600154610b1d90919063ffffffff16565b600181905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f193505050501580156104bf573d6000803e3d6000fd5b505050505050005b3480156104d357600080fd5b506104dc610b52565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561051c578082015181840152602081019050610501565b50505050905090810190601f1680156105495780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561056357600080fd5b506105a2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b8b565b604051808215151515815260200191505060405180910390f35b3480156105c857600080fd5b506105d1610c7d565b6040518082815260200191505060405180910390f35b3480156105f357600080fd5b50610652600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c87565b604051808215151515815260200191505060405180910390f35b34801561067857600080fd5b50610681611041565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b3480156106af57600080fd5b506106b8611046565b6040518082815260200191505060405180910390f35b3480156106da57600080fd5b506106e3611056565b6040518082815260200191505060405180910390f35b34801561070557600080fd5b50610744600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061105c565b604051808215151515815260200191505060405180910390f35b34801561076a57600080fd5b5061079f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112ed565b6040518082815260200191505060405180910390f35b3480156107c157600080fd5b506107ca611335565b005b3480156107d857600080fd5b506107e16113eb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561082f57600080fd5b50610838611411565b005b34801561084657600080fd5b5061084f6114ab565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561088f578082015181840152602081019050610874565b50505050905090810190601f1680156108bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108d657600080fd5b50610915600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114e4565b604051808215151515815260200191505060405180910390f35b34801561093b57600080fd5b50610944611703565b6040518082815260200191505060405180910390f35b34801561096657600080fd5b5061096f611709565b6040518082815260200191505060405180910390f35b34801561099157600080fd5b5061099a611716565b6040518082815260200191505060405180910390f35b3480156109bc57600080fd5b506109fb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611726565b604051808215151515815260200191505060405180910390f35b348015610a2157600080fd5b50610a76600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611922565b6040518082815260200191505060405180910390f35b348015610a9857600080fd5b50610acd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119a9565b005b600080831415610ae25760009050610b01565b8183029050818382811515610af357fe5b04141515610afd57fe5b8090505b92915050565b60008183811515610b1457fe5b04905092915050565b60008183019050828110151515610b3057fe5b80905092915050565b6000828211151515610b4757fe5b818303905092915050565b6040805190810160405280600981526020017f416c6578546f6b656e000000000000000000000000000000000000000000000081525081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600154905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610cc457600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d1157600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d9c57600080fd5b610ded826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e80826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f5182600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b601281565b6b033b2e3c9fd0803ce800000081565b60035481565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508083111561116d576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611201565b6111808382610b3990919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561139157600080fd5b60028081111561139d57fe5b600560149054906101000a900460ff1660028111156113b857fe5b141515156113c557600080fd5b6001600560146101000a81548160ff021916908360028111156113e457fe5b0217905550565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561146d57600080fd5b60028081111561147957fe5b600560149054906101000a900460ff16600281111561149457fe5b141515156114a157600080fd5b6114a9611b01565b565b6040805190810160405280600381526020017f414c54000000000000000000000000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561152157600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561156e57600080fd5b6115bf826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611652826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b60045481565b68056bc75e2d6310000081565b6b019d971e4fe8401e7400000081565b60006117b782600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a0557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611a4157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6002600560146101000a81548160ff02191690836002811115611b2057fe5b021790555060006004541115611c0a57611ba5600454600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015611c89573d6000803e3d6000fd5b505600a165627a7a723058205bbef016cc7699572f944871cb6f05e69915ada3a92a1d9f03a3fb434aac0c2b0029

Meer besonderhede oor slim kontrakte kan in die artikel gevind word: Wat is slim kontrakte in Ethereum.

Gevolgtrekking

Ons het die tegnologieë gelys waarop moderne blokkettings gebou is en hoe hulle met mekaar verbind is. Kom ons formuleer nou watter probleme met blokketting opgelos kan word, en watter oplossings op sy beste ondoeltreffend sal wees. Dus, die gebruik van blockchain is nie nodig as:

  • Transaksies word in 'n vertroude omgewing uitgevoer;
  • Die teenwoordigheid van 'n kommissie van tussengangers vererger nie die lewe van die deelnemers nie;
  • Deelnemers het nie eiendom wat as digitale bates voorgestel kan word nie;
  • Daar is geen verspreiding in digitale bates nie, m.a.w. die waarde word slegs deur een deelnemer besit of verskaf.

Wat hou die toekoms vir blockchain in? Nou kan ons net spekuleer oor moontlike maniere vir die ontwikkeling van blockchain-tegnologieë:

  • Blockchain sal dieselfde algemene databasistegnologie word as byvoorbeeld SQL of NoSQL vir die oplossing van sy spesifieke reeks probleme;
  • Blockchain sal 'n wydverspreide protokol word, soos HTTP vir die internet is;
  • Blockchain sal die basis word vir 'n nuwe finansiële en politieke stelsel op die planeet!

In die volgende deel gaan ons kyk na watter blokkettings tans bestaan ​​en hoekom dit in verskillende industrieë gebruik word.

Dis net die begin!

Bron: will.com

Voeg 'n opmerking