Úvod do inteligentných zmlúv

V tomto článku sa pozrieme na to, čo sú smart kontrakty, čo to sú, zoznámime sa s rôznymi platformami smart kontraktov, ich funkciami a tiež si rozoberieme, ako fungujú a aké výhody môžu priniesť. Tento materiál bude veľmi užitočný pre čitateľov, ktorí nie sú dobre oboznámení s témou smart kontraktov, no chcú sa jej priblížiť.

Bežná zmluva vs. smart kontrakt

Predtým, než sa pustíme do detailov, uveďme si príklad rozdielov medzi bežnou zmluvou, ktorá je špecifikovaná na papieri, a inteligentnou zmluvou, ktorá je reprezentovaná digitálne.

Úvod do inteligentných zmlúv

Ako to fungovalo pred príchodom inteligentných zmlúv? Predstavte si skupinu ľudí, ktorí chcú stanoviť určité pravidlá a podmienky pre rozdelenie hodnôt, ako aj určitý mechanizmus, ktorý zaručí realizáciu tohto rozdelenia podľa daných pravidiel a podmienok. Potom sa zhromaždili, zostavili papier, na ktorý si zapísali svoje identifikačné údaje, podmienky, príslušné hodnoty, dali dátum a podpísali. Túto zmluvu overila aj dôveryhodná strana, napríklad notár. Ďalej sa títo ľudia vydali rôznymi smermi s papierovou kópiou takejto zmluvy a začali vykonávať niektoré činnosti, ktoré nemuseli zodpovedať samotnej zmluve, to znamená, že urobili jednu vec, ale na papieri bolo potvrdené, že by mali niečo urobiť. kompletne odlišný. A ako z tejto situácie von? V skutočnosti musí jeden z členov skupiny vziať tento papier, urobiť nejaké dôkazy, dať ich na súd a dosiahnuť súlad medzi zmluvou a skutočnými činmi. Pomerne často je ťažké dosiahnuť spravodlivú realizáciu tejto zmluvy, čo vedie k nepríjemným následkom.

Čo možno povedať o smart kontraktoch? Spájajú tak možnosť spísania zmluvných podmienok, ako aj mechanizmus ich striktnej implementácie. Ak boli stanovené podmienky a príslušná transakcia alebo žiadosť bola podpísaná, potom po prijatí tejto žiadosti alebo transakcie už nie je možné meniť podmienky ani ovplyvňovať ich implementáciu.

Existuje jeden validátor alebo celá sieť, ako aj databáza, ktorá uchováva všetky inteligentné zmluvy, ktoré boli predložené na vykonanie, v prísnom chronologickom poradí. Je tiež dôležité, že táto databáza musí obsahovať všetky spúšťacie podmienky na vykonanie smart kontraktu. Okrem toho musí brať do úvahy práve hodnotu, ktorej rozdelenie je popísané v zmluve. Ak sa to týka nejakej digitálnej meny, tak táto databáza by to mala zohľadňovať.

Inými slovami, overovatelia smart kontraktov musia mať prístup ku všetkým údajom, na ktorých smart kontrakt funguje. Napríklad jedna databáza by sa mala používať na súčasné účtovanie digitálnych mien, zostatkov používateľov, transakcií používateľov a časových pečiatok. Potom v inteligentnej zmluve môže byť podmienkou zostatok používateľa v určitej mene, výskyt určitého času alebo skutočnosť, že bola vykonaná určitá transakcia, ale nič viac.

Definícia inteligentnej zmluvy

Vo všeobecnosti samotná terminológia bola vytvorená výskumníkom Nickom Szabo a prvýkrát použitá v roku 1994 a bola zdokumentovaná v roku 1997 v článku, ktorý popisuje samotnú myšlienku inteligentných zmlúv.

Inteligentné zmluvy znamenajú, že sa vykonáva určitá automatizácia distribúcie hodnoty, ktorá môže závisieť iba od podmienok, ktoré sú vopred určené. Vo svojej najjednoduchšej podobe to vyzerá ako zmluva s presne stanovenými podmienkami, ktorú podpisujú určité strany.

Inteligentné zmluvy sú navrhnuté tak, aby minimalizovali dôveru v tretie strany. Niekedy je úplne vylúčené centrum rozhodovania, od ktorého všetko závisí. Takéto zmluvy sa navyše ľahšie kontrolujú. Je to dôsledok niektorých konštrukčných prvkov takéhoto systému, ale najčastejšie pod inteligentnou zmluvou rozumieme decentralizované prostredie a prítomnosť funkcií, ktoré umožňujú komukoľvek analyzovať databázu a vykonať úplný audit plnenia zmlúv. Tým je zabezpečená ochrana pred retroaktívnymi zmenami údajov, ktoré by znamenali zmeny v plnení samotnej zmluvy. Digitalizácia väčšiny procesov pri vytváraní a spúšťaní smart kontraktu často zjednodušuje technológiu a náklady na ich implementáciu.

Jednoduchý príklad – Escrow služba

Pozrime sa na veľmi jednoduchý príklad. Pomôže vám to priblížiť sa k pochopeniu funkčnosti smart kontraktov, ako aj lepšie pochopiť, v ktorých prípadoch by sa mali používať.

Úvod do inteligentných zmlúv

Dá sa to implementovať aj pomocou Bitcoinu, hoci v súčasnosti sa Bitcoin ešte len ťažko dá nazvať plnohodnotnou platformou pre smart kontrakty. Takže máme nejakého kupujúceho a máme internetový obchod. Zákazník si chce v tomto obchode kúpiť monitor. V najjednoduchšom prípade kupujúci dokončí a odošle platbu a internetový obchod ju prijme, potvrdí a následne tovar odošle. V tejto situácii je však potrebná veľká dôvera - kupujúci musí dôverovať internetovému obchodu za celú cenu monitora. Keďže internetový obchod môže mať v očiach kupujúceho nízku reputáciu, existuje riziko, že z nejakého dôvodu po prijatí platby obchod odmietne službu a tovar kupujúcemu nezašle. Kupujúci si preto kladie otázku (a teda aj internetový obchod), čo možno v tomto prípade použiť, aby sa takéto riziká minimalizovali a takéto transakcie boli spoľahlivejšie.

V prípade Bitcoinu je možné umožniť kupujúcemu a predávajúcemu, aby si nezávisle vybrali sprostredkovateľa. Existuje veľa ľudí, ktorí sa podieľajú na riešení kontroverzných problémov. A naši účastníci si môžu zo všeobecného zoznamu mediátorov vybrať toho, ktorému budú dôverovať. Spoločne vytvoria 2 z 3 viacpodpisových adries, kde sú tri kľúče a dva podpisy s ľubovoľnými dvomi kľúčmi sú potrebné na utratenie mincí z tejto adresy. Jeden kľúč bude patriť kupujúcemu, druhý internetovému obchodu a tretí sprostredkovateľovi. A na takúto multipodpisovú adresu kupujúci pošle sumu potrebnú na zaplatenie monitora. Teraz, keď predajca vidí, že peniaze sú na nejaký čas zablokované na adrese s viacerými podpismi, ktorá od neho závisí, môže monitor pokojne poslať poštou.

Následne kupujúci prevezme zásielku, skontroluje tovar a rozhodne o konečnom nákupe. Môže úplne súhlasiť s poskytovanou službou a podpísať transakciu svojim kľúčom, kde predáva mince z multipodpisovej adresy, alebo môže byť s niečím nespokojný. V druhom prípade kontaktuje sprostredkovateľa, aby dal dokopy alternatívnu transakciu, ktorá tie mince rozdelí inak.

Povedzme, že monitor dorazil trochu poškriabaný a súprava neobsahovala kábel na pripojenie k počítaču, hoci na webovej stránke internetového obchodu sa uvádzalo, že kábel by mal byť súčasťou súpravy. Potom kupujúci zhromaždí dôkazy potrebné na to, aby dokázal sprostredkovateľovi, že bol v tejto situácii oklamaný: urobí snímky stránky, odfotí potvrdenie, odfotí škrabance na monitore a ukáže, že pečať bola zlomený a kábel bol vytiahnutý. Internetový obchod zase zhromažďuje svoje dôkazy a odovzdáva ich sprostredkovateľovi.

Sprostredkovateľ má záujem súčasne uspokojiť rozhorčenie kupujúceho aj záujmy internetového obchodu (neskôr sa ukáže prečo). Ide o transakciu, pri ktorej sa mince z adresy s viacerými podpismi utratia v určitom pomere medzi kupujúcim, internetovým obchodom a sprostredkovateľom, pretože si časť berie pre seba ako odmenu za svoju prácu. Povedzme 90% z celkovej sumy ide predajcovi, 5% sprostredkovateľovi a 5% kompenzácia kupujúcemu. Sprostredkovateľ túto transakciu podpisuje svojim kľúčom, ale zatiaľ sa nedá uplatniť, pretože si vyžaduje dva podpisy, ale len jeden stojí za to. Takúto transakciu odošle kupujúcemu aj predávajúcemu. Ak je aspoň jeden z nich spokojný s touto možnosťou prerozdelenia mincí, transakcia bude vopred podpísaná a distribuovaná do siete. Na jej overenie stačí, aby jedna zo strán transakcie súhlasila s opciou sprostredkovateľa.

Na začiatku je dôležité vybrať si mediátora tak, aby mu obaja účastníci dôverovali. V tomto prípade bude konať nezávisle od záujmov jedného alebo druhého a objektívne posúdi situáciu. Ak sprostredkovateľ neponúkne možnosť distribúcie mincí, ktorá uspokojí aspoň jedného účastníka, potom po spoločnej dohode môže kupujúci aj internetový obchod zaslať mince na novú adresu s viacerými podpismi zadaním svojich dvoch podpisov. Nová adresa s viacerými podpismi bude zostavená s iným sprostredkovateľom, ktorý môže byť v danej veci kompetentnejší a poskytnúť lepšiu možnosť.

Príklad s internátom a chladničkou

Pozrime sa na komplexnejší príklad, ktorý explicitnejšie zobrazuje možnosti inteligentnej zmluvy.

Úvod do inteligentných zmlúv

Povedzme, že sú tam traja chalani, ktorí sa nedávno presťahovali do tej istej internátnej izby. Všetci traja majú záujem o kúpu chladničky do svojej izby, ktorú by mohli využívať spoločne. Jeden z nich sa dobrovoľne prihlásil, že vyzbiera potrebnú sumu na kúpu chladničky a vyjednáva s predajcom. Stretli sa však len nedávno a nie je medzi nimi dostatočná dôvera. Je zrejmé, že dvaja z nich riskujú a dajú peniaze tretiemu. Okrem toho sa potrebujú dohodnúť pri výbere predajcu.

Môžu využiť escrow službu, teda vybrať si sprostredkovateľa, ktorý bude dohliadať na realizáciu transakcie a riešiť kontroverzné problémy, ak nejaké nastanú. Potom po dohode vypracujú inteligentnú zmluvu a predpíšu v nej určité podmienky.

Prvou podmienkou je, že do určitého času, povedzme do jedného týždňa, musí príslušný smart kontraktový účet dostať tri platby z určitých adries v určitej sume. Ak sa tak nestane, smart kontrakt sa prestane vykonávať a vráti mince všetkým účastníkom. Ak je podmienka splnená, nastavia sa hodnoty identifikátorov predajcu a sprostredkovateľa a skontroluje sa, či všetci účastníci súhlasia s výberom predajcu a sprostredkovateľa. Po splnení všetkých podmienok budú prostriedky prevedené na zadané adresy. Tento prístup môže chrániť účastníkov pred podvodmi z ktorejkoľvek strany a vo všeobecnosti eliminuje potrebu dôverovať.

Na tomto príklade vidíme samotný princíp, že táto možnosť krok za krokom nastavovať parametre pre splnenie každej podmienky umožňuje vytvárať systémy akejkoľvek zložitosti a hĺbky vnorených úrovní. V smart kontrakte si navyše môžete najskôr zadefinovať prvú podmienku a až po jej splnení môžete nastaviť parametre ďalšej podmienky. Inými slovami, podmienka je formálne zapísaná a parametre sa dajú nastaviť už počas jej činnosti.

Klasifikácia inteligentných zmlúv

Pre klasifikáciu môžete nastaviť rôzne skupiny kritérií. V súčasnosti sú však relevantné štyri z nich.

Inteligentné zmluvy sa dajú rozlíšiť podľa ich vykonávacieho prostredia, ktoré môže byť centralizované alebo decentralizované. V prípade decentralizácie máme oveľa väčšiu nezávislosť a odolnosť voči chybám pri realizácii smart kontraktov.

Možno ich rozlíšiť aj procesom nastavovania a plnenia podmienok: môžu byť voľne programovateľné, obmedzené alebo preddefinované, teda striktne typizované. Keď sú na platforme smart kontraktov len 4 konkrétne smart kontrakty, parametre pre ne sa dajú nastaviť ľubovoľným spôsobom. Preto je ich nastavenie oveľa jednoduchšie: vyberieme zmluvu zo zoznamu a odošleme parametre.

Podľa spôsobu iniciácie existujú automatizované inteligentné zmluvy, to znamená, že keď nastanú určité podmienky, sú samovykonateľné a existujú zmluvy, v ktorých sú uvedené podmienky, ale platforma ich splnenie automaticky nekontroluje; je potrebné spustiť samostatne.

Inteligentné zmluvy sa navyše líšia úrovňou súkromia. Môžu byť buď úplne otvorené, čiastočne alebo úplne dôverné. To znamená, že pozorovatelia tretích strán nevidia podmienky inteligentných zmlúv. Téma súkromia je však veľmi široká a je lepšie ju zvážiť oddelene od aktuálneho článku.

Nižšie sa bližšie pozrieme na prvé tri kritériá, aby sme lepšie pochopili aktuálnu tému.

Inteligentné zmluvy za behu

Úvod do inteligentných zmlúv

Na základe vykonávacieho prostredia sa rozlišuje medzi centralizovanými a decentralizovanými platformami inteligentných zmlúv. V prípade centralizovaných digitálnych zmlúv sa využíva jednotná služba, kde je len jeden validátor a môže existovať služba zálohovania a obnovy, ktorá je tiež centrálne riadená. Existuje jedna databáza, ktorá uchováva všetky potrebné informácie na nastavenie podmienok inteligentnej zmluvy a distribúciu hodnoty, ktorá sa berie do úvahy práve v tejto databáze služieb. Takáto centralizovaná služba má klienta, ktorý si stanovuje podmienky s určitými požiadavkami a využíva takéto zmluvy. Vzhľadom na centralizovanú povahu platformy môžu byť mechanizmy autentifikácie menej bezpečné ako v prípade kryptomien.

Ako príklad si môžeme vziať poskytovateľov mobilnej komunikácie (rôznych mobilných operátorov). Povedzme, že určitý operátor vedie na svojich serveroch centralizovanú evidenciu návštevnosti, ktorá môže byť prenášaná v rôznych formátoch, napríklad: vo forme hlasových hovorov, prenosu SMS, prenosu mobilného internetu a podľa rôznych štandardov a tiež vedie záznamy. prostriedkov na používateľských zostatkoch. V súlade s tým môže poskytovateľ mobilnej komunikácie uzatvárať zmluvy o účtovaní poskytnutých služieb a ich úhrade s rôznymi podmienkami. V tomto prípade je jednoduché nastaviť podmienky ako „pošlite SMS s takým a takým kódom na také a také číslo a dostanete také a také podmienky pre rozloženie prevádzky“.

Dá sa uviesť ešte jeden príklad: klasické banky s rozšírenou funkcionalitou Internet bankingu a veľmi jednoduchými zmluvami ako pravidelné platby, automatická konverzia došlých platieb, automatické zrážanie úrokov na určený účet atď.

Ak hovoríme o smart kontraktoch s decentralizovaným prostredím vykonávania, tak tu máme skupinu validátorov. V ideálnom prípade sa validátorom môže stať každý. Vďaka protokolu synchronizácie databáz a dosiahnutiu konsenzu máme spoločnú databázu, ktorá bude teraz uchovávať všetky transakcie s presne popísanými zmluvami a nie nejaké podmienené dotazy, ktorých formáty sa často menia a neexistuje žiadna otvorená špecifikácia. Tu budú transakcie obsahovať pokyny na vykonanie zmluvy podľa prísnej špecifikácie. Táto špecifikácia je otvorená, a preto môžu samotní používatelia platformy kontrolovať a overovať inteligentné zmluvy. Tu vidíme, že decentralizované platformy sú lepšie ako centralizované z hľadiska nezávislosti a odolnosti voči chybám, ale ich návrh a údržba sú oveľa zložitejšie.

Smart kontrakty metódou nastavenia a plnenia podmienok

Teraz sa pozrime bližšie na to, ako sa inteligentné zmluvy môžu líšiť v spôsobe, akým stanovujú a plnia podmienky. Tu obraciame našu pozornosť na inteligentné kontrakty, ktoré sú náhodne programovateľné a Turing kompletný. Inteligentná zmluva s úplným Turingom vám umožňuje nastaviť takmer akékoľvek algoritmy ako podmienky na vykonanie zmluvy: zapisovacie cykly, niektoré funkcie na výpočet pravdepodobnosti a podobne – až po vaše vlastné algoritmy elektronického podpisu. V tomto prípade máme na mysli skutočne ľubovoľné písanie logiky.

Existujú aj ľubovoľné inteligentné zmluvy, ale nie úplné Turingove zmluvy. To zahŕňa Bitcoin a Litecoin s vlastným skriptom. To znamená, že môžete použiť iba určité operácie v akomkoľvek poradí, ale už nemôžete písať slučky a svoje vlastné algoritmy.

Okrem toho existujú platformy inteligentných zmlúv, ktoré implementujú vopred definované inteligentné zmluvy. Patria sem Bitshares a Steemit. Bitshares má celý rad smart kontraktov na obchodovanie, správu účtov, správu samotnej platformy a jej parametrov. Steemit je podobná platforma, ktorá sa však už nezameriava na vydávanie tokenov a obchodovanie ako Bitshares, ale na blogovanie, teda decentralizovane ukladá a spracováva obsah.

Arbitrárne Turingove kompletné zmluvy zahŕňajú platformu Ethereum a RootStock, ktorý je stále vo vývoji. Preto sa nižšie budeme zaoberať trochu podrobnejšie platformou Ethereum smart contract.

Inteligentné kontrakty metódou iniciácie

Na základe spôsobu iniciácie je možné inteligentné zmluvy rozdeliť minimálne do dvoch skupín: automatizované a manuálne (nie automatizované). Automatizované sa vyznačujú tým, že vzhľadom na všetky známe parametre a podmienky sa inteligentná zmluva vykonáva úplne automaticky, to znamená, že nevyžaduje odosielanie žiadnych dodatočných transakcií a vynakladanie ďalšej provízie pri každej ďalšej realizácii. Samotná platforma má všetky údaje na výpočet toho, ako sa inteligentná zmluva dokončí. Logika tam nie je ľubovoľná, ale vopred určená a to všetko je predvídateľné. To znamená, že môžete vopred odhadnúť zložitosť vykonávania inteligentnej zmluvy, použiť za ňu určitú stálu províziu a všetky procesy na jej implementáciu sú efektívnejšie.

V prípade inteligentných zmlúv, ktoré sú voľne naprogramované, nie je vykonávanie automatizované. Na spustenie takejto inteligentnej zmluvy je potrebné prakticky v každom kroku vytvoriť novú transakciu, ktorá vyvolá ďalšiu fázu realizácie alebo ďalšiu metódu inteligentnej zmluvy, zaplatiť príslušnú províziu a počkať na potvrdenie transakcie. Vykonanie sa môže dokončiť úspešne alebo nie, pretože kód inteligentnej zmluvy je ľubovoľný a môžu sa vyskytnúť nepredvídateľné momenty, ako napríklad večná slučka, nedostatok niektorých parametrov a argumentov, neošetrené výnimky atď.

Ethereum účty

Typy účtov Ethereum

Pozrime sa, aké typy účtov môžu existovať na platforme Ethereum. Existujú len dva typy účtov a neexistujú žiadne iné možnosti. Prvý typ sa nazýva užívateľský účet, druhý je zmluvný účet. Poďme zistiť, ako sa líšia.

Užívateľský účet je ovládaný iba osobným kľúčom elektronického podpisu. Vlastník účtu generuje svoj vlastný pár kľúčov pre elektronický podpis pomocou algoritmu ECDSA (Elliptic Curve Digital Signature Algorithm). Stav tohto účtu môžu zmeniť iba transakcie podpísané týmto kľúčom.

Pre účet inteligentnej zmluvy je poskytnutá samostatná logika. Dá sa ovládať iba preddefinovaným softvérovým kódom, ktorý úplne určuje správanie smart kontraktu: ako bude za určitých okolností spravovať svoje coiny, na podnet ktorého užívateľa a za akých dodatočných podmienok budú tieto coiny distribuované. Ak niektoré body vývojári neposkytnú v programovom kóde, môžu nastať problémy. Inteligentná zmluva môže napríklad dostať určitý stav, v ktorom neakceptuje iniciáciu ďalšej realizácie od žiadneho z používateľov. V tomto prípade budú mince skutočne zmrazené, pretože smart kontrakt neumožňuje opustenie tohto stavu.

Ako sa vytvárajú účty na Ethereu

V prípade používateľského účtu majiteľ nezávisle vygeneruje kľúčový pár pomocou ECDSA. Je dôležité poznamenať, že Ethereum používa presne ten istý algoritmus a presne rovnakú eliptickú krivku pre elektronické podpisy ako Bitcoin, ale adresa sa počíta trochu iným spôsobom. Tu sa už nepoužíva výsledok dvojitého hašovania ako v Bitcoine, ale jednoduché hašovanie je zabezpečené funkciou Keccak v dĺžke 256 bitov. Z výslednej hodnoty sú odrezané najmenej významné bity, konkrétne 160 najmenej významných bitov výstupnej hašovacej hodnoty. Výsledkom je, že získame adresu v Ethereu. V skutočnosti to zaberá 20 bajtov.

Upozorňujeme, že identifikátor účtu v Ethereu je zakódovaný v hex bez použitia kontrolného súčtu, na rozdiel od Bitcoinu a mnohých iných systémov, kde je adresa zakódovaná v základnom 58 číselnom systéme s pridaním kontrolného súčtu. To znamená, že pri práci s identifikátormi účtov v Ethereu musíte byť opatrní: aj jedna chyba v identifikátore zaručene povedie k strate mincí.

Dôležitou vlastnosťou je, že užívateľský účet na úrovni všeobecnej databázy sa vytvorí v momente, keď prijme prvú prichádzajúcu platbu.

Vytvorenie účtu inteligentnej zmluvy vyžaduje úplne iný prístup. Najprv jeden z používateľov napíše zdrojový kód inteligentnej zmluvy, potom kód prejde kompilátorom špeciálnym pre platformu Ethereum, čím získa bajtkód pre svoj vlastný virtuálny stroj Ethereum. Výsledný bajtový kód sa umiestni do špeciálneho poľa transakcie. Je certifikovaná v mene účtu iniciátora. Ďalej sa táto transakcia šíri po sieti a umiestni kód inteligentnej zmluvy. Provízia za transakciu a tým aj za realizáciu zmluvy sa stiahne zo zostatku účtu iniciátora.

Každý smart kontrakt nevyhnutne obsahuje svojho konštruktéra (tejto zmluvy). Môže byť prázdny alebo môže mať obsah. Po vykonaní konštruktora sa vytvorí identifikátor účtu inteligentnej zmluvy, pomocou ktorého môžete posielať mince, volať určité metódy inteligentnej zmluvy atď.

Štruktúra transakcií Ethereum

Aby to bolo jasnejšie, začneme sa zaoberať štruktúrou transakcie Ethereum a vzorovým kódom inteligentnej zmluvy.

Úvod do inteligentných zmlúv

Ethereum transakcia pozostáva z niekoľkých polí. Prvým z nich, nonce, je určité sériové číslo transakcie vo vzťahu k samotnému účtu, ktorý ju distribuuje a je jej autorom. Je to potrebné na rozlíšenie dvojitých transakcií, to znamená na vylúčenie prípadu, keď je tá istá transakcia prijatá dvakrát. Použitím identifikátora má každá transakcia jedinečnú hodnotu hash.

Ďalej prichádza pole ako cena plynu. Označuje cenu, za ktorú sa základná mena Ethereum premieňa na plyn, ktorý sa používa na zaplatenie za vykonanie inteligentnej zmluvy a pridelenie zdroja virtuálneho stroja. Čo to znamená?

V bitcoinech sa poplatky platia priamo základnou menou – samotným bitcoinom. Je to možné vďaka jednoduchému mechanizmu na ich výpočet: platíme striktne za množstvo dát obsiahnutých v transakcii. V Ethereu je situácia komplikovanejšia, pretože je veľmi ťažké spoliehať sa na objem transakčných dát. Tu môže transakcia obsahovať aj programový kód, ktorý sa vykoná na virtuálnom stroji a každá operácia virtuálneho stroja môže mať inú zložitosť. Existujú aj operácie, ktoré alokujú pamäť pre premenné. Budú mať svoju zložitosť, od ktorej bude závisieť platba za každú operáciu.

Náklady na každú operáciu v ekvivalente plynu budú konštantné. Zavádza sa špeciálne s cieľom určiť konštantné náklady na každú operáciu. V závislosti od zaťaženia siete sa bude meniť cena plynu, teda koeficient, podľa ktorého sa základná mena prepočíta na túto pomocnú jednotku na vyplatenie provízie.

Transakcia v Ethereu má ešte jednu vlastnosť: bajtový kód, ktorý obsahuje na vykonanie vo virtuálnom stroji, sa bude vykonávať dovtedy, kým sa nedokončí s nejakým výsledkom (úspech alebo neúspech) alebo kým sa neminie určité množstvo pridelených mincí na zaplatenie provízie. . Aby sa predišlo situácii, keď sa v prípade nejakej chyby všetky mince z účtu odosielateľa minuli na províziu (napríklad nejaký večný cyklus spustený vo virtuálnom stroji), existuje nasledujúce pole - štartovací plyn (často nazývaný limit plynu) – určuje maximálne množstvo mincí, ktoré je odosielateľ ochotný minúť na uskutočnenie určitej transakcie.

Ďalšie pole je tzv cieľová adresa. To zahŕňa adresu príjemcu mincí alebo adresu konkrétneho smart kontraktu, ktorého metódy budú vyvolané. Po ňom prichádza pole hodnotu, kde sa zadáva množstvo mincí, ktoré sa posielajú na cieľovú adresu.

Ďalej je zaujímavé pole tzv data, kam zapadá celá konštrukcia. Nejde o samostatné pole, ale o celú štruktúru, v ktorej je definovaný kód pre virtuálny stroj. Tu môžete umiestniť ľubovoľné údaje - existujú na to osobitné pravidlá.

A posledné pole sa volá podpis. Zároveň obsahuje ako elektronický podpis autora tejto transakcie, tak aj verejný kľúč, ktorým bude tento podpis overený. Z verejného kľúča môžete získať identifikátor účtu odosielateľa tejto transakcie, teda jednoznačne identifikovať účet odosielateľa v samotnom systéme. Zistili sme to hlavné o štruktúre transakcie.

Príklad kódu inteligentnej zmluvy pre Solidity

Poďme sa teraz bližšie pozrieť na najjednoduchšiu inteligentnú zmluvu na príklade.

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

Vyššie je zjednodušený zdrojový kód, ktorý môže obsahovať mince používateľov a vrátiť ich na požiadanie.

Existuje teda inteligentná zmluva banky, ktorá vykonáva tieto funkcie: hromadí mince na svojom zostatku, to znamená, že keď je transakcia potvrdená a takáto inteligentná zmluva je uzavretá, vytvorí sa nový účet, ktorý môže obsahovať mince na svojom zostatku; pamätá si používateľov a distribúciu mincí medzi nimi; má niekoľko spôsobov správy zostatkov, to znamená, že je možné doplniť, vybrať a skontrolovať zostatok používateľa.

Poďme si prejsť každý riadok zdrojového kódu. Táto zmluva má konštantné polia. Jeden z nich s typovou adresou sa nazýva vlastník. Tu si zmluva pamätá adresu používateľa, ktorý vytvoril túto smart zmluvu. Ďalej je tu dynamická štruktúra, ktorá udržuje súlad medzi používateľskými adresami a zostatkami.

Nasleduje metóda Banka – má rovnaký názov ako zmluva. Podľa toho je to jeho konštruktér. Tu je premennej vlastníka priradená adresa osoby, ktorá umiestnila tento smart kontrakt do siete. Toto je jediná vec, ktorá sa deje v tomto konštruktore. To znamená, že msg sú v tomto prípade presne tie údaje, ktoré boli prenesené na virtuálny stroj spolu s transakciou obsahujúcou celý kód tejto zmluvy. V súlade s tým je msg.sender autorom tejto transakcie, ktorá je hostiteľom tohto kódu. Bude vlastníkom smart kontraktu.

Spôsob vkladu vám umožňuje previesť určitý počet mincí na zmluvný účet transakciou. V tomto prípade inteligentná zmluva, ktorá tieto mince dostane, ich ponechá vo svojej súvahe, ale v štruktúre bilancií zaznamená, kto presne bol odosielateľom týchto mincí, aby sa vedelo, komu patria.

Ďalšia metóda sa nazýva výber a vyžaduje jeden parameter - množstvo mincí, ktoré chce niekto vybrať z tejto banky. Tým sa skontroluje, či je v zostatku používateľa, ktorý zavolá túto metódu, dostatok mincí na ich odoslanie. Ak ich je dostatok, potom samotný smart kontrakt vráti tento počet mincí volajúcemu.

Ďalej nasleduje metóda kontroly aktuálneho zostatku používateľa. Ktokoľvek zavolá túto metódu, použije sa na získanie tohto zostatku v inteligentnej zmluve. Stojí za zmienku, že modifikátorom tejto metódy je pohľad. To znamená, že samotná metóda nijako nemení premenné svojej triedy a ide vlastne len o metódu čítania. Nevytvára sa žiadna samostatná transakcia na volanie tejto metódy, neplatí sa žiadny poplatok a všetky výpočty sa vykonávajú lokálne, po ktorých používateľ dostane výsledok.

Metóda zabíjania je potrebná na zničenie stavu inteligentnej zmluvy. A tu je dodatočná kontrola, či volajúci tejto metódy je vlastníkom tejto zmluvy. Ak áno, zmluva sa sama zničí a funkcia zničenia prevezme jeden parameter - identifikátor účtu, na ktorý zmluva odošle všetky mince zostávajúce na svojom zostatku. V tomto prípade zostávajúce mince automaticky poputujú na adresu vlastníka zmluvy.

Ako funguje úplný uzol v sieti Ethereum?

Pozrime sa schematicky na to, ako sa takéto smart kontrakty realizujú na platforme Ethereum a ako funguje úplný sieťový uzol.

Úvod do inteligentných zmlúv

Úplný uzol v sieti Ethereum musí mať aspoň štyri moduly.
Prvým, ako pri každom decentralizovanom protokole, je modul P2P siete - modul pre sieťové pripojenie a prácu s inými uzlami, kde sa vymieňajú bloky, transakcie a informácie o iných uzloch. Ide o tradičný komponent pre všetky decentralizované kryptomeny.

Ďalej tu máme modul na ukladanie blockchainových dát, spracovanie, výber prioritnej vetvy, pridávanie blokov, odpájanie blokov, overovanie týchto blokov atď.

Tretí modul sa nazýva EVM (Virtuálny stroj Ethereum) – ide o virtuálny stroj, ktorý prijíma bytekód z transakcií Ethereum. Tento modul berie aktuálny stav konkrétneho účtu a mení jeho stav na základe prijatého bajtkódu. Verzia virtuálneho počítača na každom uzle siete musí byť rovnaká. Výpočty, ktoré prebiehajú na každom uzle Etherea, sú úplne rovnaké, ale prebiehajú asynchrónnym spôsobom: niekto skontroluje a prijme túto transakciu skôr, to znamená, že vykoná všetok kód v nej obsiahnutý, a niekto neskôr. V súlade s tým, keď je transakcia vytvorená, je distribuovaná do siete, uzly ju akceptujú a v čase overenia, rovnakým spôsobom, ako sa bitcoinový skript vykonáva v bitcoine, sa tu vykoná bajtový kód virtuálneho stroja.

Transakcia sa považuje za overenú, ak bol vykonaný všetok kód v nej obsiahnutý, bol vygenerovaný a uložený nový stav určitého účtu, kým nie je jasné, či bola táto transakcia aplikovaná alebo nie. Ak je transakcia aplikovaná, potom sa tento stav považuje nielen za dokončený, ale aj za aktuálny. Existuje databáza, ktorá uchováva stav každého účtu pre každý sieťový uzol. Vzhľadom na to, že všetky výpočty prebiehajú rovnakým spôsobom a stav blockchainu je rovnaký, bude aj databáza obsahujúca stavy všetkých účtov rovnaká pre každý uzol.

Mýty a obmedzenia inteligentných zmlúv

Pokiaľ ide o obmedzenia, ktoré existujú pre platformy inteligentných zmlúv podobné Ethereum, možno uviesť nasledujúce:

  • vykonávanie kódu;
  • alokovať pamäť;
  • blockchainové dáta;
  • posielať platby;
  • vytvoriť novú zmluvu;
  • volať iné zmluvy.

Pozrime sa na obmedzenia, ktoré sú uvalené na virtuálny stroj, a podľa toho vyvrátime niektoré mýty o inteligentných zmluvách. Na virtuálnom stroji, ktorý môže byť nielen v Ethereu, ale aj na podobných platformách, môžete vykonávať skutočne ľubovoľné logické operácie, teda písať kód a tam sa vykoná, môžete dodatočne alokovať pamäť. Poplatok sa však platí osobitne za každú operáciu a za každú ďalšiu pridelenú jednotku pamäte.

Ďalej môže virtuálny stroj čítať údaje z blockchainovej databázy, aby tieto údaje použil ako spúšťač na vykonanie jednej alebo druhej logiky inteligentnej zmluvy. Virtuálny stroj môže vytvárať a odosielať transakcie, môže vytvárať nové zmluvy a volať metódy iných inteligentných zmlúv, ktoré sú už zverejnené v sieti: existujúce, dostupné atď.

Najčastejším mýtom je, že inteligentné zmluvy Ethereum môžu vo svojich podmienkach využívať informácie z akéhokoľvek internetového zdroja. Pravdou je, že virtuálny stroj nedokáže odoslať sieťovú požiadavku nejakému externému informačnému zdroju na internete, to znamená, že nie je možné napísať inteligentnú zmluvu, ktorá rozdelí hodnotu medzi používateľov v závislosti od toho, aké je napríklad počasie vonku, alebo kto vyhral nejaký šampionát, alebo na základe toho, aký iný incident sa stal vo vonkajšom svete, pretože informácie o týchto incidentoch jednoducho nie sú v databáze samotnej platformy. To znamená, že na blockchaine o tom nie je nič. Ak sa tam neobjaví, virtuálny počítač nemôže tieto údaje použiť ako spúšťače.

Nevýhody Etherea

Uveďme si tie hlavné. Prvou nevýhodou je, že existujú určité ťažkosti pri navrhovaní, vývoji a testovaní inteligentných zmlúv v Ethereu (Ethereum používa jazyk Solidity na písanie inteligentných zmlúv). Prax totiž ukazuje, že veľmi veľké percento všetkých chýb má na svedomí ľudský faktor. V skutočnosti to platí pre už napísané inteligentné zmluvy Ethereum, ktoré majú priemernú alebo vyššiu zložitosť. Ak je pri jednoduchých smart kontraktoch pravdepodobnosť chyby malá, tak pri zložitých smart kontraktoch veľmi často dochádza k chybám, ktoré vedú ku krádeži finančných prostriedkov, ich zmrazeniu, zničeniu smart kontraktov neočakávaným spôsobom a pod. známy.

Druhou nevýhodou je, že samotný virtuálny stroj nie je dokonalý, keďže ho tiež píšu ľudia. Môže vykonávať ľubovoľné príkazy a v tom spočíva zraniteľnosť: množstvo príkazov môže byť nakonfigurovaných určitým spôsobom, ktorý povedie k vopred nepredvídateľným následkom. Ide o veľmi zložitú oblasť, no už existuje niekoľko štúdií, ktoré ukazujú, že tieto zraniteľnosti existujú v súčasnej verzii siete Ethereum a môžu viesť k zlyhaniu mnohých smart kontraktov.

Ďalšia veľká ťažkosť, možno ju považovať za nevýhodu. Spočíva v tom, že môžete prakticky alebo technicky dospieť k záveru, že ak zostavíte bajtový kód zmluvy, ktorá sa bude vykonávať na virtuálnom stroji, môžete určiť konkrétne poradie operácií. Pri spoločnom vykonávaní tieto operácie značne zaťažia virtuálny stroj a spomalia ho neúmerne k poplatku, ktorý bol za vykonanie týchto operácií zaplatený.

V minulosti už bolo vo vývoji Etherea obdobie, kedy mnoho chlapov, ktorí do detailov rozumeli fungovaniu virtuálneho stroja, nachádzalo takéto zraniteľnosti. V skutočnosti transakcie zaplatili veľmi malý poplatok, ale prakticky spomalili celú sieť. Tieto problémy je veľmi ťažké vyriešiť, pretože je potrebné ich po prvé určiť, po druhé upraviť cenu za vykonávanie týchto operácií a po tretie vykonať hard fork, čo znamená aktualizáciu všetkých sieťových uzlov na novú verziu. softvéru a potom súčasnú aktiváciu týchto zmien.

Čo sa týka Etherea, vykonalo sa veľa výskumov, získalo sa veľa praktických skúseností: pozitívnych aj negatívnych, no napriek tomu tu zostávajú ťažkosti a slabé miesta, s ktorými sa stále treba nejako vysporiadať.

Tematická časť článku je teda dokončená, prejdime k otázkam, ktoré vyvstávajú pomerne často.

Najčastejšie otázky

— Ak chcú všetky strany existujúceho smart kontraktu zmeniť podmienky, môžu tento smart kontrakt zrušiť pomocou multisig a potom vytvoriť nový smart kontrakt s aktualizovanými podmienkami jeho realizácie?

Odpoveď tu bude dvojaká. prečo? Pretože na jednej strane je smart kontrakt definovaný raz a už z neho nevyplývajú žiadne zmeny a na druhej strane môže mať vopred napísanú logiku, ktorá počíta s úplnou alebo čiastočnou zmenou niektorých podmienok. To znamená, že ak chcete niečo zmeniť vo svojej smart zmluve, musíte predpísať podmienky, za ktorých môžete tieto podmienky aktualizovať. Obnovenie zmluvy je teda možné zorganizovať len takým obozretným spôsobom. Ale aj tu sa môžete dostať do problémov: urobte nejakú chybu a získajte zodpovedajúcu zraniteľnosť. Preto takéto veci musia byť veľmi podrobné a starostlivo navrhnuté a testované.

— Čo ak mediátor uzavrie dohodu s jednou zo zúčastnených strán: escrow alebo smart kontrakt? Vyžaduje sa v inteligentnej zmluve mediátor?

V inteligentnej zmluve nie je potrebný mediátor. Možno neexistuje. Ak v prípade úschovy mediátor vstúpi do konšpirácie s jednou zo strán, tak áno, táto schéma potom prudko stráca všetku svoju hodnotu. Mediátori sa preto vyberajú tak, aby im zároveň dôverovali všetky strany zapojené do tohto procesu. V súlade s tým jednoducho neprenesiete mince na adresu s viacerými podpismi s sprostredkovateľom, ktorému nedôverujete.

— Je možné pomocou jednej transakcie Ethereum preniesť mnoho rôznych tokenov z vašej adresy na rôzne cieľové adresy, napríklad výmenné adresy, kde sa tieto tokeny obchodujú?

Toto je dobrá otázka a týka sa transakčného modelu Ethereum a toho, ako sa líši od modelu Bitcoin. A rozdiel je radikálny. Ak v transakčnom modeli Ethereum jednoducho prevediete coiny, potom sa prenesú iba z jednej adresy na druhú, žiadna zmena, iba konkrétna suma, ktorú ste zadali. Inými slovami, nejde o model nevyčerpaných výstupov (UTXO), ale o model účtov a zodpovedajúcich zostatkov. Teoreticky je možné poslať niekoľko rôznych tokenov v jednej transakcii naraz, ak napíšete prefíkanú inteligentnú zmluvu, ale stále budete musieť vykonať veľa transakcií, vytvoriť zmluvu, potom do nej preniesť tokeny a mince a potom zavolať príslušnú metódu . Vyžaduje si to úsilie a čas, takže v praxi to takto nefunguje a všetky platby v Ethereu prebiehajú v samostatných transakciách.

— Jedným z mýtov o platforme Ethereum je, že nie je možné opísať podmienky, ktoré budú závisieť od údajov externého internetového zdroja, čo teda robiť?

Riešením je, že samotná inteligentná zmluva môže poskytnúť jeden alebo viac takzvaných dôveryhodných veštcov, ktoré zbierajú údaje o stave vecí vo vonkajšom svete a prostredníctvom špeciálnych metód ich prenášajú do inteligentných zmlúv. Samotná zmluva považuje za pravdivé údaje, ktoré získala od dôveryhodných strán. Pre väčšiu spoľahlivosť si jednoducho vyberte veľkú skupinu veštcov a minimalizujte riziko ich tajnej dohody. Samotná zmluva nemusí brať do úvahy údaje od veštcov, ktoré odporujú väčšine.

Tejto téme je venovaná jedna z prednášok online kurzu o Blockchaine – “Úvod do inteligentných zmlúv".

Zdroj: hab.com

Pridať komentár