🇸🇰 Vývoj programovateľnosti blockchainu

Vývoj programovateľnosti blockchainu

Prvá generácia blockchainu je v podstate len transakčná sieť, podobne ako PayPal. Hodnota môže byť bezpodmienečne prevedená len z Alice na Boba. Bitcoin sa najčastejšie používa na jednoduchý prevod hodnoty. Existuje však možnosť napísať skript. Cardano a Ethereum sú platformy inteligentných kontraktov, takže na nich možno vytvoriť alternatívne bankové služby. Platformy umožňujú vývojárom implementovať zložitejšie programy a pracovať so stavmi aplikácií. V článku opíšeme možnosti programovania Bitcoinov, Ethereum a Cardano. Krátko sa tiež pozrieme na niektoré rozdiely medzi inteligentnými zmluvami Ethereum a skriptami Plutus.

Možnosti prvej generácie blockchainu

Bitcoin môžeme zaradiť do prvej generácie blockchainu. Bitcoin prišiel s konceptom digitálneho nedostatku. Vo všeobecnosti blockchain umožňuje vytvoriť pevnú menovú politiku, ktorá je nemenná alebo sa dá zmeniť len so súhlasom väčšiny. Môžu existovať digitálne mince (nazývané aj natívne mince), ktoré sa v rámci systému nedajú kopírovať.

Natívne mince sa používajú ako súčasť motivačného modelu siete (odmeny pre tých, ktorí decentralizujú a zabezpečujú sieť), ale to je pre tento článok nepodstatné.

Existencia mincí závisí od distribuovanej siete a decentralizácie.

Sieť blockchain môže zabezpečiť bezpečný prevod mincí medzi dvoma účastníkmi, napríklad od Alice k Bobovi, pretože zabezpečuje, aby sa tie isté mince nevydali dvakrát za sebou (ochrana proti dvojitému vydaniu mincí). Tým sa zachováva digitálna vzácnosť. Okrem toho zabezpečuje, že mince môže minúť len ich skutočný vlastník a nikto iný. V sieti blockchain nie je možné podvádzať, zmraziť účet, zabrániť niekomu používať sieť alebo míňať mince atď.

Na menovú politiku, digitálny nedostatok, spravodlivosť, rovnosť a prevod mincí dohliadajú všetci účastníci konsenzu siete.

Jednoducho povedané, prvá generácia blockchainu je schopná plniť len tieto základné funkcie. Vytvorenie pevnej menovej politiky a bezpodmienečný prevod digitálnej hodnoty medzi dvoma účastníkmi.

Prenos hodnoty je bezpodmienečný. Sieť blockchain môže overiť len to, že Alica je skutočným vlastníkom mincí a že je to ona, kto prostredníctvom transakcie dáva pokyn na prevod hodnoty na adresu Boba. Ak je overenie transakcie úspešné, Bob sa stane novým vlastníkom hodnoty (mincí), akonáhle je transakcia zahrnutá do nového bloku a blok je dokončený.

Na obrázku nižšie môžete vidieť, ako uzol Bitcoinu overuje bežnú transakciu. Alica posiela BTC Bobovi. Zdrojový kód na overovanie transakcií je definovaný v klientovi Bitcoinu. Uzol okrem iného overuje, či má transakcia platný digitálny podpis, ktorý dokazuje vlastníctvo BTC na vstupoch, a či transakcia míňa BTC, ktoré už boli minuté inou transakciou a ďalšie pravidlá konsenzu.

Overovanie bežných transakcií nie je závislé od programu tretej strany. Všetka logika je implementovaná v klientovi Bitcoinu. Ak je potrebné vykonať niečo zložitejšie nad rámec bežnej validácie, napríklad digitálny podpis, je potrebné, aby logiku naprogramovala tretia strana a aby protokol umožnil vykonanie programu.

Vyvstáva otázka. Má zmysel posielať transakcie podmienečne? Má zmysel raziť nové tokeny, ktoré by mali rovnaké alebo podobné vlastnosti ako natívne mince, t. j. nemennú menovú politiku? Alebo môže byť vôbec výhodné, aby sa menová politika menila (pálenie a opätovné razenie tokenov)? To by si vyžadovalo definovať pravidlá a umožniť ich validáciu decentralizovaným spôsobom.

Bitcoinový skript umožňuje implementáciu zložitejšej logiky. Je možné vytvárať transakcie s viacerými podpismi, transakcie s časovým zámkom (hodnotu možno minúť len po určitom dátume alebo výške bloku) alebo transakcie s hash zámkom (hodnotu možno minúť len odhalením tajomstva, ktoré zodpovedá danému hashu).

Skriptovanie umožňuje používateľom preniesť hodnotu do štátneho kanála (Lightning Network) alebo definovať podmienku pre utrácanie hodnoty tak, že transakciu musí podpísať definovaný počet účastníkov (napríklad dvaja z troch).

Bitcoin môže definovať podmienky na míňanie BTC.

Skriptovanie Bitcoinu je jednoduchý, zásobníkový a neúplný Turingov jazyk, ktorý je navrhnutý tak, aby bol bezpečný, deterministický a ľahko overiteľný. To má pre vývojárov niekoľko zásadných obmedzení.

Bitcoinový skriptovací jazyk má obmedzený súbor opkódov a dátových typov, čo obmedzuje funkčnosť a efektívnosť skriptov. Nepodporuje cykly, rekurziu ani stavové výpočty, čo znemožňuje implementáciu niektorých algoritmov alebo protokolov. Okrem toho nemá prístup k žiadnym externým údajom alebo udalostiam, čo obmedzuje interaktivitu a prispôsobivosť skriptov. Bitcoinové skripty nemajú formálnu sémantiku ani typový systém, čo sťažuje zdôvodňovanie správnosti a bezpečnosti skriptov.

Väčšina transakcií v sieti Bitcoin je štandardná. V roku 2021 sa počet neštandardných (skriptových) transakcií zvýšil na 10 až 18 % (analýzy sa navzájom líšia).

Je dôležité zopakovať, že zdrojový kód Bitcoinu sa stará o prenos hodnôt v rámci bežných transakcií. Do spracovania bežných transakcií nemôže zasahovať žiadna tretia strana, pretože všetko je pod kontrolou uzlov v distribuovanej sieti (presnejšie pod kontrolou poolov).

Skripty vždy definuje tretia strana a nie sú súčasťou zdrojového kódu Bitcoinu. Bitcoin je schopný spracovať skripty prostredníctvom interpretera (viac o ňom neskôr). Skripty predstavujú určité riziko, pretože v logike skriptu sa môže vyskytnúť chyba.

Na obrázkoch v článku budú skripty zobrazené červenou farbou. Interpret a virtuálne počítače budú zobrazené modrou farbou.

Každý, kto vytvorí transakciu, môže pomocou Bitcoinových skriptov určiť, ako sa môžu BTC v transakcii v budúcnosti minúť. Bitcoinové skripty sa nasadzujú tak, že sa zahrnú do vstupov a výstupov transakcie. Vstupy obsahujú skripty, ktoré odomykajú BTC z predchádzajúcich transakcií, a výstupy obsahujú skripty, ktoré uzamykajú BTC pre budúce transakcie.

Bitcoinové skripty spracúvajú bitcoinové uzly, ktoré overujú transakcie. Keď uzol prijme transakciu, skontroluje, či sú skripty na vstupoch a výstupoch platné a či sa riadia pravidlami konsenzu. Uzol vykonáva skripty pomocou interpretu založeného na zásobníku.

Interpret na báze zásobníka je program, ktorý dokáže vykonávať iný program napísaný v špeciálnom jazyku (v prípade Bitcoinu sa nazýva len Script). Interpret je zabudovaný v uzle Bitcoinu. Interpretátor pracuje tak, že číta inštrukcie skriptu Bitcoinu jednu po druhej (zľava doprava) a vykonáva príslušné akcie. Uzol vyhodnocuje skripty, a ak je konečný výsledok pravdivý, transakcia je prijatá. Ak je konečný výsledok nepravdivý alebo ak sa vyskytne chyba alebo výnimka, transakcia sa zamietne.

Interpret sa nachádza v každom uzle Bitcoinu. Ak je potrebné vykonať skript v rámci overovania, stane sa tak. Všimnite si, že validácia transakcií prebieha decentralizovaným spôsobom.

Na obrázku nižšie môžete vidieť, ako uzol Bitcoinu overuje transakciu skriptom. Transakcia obsahuje skript (v červenej farbe) s logikou na utrácanie hodnoty. Ide o logiku dodanú treťou stranou. Na overenie skriptu sa používa interpreter skriptu (modrá farba). Výstup vyhodnotenia skriptu určuje, či sa hodnota minie (teda či vlastníctvo hodnoty prejde na Boba).

Ethereum je prvá platforma blockchainu kompletná podľa Turinga

Ethereum je prvá decentralizovaná platforma, ktorá podporuje Turingovo úplný a univerzálny programovací jazyk Solidity. Solidity možno použiť na písanie inteligentných kontraktov pre akýkoľvek druh logiky alebo funkčnosti. Inteligentné zmluvy sú samovykonávacie programy, ktoré bežia na blockchaine Ethereum a môžu komunikovať s inými inteligentnými zmluvami, používateľmi alebo externými zdrojmi údajov.

Jednou z vlastností Etherea je, že umožňuje používateľom vytvárať vlastné tokeny prostredníctvom inteligentných zmlúv. Tokeny sú digitálne aktíva, ktoré môžu predstavovať čokoľvek hodnotné, napríklad meny, zberateľské predmety alebo práva. Prvá generácia blockchainov mala len natívne mince. Protokol ani skripty neumožňovali vytvárať a prenášať vlastné tokeny.

Ethereum umožnilo písať komplexné aplikácie, ktoré môžu pracovať s natívnymi mincami a celým radom ďalších tokenov. Vďaka Ethereu sa zrodilo odvetvie DeFi.

Ethereum EVM je Ethereum Virtual Machine, čo je prostredie pre beh inteligentných kontraktov v sieti Ethereum. EVM je zásobníkový, Turingovo úplný a izolovaný virtuálny stroj, ktorý dokáže vykonávať inštrukcie bytecode, ktoré sú generované z vysokoúrovňových programovacích jazykov, ako je napríklad Solidity. EVM môže pristupovať k údajom uloženým v blockchaine, ako sú zostatky na účtoch, stav kontraktu alebo vstupy a výstupy transakcií, a manipulovať s nimi. EVM tiež presadzuje pravidlá konsenzu a plynový systém siete, ktoré obmedzujú výpočtové a úložné zdroje využívané inteligentnými zmluvami.

Jedným z rozdielov medzi Bitcoinom a Ethereom z hľadiska komplexných operácií je, že transakcie v Ethereu neobsahujú inteligentnú zmluvu s logikou výdavkov, ale len odkaz na inteligentnú zmluvu.

Inteligentné zmluvy sú uložené v blockchaine Ethereum. Inteligentné zmluvy sa do blockchainu nasadzujú odoslaním špeciálneho typu transakcie, ktorá obsahuje bytecode a parametre konštruktora inteligentnej zmluvy. Transakcia vytvorí v sieti novú adresu, ktorá reprezentuje inteligentný kontrakt. Bytekód a stav inteligentnej zmluvy sa uložia v blockchaine pod touto adresou.

Na vyvolanie inteligentného kontraktu môže používateľ poslať iný typ transakcie, ktorá odkazuje na adresu inteligentného kontraktu a poskytuje niektoré parametre, ako napríklad hodnotu, limit plynu, cenu plynu, údaje alebo volanie funkcie. Transakcia spustí vykonávanie kódu inteligentného kontraktu uzlami v sieti pomocou virtuálneho stroja Ethereum (EVM).

Bitcoinové skripty sú bezstavové, zatiaľ čo inteligentné kontrakty Ethereum môžu udržiavať stav v účtovnej knihe. To znamená, že bitcoinové skripty nemajú žiadnu pamäť ani úložisko predchádzajúcich transakcií alebo udalostí a môžu pracovať len s údajmi poskytnutými aktuálnou transakciou. Na druhej strane inteligentné zmluvy Ethereum môžu mať trvalý stav, ktorý je uložený v blockchaine a môže byť aktualizovaný alebo prístupný kódu inteligentnej zmluvy.

Bezstavovosť bitcoinových skriptov je voľba návrhu, ktorej cieľom je zabezpečiť bezpečnosť, determinizmus a jednoduchosť siete Bitcoin. Tým, že skripty Bitcoinu nemajú stav, vyhýbajú sa problémom s poškodením stavu, nekonzistentnosťou alebo manipuláciou, ktoré môžu vzniknúť v dôsledku škodlivých činiteľov alebo zlyhania siete.

Stavovosť inteligentných kontraktov Ethereum je voľba návrhu, ktorej cieľom je umožniť väčšiu expresivitu, funkčnosť a interaktivitu siete Ethereum. Vďaka tomu, že inteligentné kontrakty Ethereum majú stav, môžu implementovať komplexnú a dynamickú logiku a funkcionalitu transakcií, ako napríklad vytváranie tokenov, vykonávanie výpočtov alebo interakciu s inými inteligentnými kontraktmi. Inteligentné kontrakty Ethereum tiež umožňujú väčšiu interaktivitu a prispôsobivosť, pretože môžu používať veštce a spúšťače na prístup a reakciu na informácie mimo reťazca, ako sú napríklad cenové kanály, časové značky alebo vstupy používateľov.

Na obrázku nižšie môžete vidieť transakciu Ethereum, v ktorej Alice posiela hodnotu (tokeny) Bobovi. Keďže ide o vlastné tokeny, musí sa použiť inteligentný kontrakt. Alica vloží do transakcie odkaz na inteligentný kontrakt. Virtuálny stroj Ethereum nájde inteligentný kontrakt v blockchaine (vrátane jeho aktuálneho stavu) a vykoná požadovanú operáciu.

Pozrime sa na niekoľko rozdielov medzi Solidy a EVM v porovnaní s Bitcoin Script a interpretom založeným na zásobníku.

Solidy ponúka vyššiu expresivitu. Solidity je vysokoúrovňový, objektovo orientovaný a Turingovo úplný programovací jazyk, ktorý dokáže implementovať komplexnú a flexibilnú logiku a funkcionalitu inteligentných kontraktov.

Kód Solidity sa kompiluje do inštrukcií bytecode, ktoré vykonáva EVM. Kód Bitcoin Script je priamo vložený do vstupov a výstupov transakcií a interpretujú ho uzly v sieti.

Kód Solidity môže pristupovať k externým údajom alebo udalostiam, ako sú veštci, spúšťače alebo vstupy používateľov, a reagovať na ne pomocou rôznych mechanizmov, ako sú volania funkcií, udalosti alebo modifikátory. Vysoká interaktivita s okolitým svetom umožňuje replikovať tradičné bankové služby. Kód Bitcoin Script nemôže pristupovať k žiadnym externým údajom alebo udalostiam ani na ne reagovať a môže pracovať len s údajmi poskytnutými samotnou transakciou.

Solidity a EVM môžu poskytnúť väčšiu expresivitu a eleganciu ako Bitcoin Script, pretože môžu využívať rôzne funkcie, ako sú cykly, rekurzia, stavové výpočty, funkcie vyššieho rádu alebo lenivé vyhodnocovanie. Ethereum môže ponúknuť väčšiu bezpečnosť a spoľahlivosť ako Bitcoin Script, keďže inteligentné kontrakty môžu využívať formálne overovanie a testovanie na zabezpečenie správnosti a bezpečnosti inteligentných kontraktov (k dispozícii sú rôzne nástroje a rámce).

Väčšia expresivita a stavovosť si môže vyžadovať viac zručností a starostlivosti pri písaní a vykonávaní inteligentných kontraktov ako Bitcoin Script, keďže môžu zahŕňať väčšiu zložitosť a potenciálne nástrahy.

Vykonávanie inteligentných zmlúv môže byť spojené s vyššími nákladmi ako v prípade Bitcoinu Script na spustenie inteligentných zmlúv, keďže môžu spotrebovať viac poplatkov za plyn za výpočtové a úložné zdroje v sieti. Ethereum môže čeliť väčším problémom so škálovateľnosťou ako spracovanie Bitcoin Script, keďže vykonávanie inteligentných zmlúv môže generovať väčšie preťaženie siete a latenciu v dôsledku ich väčšieho dopytu po zdrojoch.

Väčšina transakcií v systéme Ethereum súvisí s vykonávaním inteligentných zmlúv. DeFi, NFT a stablecoiny sú relevantné odvetvia blockchainu, ktoré otvárajú nové možnosti. Ethereum prekonalo Bitcoin v počte aktívnych používateľov a transakcií.

Cardano má natívne skripty a skripty Plutus

Cardano je platforma inteligentných kontraktov podobná Ethereu, ale s mnohými rozdielmi. Skriptovanie na Cardano možno vykonávať dvoma spôsobmi: natívnymi skriptami a skriptami Plutus.

Natívne skripty sú jednoduché skripty, ktoré možno použiť na blokovanie finančných prostriedkov, razenie tokenov alebo delegovanie mincí ADA. Sú napísané vo formáte podobnom JSON a môžu byť priamo interpretované pravidlami hlavnej knihy Cardano. Natívne skripty teda nevyžadujú žiadne špeciálne nástroje ani virtuálne stroje na ich validáciu.

Natívne skripty sú jedným zo spôsobov implementácie transakcie s viacerými podpismi. Používajú sa v delegovaných certifikátoch. Delegovací certifikát je typ transakcie, ktorá umožňuje zainteresovanej strane delegovať svoje mince ADA do fondu podielov.

Na obrázku nižšie môžete vidieť transakciu s natívnym skriptom. Všimnite si, že uzol Cardano nepotrebuje na vykonanie skriptu žiadny virtuálny stroj ani interpret (na rozdiel od Bitcoinu a Etherea). Vykonávajú sa natívne. Alica môže poslať transakciu s delegačným certifikátom, v ktorom deleguje ADA do Bobovho poolu. Prípadne môže ísť o transakciu, ktorá obsahuje mincovací skript. Tokeny budú vyrazené na Bobovu adresu (emitenta tokenov).

Existujú dva spôsoby, ako zahrnúť natívny skript do transakcie:

  • Po prvé, vložením skriptu ako datového prvku do transakcie. To znamená, že skript je súčasťou údajov transakcie a môže ho vidieť každý, kto transakciu kontroluje. Tento spôsob je vhodný pre skripty, ktoré sú krátke a jednoduché alebo ktoré sa musia často meniť.
  • Po druhé, uloženie skriptu do blockchainu prostredníctvom transakcie a odkazovanie naň pomocou jeho hash. Skript je uložený ako výstup v blockchaine a možno ho identifikovať podľa jeho jedinečného hashu. Výstup musí mať adresu, ktorá je odvodená od hash skriptu, a musí mať hodnotu aspoň 1 ADA, aby sa zabezpečilo, že ho sieť nebude prerezávať. Táto metóda je vhodná pre skripty, ktoré sú dlhé a zložité alebo ktoré musia byť pevné a nemenné.

Na natívny skript, ktorý je uložený v blockchaine, je možné odkazovať viackrát za sebou. Pokiaľ výstup skriptu nie je použitý inou transakciou, môže sa použiť ako vstup pre viacero transakcií, ktoré používajú ten istý skript.

Na nasledujúcom obrázku môžete vidieť podobný prípad ako vyššie, s tým rozdielom, že transakcia odkazuje na natívny skript uložený v blockchaine prostredníctvom hash.

Natívne skripty sú väčšinou logikou na reťazci, pretože sú vložené do transakcie alebo uložené v blockchaine. Môžu však mať aj určitú logiku mimo reťazca, napríklad generovanie transakcií, ktoré používajú natívne skripty ako vstupy alebo výstupy. Na vytvorenie aplikácií, ktoré generujú transakcie využívajúce natívne skripty, môžete použiť napríklad JavaScript, Python alebo Javu.

Pozrime sa teraz bližšie na skripty Plutus.

Skripty Plutus sú zložitejšie a expresívnejšie skripty, ktoré môžu implementovať ľubovoľnú logiku a komunikovať s inými inteligentnými kontraktmi. Sú napísané v jazyku Plutus (jazyk podobný Haskellu), funkcionálnom programovacom jazyku, a skompilované do jazyka Plutus Core, nízkoúrovňového jazyka, ktorý beží na virtuálnom stroji Cardano (CVM).

Jednou z kľúčových vlastností skriptovania na Cardano je oddelenie kódu na reťazci a kódu mimo reťazca (logika programu).

On-chain logika je logika, ktorá beží na blockchaine a overuje transakcie, ktoré zahŕňajú smart kontrakty. On-chain logika je napísaná v jadre Plutus Core a vykonáva ju virtuálny stroj Cardano. On-chain logika je nemenná a transparentná, čo znamená, že po nasadení na blockchain ju nemožno zmeniť ani skryť.

Off-chain logika je logika, ktorá beží mimo blockchainu a spracúva požiadavky a interakcie aplikácie smart contract. Off-chain logika je napísaná v Haskelli, vysokoúrovňovom jazyku, ktorý môže využívať Plutus Application Framework (PAF) na prístup k službám, ako sú uzly, peňaženky, veštci atď. Možno však použiť aj iné vysokoúrovňové programovacie jazyky (JavaScript, Python alebo Java).

Logika mimo reťazca je mutovateľná a privátna, čo znamená, že ju možno aktualizovať alebo upravovať bez toho, aby to ovplyvnilo logiku v reťazci alebo si to vyžadovalo hard fork.

Skripty Plutus sú inteligentné kontrakty, ktoré používajú logiku on-chain aj off-chain. On-chain časť Plutus skriptu sa nazýva validátor skriptu, ktorý rozhoduje o tom, či transakcia, ktorá míňa výstup, je na to oprávnená. On-chain kód, ako už názov napovedá, validujú všetky uzly v sieti Cardano. Mimo reťazcová časť skriptu Plutus sa nazýva aplikačný backend Plutus (PAB), ktorý generuje transakcie, ktoré sú v súlade s pravidlami skriptu validátora.

Oddelenie kódu v reťazci a kódu mimo reťazca je užitočné z niekoľkých dôvodov. Po prvé, umožňuje vývojárom písať inteligentné kontrakty vo vysokoúrovňovom jazyku, ako je Haskell, Java, Python JavaScript, ktorý sa ľahšie číta, píše a testuje ako nízkoúrovňové jazyky, ako je Plutus Core alebo Solidity. Po druhé, znižuje veľkosť a náklady transakcií, v ktorých sa spúšťajú inteligentné kontrakty, pretože v transakcii je zahrnutý len nevyhnutný kód na reťazci. Po tretie, zlepšuje bezpečnosť a škálovateľnosť inteligentných kontraktov, keďže kód mimo reťazca možno aktualizovať a upravovať bez toho, aby to ovplyvnilo kód v reťazci alebo si to vyžadovalo hard fork.

Oddelenie on-chain kódu a off-chain kódu je dobré na vytváranie flexibilných a robustných aplikácií inteligentných zmlúv. Pomocou nástrojov, ako sú Plutus Application Framework (PAF) a Plutus Application Backend (PAB), môžu vývojári ľahko vytvárať a nasadzovať svoje aplikácie inteligentných kontraktov lokálne alebo v živom produkčnom prostredí.

Skripty Plutus môžu byť súčasťou transakcií ako vstupy alebo výstupy v závislosti od spôsobu ich použitia. Existujú dva hlavné typy skriptov Plutus: skripty validátora a politiky razenia (minting scripts).

Validačné skripty sa používajú na uzamknutie finančných prostriedkov na adrese skriptu a na overenie ich čerpania. Výstupom validátora je logická hodnota (True znamená, že hodnotu možno odomknúť/vydať). Validátor nie je schopný vykonať akciu, napríklad zavolať iný skript alebo poslať niekam nejaké tokeny. Validátor iba schvaľuje alebo zamieta odomknutie prostriedkov na adrese skriptu.

Skript validátora môže byť buď vložený do transakcie ako Datum, alebo uložený v blockchaine a odkazovaný pomocou svojej hash. Je to podobné ako pri natívnych skriptoch. Výhodou uloženia skriptu v blockchaine je, že sa tým znižuje veľkosť transakcie a poplatky, ale zároveň je skript verejný a nemenný.

Na kontrolu vytvárania a ničenia vlastných tokenov sa používajú mincovacie politiky. Politiku razenia je možné uložiť len v blockchaine a odkazovať na ňu pomocou jej hash. Tým sa zabezpečí, že politika razenia je jedinečná a konzistentná pre všetky tokeny rovnakého typu.

Hash skriptu je ID politiky natívnych tokenov, ktoré skript razí. Keď máte tokeny s konkrétnym ID politiky, môžete si byť istí, že tokeny boli vyrazené skriptom (politikou razenia), ktorý zodpovedá tomuto ID politiky.

Skripty validátora majú väčšiu flexibilitu, zatiaľ čo politiky razenia majú väčšiu konzistentnosť.

Keď sa má skript validátora vykonať, ako argumenty sa mu odovzdajú tieto tri informácie:

  • Datum: Je to údaj pripojený k UTxO, ktorý skript zamyká. Zvyčajne sa používa na prenášanie stavu (stavu aplikácie).
  • Vykupiteľ: Je to kus údajov pripojený k výdajovému vstupu. Ten sa zvyčajne používa na zabezpečenie vstupu do skriptu od vydávajúceho (vstupné údaje, ktoré môžu odblokovať prostriedky prostredníctvom skriptu).
  • Kontext: Je to údaj, ktorý predstavuje informácie o výdavkovej transakcii. Používa sa na vytváranie tvrdení o spôsobe odosielania výstupu.

Datum je nepovinný údaj. Datum sa vždy ukladá spolu s UTXO. Na jednej adrese môže byť viacero UTXO, takže môže byť aj viacero Datums. Všetky Datums na adrese sú si rovné. Žiadny konkrétny Datum neslúži ako globálny stav skriptu. Všetky UTXO na adrese sú nezávislé a ich odomknutie je validované skriptom samostatne.

Na obrázku nižšie môžete vidieť inteligentný kontrakt Cardano zložený z logiky mimo reťazca (backend) a logiky na reťazci. Jedna aplikácia môže používať off-chain logiku na vytváranie transakcií so skriptami a ten istý backend na vytváranie výdavkových transakcií. Bob vytvoril transakciu pomocou skriptu. Obsahuje skript Plutus (validátor) a tiež UTxO, ktorý je uzamknutý prostredníctvom validátora (skriptu). UTxO môže obsahovať Datum, čo je údaj, ktorý sa môže použiť na uloženie stavu zmluvy. Alica chce odomknúť UTxO. Aby mohla UTxO minúť, musí sa v časti inteligentného kontraktu mimo reťazca vytvoriť výdavková transakcia, ktorá môže obsahovať Redeemer. Redeemer je vstupom pre skript Plutus, ktorý rozhoduje, či je výdavková transakcia platná alebo nie.

Aplikačná logika definovaná v backende umožnila Bobovi uzamknúť hodnotu a Alici odomknúť hodnotu. Prvá transakcia uzamkne prostriedky na adrese skriptu a druhá spustí vykonanie skriptu na odomknutie prostriedkov.

Všimnite si, že v prípade transakcie skriptu (Bobova transakcia) šípka z ľavej strany backendu vedie priamo k transakcii v pravej časti obrázka. To znamená, že skript Plutus sa pri vyrovnaní transakcie nevykoná. Skript validátora blokuje finančné prostriedky na adrese skriptu a vykonanie je spustené výdavkovou transakciou (Alicina transakcia). Preto šípka vedie od výdavkovej transakcie k virtuálnemu počítaču Cardano.

Logika mimo reťazca môže generovať skriptové transakcie, ktoré uzamknú prostriedky na adrese skriptu a na ich odomknutie vyžadujú špecifickú hodnotu Redeemer. Napríklad Bob môže pomocou off-chain logiky vytvoriť skriptovú transakciu, ktorá uzamkne 10 ADA na skriptovej adrese a na ich odomknutie vyžaduje hodnotu Redeemer “Hello”. Bob potom môže poslať adresu skriptu a hodnotu Redeemer Alici, ktorá môže použiť logiku mimo reťazca na vytvorenie výdavkovej transakcie, ktorá poskytne správnu hodnotu Redeemer a minie 10 ADA z adresy skriptu.

Logika mimo reťazca môže využívať aplikačný backend Plutus (PAB) na správu a spracovanie požiadaviek inštancie aplikácie počas jej životného cyklu. PAB funguje ako sprostredkovateľ medzi aplikáciami Plutus, uzlom, backendom peňaženky a koncovými používateľmi. PAB tiež pomáha pri vytváraní transakcií, ktoré spúšťajú skripty Plutus v blockchaine.

Skripty Plutus sú bezstavové v tom zmysle, že nemajú prístup k žiadnemu trvalému úložisku ani globálnym premenným. Môžu však používať techniku nazývanú stavové vlákno na simuláciu stavového správania prostredníctvom odovzdávania údajov medzi rôznymi inštanciami skriptov. Stav je uložený ako Datum pripojený k výstupu skriptu a môže k nemu pristupovať ďalší vstup skriptu, ktorý tento výstup strávi. Datum môže byť ľubovoľný dátový typ, ktorý skript dokáže kódovať a dekódovať.

Stavové vlákno umožňuje skriptom Plutus implementovať zložitú logiku a interakcie, ako sú stavové stroje, veštiareň a schémy s viacerými podpismi. Vyžaduje si však aj starostlivý návrh a koordináciu, aby sa zabezpečila správna a konzistentná aktualizácia stavu. Skript môže napríklad potrebovať skontrolovať, či stav nebol od posledného prístupu k nemu zmenený inou transakciou alebo či sa stav nachádza v platnom rozsahu hodnôt.

Skripty Plutus sú expresívnejšie ako skripty Bitcoin a inteligentné kontrakty Ethereum. Haskell je funkcionálny programovací jazyk, ktorý dokáže implementovať ľubovoľnú logiku a komunikovať s inými inteligentnými kontraktmi. Backend môže byť implementovaný v ľubovoľnom vysokoúrovňovom jazyku. Solidity tiež dokáže implementovať zložitú logiku a komunikovať s inými inteligentnými kontraktmi, ale v porovnaní s Haskellom má určité obmedzenia a nevýhody. Solidity má napríklad vyššie riziko chýb a zraniteľností kvôli jeho mutovateľnému stavu a nízkoúrovňovým detailom. Solidity má tiež vyššie náklady na vykonanie kvôli svojmu plynovému modelu, čo obmedzuje komplexnosť a škálovateľnosť aplikácií inteligentných kontraktov na Ethereum.

Haskell je jazyk, ktorý podporuje formálnu verifikáciu, pretože má jasnú a presnú syntax, silný a statický typový systém a čistú a deterministickú sémantiku. Haskell má tiež knižnice a nástroje, ktoré môžu pomôcť s formálnou verifikáciou, ako napríklad QuickCheck, LiquidHaskell a Coq.

Ak sa pozriete na typy transakcií za dlhšie obdobie, uvidíte, že transakcií so skriptom je zhruba 2x viac ako bežných transakcií. Cardano má natívne aktíva. Ak si chcú používatelia navzájom posielať tokeny, nie je potrebné používať skript. Preto je množstvo bežných transakcií v porovnaní s Ethereom relatívne vysoké (na prevod aktív je vždy potrebné použiť inteligentný kontrakt).

Záver

Bitcoin nemá a nebude mať rovnaké možnosti ako Cardano alebo Ethereum. Bitcoinové skripty sú veľmi jednoduché a neumožňujú vytvárať zložitú logiku potrebnú na vytvorenie alternatívnej finančnej služby. Ordinály, inskripcie a BRC-20 sú technológie, ktoré nemajú potenciál prekonať možnosti platforiem SC. Protokol Bitcoinu v podstate len zapisuje údaje do blockchainu bez akejkoľvek validácie obsahu. Neexistuje žiadne vykonávanie programov tretími stranami.

V článku sme sa zamerali najmä na opis možností programovania a nie príliš na porovnanie. Tomu sa budeme venovať niekedy nabudúce.


Pôvodný článok: Development of blockchain programmability | Cardano Explorer (cexplorer.io)