Kynning á snjöllum samningum

Í þessari grein munum við skoða hvað snjallsamningar eru, hvað þeir eru, við kynnumst mismunandi snjallsamningsvettvangi, eiginleikum þeirra og ræðum líka hvernig þeir virka og hvaða kosti þeir geta haft í för með sér. Þetta efni mun nýtast mjög vel fyrir lesendur sem ekki þekkja vel efnið um snjalla samninga, en vilja komast nær því að skilja það.

Venjulegur samningur vs. snjall samningur

Áður en við förum ofan í smáatriðin skulum við taka dæmi um muninn á venjulegum samningi, sem er tilgreindur á pappír, og snjallsamningi, sem er táknaður stafrænt.

Kynning á snjöllum samningum

Hvernig virkaði þetta áður en snjöllir samningar komu til sögunnar? Ímyndaðu þér hóp fólks sem vill setja ákveðnar reglur og skilyrði fyrir dreifingu verðmæta, sem og ákveðið kerfi til að tryggja framkvæmd þessarar dreifingar í samræmi við gefnar reglur og skilyrði. Síðan komu þeir saman, bjuggu til blað þar sem þeir skrifuðu niður auðkenni sín, skilmálana, gildin sem um ræðir, dagsettu þau og undirrituðu þau. Þessi samningur var einnig vottaður af traustum aðila, svo sem lögbókanda. Ennfremur fór þetta fólk í mismunandi áttir með pappírsafritið sitt af slíkum samningi og fór að framkvæma nokkrar aðgerðir sem gætu ekki samsvarað samningnum sjálfum, það er, þeir gerðu eitt, en á pappír var það vottað að þeir ættu að gera eitthvað allt öðruvísi. Og hvernig á að komast út úr þessu ástandi? Reyndar þarf einn meðlima hópsins að taka þetta blað, taka sönnunargögn, fara með það fyrir dómstóla og ná samræmi milli samningsins og raunverulegra aðgerða. Oft er erfitt að ná sanngjörnum framkvæmd þessa samnings, sem leiðir til óþægilegra afleiðinga.

Hvað er hægt að segja um snjalla samninga? Þeir sameina bæði möguleikann á að skrifa skilmála samningsins og fyrirkomulagið fyrir stranga framkvæmd þeirra. Ef skilyrðin hafa verið sett og samsvarandi viðskipti eða beiðni hefur verið undirrituð, þá er ekki lengur hægt að breyta skilyrðum eða hafa áhrif á framkvæmd þeirra þegar búið er að samþykkja þá beiðni eða viðskipti.

Það er einn löggildingaraðili eða heilt net, auk gagnagrunns sem geymir alla snjalla samninga sem voru lagðir fram til framkvæmdar í ströngri tímaröð. Það er líka mikilvægt að þessi gagnagrunnur verði að innihalda öll kveikjuskilyrði fyrir framkvæmd snjallsamningsins. Þar að auki verður það að taka tillit til þess verðmætis sem dreifing þeirra er lýst í samningnum. Ef þetta á við um einhvern stafrænan gjaldmiðil, þá ætti þessi gagnagrunnur að taka tillit til þess.

Með öðrum orðum, sannprófunaraðilar snjallsamninga verða að hafa aðgang að öllum gögnum sem snjallsamningurinn starfar á. Til dæmis ætti að nota einn gagnagrunn til að gera samtímis grein fyrir stafrænum gjaldmiðlum, stöðu notenda, notendafærslum og tímastimplum. Þá, í snjöllum samningi, getur skilyrðið verið staða notandans í ákveðnum gjaldmiðli, komu ákveðins tíma eða sú staðreynd að ákveðin viðskipti hafa verið framkvæmd, en ekkert meira.

Skilgreining á snjöllum samningi

Almennt séð var hugtakið sjálft búið til af vísindamanninum Nick Szabo og var fyrst notað árið 1994 og var skjalfest árið 1997 í grein sem lýsir hugmyndinni um snjalla samninga.

Snjallir samningar fela í sér að einhver sjálfvirkni í verðmætadreifingu er framkvæmd, sem getur aðeins verið háð þeim skilyrðum sem eru fyrirfram ákveðin fyrirfram. Í sinni einföldustu mynd lítur það út eins og samningur með strangt skilgreindum skilmálum, sem er undirritaður af ákveðnum aðilum.

Snjallir samningar eru hannaðir til að lágmarka traust til þriðja aðila. Stundum er ákvörðunarmiðstöðin sem allt veltur á algjörlega útilokuð. Auk þess er auðveldara að endurskoða slíka samninga. Þetta er afleiðing af sumum hönnunareiginleikum slíks kerfis, en oftast skiljum við með snjöllum samningi dreifð umhverfi og tilvist aðgerða sem gerir hverjum sem er kleift að greina gagnagrunninn og framkvæma fulla endurskoðun á framkvæmd samninga. Þetta tryggir vernd gegn afturvirkum gagnabreytingum sem myndu hafa í för með sér breytingar á framkvæmd samningsins sjálfs. Stafræn væðing flestra ferla við gerð og ræsingu snjallsamnings einfaldar oft tæknina og kostnaðinn við innleiðingu þeirra.

Einfalt dæmi - Escrow þjónusta

Við skulum skoða mjög einfalt dæmi. Það mun hjálpa þér að komast nær því að skilja virkni snjallsamninga, auk þess að skilja betur í hvaða tilvikum ætti að nota þá.

Kynning á snjöllum samningum

Það er líka hægt að útfæra það með því að nota Bitcoin, þó að nú sé Bitcoin varla hægt að kalla fullgildan vettvang fyrir snjalla samninga. Svo erum við með kaupanda og erum með netverslun. Viðskiptavinur vill kaupa skjá frá þessari verslun. Í einfaldasta tilviki klárar kaupandi og sendir greiðslu og vefverslunin tekur við henni, staðfestir hana og sendir síðan vörurnar. Hins vegar er þörf á miklu trausti við þessar aðstæður - kaupandinn verður að treysta netversluninni fyrir allan kostnaðinn við skjáinn. Þar sem netverslun getur haft lítið orðspor í augum kaupanda er hætta á að af einhverjum ástæðum, eftir að hafa tekið við greiðslunni, hafni verslunin þjónustu og sendir ekki vörurnar til kaupanda. Þess vegna spyr kaupandinn spurningarinnar (og í samræmi við það spyr netverslunin þessarar spurningar) hvað sé hægt að beita í þessu tilfelli til að lágmarka slíka áhættu og gera slík viðskipti áreiðanlegri.

Þegar um Bitcoin er að ræða er hægt að leyfa kaupanda og seljanda að velja sjálfstætt sáttasemjara. Það eru margir sem taka þátt í að leysa umdeild mál. Og þátttakendur okkar geta valið af almennum lista yfir sáttasemjara þann sem þeir munu treysta. Saman búa þeir til 2 af 3 fjölmerkis heimilisfang þar sem það eru þrír lyklar og tvær undirskriftir með hvaða tveimur lyklum sem er eru nauðsynlegar til að eyða mynt frá því heimilisfangi. Einn lykill mun tilheyra kaupanda, annar í netverslun og sá þriðji til sáttasemjara. Og til slíks multisignature heimilisfangs sendir kaupandinn þá upphæð sem þarf til að greiða fyrir skjáinn. Nú, þegar seljandinn sér að peningar eru lokaðir í nokkurn tíma á multisignature heimilisfangi sem er háð honum, getur hann örugglega sent skjáinn í pósti.

Því næst tekur kaupandi við pakkanum, skoðar vörurnar og tekur ákvörðun um endanleg kaup. Hann getur verið algjörlega sammála þeirri þjónustu sem veitt er og undirritað viðskiptin með lyklinum sínum þar sem hann flytur mynt frá fjölundirskriftarheimilinu til seljanda eða hann gæti verið ósáttur við eitthvað. Í öðru tilvikinu hefur hann samband við sáttasemjara til að setja saman aðra færslu sem mun dreifa þessum myntum á annan hátt.

Segjum sem svo að skjárinn hafi komið aðeins rispaður og í settinu fylgdi ekki snúra til að tengja við tölvuna, þó að á heimasíðu vefverslunarinnar hafi verið sagt að kapalinn ætti að vera með í settinu. Þá safnar kaupandinn þeim sönnunargögnum sem nauðsynleg eru til að sanna fyrir sáttasemjara að hann hafi verið blekktur í þessum aðstæðum: hann tekur skjáskot af síðunni, tekur mynd af póstkvittuninni, tekur mynd af rispunum á skjánum og sýnir að innsiglið var brotnaði og snúran var dregin út. Netverslunin safnar aftur á móti sönnunargögnum sínum og flytur til sáttasemjara.

Sáttasemjari hefur áhuga á að fullnægja samtímis reiði kaupanda og hagsmunum netverslunar (það kemur í ljós hvers vegna síðar). Um er að ræða viðskipti þar sem mynt frá fjölundirskriftarheimilisfangi verður eytt í einhverju hlutfalli milli kaupanda, netverslunar og sáttasemjara, þar sem hann tekur hluta fyrir sig sem verðlaun fyrir vinnu sína. Segjum að 90% af heildarupphæðinni fari til seljanda, 5% til sáttasemjara og 5% bætur til kaupanda. Sáttasemjari skrifar undir þessa færslu með lyklinum sínum, en ekki er hægt að beita því enn, því það þarf tvær undirskriftir, en aðeins ein er þess virði. Það sendir slík viðskipti bæði til kaupanda og seljanda. Ef að minnsta kosti einn þeirra er ánægður með þennan möguleika til að endurdreifa mynt, þá verða viðskiptin fyrirfram undirrituð og dreift á netið. Til að sannreyna það er nóg að annar aðili viðskiptanna samþykki val sáttasemjara.

Mikilvægt er í upphafi að velja sáttasemjara þannig að báðir þátttakendur treysti honum. Í þessu tilviki mun hann starfa óháð hagsmunum eins eða annars og leggja hlutlægt mat á aðstæður. Ef sáttasemjari býður ekki upp á möguleika á að dreifa mynt sem fullnægir að minnsta kosti einum þátttakanda, þá geta bæði kaupandinn og netverslunin, eftir að hafa komið sér saman um, sent myntin á nýtt fjölundirskriftarfang með því að setja tvær undirskriftir sínar. Nýja fjölundirskriftar heimilisfangið verður sett saman með öðrum sáttasemjara, sem gæti verið hæfari í málinu og veitt betri kost.

Dæmi með heimavist og ísskáp

Við skulum skoða flóknara dæmi sem sýnir getu snjallsamnings með skýrari hætti.

Kynning á snjöllum samningum

Segjum að það séu þrír strákar sem nýlega fluttu inn í sama heimavist. Þau þrjú hafa áhuga á að kaupa ísskáp fyrir herbergið sitt sem þau geta notað saman. Einn þeirra bauð sig fram til að safna nauðsynlegri upphæð til að kaupa ísskáp og semja við seljandann. Þau hittust hins vegar nýlega og ekki ríkir nægilegt traust á milli þeirra. Augljóslega eru tveir þeirra að taka áhættu með því að gefa þeim þriðja peninga. Auk þess þurfa þeir að ná samkomulagi um val á seljanda.

Þeir geta notað vörsluþjónustuna, það er að velja sáttasemjara sem mun fylgjast með framkvæmd viðskiptanna og leysa umdeild mál ef einhver kemur upp. Síðan, eftir að hafa verið sammála, semja þeir snjöllan samning og setja ákveðin skilyrði í honum.

Fyrsta skilyrðið er að fyrir ákveðinn tíma, segjum innan viku, þarf samsvarandi snjallsamningsreikningur að fá þrjár greiðslur frá ákveðnum heimilisföngum fyrir ákveðna upphæð. Ef þetta gerist ekki hættir snjallsamningurinn að framkvæma og skilar myntunum til allra þátttakenda. Ef skilyrðið er uppfyllt eru gildi auðkenni seljanda og sáttasemjara sett og það skilyrði athugað að allir þátttakendur séu sammála vali seljanda og sáttasemjara. Þegar öll skilyrði eru uppfyllt verða fjármunirnir færðir á tilgreind heimilisföng. Þessi nálgun getur verndað þátttakendur fyrir svikum frá hvaða hlið sem er og útilokar almennt þörfina á að treysta.

Við sjáum í þessu dæmi þá meginreglu að þessi hæfileiki til að stilla skref fyrir skref breytur til að uppfylla hvert skilyrði gerir þér kleift að búa til kerfi af hvaða flóknu og dýpt sem hreiður stig eru. Að auki geturðu fyrst skilgreint fyrsta skilyrðið í snjallsamningnum og aðeins eftir að það hefur verið uppfyllt geturðu stillt færibreytur fyrir næsta skilyrði. Með öðrum orðum, skilyrðið er formlega skrifað og hægt er að stilla færibreytur fyrir það þegar á meðan það er í gangi.

Flokkun snjallsamninga

Fyrir flokkun er hægt að setja mismunandi hópa af viðmiðum. Hins vegar, á því augnabliki sem tækniþróun er, eru fjórar þeirra viðeigandi.

Hægt er að greina snjalla samninga eftir framkvæmdaumhverfi þeirra, sem getur verið annað hvort miðstýrt eða dreifstýrt. Þegar um valddreifingu er að ræða höfum við miklu meira sjálfstæði og bilanaþol við framkvæmd snjalla samninga.

Þeir geta einnig verið aðgreindir með því ferli að setja og uppfylla skilyrði: þeir geta verið frjálslega forritanlegir, takmarkaðir eða fyrirfram skilgreindir, þ.e.a.s. Þegar það eru aðeins 4 sérstakir snjallsamningar á snjallsamningsvettvangnum er hægt að stilla færibreyturnar fyrir þá á hvaða hátt sem er. Í samræmi við það er miklu einfaldara að setja þær: við veljum samning af listanum og sendum breyturnar.

Samkvæmt upphafsaðferðinni eru til sjálfvirkir snjallsamningar, það er að segja að þegar ákveðin skilyrði koma upp eru þeir sjálfframkvæmir og það eru samningar þar sem skilyrðin eru tilgreind, en vettvangurinn athugar ekki sjálfkrafa uppfyllingu þeirra; fyrir þetta eru þeir þarf að hefja sérstaklega.

Að auki eru snjallsamningar mismunandi hvað varðar friðhelgi einkalífsins. Þau geta verið annað hvort algjörlega opin, að hluta til eða algjörlega trúnaðarmál. Hið síðarnefnda þýðir að áheyrnarfulltrúar þriðju aðila sjá ekki skilmála snjalla samninga. Hins vegar er umfjöllunarefnið um friðhelgi einkalífs mjög víðtækt og það er betra að skoða það sérstaklega frá núverandi grein.

Hér að neðan munum við líta nánar á fyrstu þrjú viðmiðin til að gera skilning á núverandi efni skýrari.

Snjallir samningar eftir keyrslutíma

Kynning á snjöllum samningum

Á grundvelli framkvæmdaumhverfisins er gerður greinarmunur á miðlægum og dreifðri snjallsamningsvettvangi. Þegar um miðstýrða stafræna samninga er að ræða er ein þjónusta notuð, þar sem aðeins er einn löggildingaraðili og þar getur verið um að ræða öryggisafritunar- og endurheimtarþjónustu, sem einnig er miðstýrt. Það er einn gagnagrunnur sem geymir allar nauðsynlegar upplýsingar til að setja skilmála snjallsamningsins og dreifa þeim verðmætum sem tekið er tillit til í einmitt þessum þjónustugagnagrunni. Slík miðstýrð þjónusta hefur viðskiptavin sem setur skilyrði með ákveðnum beiðnum og notar slíka samninga. Vegna miðstýrðs eðlis vettvangsins geta auðkenningarkerfi verið óöruggari en í dulritunargjaldmiðlum.

Sem dæmi getum við tekið farsímasamskiptafyrirtæki (mismunandi farsímafyrirtæki). Segjum að ákveðinn rekstraraðili haldi miðlægri skrá yfir umferð á netþjónum sínum, sem hægt er að senda á mismunandi sniði, til dæmis: í formi símtala, SMS sendingar, farsímaumferð á netinu og í samræmi við mismunandi staðla, og heldur einnig skrár af fjármunum á inneign notenda. Í samræmi við það getur fjarskiptaveitan gert samninga um bókhald fyrir veitta þjónustu og greiðslu hennar með mismunandi skilyrðum. Í þessu tilfelli er auðvelt að setja skilyrði eins og „senda SMS með svona og slíkum kóða í svona og svo númer og þú munt fá svona og slík skilyrði fyrir umferðardreifingu.“

Eitt dæmi til viðbótar má nefna: hefðbundna banka með aukna virkni netbanka og mjög einfalda samninga eins og reglubundnar greiðslur, sjálfvirka umbreytingu inngreiðslna, sjálfvirkan frádrátt vaxta á tiltekinn reikning o.s.frv.

Ef við erum að tala um snjalla samninga með dreifðu framkvæmdaumhverfi, þá erum við með hóp staðfestingaraðila. Helst getur hver sem er orðið löggildingaraðili. Vegna samstillingarsamskiptareglur gagnagrunns og samstöðu, höfum við einhvern sameiginlegan gagnagrunn sem mun nú geyma allar færslur með stranglega lýstum samningum, en ekki einhverjum skilyrtum fyrirspurnum, snið þeirra breytast oft og engin opin forskrift er til. Hér munu viðskipti innihalda fyrirmæli um að framkvæma samninginn samkvæmt ströngum forskrift. Þessi forskrift er opin og því geta notendur pallsins sjálfir endurskoðað og staðfest snjalla samninga. Hér sjáum við að dreifðir pallar eru betri en miðstýrðir hvað varðar sjálfstæði og bilanaþol, en hönnun þeirra og viðhald er mun flóknara.

Snjallir samningar með því að setja og uppfylla skilyrði

Nú skulum við skoða nánar hvernig snjöllir samningar geta verið mismunandi í því hvernig þeir setja og uppfylla skilyrði. Hér beinum við athygli okkar að snjöllum samningum sem eru forritanlegir af handahófi og Turing lokið. Turing-fullkominn snjallsamningur gerir þér kleift að setja nánast hvaða reiknirit sem er sem skilyrði fyrir framkvæmd samningsins: skrifa lotur, nokkrar aðgerðir til að reikna út líkur og þess háttar - alveg niður í eigin rafræna undirskriftaralgrím. Í þessu tilviki er átt við raunverulega handahófskennda ritun rökfræði.

Það eru líka til handahófskenndir snjallsamningar, en ekki heill Turing. Þetta felur í sér Bitcoin og Litecoin með eigin handriti. Þetta þýðir að þú getur aðeins notað ákveðnar aðgerðir í hvaða röð sem er, en þú getur ekki lengur skrifað lykkjur og eigin reiknirit.

Að auki eru til snjallsamningsvettvangar sem innleiða fyrirfram skilgreinda snjalla samninga. Þar á meðal eru Bitshares og Steemit. Bitshares hefur úrval af snjöllum samningum um viðskipti, reikningsstjórnun, stjórnun á pallinum sjálfum og breytum hans. Steemit er svipaður vettvangur, en hann einbeitir sér ekki lengur að útgáfu tákna og viðskipti, eins og Bitshares, heldur að blogga, þ.e. það geymir og vinnur efni á dreifðan hátt.

Handahófskenndir Turing-fullgerðir samningar innihalda Ethereum vettvang og RootStock, sem er enn í þróun. Þess vegna, hér að neðan, munum við dvelja aðeins nánar á Ethereum snjallsamningsvettvangnum.

Snjallir samningar með upphafsaðferð

Byggt á upphafsaðferðinni er einnig hægt að skipta snjöllum samningum í að minnsta kosti tvo hópa: sjálfvirkan og handvirkan (ekki sjálfvirkan). Sjálfvirkir eiginleikar einkennast af því að miðað við allar þekktar færibreytur og skilyrði er snjallsamningurinn framkvæmdur sjálfkrafa, það er að segja að það þarf ekki að senda neinar viðbótarfærslur og eyða viðbótarþóknun í hverja síðari framkvæmd. Pallurinn sjálfur hefur öll gögn til að reikna út hvernig snjallsamningurinn mun ljúka. Rökfræðin þar er ekki handahófskennd heldur fyrirfram ákveðin og allt er þetta fyrirsjáanlegt. Það er, þú getur fyrirfram metið hversu flókið framkvæmd snjallsamnings er, notað einhvers konar fasta þóknun fyrir það og öll ferli við innleiðingu hans eru skilvirkari.

Fyrir snjalla samninga sem eru frjálslega forritaðir er framkvæmdin ekki sjálfvirk. Til að hefja slíkan snjallsamning þarftu í nánast hverju skrefi að búa til nýja færslu, sem kallar á næsta framkvæmdarstig eða næstu snjallsamningsaðferð, borga viðeigandi þóknun og bíða eftir að viðskiptin verði staðfest. Framkvæmd gæti lokið með góðum árangri eða ekki, vegna þess að snjallsamningskóði er handahófskenndur og nokkur ófyrirsjáanleg augnablik geta birst, svo sem eilíf lykkja, skortur á sumum breytum og rökum, ómeðhöndlaðar undantekningar o.s.frv.

Ethereum reikningar

Tegundir Ethereum reikninga

Við skulum skoða hvaða tegundir reikninga geta verið á Ethereum pallinum. Það eru aðeins tvær tegundir af reikningum hér og það eru engir aðrir valkostir. Fyrsta tegundin er kölluð notendareikningur, sú seinni er samningsreikningur. Við skulum reikna út hvernig þeir eru mismunandi.

Notendareikningnum er aðeins stjórnað af persónulegum lykli rafrænu undirskriftarinnar. Eigandi reikningsins býr til sitt eigið lykilpar fyrir rafræna undirskrift með því að nota ECDSA (Elliptic Curve Digital Signature Algorithm) reiknirit. Aðeins færslur sem eru undirritaðar með þessum lykli geta breytt stöðu þessa reiknings.

Sérstök rökfræði er til staðar fyrir snjallsamningsreikninginn. Það er aðeins hægt að stjórna því með fyrirfram skilgreindum hugbúnaðarkóða sem ákvarðar algjörlega hegðun snjallsamningsins: hvernig hann mun stjórna myntunum sínum við ákveðnar aðstæður, að frumkvæði hvers notanda og við hvaða viðbótarskilyrði þessum myntum verður dreift. Ef einhver atriði eru ekki tilgreind af hönnuðum í forritskóðanum geta vandamál komið upp. Til dæmis getur snjallsamningur fengið ákveðið ástand þar sem hann samþykkir ekki upphaf frekari framkvæmdar frá neinum notenda. Í þessu tilviki verða myntin í raun fryst, vegna þess að snjallsamningurinn gerir ekki ráð fyrir að fara úr þessu ástandi.

Hvernig reikningar eru búnir til á Ethereum

Þegar um notendareikning er að ræða, býr eigandinn sjálfstætt til lykilpar með því að nota ECDSA. Það er mikilvægt að hafa í huga að Ethereum notar nákvæmlega sama reiknirit og nákvæmlega sömu sporöskjulaga feril fyrir rafrænar undirskriftir og Bitcoin, en heimilisfangið er reiknað á aðeins annan hátt. Hér er niðurstaða tvöfaldrar hass ekki lengur notuð, eins og í Bitcoin, en stakur hashing er veittur með Keccak fallinu í 256 bita lengd. Minnstu bitarnir eru skornir frá gildinu sem myndast, nefnilega minnstu 160 bitarnir af úttaks kjötkássagildinu. Fyrir vikið fáum við heimilisfang í Ethereum. Reyndar tekur það 20 bæti.

Vinsamlegast athugaðu að auðkenni reikningsins í Ethereum er kóðað í hex án þess að nota ávísunarsummu, ólíkt Bitcoin og mörgum öðrum kerfum, þar sem heimilisfangið er kóðað í grunn 58 númerakerfi að viðbættri eftirlitssummu. Þetta þýðir að þú þarft að vera varkár þegar þú vinnur með reikningsauðkenni í Ethereum: Jafnvel ein mistök í auðkenninu eru tryggð til að tapa mynt.

Það er mikilvægur eiginleiki og hann er sá að notendareikningur á almennu gagnagrunnsstigi er stofnaður á því augnabliki sem hann tekur við fyrstu greiðslu.

Að búa til snjallsamningsreikning tekur allt aðra nálgun. Upphaflega skrifar einn af notendum frumkóðann snjallsamningsins, eftir það er kóðinn fluttur í gegnum þýðanda sem er sérstakur fyrir Ethereum vettvanginn og fær bækikóða fyrir sína eigin Ethereum sýndarvél. Bætiskóðinn sem myndast er settur í sérstakan reit færslunnar. Það er vottað fyrir hönd reiknings frumkvöðuls. Næst er þessum viðskiptum dreift um netið og setur snjallsamningskóðann. Þóknun fyrir viðskiptin og þar af leiðandi fyrir framkvæmd samningsins er tekin af reikningi frumkvöðulsins.

Hver snjallsamningur inniheldur endilega sinn eigin smið (af þessum samningi). Það getur verið tómt eða innihaldið. Eftir að smiðurinn hefur verið keyrður er búið til auðkenni snjallsamningsreiknings, með því er hægt að senda mynt, kalla ákveðnar snjallsamningsaðferðir osfrv.

Ethereum viðskiptauppbygging

Til að gera það skýrara munum við byrja að skoða uppbyggingu Ethereum viðskipta og dæmi um snjallsamningskóða.

Kynning á snjöllum samningum

Ethereum viðskipti samanstanda af nokkrum sviðum. Hið fyrsta af þessu, ekki, er ákveðið raðnúmer færslunnar miðað við reikninginn sjálfan sem dreifir henni og er höfundur hennar. Þetta er nauðsynlegt til að greina tvöföld viðskipti, það er til að útiloka tilvikið þegar sömu viðskipti eru samþykkt tvisvar. Með því að nota auðkenni hefur hver viðskipti einstakt kjötkássagildi.

Næst kemur sviði eins og bensínverð. Þetta gefur til kynna verðið sem Ethereum grunngjaldmiðillinn er breytt í gas, sem er notað til að greiða fyrir framkvæmd snjallsamningsins og úthlutun sýndarvélaauðlindarinnar. Hvað þýðir það?

Í Bitcoin eru gjöld greidd beint af grunngjaldmiðlinum—Bitcoin sjálfu. Þetta er mögulegt þökk sé einföldu kerfi til að reikna þau út: við borgum stranglega fyrir magn gagna sem er að finna í viðskiptunum. Í Ethereum er ástandið flóknara, vegna þess að það er mjög erfitt að treysta á magn viðskiptagagna. Hér geta viðskiptin einnig innihaldið forritskóða sem verður keyrður á sýndarvélinni og hver aðgerð sýndarvélarinnar getur verið mismunandi flókin. Það eru líka aðgerðir sem úthluta minni fyrir breytur. Þeir munu hafa sitt eigið flókið, sem greiðsla fyrir hverja aðgerð mun ráðast af.

Kostnaður við hverja aðgerð í gasígildum verður stöðugur. Það er kynnt sérstaklega til að ákvarða stöðugan kostnað við hverja aðgerð. Það fer eftir álagi á netið, gasverðið mun breytast, það er stuðullinn sem grunngjaldmiðillinn verður breytt í þessa aukaeiningu til að greiða þóknunina.

Það er einn eiginleiki í viðbót við viðskipti í Ethereum: bækikóði sem hann inniheldur til að framkvæma í sýndarvél verður keyrður þar til honum lýkur með einhverjum árangri (árangri eða bilun) eða þar til ákveðið magn af myntum sem úthlutað er klárast til að greiða þóknunina . Það er til þess að forðast aðstæður þar sem, ef einhver villu kemur upp, öllum myntunum af reikningi sendanda var eytt í þóknun (til dæmis einhvers konar eilíft hringrás sem hófst í sýndarvél), eftirfarandi reitur er til - byrja gas (oft kallað gastakmörk) - það ákvarðar hámarks magn af myntum sem sendandinn er tilbúinn að eyða til að ljúka ákveðnum viðskiptum.

Næsti reitur er kallaður áfangastað. Þetta felur í sér heimilisfang viðtakanda myntanna eða heimilisfang tiltekins snjallsamnings þar sem aðferðir verða kallaðar. Eftir það kemur völlurinn gildi, þar sem magn myntanna sem eru send á áfangastað er slegið inn.

Næst er áhugavert svið sem heitir gögn, þar sem allt mannvirkið passar. Þetta er ekki sérstakt svæði, heldur heil uppbygging þar sem kóðinn fyrir sýndarvélina er skilgreindur. Þú getur sett handahófskennd gögn hér - það eru sérstakar reglur um þetta.

Og síðasti reiturinn heitir undirskrift. Það inniheldur samtímis bæði rafræna undirskrift höfundar þessarar færslu og opinbera lykilinn sem þessi undirskrift verður staðfest með. Frá opinbera lyklinum geturðu fengið reikningsauðkenni sendanda þessarar færslu, það er að auðkenna reikning sendandans einstaklega í kerfinu sjálfu. Við komumst að aðalatriðinu um uppbyggingu viðskiptanna.

Dæmi um snjallsamningskóða fyrir Solidity

Við skulum nú líta nánar á einfaldasta snjalla samninginn með því að nota dæmi.

contract Bank {
    address owner;
    mapping(address => uint) balances;
    
    function Bank() {
        owner = msg.sender;
    }

    function deposit() public payable {
        balances[msg.sender] += msg.value;
    }

    function withdraw(uint amount) public {
        if (balances[msg.sender] >= amount) {
            balances[msg.sender] -= amount;
            msg.sender.transfer(amount);
        }
    }

    function getMyBalance() public view returns(uint) {
        return balances[msg.sender];
    }

    function kill() public {
        if (msg.sender == owner)
            selfdestruct(owner);
    }
}

Hér að ofan er einfaldaður frumkóði sem getur geymt mynt notenda og skilað þeim ef óskað er.

Svo, það er banka snjall samningur sem framkvæmir eftirfarandi aðgerðir: hann safnar mynt á stöðu sína, það er, þegar viðskipti eru staðfest og slíkur snjall samningur er gerður, er nýr reikningur búinn til sem getur innihaldið mynt á stöðu sinni; það man notendur og dreifingu myntanna á milli þeirra; hefur nokkrar aðferðir til að stjórna innstæðum, það er, það er hægt að fylla á, taka út og athuga stöðu notandans.

Við skulum fara í gegnum hverja línu frumkóða. Þessi samningur hefur stöðugt svið. Einn þeirra, með tegund heimilisfang, er kallaður eigandi. Hér man samningurinn heimilisfang notandans sem bjó til þennan snjalla samning. Ennfremur er kraftmikil uppbygging sem heldur samsvörun milli netfönga notenda og jafnvægis.

Þessu fylgir Bankaaðferðin - hún ber sama nafn og samningurinn. Í samræmi við það er þetta smíði þess. Hér er eigandabreytunni úthlutað heimilisfangi þess sem setti þennan snjalla samning á netinu. Þetta er það eina sem gerist í þessum byggingaraðila. Það er, skilaboð í þessu tilfelli eru nákvæmlega gögnin sem voru flutt í sýndarvélina ásamt viðskiptunum sem innihalda allan kóða þessa samnings. Samkvæmt því er msg.sender höfundur þessarar færslu sem hýsir þennan kóða. Hann verður eigandi snjallsamningsins.

Innborgunaraðferðin gerir þér kleift að flytja ákveðinn fjölda mynt á samningsreikninginn með viðskiptum. Í þessu tilviki skilur snjallsamningurinn, sem tekur við þessum myntum, þá eftir á efnahagsreikningi sínum, en skráir í jafnvægisskipulagið hver var nákvæmlega sendandi þessara mynta til að vita hverjum þeir tilheyra.

Næsta aðferð er kölluð úttekt og hún tekur eina breytu - magn myntanna sem einhver vill taka út úr þessum banka. Þetta athugar hvort það sé nóg af myntum í stöðu notandans sem kallar á þessa aðferð til að senda þau. Ef það er nóg af þeim, þá skilar snjallsamningurinn sjálfur þeim fjölda mynta til þess sem hringir.

Næst kemur aðferðin til að athuga núverandi stöðu notandans. Sá sem kallar þessa aðferð verður notaður til að sækja þetta jafnvægi í snjallsamningnum. Það er athyglisvert að breytingin á þessari aðferð er útsýni. Þetta þýðir að aðferðin sjálf breytir ekki breytum flokks síns á nokkurn hátt og hún er í raun aðeins lesaðferð. Engin sérstök færsla er búin til til að kalla þessa aðferð, ekkert gjald er greitt og allir útreikningar eru gerðir á staðnum, eftir það fær notandinn niðurstöðuna.

Drapsaðferðin er nauðsynleg til að eyðileggja ástand snjallsamningsins. Og hér er til viðbótar athugað hvort sá sem hringir í þessa aðferð sé eigandi þessa samnings. Ef svo er, þá eyðileggur samningurinn sjálfan sig og eyðingaraðgerðin tekur eina færibreytu - reikningsauðkennið sem samningurinn mun senda öll myntin sem eftir eru á stöðunni. Í þessu tilviki fara myntin sem eftir eru sjálfkrafa á heimilisfang eiganda samningsins.

Hvernig virkar fullur hnút á Ethereum netinu?

Við skulum skoða skýrt hvernig slíkir snjallsamningar eru framkvæmdir á Ethereum pallinum og hvernig fullur nethnútur virkar.

Kynning á snjöllum samningum

Fullur hnút á Ethereum netinu verður að hafa að minnsta kosti fjórar einingar.
Hið fyrsta, eins og fyrir allar dreifðar samskiptareglur, er P2P netkerfiseiningin - eining fyrir nettengingu og vinnu með öðrum hnútum, þar sem skipt er um blokkir, viðskipti og upplýsingar um aðra hnúta. Þetta er hefðbundinn hluti fyrir alla dreifða dulritunargjaldmiðla.

Næst höfum við einingu til að geyma blockchain gögn, vinna, velja forgangsgrein, bæta við blokkum, aftengja blokkir, staðfesta þessar blokkir osfrv.

Þriðja einingin er kölluð EVM (Ethereum sýndarvél) - þetta er sýndarvél sem tekur við bætikóða frá Ethereum viðskiptum. Þessi eining tekur núverandi stöðu tiltekins reiknings og gerir breytingar á stöðu hans á grundvelli móttekins bætikóða. Sýndarvélaútgáfan á hverjum nethnút verður að vera sú sama. Útreikningarnir sem eiga sér stað á hverjum Ethereum hnút eru nákvæmlega eins, en þeir eiga sér stað á ósamstilltan hátt: einhver athugar og samþykkir þessi viðskipti fyrr, það er að segja, keyrir allan kóðann sem er í honum og einhver síðar. Í samræmi við það, þegar viðskipti eru búin til, er þeim dreift á netið, hnútarnir samþykkja það, og við sannprófun, á sama hátt og Bitcoin Script er keyrt í Bitcoin, er bætikóði sýndarvélarinnar keyrður hér.

Færsla telst staðfest ef allur kóðinn sem er í henni hefur verið keyrður, nýtt ástand tiltekins reiknings hefur verið búið til og vistað þar til ljóst er hvort þessi færslu hefur verið beitt eða ekki. Ef viðskiptunum er beitt, þá telst þetta ástand ekki aðeins lokið, heldur einnig núverandi. Það er gagnagrunnur sem geymir stöðu hvers reiknings fyrir hvern nethnút. Vegna þess að allir útreikningar eiga sér stað á sama hátt og ástand blockchain er það sama, mun gagnagrunnurinn sem inniheldur ástand allra reikninga einnig vera sá sami fyrir hvern hnút.

Goðsögn og takmarkanir snjallsamninga

Hvað varðar takmarkanirnar sem eru til staðar fyrir snjallsamninga sem líkjast Ethereum, má vitna í eftirfarandi:

  • kóða framkvæmd;
  • úthluta minni;
  • blockchain gögn;
  • senda greiðslur;
  • búa til nýjan samning;
  • kalla aðra samninga.

Við skulum skoða takmarkanirnar sem eru settar á sýndarvél og, í samræmi við það, eyða nokkrum goðsögnum um snjalla samninga. Á sýndarvél, sem getur verið ekki aðeins í Ethereum, heldur einnig á svipuðum kerfum, geturðu framkvæmt sannarlega handahófskenndar rökréttar aðgerðir, það er að segja að skrifa kóða og hann verður keyrður þar, þú getur auk þess úthlutað minni. Þó er gjaldið greitt sérstaklega fyrir hverja aðgerð og fyrir hverja viðbótar minniseiningu sem úthlutað er.

Næst getur sýndarvélin lesið gögn úr blockchain gagnagrunninum til að nota þessi gögn sem kveikju til að framkvæma eina eða aðra snjalla samningsrökfræði. Sýndarvélin getur búið til og sent færslur, hún getur búið til nýja samninga og hringingaraðferðir annarra snjallsamninga sem þegar eru birtir á netinu: núverandi, tiltækir osfrv.

Algengasta goðsögnin er sú að Ethereum snjallsamningar geta notað upplýsingar frá hvaða internetauðlind sem er í skilmálum þeirra. Sannleikurinn er sá að sýndarvél getur ekki sent netbeiðni til einhverrar utanaðkomandi upplýsingaauðlindar á netinu, það er að segja að það er ómögulegt að skrifa snjallsamning sem mun dreifa verðmætum á milli notenda eftir td hvernig veðrið er úti, eða hverjir unnu einhverja meistaratitla, eða miðað við hvaða annað atvik gerðist í umheiminum, vegna þess að upplýsingar um þessi atvik eru einfaldlega ekki í gagnagrunni vettvangsins sjálfs. Það er, það er ekkert á blockchain um þetta. Ef það birtist ekki þar, þá getur sýndarvélin ekki notað þessi gögn sem kveikjur.

Ókostir Ethereum

Við skulum telja upp þær helstu. Fyrsti ókosturinn er sá að það eru nokkrir erfiðleikar við að hanna, þróa og prófa snjalla samninga í Ethereum (Ethereum notar Solidity tungumálið til að skrifa snjalla samninga). Reyndar sýnir æfingin að mjög stór hluti allra villna tilheyrir mannlega þættinum. Þetta á reyndar við um þegar skrifaða Ethereum snjalla samninga sem hafa meðaltal eða hærri flókið. Ef fyrir einfalda snjalla samninga eru líkurnar á mistökum litlar, þá eru í flóknum snjöllum samningum mjög oft villur sem leiða til þjófnaðar fjármuna, frystingar þeirra, eyðileggingar snjallsamninga á óvæntan hátt, o.s.frv. Mörg slík tilvik eru nú þegar fyrir hendi. þekkt.

Annar ókosturinn er sá að sýndarvélin sjálf er ekki fullkomin þar sem hún er líka skrifuð af fólki. Það getur framkvæmt handahófskenndar skipanir og í því liggur varnarleysið: Hægt er að stilla fjölda skipana á ákveðinn hátt sem mun leiða til afleiðinga sem voru ófyrirséðar fyrirfram. Þetta er mjög flókið svæði, en það eru nú þegar nokkrar rannsóknir sem sýna að þessir veikleikar eru til í núverandi útgáfu af Ethereum netinu og þeir geta leitt til bilunar á mörgum snjöllum samningum.

Annar stór vandi, það getur talist ókostur. Það liggur í þeirri staðreynd að þú getur nánast eða tæknilega komist að þeirri niðurstöðu að ef þú setur saman bætikóða samnings sem verður keyrður á sýndarvél geturðu ákvarðað einhverja sérstaka röð aðgerða. Þegar þær eru framkvæmdar saman munu þessar aðgerðir hlaða sýndarvélinni mjög mikið og hægja á henni óhóflega miðað við gjaldið sem var greitt fyrir að framkvæma þessar aðgerðir.

Í fortíðinni var þegar tímabil í þróun Ethereum, þegar margir krakkar sem skildu í smáatriðum rekstur sýndarvélar fundu slíka veikleika. Reyndar greiddu viðskipti mjög lítið gjald en hægðu nánast á öllu netinu. Þessi vandamál eru mjög erfið að leysa, þar sem það er nauðsynlegt í fyrsta lagi að ákvarða þau, í öðru lagi að stilla verðið fyrir þessar aðgerðir og í þriðja lagi að framkvæma harða gaffal, sem þýðir að uppfæra alla nethnúta í nýja útgáfu hugbúnaðarins, og síðan samtímis virkjun þessara breytinga.

Eins og fyrir Ethereum, hefur mikið af rannsóknum verið gerðar, mikil hagnýt reynsla hefur verið fengin: bæði jákvæð og neikvæð, en engu að síður eru enn erfiðleikar og varnarleysi sem enn þarf að takast á við einhvern veginn.

Svo, þemahluta greinarinnar er lokið, við skulum halda áfram að spurningum sem vakna nokkuð oft.

FAQ

— Ef allir aðilar að núverandi snjallsamningi vilja breyta skilmálum, geta þeir sagt upp þessum snjalla samningi með því að nota multisig og síðan búið til nýjan snjallsamning með uppfærðum skilmálum um framkvæmd hans?

Svarið hér verður tvíþætt. Hvers vegna? Vegna þess að annars vegar er snjallsamningur skilgreindur einu sinni og hann felur ekki lengur í sér neinar breytingar, og hins vegar getur hann haft fyrirframskrifaða rökfræði sem gerir ráð fyrir algjörri eða hluta breytingu á sumum skilyrðum. Það er, ef þú vilt breyta einhverju í snjallsamningnum þínum, þá verður þú að mæla fyrir um skilyrðin sem þú getur uppfært þessi skilyrði. Samkvæmt því er aðeins hægt að skipuleggja endurnýjun samningsins með svo skynsamlegum hætti. En hér geturðu líka lent í vandræðum: Gerðu einhver mistök og færð samsvarandi varnarleysi. Þess vegna þurfa slíkir hlutir að vera mjög ítarlegir og vandlega hannaðir og prófaðir.

— Hvað ef sáttasemjari gerir samning við einhvern þátttakenda: vörslu eða snjallsamning? Er krafist sáttasemjara í snjöllum samningi?

Ekki er krafist sáttasemjara í snjöllum samningi. Það er kannski ekki til. Ef sáttasemjari fer í samsæri við einhvern aðila, þegar um vörslu er að ræða, þá já, þetta kerfi tapar þá verulega öllu gildi sínu. Þess vegna eru sáttasemjarar valdir á þann hátt að þeim er treyst af öllum aðilum sem koma að þessu ferli á sama tíma. Í samræmi við það muntu einfaldlega ekki flytja mynt á fjölundirskrift heimilisfang með sáttasemjara sem þú treystir ekki.

— Er það mögulegt með einni Ethereum viðskiptum að flytja mörg mismunandi tákn frá heimilisfangi þínu til mismunandi netföng, til dæmis, skiptiföng þar sem þessi tákn eru viðskipti?

Þetta er góð spurning og hún varðar Ethereum viðskiptalíkanið og hvernig það er frábrugðið Bitcoin líkaninu. Og munurinn er róttækur. Ef þú flytur einfaldlega mynt í Ethereum viðskiptalíkaninu, þá eru þau aðeins flutt frá einu heimilisfangi til annars, engin breyting, bara sú tiltekna upphæð sem þú tilgreindir. Með öðrum orðum, þetta er ekki líkan af ónýttu framleiðslugetu (UTXO), heldur líkan af reikningum og samsvarandi stöðu. Það er fræðilega mögulegt að senda nokkra mismunandi tákn í einni færslu í einu ef þú skrifar snjallan snjallsamning, en þú verður samt að gera margar færslur, búa til samning, flytja síðan tákn og mynt á hann og kalla svo viðeigandi aðferð . Þetta krefst fyrirhafnar og tíma, svo í reynd virkar þetta ekki svona og allar greiðslur í Ethereum eru gerðar í aðskildum viðskiptum.

— Ein af goðsögnunum um Ethereum vettvanginn er sú að það er ómögulegt að lýsa aðstæðum sem munu ráðast af gögnum utanaðkomandi internetauðlindar, svo hvað á að gera þá?

Lausnin felst í því að snjallsamningurinn sjálfur getur útvegað eina eða fleiri svokallaða trausta véfrétt, sem safna gögnum um ástand mála í umheiminum og miðla þeim til snjallsamninganna með sérstökum aðferðum. Samningurinn sjálfur telur gögnin sem hann fékk frá traustum aðilum vera sönn. Til að fá meiri áreiðanleika skaltu einfaldlega velja stóran hóp véfrétta og lágmarka hættuna á samráði þeirra. Samningurinn sjálfur má ekki taka tillit til gagna frá véfréttum sem stangast á við meirihlutann.

Einn af fyrirlestrum netnámskeiðsins um Blockchain er helgaður þessu efni - "Kynning á snjöllum samningum".

Heimild: www.habr.com

Bæta við athugasemd