Hvað ættum við að byggja blockchain?

Öll mannkynssagan er samfellt ferli til að losa sig við hlekki og búa til nýjar, enn sterkari. (Nafnlaus höfundur)

Með því að greina fjölmörg blockchain verkefni (Bitshares, Hyperledger, Exonum, Ethereum, Bitcoin, osfrv.), Ég skil að frá tæknilegu sjónarhorni eru þau öll byggð á sömu meginreglum. Blokkkeðjur minna á hús sem, þrátt fyrir margvíslega hönnun, innréttingu og tilgang, hafa grunn, veggi, þak, glugga, hurðir sem tengjast hvert öðru á ákveðinn hátt. Og ef þú skilur grundvallarreglur byggingarhönnunar og þekkir eiginleika efnanna sem notuð eru, þá geturðu ákvarðað fyrirhugaðan tilgang tiltekins húss. Eins og er hefur komið upp staða með blockchain sem allir hafa heyrt um það, en fáir skilja arkitektúr og meginreglur rekstrarins. Þess vegna er misskilningur á því hvers vegna og hvernig það er skynsamlegt að nota blockchain tækni.

Í þessari grein munum við greina eiginleika og meginreglur sem eru sameiginlegar fyrir allar blokkakeðjur. Næst skulum við skoða vandamálin sem hægt er að leysa með blockchain og til að styrkja efnið skulum við byggja litla en raunverulega blockchain á sýndarsíðunni okkar!

Svo skulum muna hvaða vandamál blockchain leystu upphaflega.

Ég er viss um að margir munu segja um dreifðan, dreifðan, opinberan og óbreytanlegan gagnagrunn. En hvers vegna var allt þetta nauðsynlegt?

Ég kýs að byrja að læra hvaða tækni sem er með því að lesa staðlana, þar sem allar greinar og bækur um það efni sem verið er að rannsaka eru byggðar á þeim. En það eru engir blockchain staðlar sem stendur; ISO hefur aðeins búið til nefndir fyrir þróun þeirra. Eins og er hefur hvert opinbert blockchain verkefni sitt eigið hvítbókarskjal, sem er í meginatriðum tækniforskrift. Fyrsta opinberlega þekkta blockchain verkefnið er Bitcoin netið. Farðu á opinberu vefsíðu netsins og líta út þar sem allt byrjaði.

Blockchain áskorun

Svo, verkefnið sem blockchain leysti í Bitcoin brautryðjendakerfinu er að framkvæma traustan flutning á eignarhaldi á stafrænum eignum (eignum) í ótraustu umhverfi án milliliða. Til dæmis, í Bitcoin netinu, er stafræn eign bitcoin stafræn mynt. Og allar tæknilegar lausnir Bitcoin og annarra blockchains koma niður á að leysa þetta vandamál.

Vandamál sem blockchain leysir

Segjum sem svo að ákveðin fjármálastofnun segist hafa byggt upp tengslanet um allan heim með hjálp þess að hægt sé að millifæra peninga til hvers manns. Ætlarðu að trúa henni? Ef þessi stofnun er Visa eða MasterCard, trúir þú því líklegast, en ef tiltölulega séð AnonymousWorldMoney, þá muntu líklega ekki. Hvers vegna? En vegna þess að við vitum mjög vel hvernig dreifð kerfi eru gerð af einkafyrirtækjum, í hvaða tilgangi og til hvers það getur leitt. Við skulum skoða nánar vandamál slíkra kerfa og hvernig hægt er að leysa þau með blockchain tækni.

Segjum að í skilyrtu AnonymousWorldMoney séu netþjónar með gagnagrunna og það er gott ef þeir eru nokkrir í mismunandi gagnaverum. Þegar sendandi millifærir peninga er færsla skráð sem er afrituð á alla netþjóna og peningurinn berst til viðtakanda.

Hvað ættum við að byggja blockchain?

Í hugsjónum heimi virkar þetta kerfi frábærlega, en í okkar koma eftirfarandi vandamál upp:

  1. Vandinn við að bera kennsl á þátttakendur annars vegar og þörfina fyrir nafnleynd viðskipta hins vegar. Þeir. þú þarft að millifæra peninga til ákveðins viðtakanda og þannig að enginn viti af þessum viðskiptum nema þátttakendur í viðskiptunum. Bankar eru með reikningsnúmer og bankakort tengd tilteknum einstaklingi eða lögaðila og bankaleynd verndar færsluupplýsingar. Og hver ábyrgist að skilyrt AnonymousWorldMoney noti ekki persónuupplýsingar og viðskiptaupplýsingar í eigin tilgangi?
  2. Hvernig á að ganga úr skugga um að viðtakandinn hafi fengið nákvæmlega þá upphæð sem var millifærð til hans? Tiltölulega séð millifærði sendandinn $100 og viðtakandinn fékk $10. Sendandinn kemur á skrifstofu AnonymousWorldMoney með kvittun sína og afgreiðslumaðurinn sýnir útgáfu sína þar sem skrifað er að sendandinn hafi aðeins millifært $10.
  3. Vandamálið við ótraust umhverfi, til dæmis svindl sem kallast tvöföld eyðsla. Samviskulaus þátttakandi getur eytt stöðu sinni nokkrum sinnum þar til greiðslan er afrituð á alla netþjóna. CAP setning, auðvitað, enginn hætti við, og samkomulag mun á endanum nást, en einhver mun ekki fá peninga fyrir þjónustu eða veittar vörur. Þess vegna, ef það er ekki fullkomið traust á greiðslustofnuninni eða þátttakendum í viðskiptum, þá er nauðsynlegt að byggja upp net sem byggist ekki á trausti, heldur á dulmáli.
  4. Skilyrt AnonymousWorldMoney er með takmarkaðan fjölda netþjóna sem gætu orðið ótiltækir óviljandi eða vegna illgjarns ásetnings.
  5. AnonymousWorldMoney mun taka sína eigin áþreifanlega þóknun.
  6. Möguleiki á stjórn. Við rekstur Bitcoin kom í ljós að fólk vill ekki aðeins flytja mynt hvert til annars, heldur einnig að athuga ýmis skilyrði fyrir viðskiptunum, forrita vinnusviðsmyndir, framkvæma sjálfkrafa aðgerðir eftir skilyrðum osfrv.

Hvernig blockchain leysir þessi vandamál

  1. Auðkenning þátttakenda fer fram með því að nota par af lyklum: einka og opinbert, og stafræna undirskriftaralgrímið auðkennir sendanda og viðtakanda einstaklega og skilur auðkenni þeirra eftir nafnlaus.
  2. Færslum er safnað í blokkir, kjötkássa blokkarinnar er reiknuð út og færð inn í næsta blokk. Þessi röð af upptöku kjötkássa í blokkum gefur blockchain tækninni nafn sitt, og það gerir það líka ómögulegt að ómerkjanlega breyta / eyða blokkum eða einstökum viðskiptum úr blokkum. Þannig, ef viðskipti eru innifalin í blockchain, geturðu verið viss um að gögn þess haldist óbreytt.
  3. Komið er í veg fyrir tvöfalt eyðslusvik með því að ná samstöðu um netið um hvaða gögn eigi að telja gild og hverjum eigi að henda. Í Bitcoin netinu er samstaða náð með sönnun á vinnu (PoW).
  4. Áreiðanleiki netkerfisins er náð með því að blockchain er opinber, þar sem hver þátttakandi getur keyrt sinn eigin hnút, fengið fullkomið afrit af blockchain og þar að auki sjálfstætt byrjað að athuga hvort viðskipti séu rétt. Það skal tekið fram að nútíma blokkkeðjur gera það mögulegt að byggja ekki aðeins opinberar (opnar) heldur einnig einkareknar (lokaðar) blokkkeðjur, svo og notkun samsettra kerfa.
  5. Blockchain losnar ekki alveg við þóknun, vegna þess að... þú þarft að borga fólkinu sem styður netið, en í blockchain er þörf fyrir þóknun sannað svo sannfærandi að enginn vafi leikur á nauðsyn þess.
  6. Nútíma blockchains hafa getu til að innleiða viðskiptarökfræði, sem í blockchain er kallaður Smart Contracts. Rökfræði snjallsamninga er útfærð á ýmsum háþróuðum tungumálum.

Næst munum við íhuga þessar lausnir nánar.

Blockchain arkitektúr

Blockchain íhlutir

Hver þátttakandi getur ræst sinn eigin hnút með fullu afriti af blockchain (fullur hnútur). Fullir hnútar sem geta skráð viðskipti á blockchain eru kallaðir samstöðuhnútar (vitni) eða námumenn (námumaður). Fullir hnútar sem aðeins athuga réttmæti viðskipta eru kallaðir endurskoðunarhnútar (endurskoðun). Léttir viðskiptavinir (léttir viðskiptavinir) geyma ekki full afrit af blockchain, heldur hafa samskipti við netið með því að nota fulla hnúta.
Flestir notendur nota létta viðskiptavini eða vefveski til að gera viðskipti. Allir hnútar eru tengdir hver öðrum. Með þessu setti af þáttum verður netarkitektúrinn stöðugri:

Hvað ættum við að byggja blockchain?

Lífsferill viðskipta

Við skulum skoða líftíma viðskiptanna og skipta því niður stykki fyrir stykki:

Hvað ættum við að byggja blockchain?

Blockchain tækni

Við skulum fjalla nánar um tæknilegar lausnir og tengsl þeirra hver við aðra.

Auðkenning

Sérhver blockchain viðskipti verða að vera stafræn undirrituð. Þess vegna, til að ljúka viðskiptum, verður hver þátttakandi að hafa lykilpar: einka / opinbert. Stundum er lyklapar kallað veski, vegna þess að lyklarnir eru einstaklega tengdir einstöku stafrænu heimilisfangi og jafnvægi þátttakanda. Í raun og veru eru lyklar og heimilisföng bara talnastrengir í mismunandi talnakerfum. Dæmi um lykla og veskisföng:

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

Til að búa til stafræna undirskrift í blokkkeðjum er notað reiknirit byggt á sporöskjulaga ferlum: Elliptic Curve Digital Signature Algorithm (ECDSA). Til að það virki er einkalykillinn (256 bita númer) venjulega tekinn af handahófi. Fjöldi lykilvalkosta er 2 í krafti 256, svo við getum talað um praktískan ómöguleika á að passa við gildi einkalykla.

Næst er opinberi lykillinn fengin úr einkalyklinum með því að margfalda gildi hans með hnitum punkts sem staðsettur er á sporöskjulaga ferilnum, sem leiðir til hnit nýs punkts á sama ferlinum. Þessi aðgerð tryggir að þú færð lyklapar sem hentar fyrir stafræna undirritun viðskipta. Að lokum er veskis heimilisfangið einstaklega fengið frá almenningslyklinum.

Það eru fullt af greinum með upplýsingum um dulmálið sem notað er í blockchain, til dæmis: Bitcoin í hnotskurn – Dulritun

Einkalykillinn verður að vera algjört trúnaðarmál og geymdur á öruggan hátt. Opinberi lykillinn er öllum kunnur. Ef einkalykillinn týnist er ekki hægt að endurheimta aðgang að eigninni (myntunum) og peningarnir glatast að eilífu. Þess vegna er það verkefni að geyma einkalykla á öruggan hátt afar viðeigandi, vegna þess að Þetta er ekki banki þar sem þú getur alltaf komið með vegabréfið þitt og endurheimt reikninginn þinn. Það er heil iðnaður fyrir framleiðslu á svokölluðum köldum dulritunarveski, svipað og flassdrif:

Hvað ættum við að byggja blockchain?

eða þú getur notað áreiðanlegri aðferðir, til dæmis að stimpla gildi einkalykilsins á tákn:

Hvað ættum við að byggja blockchain?

Viðskipti

Frekari upplýsingar um uppbyggingu viðskipta er að finna í greininni Bitcoin í hnotskurn – viðskipti. Það er mikilvægt fyrir okkur að skilja að hver viðskipti hafa að minnsta kosti eftirfarandi gögn:

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

Næst eru viðskiptin undirrituð með einkalykli og send út (sjá upplýsingar um virkni samskiptareglunnar Bitcoin í hnotskurn-bókun) til allra hnúta í blokkakeðjunni sem athuga hvort viðskipti séu gild. Reikniritið um sannprófun viðskipta er ekki léttvægt og inniheldur tveir tugir þrepa.

Færslublokkir

Eftir að hafa athugað gildi viðskipta mynda hnútar blokkir úr þeim. Auk viðskipta er kjötkássa fyrri blokkar og tala (Nonce counter) skrifað inn í blokkina og kjötkássa núverandi blokkar er reiknuð út með SHA-256 reikniritinu. Hassið verður að hafa komið á flækjuskilyrðum. Til dæmis, í Bitcoin netinu, er erfiðleika kjötkássa sjálfkrafa breytt á 2 vikna fresti eftir krafti netsins þannig að blokk myndast um það bil einu sinni á 10 mínútna fresti. Flækjustigið ræðst af eftirfarandi skilyrði: kjötkássa sem finnst verður að vera minni en fyrirfram ákveðin tala. Ef þetta skilyrði er ekki uppfyllt, þá er 1 bætt við Nonce, og vinnan við að reikna kjötkássa er endurtekin. Til að velja kjötkássa er Nonce reiturinn notaður, vegna þess að Þetta eru einu gögnin í reitnum sem hægt er að breyta; restin verður að vera óbreytt. Gilt kjötkássa verður að hafa ákveðinn fjölda af núllum á undan, eins og einn af raunverulegu kjötkássunum:

000000000000000000000bf03212e7dd1176f52f816fa395fc9b93c44bc11f91

Að finna kjötkássa er sönnun þess að unnið er (Proof-of-Work, PoW) fyrir Bitcoin eða Ethereum netkerfin. Ferlið við að finna kjötkássa kallast námuvinnsla, svipað og gullnám. Nafnið skilgreinir alveg nákvæmlega kjarna ferlisins, vegna þess að það er einföld leit að valmöguleikum og ef einhver finnur hass sem hentar þá er þetta virkilega heppni. Þetta er eins og að finna alvöru gullmola í tonnum af úrgangi. Blokkverðlaunin eru nú 12.5 BTC og ef þú margfaldar þau með núverandi Bitcoin gengi upp á $3900 færðu meira en kíló af hreinu gulli. Það er eitthvað til að berjast fyrir!

Eftir að hafa fundið kjötkássa, eru kubburinn og kjötkássalinn sjálft skrifaður í blokkakeðjuna sem næsta blokk. Nánari upplýsingar um uppbyggingu blokka er að finna í greininni Bitcoin í hnotskurn - Blockchain, og hér að neðan er einfölduð skýringarmynd:

Hvað ættum við að byggja blockchain?

Blockchain byrjar með blokk sem hefur ekki enn kjötkássa fyrri blokkar. Það er aðeins ein slík blokk í blockchain og hefur sitt eigið nafn Genesis blokk. Kubbarnir sem eftir eru hafa sömu uppbyggingu og eru aðeins mismunandi hvað varðar fjölda viðskipta. Raunveruleg viðskipti og blokkir sem nú eru búnar til í Bitcoin eða Ethereum er hægt að skoða í Block Explorer.

Stærð blokka í Bitcoin er takmörkuð við 1MB og með lágmarksupplýsingamagni í um 200 bæti viðskiptum getur hámarksfjöldi viðskipta í blokk verið um 6000. Héðan, við the vegur, fylgir frammistöðu Bitcoin, sem allir hlæja að: blokk er mynduð um það bil einu sinni á 10 mínútna fresti * 60 sekúndur = 600 sekúndur, sem gefur formlega frammistöðu um 10 TPS. Þó að í raun sé þetta ekki framleiðni, heldur vísvitandi útfært reiknirit vinnu. Í Ethereum, fyrir samkeppni, gerðu þeir einfaldlega blokkarframleiðslutímann 15 sekúndur. og framleiðni jókst formlega. Þess vegna, í blockchains sem nota PoW sem samstöðu, er ekkert vit í að bera saman árangur yfirleitt, vegna þess það fer beint eftir því hversu flókið skyndiminni útreikningurinn er, sem hægt er að úthluta á hvaða gildi sem er.

Gafflar

Hvað gerist ef, til dæmis, nokkrir hnútar fundu kjötkássa sem uppfylla margbreytileikaskilyrðin, en eru mismunandi að verðmæti (með öðrum orðum, þeir komust að mismunandi samstöðu) og skrifuðu blokkir í blockchain? Við skulum sjá hvernig blockchain verndar gegn þessu ástandi. Í þessu tilviki kemur fram svokallaður gaffli og blockchain hefur tvær útgáfur af keðjunni:

Hvað ættum við að byggja blockchain?

Hvað gerist næst? Næst byrjar hluti netkerfisins að vinna á blokk N+2 úr einni keðju og hluti frá annarri:

Hvað ættum við að byggja blockchain?

Einn af þessum kubbum verður fundinn fyrr og sendur til blokkarkeðjunnar, og þá, samkvæmt reglum, verður blokkakeðjan að skipta yfir í lengri keðju og hætta við öll viðskipti úr valblokkinni:

Hvað ættum við að byggja blockchain?

Á sama tíma getur komið upp sú staða að viðskipti þátttakanda hafi aðeins verið í einum af gaffalkubbunum, sem var hætt við. Þess vegna, til að vera viss um að viðkomandi viðskipti séu skráð í blockchain, eru almennar ráðleggingar - áður en þú treystir viðskiptunum ættir þú að bíða þar til næstu blokkir eru bætt við blockchain. Ráðleggingar um hversu margar blokkir eigi að bíða eftir mismunandi blokkakeðjum eru mismunandi. Til dæmis, fyrir Bitcoin netið er lágmarkið 2 blokkir, hámarkið er 6.

Sama mynd með blokkgafflum mun sjást meðan á svokölluðu 51% árásinni stendur - þetta er þegar hópur námuverkamanna reynir að rækta aðra blokkkeðju og reyna að hætta við keðjuna með sviksamlegum viðskiptum sínum. Þó að eins og er, í stað svika, er það arðbærara að eyða krafti þínum í heiðarlega námuvinnslu.

Samstaða

Til að taka upp blokk á blockchain verður netið að ná samstöðu. Við skulum muna það verkefni að ná samstöðu í tölvusamskiptanetum. Vandamálið er sett fram sem verkefni býsanska hershöfðingjanna BFT (Býsantískt umburðarlyndi). Með því að sleppa myndrænni lýsingu á vandamálum býsanska hersins er hægt að móta vandamálið á eftirfarandi hátt: hvernig geta nethnútar komið að sameiginlegri niðurstöðu ef sumir nethnútar geta vísvitandi brenglað þá. Núverandi reiknirit til að leysa BFT vandamálið sýna að netkerfið getur virkað rétt ef það eru minna en 1/3 svikara. Af hverju hefur BFT samstaða ekki verið beitt á Bitcoin netið? Af hverju var nauðsynlegt að nota PoW? Það eru nokkrar ástæður:

  • BFT virkar vel með litlum föstum hnútum, en í opinberri blockchain er fjöldi hnúta ófyrirsjáanlegur og þar að auki er hægt að kveikja og slökkva á hnútum af handahófi.
  • Nauðsynlegt er að hvetja fólk til að setja af stað blockchain hnúta. Til þess þarf að umbuna fólki. Í BFT er formlega ekkert til að fá verðlaun fyrir, en hvað verðlaunin eru fyrir í PoW er öllum ljóst á leiðandi stigi: fyrir rafmagnið sem örgjörvinn neytir í því ferli að finna blokkhassið.

Til viðbótar við PoW eru nokkrar aðrar samstöður sem eru notaðar í nútíma blockchains, til dæmis:

  • PoS (Proof-of-Stake) - á blockchain Hyperledger
  • DPoS (Delegated Proof-of-Stake) - á blockchain BitShares
  • Breytingar á BFT: SBFT (Simplified BFT) og PBFT (Practical BFT), til dæmis í blockchain Exonum

Við skulum dvelja aðeins við PoS samstöðuna, vegna þess að... Það er PoS og afbrigði þess sem eru mest útbreidd í einkareknum blokkkeðjum. Hvers vegna í einrúmi? Annars vegar eru eiginleikar PoS betri miðað við PoW, vegna þess að Til að ná samstöðu þarf minni tölvuauðlindir, sem þýðir að hraðinn við að skrifa gögn í blockchain eykst. En á hinn bóginn hefur PoS fleiri tækifæri til svika, svo til að hlutleysa þetta verða allir þátttakendur í blockchain að vera þekktir.

PoS samstaða byggist á vali á hnút sem getur skrifað blokk með færslum í blokkakeðjuna eftir fjárhæðinni á reikningnum, eða öllu heldur, ekki á reikningnum, heldur í veðinu, þ.e. Því meira fé sem þú hefur að veði, því líklegra er að netið velji hnútinn þinn til að skrifa blokk. Innborgunin verður ekki endurgreidd ef blokkin er ógild. Þetta veitir vernd gegn svikum. Það eru eftirfarandi afbrigði af PoS:

  • Samstaða um Delegated PoS (DPoS) skiptir þátttakendum í „kjósendur“ og „fullgildingaraðila“. Mynthafar (atkvæðisbærir þátttakendur) framselja vald sitt til að sannreyna og skrá viðskipti á blockchain til annarra þátttakenda. Þannig vinna löggildingaraðilar alla reiknivinnu og fá verðlaun fyrir það og nærvera atkvæðagreiðenda tryggir heiðarleika löggildingaraðila, því þeim er hægt að breyta hvenær sem er.
  • LPoS (Leased Proof-of-Stake) samstaða gerir þér kleift að leigja fjármuni þína til annarra hnúta svo að þeir hafi betri möguleika á að staðfesta blokkir. Það. Þú getur fengið þóknun fyrir viðskipti án þess að taka þátt í raunverulegri sannprófun viðskipta og loka námuvinnslu.

Það eru ýmsar aðrar samstöður sem eru ekki enn notaðar mikið, ég ætla bara að skrá þær hér til upplýsingar, og yfirlit yfir samstöðu reikniritina sjálfa er til dæmis að finna í greininni: Consensus Reiknirit í Blockchain.

  • PoET (Proof-of-Elapsed Time)
  • PoC (Proof-of-Capacity)
  • PoB (sönnun um bruna)
  • PoWeight (Proof-of-Weight)
  • PoA (Proof-of-Activity) – PoW + PoS
  • PoI (Proof-of-importans)

Áreiðanleika- og dreifingarlíkön blockchains

Opinber blockchain

Sjálfbærni Almenn eða öðru nafni Leyfislaus blockchain Þetta er náð með því að leyfa hverjum sem er að tengjast og skoða upplýsingar eða jafnvel tengja sinn eigin hnút og traust er byggt á PoW samstöðu.

Einka blockchain

Einka eða Blockchain með einkaleyfi. Í þessum blokkakeðjum hefur aðeins ákveðinn hópur þátttakenda (samtök eða fólk) aðgang að upplýsingum. Slíkar blokkakeðjur eru smíðaðar af stofnunum með það að markmiði að auka heildarávinning eða skilvirkni. Áreiðanleiki þeirra er tryggður með sameiginlegum markmiðum þátttakenda og PoS og BFT samstöðu reiknirit.

Blockchain Consortium

það Consortium eða Almannaleyfi blockchain. Þetta eru blokkkeðjur sem allir geta tengst til að skoða, en þátttakandi getur bætt við upplýsingum eða tengt hnútinn sinn aðeins með leyfi annarra þátttakenda. Slíkar blokkakeðjur eru byggðar af stofnunum til að auka traust viðskiptavina eða neytenda vöru eða samfélagsins í heild. Hér er áreiðanleiki einnig náð með nærveru trausts milli þátttakenda og sömu PoS og BFT samstöðu reiknirit.

Smart samningar

Blokkkeðjur sem innleiddar eru eftir Bitcoin hafa, að einu eða öðru marki, bætt við getu til að framkvæma snjalla samninga. Í meginatriðum er snjallsamningur viðskipti þar sem forritskóði er settur til framkvæmdar. Snjallir samningar á Ethereum netinu eru framkvæmdir í EVM (Ethereum Virtual Machine). Til að hefja framkvæmd snjallsamnings verður hann að vera beinlínis hleypt af stokkunum með öðrum viðskiptum, eða forsendur fyrir framkvæmd verða að vera uppfylltar. Niðurstöður framkvæmdar snjallsamningsins verða einnig skráðar í blockchain. Mögulegt er að taka á móti gögnum utan blockchain en afar takmarkað.

Hvaða viðskiptarökfræði er hægt að innleiða með því að nota snjallsamning? Reyndar er ekki mikið um, til dæmis að athuga aðstæður með því að nota gögn úr blockchain, breyta eigendum stafrænna eigna eftir þessum aðstæðum, skrá gögn í varanlega geymslu innan blockchain. Rökfræðin er útfærð á sérstöku hástigi tungumáli Solidity.

Klassískt dæmi um virkni sem er útfærð með snjöllum samningum er útgáfa tákna fyrir ICO. Til dæmis innleiddi ég snjöllan samning um að gefa út hóflega 500 AlexToken. By hlekkur í Etherscan er

frumkóði snjallsamningsins á Solidity tungumálinu

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

og tvöfalda framsetningin eins og netið sér hana

60806040526000600355600060045533600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560146101000a81548160ff021916908360028111156200006f57fe5b0217905550620001036b019d971e4fe8401e74000000600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200024a6401000000000262000b1d179091906401000000009004565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620001986b019d971e4fe8401e740000006001546200024a6401000000000262000b1d179091906401000000009004565b6001819055506b033b2e3c9fd0803ce8000000600481905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6b019d971e4fe8401e740000006040518082815260200191505060405180910390a362000267565b600081830190508281101515156200025e57fe5b80905092915050565b611cb880620002776000396000f300608060405260043610610112576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146104c7578063095ea7b31461055757806318160ddd146105bc57806323b872dd146105e7578063313ce5671461066c578063355274ea146106a3578063518ab2a8146106ce57806366188463146106f957806370a082311461075e57806389311e6f146107b55780638da5cb5b146107cc578063903a3ef61461082357806395d89b411461083a578063a9059cbb146108ca578063bf5839031461092f578063c7876ea41461095a578063cbcb317114610985578063d73dd623146109b0578063dd62ed3e14610a15578063f2fde38b14610a8c575b60008060008060006001600281111561012757fe5b600560149054906101000a900460ff16600281111561014257fe5b14151561014e57600080fd5b60003411151561015d57600080fd5b600060045411151561016e57600080fd5b3494506101a7670de0b6b3a764000061019968056bc75e2d6310000088610acf90919063ffffffff16565b610b0790919063ffffffff16565b9350600092506b033b2e3c9fd0803ce80000006101cf85600354610b1d90919063ffffffff16565b111561024c576101f66003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b915061022e670de0b6b3a764000061022068056bc75e2d6310000085610b0790919063ffffffff16565b610acf90919063ffffffff16565b90506102438186610b3990919063ffffffff16565b92508094508193505b61026184600354610b1d90919063ffffffff16565b6003819055506102886003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b6004819055506000831115610344573373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156102dd573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35b610395846000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a361045184600154610b1d90919063ffffffff16565b600181905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f193505050501580156104bf573d6000803e3d6000fd5b505050505050005b3480156104d357600080fd5b506104dc610b52565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561051c578082015181840152602081019050610501565b50505050905090810190601f1680156105495780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561056357600080fd5b506105a2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b8b565b604051808215151515815260200191505060405180910390f35b3480156105c857600080fd5b506105d1610c7d565b6040518082815260200191505060405180910390f35b3480156105f357600080fd5b50610652600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c87565b604051808215151515815260200191505060405180910390f35b34801561067857600080fd5b50610681611041565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b3480156106af57600080fd5b506106b8611046565b6040518082815260200191505060405180910390f35b3480156106da57600080fd5b506106e3611056565b6040518082815260200191505060405180910390f35b34801561070557600080fd5b50610744600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061105c565b604051808215151515815260200191505060405180910390f35b34801561076a57600080fd5b5061079f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112ed565b6040518082815260200191505060405180910390f35b3480156107c157600080fd5b506107ca611335565b005b3480156107d857600080fd5b506107e16113eb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561082f57600080fd5b50610838611411565b005b34801561084657600080fd5b5061084f6114ab565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561088f578082015181840152602081019050610874565b50505050905090810190601f1680156108bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108d657600080fd5b50610915600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114e4565b604051808215151515815260200191505060405180910390f35b34801561093b57600080fd5b50610944611703565b6040518082815260200191505060405180910390f35b34801561096657600080fd5b5061096f611709565b6040518082815260200191505060405180910390f35b34801561099157600080fd5b5061099a611716565b6040518082815260200191505060405180910390f35b3480156109bc57600080fd5b506109fb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611726565b604051808215151515815260200191505060405180910390f35b348015610a2157600080fd5b50610a76600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611922565b6040518082815260200191505060405180910390f35b348015610a9857600080fd5b50610acd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119a9565b005b600080831415610ae25760009050610b01565b8183029050818382811515610af357fe5b04141515610afd57fe5b8090505b92915050565b60008183811515610b1457fe5b04905092915050565b60008183019050828110151515610b3057fe5b80905092915050565b6000828211151515610b4757fe5b818303905092915050565b6040805190810160405280600981526020017f416c6578546f6b656e000000000000000000000000000000000000000000000081525081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600154905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610cc457600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d1157600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d9c57600080fd5b610ded826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e80826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f5182600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b601281565b6b033b2e3c9fd0803ce800000081565b60035481565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508083111561116d576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611201565b6111808382610b3990919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561139157600080fd5b60028081111561139d57fe5b600560149054906101000a900460ff1660028111156113b857fe5b141515156113c557600080fd5b6001600560146101000a81548160ff021916908360028111156113e457fe5b0217905550565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561146d57600080fd5b60028081111561147957fe5b600560149054906101000a900460ff16600281111561149457fe5b141515156114a157600080fd5b6114a9611b01565b565b6040805190810160405280600381526020017f414c54000000000000000000000000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561152157600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561156e57600080fd5b6115bf826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611652826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b60045481565b68056bc75e2d6310000081565b6b019d971e4fe8401e7400000081565b60006117b782600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a0557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611a4157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6002600560146101000a81548160ff02191690836002811115611b2057fe5b021790555060006004541115611c0a57611ba5600454600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015611c89573d6000803e3d6000fd5b505600a165627a7a723058205bbef016cc7699572f944871cb6f05e69915ada3a92a1d9f03a3fb434aac0c2b0029

Nánari upplýsingar um snjalla samninga er að finna í greininni: Hvað eru snjallir samningar í Ethereum.

Ályktun

Við höfum skráð tæknina sem nútíma blockchains eru byggð á og hvernig þær tengjast hver öðrum. Nú skulum við móta hvaða vandamál er hægt að leysa með blockchain og hvaða lausnir verða í besta falli árangurslausar. Svo, notkun blockchain er ekki nauðsynleg ef:

  • Viðskipti fara fram í traustu umhverfi;
  • Tilvist umboðs milliliða versnar ekki líf þátttakenda;
  • Þátttakendur hafa ekki eign sem hægt er að tákna sem stafrænar eignir;
  • Engin dreifing er í stafrænum eignum, þ.e. verðmætin eru í eigu eða afhent af aðeins einum þátttakanda.

Hvað ber framtíðin í skauti sér fyrir blockchain? Nú getum við aðeins spáð í mögulegar leiðir til þróunar blockchain tækni:

  • Blockchain verður sama algenga gagnagrunnstæknin og til dæmis SQL eða NoSQL til að leysa tiltekið úrval vandamála;
  • Blockchain mun verða útbreidd siðareglur, eins og HTTP er fyrir internetið;
  • Blockchain mun verða grunnurinn að nýju fjármála- og stjórnmálakerfi á jörðinni!

Í næsta hluta munum við skoða hvaða blockchains eru til og hvers vegna þær eru notaðar í mismunandi atvinnugreinum.

Þetta er aðeins byrjunin!

Heimild: www.habr.com

Bæta við athugasemd