Smart kontrakt je chytrá smlouva, dohoda, úmluva v digitální podobě, která běží na technologii, která předpokládá řetězení bloků, resp. je spuštěna v blockchainu (do češtiny lze přeložit jako „bločenka.“ Tento termín byl v roce 2017 vybrán jako český ekvivalent).
Přesnější definice zní asi takto: Smart kontrakt je dohoda stran uchovaná v podobě zdrojového kódu zaznamenaného na blockchainové platformě, která zajišťuje nezávislost a automatické provedení smart kontraktu na základě předem daných podmínek.
Pokud chcete číst článek na bílém pozadí, klikněte ZDE
Smart kontrakt je terminus technicus, který zatím nemá ustálený český ekvivalent. Možná „chytrá smlouva.“ Hodně ve mně rezonuje hloupá smlouva, kterou je logicky každá jiná.
Co je to blockchain a jak funguje
Blockchain je distribuovaný a decentralizovaný digitální záznam transakcí. Je to velmi specifický druh databáze. Můžeme si ho představit jako online knihu účetních záznamů. Informace v něm n e j s o u uloženy na jednom místě. Místo toho jsou kopie blockchainu rozšířeny na mnoha různých počítačích po celém světě. Nespravuje ho žádná jednotlivá osoba, společnost nebo vláda. Správa je kolektivní, všemi účastníky sítě.
Fungování blockchainu můžeme rozdělit do čtyř základních kroků:
- musí být provedena operace – tzn. že musí dojít ke koupi nebo jakékoli výměně hodnoty, což zahájí historii transakcí;
- musí dojít k ověření transakce – dochází k potvrzení podrobností transakce jako je čas, účastníci či ekvivalent v penězích. Transakce ověřují počítače, spíše síť počítačů, kterých existují miliony
po celém světě; - musí dojít ke kódování transakce v bloku – po ověření všech transakcí je každému bloku, který je ukládá, přidělen jedinečný kód zvaný hash. Po hashování je blok přidán do blockchainu. Bloky nejsou anonymní, ale jsou veřejně přístupné k zobrazení. Skutečná jména účastníků zde nehledejme. Informace o nich jsou uloženy jako kód;
- když je blok přidán do blockchainu, je zobrazen široké veřejnosti – každý blok má velikost přibližně 1 MB a ukrývá v sobě několik tisíc transakcí. Má však vždy pouze jeden jedinečný hash. Pokud uživatel připojí svůj počítač k síti blockchainu, obdrží tento počítač kopii každého nově přidaného bloku. Takový počítač nese označení uzel.
Smart kontrakt v blockchainu
Smart kontrakty v blockchainu umožňují uživatelům uzavírat smlouvy přímo mezi sebou, bez prostředníka. Nejen, že to snižuje náklady, ale významně se zvyšuje rychlost, přesnost, efektivita, transparentnost a bezpečnost uzavíraných transakcí.
Český občanský zákoník stanovuje až na výjimky zásadu svobody volby formy smlouvy. Takovou formou může být i algoritmus smart kontraktů. Pokud se obě smluvní strany shodnou na obsahu smlouvy a je obsah možný vyjádřit programovacím jazykem, je „dokument“ smlouvou.
K tomu, aby mohl být smart kontrakt smlouvou musí splňovat čtyři základní kritéria:
- Ve smlouvě musí být zaznamenán její obsah.
- Musí být stanoveny smluvní strany, které „podepíší“ smlouvu, přičemž privátní klíč uživatele blockchainu lze považovat za dostatečný a po jeho připojení můžeme brát smart kontrakt
za podepsaný. - Obě strany musí uzavřít smlouvu dobrovolně a musí být ochotny řídit se jejím obsahem. To smart kontrakt splňuje, pouze je obsah smlouvy zaznamenaný specifickým programovacím jazykem.
- Musí být zachovány specifické vlastnosti typické pro smlouvu. Nicméně existují i smlouvy v ústní formě. Pokud smlouva nevyžaduje písemnou formu, její platnosti nic nebrání.
Smart kontrakt se musí uzavřít dle náležitostí českého práva, tzn. že musí dojít k nabídce smlouvy a k případnému přijetí nabídky. Obsah sepsaný algoritmem smart kontraktů by měl nést alespoň základní smluvní náležitosti, aby mohla být smlouva uzavřena jejím jednoduchým přijetím.
Smart kontrakt je de facto počítačový program, který vykonává naprogramované kroky po splnění všech nastavených podmínek.
Podmínky jsou vyjádřeny ve zdrojovém kódu. Ale pozor! I kódy mohou obsahovat chyby a nedostatky. Z tohoto důvodu je důležité smart kontrakty před spuštěním na blockchainu velmi pečlivě testovat.
Zdrojový kód, resp. podmínka smart kontraktu, je uchován na blockchainové platformě.
Blockchainová platforma je taková platforma, která pro svůj chod využívá blockchain a zároveň umožňuje používat smart kontrakty.
Například Bitcoin, v tomto smyslu, není blockchainovou platformou. Na svém blockchainu totiž umožňuje uchovávat pouze záznamy o převodech Bitcoinů z jednoho účtu na druhý. Aby mohl být považován za blockchainovou platformu, musel by kromě toho umožňovat i uchovávání záznamů v podobě zdrojového kódu, tedy smart kontraktů, a jejich provádění podle stanovených podmínek ve zdrojovém kódu.
Implementace na blockchainové platformě je z hlediska definice smart kontraktu důležitá. Blockchain zajišťuje zpětnou nezměnitelnost smart kontraktu. Bez této implementace by smluvní strana musela důvěřovat té druhé, že software následně neupraví. Může to působit i značné potíže, zvlášť když strany po uzavření smart kontraktu zjistí, že v jeho zdrojovém kódu byla chyba, nebo prostě jen chtějí smluvní vztah mezi sebou změnit. Do zdrojového kódu se zanese podmínka, aby byla jeho budoucí změna umožněna.
Nezávislost má smart kontrakt zabezpečenou tak, že jeho existence není závislá na vůli stran nebo vnější autoritě. Běžné smlouvy lze na základě dohody stran měnit či rušit, případně jednostranně vypovídat nebo od nich odstupovat. Když se strany nedohodnou, mohou se obrátit na rozhodce či soud, který autoritativně rozhodne o obsahu závazků.
Zdrojový kód smart kontraktu je oproti tomu uložen jako záznam v blockchainové databázi a je nezměnitelný. Jednoduše řečeno, smluvní podmínky jsou automatické. Strany smart kontraktu se nanejvýš mohou dohodnout na uzavření nového smart kontraktu, který bude de facto změnou původního. Provedení původního kontraktu při splnění stanovených podmínek nebude dotčeno.
Na jednu stranu je nezměnitelnost atraktivní z hlediska důvěry mezi uživateli. Na druhou stranu právě snaha o umožnění automatického provedení smluvních podmínek může být nepřekonatelným úskalím.
Příkladem možného využití smart kontraktu je crowdfunding, což je způsob získávání peněz formou sbírky na určitý projekt. V rámci crowdfundingu je většinou stanovena minimální částka, kterou musí dárci dohromady poslat, aby mohl být projekt autorem projektu realizován.
Podmínky jednoduchého smart kontraktu pro crowdfunding můžeme vyjádřit zhruba takto: uživatel X1 až X10 zašle částku Y1 až Y10 na projekt P. Když součet částek Y všech uživatelů X na projekt P dosáhne částky Z, budou peníze vyplaceny na účet autora projektu P. Když do určitého času C nebude vybrána částka Z, bude částka Y vrácena na účet uživatele X.
Problém nastane, pokud autor projektu bude chtít uživatele odměnit. Právě nezměnitelnost smluvních podmínek způsobí, že smart kontrakt nemůžeme využít.
Dalším úskalím smart kontraktů je přesnost smluvních ujednání. Jak již bylo zmíněno výše, podmínky smart kontraktu jsou vyjádřeny zdrojovým kódem, a ne běžnou řečí. Zatímco běžná řeč často umožňuje více výkladů, zdrojový kód je všemi počítači vyložen vždy jen jedním způsobem. Ten, kdo danému programovacímu jazyku rozumí, bude přesně vědět, co a za jakých podmínek smart kontrakt provede. Smart kontrakt bude typicky tvořen kombinací několika podmínek (když je splněna nějaká podmínka, tak se něco stane). Například: když pan X zaplatí částku Y na účet pana Z, tak se převede vlastnictví automobilu z pana Z na pana X.
Jeden zdrojový kód povede ve všech právních systémech ke stejným výsledkům, což u právního textu nemusí platit. Je zřejmé, že takto přesný zápis můžeme použít jen u některých typů smluv a jen na některá ustanovení smlouvy. Například těžko lze počítačovým programem ověřit, že nějaký výrobek je bezvadný. Využití smart kontraktů je také omezeno tím, že je provedení podmíněno zápisem do blockchainu. Například převod vlastnictví nemovitosti nastává zápisem do katastru nemovitostí, takže smart kontrakt nemůže smlouvu automaticky provést. K rozsáhlejšímu využití je nutné zajistit, aby obchody z různých oblastí mohly být uskutečňovány zápisem do blockchainu.
Jisté omezení lze spatřit i v tom, že předmětem smart kontraktu mohou být jen věci, jejichž vlastnictví nebo ovládání je digitalizované. Například ani takovou právně jednoduchou smlouvu, jakou je smlouva o zápůjčce peněz, nelze dost dobře realizovat pomocí smart kontraktu. Pan X a pan Y spolu sice mohou uzavřít smart kontrakt s následujícími podmínkami: pan X půjčí panu Y částku ve výši 100 000 Kč. Pan Y bude každý měsíc po dobu následujících 10 měsíců panu X zasílat 10 000 Kč. Jenže k tomu, aby závazek pana Y mohl být automaticky splněn (přesněji, aby existovala jistota, že bude automaticky splněn), musel by smart kontrakt na účtu pana Y od počátku zablokovat 100 000 Kč. Taková smlouva by najednou pro pana Y ztratila smysl. Přitom právě existence jistoty, že smlouva bude automaticky provedena,
a nikoli pouhé možnosti, že se tak stane, je pro smart kontrakt klíčová (absence této vlastnosti znamená, že se o smart kontrakt podle výše uvedené definice vůbec nejedná). Ze smlouvy o zápůjčce peněz lze funkční smart kontrakt (nejen technicky funkční, ale i takový, že by dávalo smysl ho uzavřít) vytvořit zajištěním půjčky zástavním právem. Smart kontrakt by pak nemusel celou dlužnou částku blokovat, protože v případě nesplacení dluhu by se pan X mohl uspokojit ze zástavy.
Blockchain jako systém s omezenou změnitelností také naráží na požadavky stanovené v nařízení Evropského parlamentu a Rady (EU) 2016/679 o ochraně fyzických osob v souvislosti se zpracováním osobních údajů a o volném pohybu těchto údajů (GDPR). V čl. 17 je zakotveno tzv. právo být zapomenut, podle nějž má subjekt právo na to, aby správce za určitých podmínek vymazal jeho osobní údaje. Jedním z důvodů může být kupříkladu situace, kdy osobní údaje již nejsou potřebné pro účely, pro které byly shromážděny. Je otázkou, zdali účastník, který údaje shromáždil, je schopný vůbec zajistit jejich odstranění, a pokud ano, zdali to nebude mít efekt na celou databázi.
Dalším významným ustanovením GDPR, které se dotýká použití blockchainu, je čl. 22, který se týká automatizovaného zpracování, včetně profilování. GDPR předpokládá, že zpracování bude možné pouze tehdy, je-li nezbytné k uzavření nebo plnění smlouvy mezi subjektem údajů a správcem údajů, a zároveň povoleno právem Unie nebo členského státu, které se na správce vztahuje a které rovněž stanoví vhodná opatření zajišťující ochranu práv a svobod a oprávněných zájmů subjektu údajů, nebo založeno na výslovném souhlasu subjektu údajů. I když budou podmínky splněny, subjekt údajů má podle čl. 22 odst. 3 v určitých případech právo napadnout rozhodnutí založené na automatizovaném zpracování. Do automatizovaného zpracování popsaného typu spadne například situace, kdy dojde ke snížení limitu kontokorentu z důvodu změny nahlížení poskytovatele půjčky na oblast, ve které dlužník žije. Nejen, že v řadě případů bude zapotřebí souhlas se zpracováním osobních údajů získat předem, ale následně nastane stejný problém s obtížnou změnitelností databáze jako v případě práva být zapomenut.
Z výše uvedeného vyplývá, že řádné uzavírání smart kontraktů výlučně formou jejich vyjádření ve zdrojovém kódu může být z pohledu českého práva problematické. Cestou, jak překlenout tyto nedostatky, se jeví uzavírání rámcových či obdobných smluv, ve kterých se definují části požadované právními předpisy, které lze jen s obtížemi vtělit do zdrojového kódu. Následně uzavřené smart kontrakty by byly v režimu těchto podmínek.
Možností, jak se vypořádat s GDPR, je buď neukládat v blockchainu žádné osobní údaje, což by samozřejmě snížilo jeho využití, pracovat s anonymizovanými daty, nebo alternativně by bylo možné osobní údaje uložit v rámci soukromé enkryptované (šifrované) databáze a na blockchainu pracovat pouze s jejím hashem.
Jak vytvořit smart kontrakt
Chceme-li napsat smart kontrakt, musíme znát alespoň jeden programovací jazyk používaný pro tento účel. Na blockchainu Ethereum jsou na výběr dva vhodné jazyky – Solidity a Vyper.
Budeme také potřebovat gas (jednotka, ve které se vyjadřují poplatky za jednotlivé úkony v síti Ethereum): čím složitější transakce v smart kontraktu, tím více je této jednotky potřeba.
Každá transakce specifikuje množství jednotky gas, které je zaplaceno za spuštění nějakého kódu. Takže celková zaplacená částka odpovídá celkovému použitému gasu krát jeho cena.
Jak napsat smart kontrakt závisí hlavně na tom, k čemu slouží. Čím je kontrakt jednodušší, tím rychleji to zvládneme, i když jsou naše znalosti programování docela základní. Existuje nesčetné množství výukových programů online, které nám pomohou začít.
Kontrakt musí být kompilován (překládán), než je nasazen na blockchain. Kompilace také pomůže zjistit, zda jsme všechno napsali správně a zda funguje vše tak, jak má.
Pokud chceme vědět víc, lze navštívit oficiální webovou stránku sítě Ethereum, která obsahuje mnoho podrobných vysvětlení, jak jejich smart kontrakty fungují. Nebo můžeme hledat na internetu. Je tam spousta užitečných článků a jsou vesměs srozumitelné.
Existuje řada renomovaných společností, které provádějí audity smart kontraktů.
Závěr
Smart kontrakty nacházejí využití v mnoha oblastech a jsou čím dál populárnější. I přes určité nevyjasněné problémy řeší skutečné problémy. Vědět, jak je využít může být neocenitelnou dovedností. Pro začátečníky je však pouhé pochopení jejich fungování vynikajícím výchozím bodem, který jim dává nad ostatními výhodu. Je totiž očekávána v tomto směru velká budoucnost.
Smart kontrakty jsou způsob, jak automatizovat procesy, které by se jinak musely provádět ručně, se všemi bezpečnostními prvky, transparentností a neměnností, které technologie blockchain nabízí.
Autorka: Jana Janečková