­č窭čç░ 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)