Úvod do chytrých smluv

V tomto článku se podíváme na to, co to jsou smart kontrakty, co to je, seznámíme se s různými platformami smart kontraktů, jejich funkcemi a také probereme, jak fungují a jaké výhody mohou přinést. Tento materiál bude velmi užitečný pro čtenáře, kteří se s tématem chytrých kontraktů dobře neorientují, ale chtějí se mu přiblížit.

Běžná smlouva vs. chytrá smlouva

Než se pustíme do detailů, ukažme si na příkladu rozdíly mezi běžnou smlouvou, která je specifikována na papíře, a smart smlouvou, která je reprezentována digitálně.

Úvod do chytrých smluv

Jak to fungovalo před příchodem chytrých smluv? Představte si skupinu lidí, kteří chtějí stanovit určitá pravidla a podmínky pro rozdělování hodnot a také určitý mechanismus, který zaručí realizaci tohoto rozdělování podle daných pravidel a podmínek. Pak se sešli, sepsali papír, na který si zapsali své identifikační údaje, termíny, příslušné hodnoty, datovali je a podepsali. Tato smlouva byla také ověřena důvěryhodnou stranou, například notářem. Dále se tito lidé vydali různými směry se svou papírovou kopií takové smlouvy a začali provádět některé akce, které nemusely odpovídat samotné smlouvě, to znamená, že udělali jednu věc, ale na papíře bylo potvrzeno, že by měli něco udělat. úplně jiný. A jak z této situace ven? Ve skutečnosti jeden z členů skupiny musí vzít tento papír, vzít nějaké důkazy, dát je k soudu a dosáhnout souladu mezi smlouvou a skutečnými akcemi. Poměrně často je obtížné dosáhnout spravedlivé realizace této smlouvy, což vede k nepříjemným následkům.

Co lze říci o chytrých smlouvách? Kombinují jak možnost sepsání podmínek smlouvy, tak mechanismus jejich striktní implementace. Pokud byly nastaveny podmínky a byla podepsána příslušná transakce nebo žádost, pak po přijetí této žádosti nebo transakce již není možné podmínky měnit ani ovlivňovat jejich realizaci.

Existuje jeden validátor nebo celá síť a také databáze, která ukládá všechny chytré smlouvy, které byly předloženy k provedení, v přísném chronologickém pořadí. Je také důležité, že tato databáze musí obsahovat všechny spouštěcí podmínky pro provedení smart kontraktu. Navíc musí zohlednit samotnou hodnotu, jejíž rozdělení je ve smlouvě popsáno. Pokud se to týká nějaké digitální měny, tak by to měla tato databáze zohledňovat.

Jinými slovy, validátoři smart kontraktů musí mít přístup ke všem datům, na kterých smart kontrakt funguje. Například jediná databáze by měla být použita k současnému účtování digitálních měn, uživatelských zůstatků, uživatelských transakcí a časových razítek. Pak v chytré smlouvě může být podmínkou zůstatek uživatele v určité měně, příchod určitého času nebo skutečnost, že byla provedena určitá transakce, ale nic víc.

Definice chytré smlouvy

Obecně platí, že samotná terminologie byla vytvořena výzkumníkem Nickem Szabo a poprvé použita v roce 1994 a byla zdokumentována v roce 1997 v článku, který popisuje samotnou myšlenku chytrých smluv.

Inteligentní smlouvy znamenají, že se provádí určitá automatizace distribuce hodnoty, která může záviset pouze na těch podmínkách, které jsou předem stanoveny. Ve své nejjednodušší podobě to vypadá jako smlouva s přesně definovanými podmínkami, kterou podepisují určité strany.

Inteligentní smlouvy jsou navrženy tak, aby minimalizovaly důvěru ve třetí strany. Někdy je zcela vyloučeno rozhodovací centrum, na kterém vše závisí. Takové smlouvy se navíc snáze kontrolují. Je to důsledek některých konstrukčních prvků takového systému, ale nejčastěji rozumíme inteligentní smlouvou decentralizované prostředí a přítomnost funkcí, které umožňují komukoli analyzovat databázi a provádět úplný audit plnění smluv. Tím je zajištěna ochrana před zpětnými změnami údajů, které by znamenaly změny v plnění samotné smlouvy. Digitalizace většiny procesů při vytváření a spouštění smart kontraktu často zjednodušuje technologii a náklady na jejich implementaci.

Jednoduchý příklad – úschovní služba

Podívejme se na velmi jednoduchý příklad. Pomůže vám to přiblížit se k pochopení funkčnosti chytrých kontraktů a také lépe pochopit, v jakých případech by se měly používat.

Úvod do chytrých smluv

Lze jej implementovat také pomocí bitcoinu, i když v současné době lze bitcoin stěží nazvat plnohodnotnou platformou pro chytré smlouvy. Takže máme nějaké kupce a máme internetový obchod. Zákazník si chce v tomto obchodě koupit monitor. V nejjednodušším případě kupující dokončí a odešle platbu a internetový obchod ji přijme, potvrdí a následně zboží odešle. V této situaci je však potřeba velká důvěra – kupující musí důvěřovat internetovému obchodu za celou cenu monitoru. Vzhledem k tomu, že internetový obchod může mít v očích kupujícího nízkou pověst, existuje riziko, že z nějakého důvodu po přijetí platby obchod odmítne službu a zboží kupujícímu nezašle. Kupující si proto klade otázku (a v souladu s tím si tuto otázku klade i internetový obchod), co lze v tomto případě použít, aby se tato rizika minimalizovala a takové transakce byly spolehlivější.

V případě bitcoinu je možné umožnit kupujícímu a prodávajícímu nezávisle vybrat zprostředkovatele. Existuje mnoho lidí, kteří se podílejí na řešení kontroverzních problémů. A naši účastníci si mohou z obecného seznamu mediátorů vybrat toho, kterému budou důvěřovat. Společně vytvářejí 2 ze 3 vícepodpisových adres, kde jsou tři klíče a dva podpisy s libovolnými dvěma klíči jsou nutné k utrácení mincí z této adresy. Jeden klíč bude patřit kupujícímu, druhý internetovému obchodu a třetí zprostředkovateli. A na takovou vícepodpisovou adresu kupující zašle částku potřebnou k zaplacení monitoru. Nyní, když prodejce uvidí, že peníze jsou na nějakou dobu zablokovány na adrese s více podpisy, která na něm závisí, může monitor klidně poslat poštou.

Dále kupující obdrží zásilku, zkontroluje zboží a rozhodne o konečném nákupu. Může zcela souhlasit s poskytovanou službou a podepsat transakci svým klíčem, kdy převádí coiny z multipodpisové adresy na prodejce, nebo může být s něčím nespokojený. Ve druhém případě kontaktuje zprostředkovatele, aby dal dohromady alternativní transakci, která ty coiny rozdělí jinak.

Řekněme, že monitor dorazil trochu poškrábaný a sada neobsahovala kabel pro připojení k počítači, ačkoli na webu internetového obchodu bylo uvedeno, že kabel by měl být součástí sady. Poté kupující shromáždí důkazy potřebné k prokázání zprostředkovatele, že byl v této situaci podveden: pořídí snímky stránky, vyfotí stvrzenku pošty, vyfotí škrábance na monitoru a ukáže, že pečeť byla zlomený a kabel byl vytažen. Internetový obchod zase shromažďuje své důkazy a předává je zprostředkovateli.

Zprostředkovatel má zájem současně uspokojit jak rozhořčení kupujícího, tak zájmy internetového obchodu (proč se ukáže později). Představuje transakci, ve které budou mince z adresy s více podpisy utraceny v určitém poměru mezi kupujícím, internetovým obchodem a zprostředkovatelem, protože si část bere pro sebe jako odměnu za svou práci. Řekněme, že 90 % z celkové částky připadne prodávajícímu, 5 % zprostředkovateli a 5 % kompenzace kupujícímu. Zprostředkovatel tuto transakci podepisuje svým klíčem, ale zatím nelze uplatnit, protože vyžaduje dva podpisy, ale jen jeden stojí za to. Takovou transakci odešle jak kupujícímu, tak prodávajícímu. Pokud je alespoň jeden z nich spokojen s touto možností redistribuce coinů, pak bude transakce předem podepsána a distribuována do sítě. K jejímu ověření stačí, aby jedna ze stran transakce souhlasila s možností zprostředkovatele.

Důležité je zpočátku zvolit mediátora tak, aby mu oba účastníci důvěřovali. V tomto případě bude jednat nezávisle na zájmech jednoho či druhého a objektivně posoudí situaci. Pokud zprostředkovatel neposkytne možnost distribuce mincí, která uspokojí alespoň jednoho účastníka, může kupující i internetový obchod po vzájemné dohodě zaslat mince na novou adresu s více podpisy uvedením svých dvou podpisů. Nová adresa s více podpisy bude sestavena s jiným zprostředkovatelem, který může být v dané věci kompetentnější a poskytnout lepší možnost.

Příklad s ubytovnou a lednicí

Podívejme se na složitější příklad, který explicitněji zobrazuje možnosti chytré smlouvy.

Úvod do chytrých smluv

Řekněme, že jsou tam tři kluci, kteří se nedávno nastěhovali do stejného pokoje na koleji. Všichni tři mají zájem koupit si do pokoje ledničku, kterou by mohli používat společně. Jeden z nich se dobrovolně přihlásil, že vybere potřebnou částku na nákup lednice a domluví se s prodejcem. Potkali se však teprve nedávno a není mezi nimi dostatečná důvěra. Je zřejmé, že dva z nich riskují tím, že dávají peníze třetímu. Navíc se potřebují dohodnout při výběru prodejce.

Mohou využít escrow službu, tedy vybrat si zprostředkovatele, který bude sledovat provedení transakce a řešit kontroverzní problémy, pokud nějaké nastanou. Poté, co souhlasili, sepíší inteligentní smlouvu a předepíší v ní určité podmínky.

První podmínkou je, že do určité doby, řekněme do jednoho týdne, musí odpovídající smart contract účet obdržet tři platby z určitých adres na určitou částku. Pokud se tak nestane, smart kontrakt se zastaví a vrátí mince všem účastníkům. Pokud je podmínka splněna, pak se nastaví hodnoty identifikátorů prodávajícího a zprostředkovatele a zkontroluje se, zda všichni účastníci souhlasí s výběrem prodávajícího a zprostředkovatele. Po splnění všech podmínek budou prostředky převedeny na zadané adresy. Tento přístup může chránit účastníky před podvody z jakékoli strany a obecně eliminuje potřebu důvěřovat.

Na tomto příkladu vidíme samotný princip, že tato možnost krok za krokem nastavovat parametry pro splnění každé podmínky umožňuje vytvářet systémy libovolné složitosti a hloubky vnořených úrovní. Ve smart kontraktu si navíc můžete nejprve definovat první podmínku a až po jejím splnění můžete nastavit parametry pro další podmínku. Jinými slovy, podmínka je formálně zapsána a parametry pro ni lze nastavit již během její činnosti.

Klasifikace smart kontraktů

Pro klasifikaci můžete nastavit různé skupiny kritérií. V okamžiku vývoje technologií jsou však relevantní čtyři z nich.

Inteligentní smlouvy lze odlišit prostředím provádění, které může být centralizované nebo decentralizované. V případě decentralizace máme mnohem větší nezávislost a odolnost proti chybám při realizaci chytrých kontraktů.

Lze je také odlišit procesem nastavení a plnění podmínek: mohou být volně programovatelné, omezené nebo předdefinované, tedy striktně typované. Když jsou na platformě smart contract pouze 4 konkrétní smart kontrakty, parametry pro ně lze nastavit jakkoliv. Jejich nastavení je tedy mnohem jednodušší: vybereme smlouvu ze seznamu a předáme parametry.

Podle způsobu iniciace existují automatizované smart kontrakty, to znamená, že když nastanou určité podmínky, jsou samovykonatelné a existují kontrakty, ve kterých jsou podmínky specifikovány, ale platforma automaticky nekontroluje jejich splnění; je třeba spustit samostatně.

Chytré smlouvy se navíc liší úrovní soukromí. Mohou být buď zcela otevřené, částečně nebo zcela důvěrné. To druhé znamená, že pozorovatelé třetích stran nevidí podmínky smart kontraktů. Téma soukromí je však velmi široké a je lepší ho zvažovat odděleně od aktuálního článku.

Níže se blíže podíváme na první tři kritéria, abychom lépe pochopili aktuální téma.

Inteligentní smlouvy za běhu

Úvod do chytrých smluv

Na základě realizačního prostředí se rozlišuje mezi centralizovanými a decentralizovanými platformami pro chytré smlouvy. V případě centralizovaných digitálních kontraktů se používá jediná služba, kde je pouze jeden validátor a může existovat služba zálohování a obnovy, která je také centrálně spravována. Existuje jedna databáze, která uchovává všechny potřebné informace pro nastavení podmínek chytré smlouvy a distribuci hodnoty, která je zohledněna právě v této databázi služeb. Taková centralizovaná služba má klienta, který si s určitými požadavky stanoví podmínky a takové smlouvy využívá. Vzhledem k centralizované povaze platformy mohou být autentizační mechanismy méně bezpečné než u kryptoměn.

Jako příklad si můžeme vzít poskytovatele mobilní komunikace (různé mobilní operátory). Řekněme, že určitý operátor vede na svých serverech centralizovanou evidenci provozu, který může být přenášen v různých formátech, například: ve formě hlasových hovorů, přenosu SMS, mobilního internetového provozu a podle různých standardů a také vede záznamy prostředků na zůstatcích uživatelů. V souladu s tím může poskytovatel mobilních komunikací sepisovat smlouvy o vyúčtování poskytovaných služeb a jejich úhradě s různými podmínkami. V tomto případě je snadné nastavit podmínky jako „pošlete SMS s takovým a takovým kódem na takové a takové číslo a obdržíte takové a takové podmínky pro distribuci provozu“.

Lze uvést ještě jeden příklad: klasické banky s rozšířenou funkcionalitou internetového bankovnictví a velmi jednoduchými smlouvami, jako jsou pravidelné platby, automatická konverze příchozích plateb, automatické srážení úroků na určený účet atd.

Pokud se bavíme o chytrých kontraktech s decentralizovaným exekučním prostředím, pak tu máme skupinu validátorů. V ideálním případě se validátorem může stát kdokoli. Vzhledem k protokolu synchronizace databáze a dosažení konsensu máme nějakou společnou databázi, která nyní bude ukládat všechny transakce s přesně popsanými smlouvami a ne nějaké podmíněné dotazy, jejichž formáty se často mění a neexistuje žádná otevřená specifikace. Zde budou transakce obsahovat pokyny k provedení smlouvy podle přísné specifikace. Tato specifikace je otevřená, a proto mohou sami uživatelé platformy auditovat a ověřovat chytré smlouvy. Zde vidíme, že decentralizované platformy jsou lepší než centralizované, pokud jde o nezávislost a odolnost proti chybám, ale jejich návrh a údržba jsou mnohem složitější.

Chytré smlouvy metodou stanovení a plnění podmínek

Nyní se podíváme blíže na to, jak se mohou chytré smlouvy lišit ve způsobu, jakým nastavují a plní podmínky. Zde obracíme naši pozornost na chytré kontrakty, které jsou náhodně programovatelné a Turing kompletní. Inteligentní smlouva s kompletním Turingem vám umožňuje nastavit téměř jakékoli algoritmy jako podmínky pro provedení smlouvy: cykly zápisu, některé funkce pro výpočet pravděpodobnosti a podobně - až po vlastní algoritmy elektronického podpisu. V tomto případě máme na mysli skutečně libovolné psaní logiky.

Existují také libovolné smart kontrakty, ale nikoli Turingovy úplné. To zahrnuje bitcoiny a litecoiny s vlastním skriptem. To znamená, že můžete používat pouze určité operace v libovolném pořadí, ale už nemůžete psát smyčky a své vlastní algoritmy.

Kromě toho existují platformy pro chytré smlouvy, které implementují předem definované chytré smlouvy. Patří mezi ně Bitshares a Steemit. Bitshares má řadu chytrých kontraktů pro obchodování, správu účtů, správu samotné platformy a jejích parametrů. Steemit je podobná platforma, ale ta se již nezaměřuje na vydávání tokenů a obchodování jako Bitshares, ale na blogování, tedy decentralizovaně ukládá a zpracovává obsah.

Libovolné Turingovy kompletní smlouvy zahrnují platformu Ethereum a RootStock, který je stále ve vývoji. Níže se proto budeme věnovat trochu podrobněji platformě Ethereum smart contract.

Inteligentní smlouvy metodou iniciace

Na základě způsobu iniciace lze také smart kontrakty rozdělit minimálně do dvou skupin: automatizované a manuální (neautomatizované). Automatizované se vyznačují tím, že za všech známých parametrů a podmínek se smart kontrakt provádí zcela automaticky, to znamená, že nevyžaduje zasílání žádných dalších transakcí a utrácení další provize za každé další provedení. Samotná platforma má všechna data pro výpočet toho, jak bude chytrá smlouva dokončena. Logika tam není libovolná, ale předem určená a to vše je předvídatelné. To znamená, že můžete předem odhadnout složitost realizace smart kontraktu, použít za to nějakou stálou provizi a všechny procesy pro její implementaci jsou efektivnější.

U inteligentních smluv, které jsou volně naprogramovány, není provádění automatizované. Pro zahájení takové chytré smlouvy je prakticky v každém kroku potřeba vytvořit novou transakci, která vyvolá další fázi realizace nebo metodu další chytré smlouvy, zaplatit příslušnou provizi a počkat na potvrzení transakce. Provádění může být dokončeno úspěšně nebo ne, protože kód inteligentní smlouvy je libovolný a mohou se objevit některé nepředvídatelné okamžiky, jako je věčná smyčka, nedostatek některých parametrů a argumentů, neošetřené výjimky atd.

Účty Ethereum

Typy účtů Ethereum

Podívejme se, jaké typy účtů mohou existovat na platformě Ethereum. Jsou zde pouze dva typy účtů a jiné možnosti nejsou. První typ se nazývá uživatelský účet, druhý je smluvní účet. Pojďme zjistit, jak se liší.

Uživatelský účet je ovládán pouze osobním klíčem elektronického podpisu. Majitel účtu generuje svůj vlastní pár klíčů pro elektronický podpis pomocí algoritmu ECDSA (Elliptic Curve Digital Signature Algorithm). Stav tohoto účtu mohou změnit pouze transakce podepsané tímto klíčem.

Pro účet smart contract je poskytována samostatná logika. Lze jej ovládat pouze předdefinovaným softwarovým kódem, který zcela určuje chování smart kontraktu: jak bude za určitých okolností spravovat své coiny, z iniciativy kterého uživatele a za jakých dalších podmínek budou tyto coiny distribuovány. Pokud některé body vývojáři neposkytnou v kódu programu, mohou nastat problémy. Inteligentní smlouva může například získat určitý stav, ve kterém neakceptuje zahájení dalšího provádění od žádného z uživatelů. V tomto případě budou coiny skutečně zmrazeny, protože smart kontrakt neumožňuje opuštění tohoto stavu.

Jak se vytvářejí účty na Ethereu

V případě uživatelského účtu vlastník nezávisle generuje klíčový pár pomocí ECDSA. Je důležité poznamenat, že Ethereum používá přesně stejný algoritmus a přesně stejnou eliptickou křivku pro elektronické podpisy jako Bitcoin, ale adresa se počítá trochu jiným způsobem. Zde se již nepoužívá výsledek dvojitého hašování jako u Bitcoinu, ale jednoduché hašování je zajištěno funkcí Keccak v délce 256 bitů. Z výsledné hodnoty jsou odříznuty nejméně významné bity, konkrétně 160 nejméně významných bitů výstupní hodnoty hash. V důsledku toho získáme adresu v Ethereu. Ve skutečnosti to zabere 20 bajtů.

Vezměte prosím na vědomí, že identifikátor účtu v Ethereu je zakódován v hex bez použití kontrolního součtu, na rozdíl od bitcoinu a mnoha dalších systémů, kde je adresa zakódována v základním 58 číselném systému s přidáním kontrolního součtu. To znamená, že při práci s identifikátory účtů v Ethereu musíte být opatrní: i jedna chyba v identifikátoru zaručeně povede ke ztrátě coinů.

Důležitou vlastností je, že uživatelský účet na úrovni obecné databáze je vytvořen v okamžiku, kdy přijme první příchozí platbu.

Vytvoření účtu chytré smlouvy vyžaduje úplně jiný přístup. Zpočátku jeden z uživatelů napíše zdrojový kód chytré smlouvy, poté je kód předán speciálním kompilátorem pro platformu Ethereum, čímž získá bajtkód pro svůj vlastní virtuální stroj Ethereum. Výsledný bajtkód je umístěn do speciálního pole transakce. Je certifikován jménem účtu iniciátora. Dále se tato transakce šíří po síti a umístí kód inteligentní smlouvy. Provize za transakci a v důsledku toho za provedení smlouvy se strhává ze zůstatku účtu iniciátora.

Každý smart kontrakt nutně obsahuje svého konstruktéra (tohoto kontraktu). Může být prázdný nebo může mít obsah. Po provedení konstruktoru se vytvoří identifikátor účtu chytré smlouvy, pomocí kterého můžete posílat coiny, volat určité metody chytré smlouvy atd.

Struktura transakce Ethereum

Aby to bylo jasnější, začneme se zabývat strukturou transakce Ethereum a příkladem kódu chytré smlouvy.

Úvod do chytrých smluv

Ethereum transakce se skládá z několika polí. První z nich, nonce, je určité sériové číslo transakce vzhledem k samotnému účtu, který ji distribuuje a je jejím autorem. To je nezbytné pro rozlišení dvojitých transakcí, tedy pro vyloučení případu, kdy je stejná transakce přijata dvakrát. Pomocí identifikátoru má každá transakce jedinečnou hodnotu hash.

Následuje pole jako cena plynu. To udává cenu, za kterou se základní měna Ethereum převádí na plyn, který se používá k platbě za provedení chytré smlouvy a alokaci zdroje virtuálního stroje. Co to znamená?

V bitcoinu jsou poplatky hrazeny přímo základní měnou – samotným bitcoinem. To je možné díky jednoduchému mechanismu jejich výpočtu: platíme striktně za množství dat obsažených v transakci. V Ethereu je situace složitější, protože je velmi obtížné spoléhat na objem transakčních dat. Zde může transakce obsahovat i programový kód, který bude na virtuálním stroji proveden a každá operace virtuálního stroje může mít jinou složitost. Existují také operace, které alokují paměť pro proměnné. Budou mít svou složitost, na které bude záviset platba za každou operaci.

Náklady na každou operaci v ekvivalentu plynu budou konstantní. Zavádí se speciálně za účelem stanovení konstantních nákladů na každou operaci. V závislosti na zatížení sítě se bude měnit cena plynu, tedy koeficient, podle kterého se základní měna převede na tuto pomocnou jednotku k výplatě provize.

Transakce v Ethereu má ještě jednu vlastnost: bajtový kód, který obsahuje pro provedení na virtuálním stroji, bude prováděn, dokud nebude dokončen s nějakým výsledkem (úspěchem nebo neúspěchem) nebo dokud se nevyčerpá určité množství přidělených coinů k zaplacení provize. . Aby se předešlo situaci, kdy v případě nějaké chyby byly všechny coiny z účtu odesílatele utraceny na provizi (například spuštěný nějaký druh věčného cyklu ve virtuálním stroji), existuje následující pole - startovací plyn (často nazývaný limit plynu) – určuje maximální množství coinů, které je odesílatel ochoten utratit za dokončení určité transakce.

Další pole se nazývá cílová adresa. Patří sem adresa příjemce mincí nebo adresa konkrétního smart kontraktu, jehož metody budou volány. Po něm přichází pole hodnota, kde se zadává množství mincí, které jsou odeslány na cílovou adresu.

Následuje zajímavý obor tzv datum, kam zapadá celá konstrukce. Nejedná se o samostatné pole, ale o celou strukturu, ve které je definován kód pro virtuální stroj. Zde můžete umístit libovolná data – existují pro to samostatná pravidla.

A poslední pole se nazývá podpis. Zároveň obsahuje jak elektronický podpis autora této transakce, tak veřejný klíč, kterým bude tento podpis ověřen. Z veřejného klíče můžete získat identifikátor účtu odesílatele této transakce, tedy jednoznačně identifikovat účet odesílatele v samotném systému. Zjistili jsme to hlavní o struktuře transakce.

Příklad kódu inteligentní smlouvy pro Solidity

Pojďme se nyní blíže podívat na nejjednodušší smart kontrakt na příkladu.

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

Výše je zjednodušený zdrojový kód, který pojme coiny uživatelů a na požádání je vrátí.

Existuje tedy bankovní inteligentní smlouva, která plní následující funkce: hromadí mince na svém zůstatku, to znamená, že když je transakce potvrzena a je uzavřena taková inteligentní smlouva, je vytvořen nový účet, který může obsahovat mince na svém zůstatku; pamatuje si uživatele a distribuci mincí mezi nimi; má několik metod pro správu zůstatků, to znamená, že je možné doplnit, vybrat a zkontrolovat zůstatek uživatele.

Pojďme si projít každý řádek zdrojového kódu. Tato smlouva má konstantní pole. Jeden z nich s typovou adresou se nazývá vlastník. Zde si smlouva pamatuje adresu uživatele, který tuto smart smlouvu vytvořil. Dále existuje dynamická struktura, která udržuje shodu mezi uživatelskými adresami a zůstatky.

Následuje metoda Banka – jmenuje se stejně jako smlouva. Toto je tedy jeho konstruktér. Zde je proměnná vlastník přiřazena adresa osoby, která umístila tento smart kontrakt do sítě. To je jediná věc, která se v tomto konstruktoru děje. To znamená, že msg jsou v tomto případě přesně ta data, která byla přenesena na virtuální stroj spolu s transakcí obsahující celý kód této smlouvy. V souladu s tím je msg.sender autorem této transakce, která hostí tento kód. Bude vlastníkem chytré smlouvy.

Způsob vkladu umožňuje převést určitý počet coinů na smluvní účet transakcí. V tomto případě chytrá smlouva, která tyto mince obdrží, je ponechá ve své rozvaze, ale ve struktuře zůstatků zaznamená, kdo přesně byl odesílatel těchto mincí, aby věděl, komu patří.

Další metoda se nazývá výběr a vyžaduje jeden parametr - množství coinů, které chce někdo z této banky vybrat. Tím se zkontroluje, zda je v zůstatku uživatele, který tuto metodu zavolá, dostatek mincí k jejich odeslání. Pokud je jich dostatek, pak samotný smart kontrakt vrátí volajícímu tento počet coinů.

Následuje metoda kontroly aktuálního zůstatku uživatele. Kdokoli zavolá tuto metodu, bude použit k načtení tohoto zůstatku v chytré smlouvě. Za zmínku stojí, že modifikátorem této metody je pohled. To znamená, že metoda sama o sobě nijak nemění proměnné své třídy a jde vlastně pouze o metodu čtení. Nevytváří se žádná samostatná transakce pro volání této metody, neplatí se žádný poplatek a všechny výpočty se provádějí lokálně, načež uživatel obdrží výsledek.

Ke zničení stavu smart kontraktu je potřeba metoda kill. A zde je dodatečná kontrola, zda je volající této metody vlastníkem této smlouvy. Pokud ano, pak se smlouva sama zničí a funkce zničení převezme jeden parametr - identifikátor účtu, na který smlouva pošle všechny coiny zbývající na jejím zůstatku. V tomto případě zbývající mince automaticky odejdou na adresu majitele smlouvy.

Jak funguje úplný uzel v síti Ethereum?

Podívejme se schematicky na to, jak se takové chytré kontrakty provádějí na platformě Ethereum a jak funguje úplný síťový uzel.

Úvod do chytrých smluv

Úplný uzel v síti Ethereum musí mít alespoň čtyři moduly.
Prvním, jako u každého decentralizovaného protokolu, je modul P2P networking - modul pro síťové připojení a práci s dalšími uzly, kde dochází k výměně bloků, transakcí a informací o dalších uzlech. Jedná se o tradiční součást pro všechny decentralizované kryptoměny.

Dále tu máme modul pro ukládání blockchainových dat, zpracování, výběr prioritní větve, připojování bloků, odpojování bloků, ověřování těchto bloků atd.

Třetí modul se nazývá EVM (Virtual Machine Ethereum) – jedná se o virtuální stroj, který přijímá bytecode z transakcí Ethereum. Tento modul bere aktuální stav konkrétního účtu a provádí změny jeho stavu na základě přijatého bajtkódu. Verze virtuálního počítače na každém síťovém uzlu musí být stejná. Výpočty, které probíhají na každém uzlu Ethereum, jsou úplně stejné, ale probíhají asynchronním způsobem: někdo zkontroluje a přijme tuto transakci dříve, to znamená, že provede veškerý kód v ní obsažený, a někdo později. V souladu s tím, když je vytvořena transakce, je distribuována do sítě, uzly ji akceptují a v okamžiku ověření, stejným způsobem, jakým je bitcoinový skript spouštěn v bitcoinu, je zde spuštěn bajtový kód virtuálního stroje.

Transakce je považována za ověřenou, pokud byl proveden veškerý kód v ní obsažený, byl vygenerován a uložen nový stav určitého účtu, dokud není jasné, zda byla tato transakce uplatněna či nikoli. Pokud je transakce aplikována, pak se tento stav považuje nejen za dokončený, ale i za aktuální. Existuje databáze, která ukládá stav každého účtu pro každý síťový uzel. Vzhledem k tomu, že všechny výpočty probíhají stejným způsobem a stav blockchainu je stejný, bude databáze obsahující stavy všech účtů také stejná pro každý uzel.

Mýty a omezení chytrých kontraktů

Pokud jde o omezení, která existují pro chytré smluvní platformy podobné Ethereum, lze uvést následující:

  • provádění kódu;
  • alokovat paměť;
  • blockchain data;
  • posílat platby;
  • vytvořit novou smlouvu;
  • volat další smlouvy.

Podívejme se na omezení, která jsou uvalena na virtuální stroj, a podle toho vyvracíme některé mýty o chytrých smlouvách. Na virtuálním stroji, který může být nejen v Ethereu, ale i na podobných platformách, můžete provádět skutečně libovolné logické operace, tedy psát kód a ten se tam spustí, můžete dodatečně alokovat paměť. Poplatek se však platí zvlášť za každou operaci a za každou další přidělenou jednotku paměti.

Dále může virtuální stroj číst data z blockchainové databáze, aby je mohl použít jako spouštěč pro provedení té či oné logiky inteligentní smlouvy. Virtuální stroj může vytvářet a odesílat transakce, může vytvářet nové smlouvy a volat metody jiných smart kontraktů, které jsou již v síti zveřejněny: existující, dostupné atd.

Nejčastějším mýtem je, že chytré smlouvy Ethereum mohou využívat informace z jakéhokoli internetového zdroje ve svých podmínkách. Pravda je taková, že virtuální stroj nemůže poslat síťový požadavek na nějaký externí informační zdroj na internetu, to znamená, že není možné sepsat chytrou smlouvu, která bude rozdělovat hodnotu mezi uživatele podle toho, jaké je například počasí venku, nebo kdo vyhrál nějaké mistrovství, nebo na základě toho, jaký jiný incident se stal ve vnějším světě, protože informace o těchto incidentech prostě nejsou v databázi samotné platformy. To znamená, že na blockchainu o tom nic není. Pokud se tam neobjeví, virtuální počítač nemůže tato data použít jako spouštěče.

Nevýhody Etherea

Uveďme si ty hlavní. První nevýhodou je, že existují určité potíže při navrhování, vývoji a testování chytrých smluv v Ethereu (Ethereum používá jazyk Solidity k psaní chytrých smluv). Praxe totiž ukazuje, že velmi velké procento všech chyb má na svědomí lidský faktor. To ve skutečnosti platí pro již napsané chytré smlouvy Ethereum, které mají průměrnou nebo vyšší složitost. Pokud je u jednoduchých smart kontraktů pravděpodobnost chyby malá, pak ve složitých smart kontraktech velmi často dochází k chybám, které vedou ke krádeži finančních prostředků, jejich zmrazení, zničení smart kontraktů neočekávaným způsobem apod. Mnoho takových případů je již známý.

Druhou nevýhodou je, že virtuální stroj sám o sobě není dokonalý, protože jej také píší lidé. Může provádět libovolné příkazy a v tom spočívá zranitelnost: řadu příkazů lze nakonfigurovat určitým způsobem, který povede k předem nepředvídatelným následkům. Jedná se o velmi složitou oblast, ale již existuje několik studií, které ukazují, že tyto zranitelnosti v současné verzi sítě Ethereum existují a mohou vést k selhání mnoha smart kontraktů.

Další velká potíž, dá se považovat za nevýhodu. Spočívá v tom, že můžete prakticky nebo technicky dospět k závěru, že když sestavíte bytecode smlouvy, která se bude provádět na virtuálním stroji, můžete určit nějaké konkrétní pořadí operací. Při společném provádění tyto operace značně zatíží virtuální stroj a zpomalí jej neúměrně k poplatku, který byl za provedení těchto operací zaplacen.

V minulosti už bylo ve vývoji Etherea období, kdy mnoho kluků, kteří do detailu rozuměli fungování virtuálního stroje, nacházelo takové zranitelnosti. Ve skutečnosti transakce zaplatily velmi malý poplatek, ale prakticky zpomalily celou síť. Tyto problémy je velmi obtížné vyřešit, protože je nutné je za prvé určit, za druhé upravit cenu za provádění těchto operací a za třetí provést hard fork, což znamená aktualizaci všech síťových uzlů na novou verzi. softwaru a poté současnou aktivaci těchto změn.

Pokud jde o Ethereum, bylo provedeno mnoho výzkumů, bylo získáno mnoho praktických zkušeností: pozitivních i negativních, ale přesto zde zůstávají potíže a zranitelnosti, se kterými je třeba se stále nějak vypořádat.

Tematická část článku je tedy dokončena, přejděme k otázkám, které vyvstávají poměrně často.

Často kladené dotazy

— Pokud chtějí všechny strany stávajícího smart kontraktu změnit podmínky, mohou tento smart kontrakt zrušit pomocí multisig a poté vytvořit nový smart kontrakt s aktualizovanými podmínkami jeho realizace?

Odpověď zde bude dvojí. Proč? Protože na jedné straně je chytrá smlouva definována jednou a již z ní nevyplývají žádné změny, a na druhé straně může mít předem napsanou logiku, která počítá s úplnou nebo částečnou změnou některých podmínek. To znamená, že pokud chcete ve své smart smlouvě něco změnit, pak musíte předepsat podmínky, za kterých můžete tyto podmínky aktualizovat. V souladu s tím lze obnovení smlouvy organizovat pouze takovým obezřetným způsobem. Ale i zde můžete narazit na problém: udělat nějakou chybu a získat odpovídající zranitelnost. Proto je třeba takové věci velmi podrobně a pečlivě navrhnout a otestovat.

— Co když zprostředkovatel uzavře dohodu s jednou ze zúčastněných stran: escrow nebo smart contract? Je v inteligentní smlouvě vyžadován zprostředkovatel?

V inteligentní smlouvě není vyžadován mediátor. Nemusí existovat. Pokud v případě úschovy mediátor vstoupí do spiknutí s jednou ze stran, pak ano, toto schéma pak prudce ztrácí veškerou svou hodnotu. Mediátoři jsou proto vybíráni tak, aby jim důvěřovaly všechny strany zapojené do tohoto procesu zároveň. V souladu s tím jednoduše nepřevedete coiny na vícepodpisovou adresu s prostředníkem, kterému nedůvěřujete.

— Je možné pomocí jedné transakce Ethereum přenést mnoho různých tokenů z vaší adresy na různé cílové adresy, například výměnné adresy, kde se s těmito tokeny obchoduje?

To je dobrá otázka a týká se transakčního modelu Ethereum a toho, jak se liší od modelu bitcoinů. A rozdíl je radikální. Pokud v transakčním modelu Ethereum jednoduše převedete coiny, pak se převedou pouze z jedné adresy na druhou, žádná změna, pouze vámi zadaná konkrétní částka. Jinými slovy, nejedná se o model nevyčerpaných výstupů (UTXO), ale o model účtů a odpovídajících zůstatků. Teoreticky je možné poslat několik různých tokenů v jedné transakci najednou, pokud napíšete mazanou chytrou smlouvu, ale stále budete muset provést mnoho transakcí, vytvořit smlouvu, poté do ní převést tokeny a coiny a poté zavolat příslušnou metodu . To vyžaduje úsilí a čas, takže v praxi to tak nefunguje a všechny platby v Ethereu probíhají v samostatných transakcích.

— Jedním z mýtů o platformě Ethereum je, že není možné popsat podmínky, které budou záviset na datech externího internetového zdroje, takže co dělat?

Řešením je, že samotný smart kontrakt může poskytovat jeden nebo více tzv. důvěryhodných orakulů, které shromažďují data o stavu věcí ve vnějším světě a předávají je do smart kontraktů speciálními metodami. Samotná smlouva považuje údaje, které obdržela od důvěryhodných stran, za pravdivé. Pro větší spolehlivost si jednoduše vyberte velkou skupinu věštců a minimalizujte riziko jejich tajné dohody. Samotná smlouva nesmí brát v úvahu údaje z věštců, které odporují většině.

Tomuto tématu je věnována jedna z přednášek online kurzu o Blockchainu – “Úvod do chytrých smluv".

Zdroj: www.habr.com

Přidat komentář