🇸🇰 Porozumenie Cardano Extended-UTXO modelu

Porozumenie Cardano Extended-UTXO modelu

Jednou z inovácií, s ktorou Cardano prišlo, je rozšírenie účtovného modelu Bitcoinu. Bitcoin je v podstate jednoduchý, ale to neznamená, že jeho jednotlivé časti nemožno vylepšiť. V rámci projektu Cardano dochádza k technologickému pokroku. Poďte preskúmať históriu účtovných modelov a ich vývoj.

Satoshi Nakamoto pri vytváraní Bitcoinu použil mnoho technológií. Jednou z nich bol účtovný model využívajúci výstup z nespotrebovaných transakcií (UTxO). Vitalik Buterin a jeho tím sa rozhodli použiť iný účtovný model založený na účtoch, pretože sa zdal byť lepším riešením na vykonávanie inteligentných kontraktov. V článku ho budeme nazývať model založený na účtoch.

V súčasnosti mnohé projekty ako Solana, Polkadot a Algorand používajú rovnaký účtovný model ako Ethereum. Oba prístupy majú svoje výhody aj nevýhody a vývojári čelia rôznym výzvam pri budovaní nad základnými vrstvami. Tím IOG, ktorý buduje Cardano, sa rozhodol ísť inou cestou a rozšíril pôvodný model Bitcoinu, UTXO. Nový model dostal názov Extended-UTXO.

Účtovný model

Účtovníctvo je základom dnešného finančného sveta. Každý finančný subjekt musí sledovať jednotlivé zostatky na účtoch a peňažné toky. Účtovná kniha je tiež základom blockchainových sietí, pretože jej jadrom je globálna bilancia, ktorá nám dáva odpoveď na otázku, kto a v akom čase vlastní aké aktíva.

Blockchain zaznamenáva celú históriu transakcií. Záznamy v blockchaine sa dajú veľmi ľahko kontrolovať. Blockchain prichádza s jednou veľkou výhodou. Umožňuje nám vlastniť aktíva bez zbytočných sprostredkovateľov a zabezpečiť, aby nikto v systéme nemohol podvádzať.

Sieť blockchain má v podstate dve základné úlohy. Udržiavať účtovnú knihu a umožniť prevod hodnoty z účtu na účet prostredníctvom transakcií. Prvá generácia blockchainových sietí umožňovala posielať transakcie len bezpodmienečne (posunuté z účtu Alice na účet Boba). Druhá generácia pridala programovateľnosť, t. j. možnosť posielať transakcie podmienečne. Pre vývojárov tretích strán sú k dispozícii nástroje, ktoré im umožňujú písať a nasadzovať programy (inteligentné kontrakty/skripty), ktoré môže sieť vykonávať decentralizovaným spôsobom. Na prvú generáciu siete blockchain možno nazerať ako na PayPal. Druhá generácia umožní vybudovanie komplexného bankového systému.

V tradičnom svete financií sa ľudia spoliehajú na účtovníkov a sofistikované centralizované systémy. Aby účtovníci nepodvádzali, je potrebné monitorovať finančné toky, aktívne zavádzať opatrenia na prevenciu podvodov a auditovať účtovné knihy.

Siete blockchain sa spoliehajú na pravidlá, ktoré sú zapísané v zdrojovom kóde. Za predpokladu, že zdrojový kód je správne implementovaný a správa sa tak, ako väčšina ľudí očakáva, nie sú potrebné žiadne preventívne opatrenia a všetky údaje sú dostupné všetkým. Každý môže mať na svojom počítači globálnu účtovnú knihu a priamo komunikovať so sieťou. Umožňuje interakciu Peer-to-Peer medzi používateľmi, kde decentralizovaná sieť je dôveryhodným sprostredkovateľom.

Ako pochopiť blockchain z pohľadu blokov

Blockchain je v podstate špecifická databáza, ktorá dokáže zabezpečiť nezmeniteľnosť historických záznamov. Záznamy sa týkajú prevodov hodnôt medzi používateľmi, ktoré sa uskutočňujú prostredníctvom transakcií. Blockchain vždy pozná presnú odpoveď na otázku, ktorý užívateľ X vlastnil token Y v čase Z. Keďže blockchain je pseudoanonymný, namiesto konkrétnych používateľov sa používajú adresy blockchainu. Blockchain uchováva históriu všetkých transakcií uskutočnených od samého začiatku až po súčasnosť. Okrem toho zabezpečuje, že históriu nie je možné prepísať.

Technicky je blockchain stavový stroj, pretože si pamätá predchádzajúce udalosti, ktoré sa nazývajú stavy systému. Tieto udalosti sú interakcie medzi používateľmi. Stav je možné zmeniť za vopred stanovených podmienok. Každý protokol má implementovanú logiku, ktorá umožňuje prechod stavu z S-0 do S+1. V pravidelných intervaloch sieť vytvára nové bloky, v rámci ktorých dochádza k takzvanému prechodu stavu.

Rozdiel medzi modelom UTXO a modelom založeným na účtovníctve spočíva v spôsobe spracovania účtovníctva. Nemá nič spoločné s prechodom stavu z hľadiska pridávania nových blokov. Nový blok vytvára jeden uzol a musí byť rozposlaný do siete. Každý nový blok obsahuje súbor transakcií a ak ho akceptuje väčšina účastníkov siete (technicky povedané všetky uzly, ktoré sa aktívne podieľajú na konsenze siete), nastane prechod stavu. Ak je blok prijatý, sú prijaté aj všetky obsiahnuté transakcie. Nový blok bude trvalo uložený v blockchaine a s jeho pridaním sa vlastníci aktív zmenia presne tak, ako to diktujú akceptované transakcie.

Úlohou siete blockchain je v podstate overovať transakcie, vkladať platné transakcie do nových blokov, overovať bloky a pridávať ich do histórie blockchainu. Dodajme, že tento proces prebieha decentralizovaným spôsobom, takže nové transakcie a bloky musia byť vysielané do celej siete, ktorá sa stará o validáciu.

Adresy blockchainu

Vlastníctvo aktív (mincí a tokenov) je reprezentované vlastníctvom privátneho kryptografického kľúča k danej adrese, ktorý je odvodený od verejného kryptografického kľúča. Zvyčajne je adresa hashovaná. Transakciu si môžete predstaviť ako špecifickú správu do siete, v ktorej odosielateľ dáva pokyn na prevod vybraného počtu aktív z adresy odosielateľa na adresu príjemcu. Platná transakcia musí obsahovať dôkaz, že odosielateľ je skutočným vlastníkom tokenov. Na tento účel sa na podpísanie transakcie používa súkromný kryptografický kľúč. Sieť, resp. každý uzol, je schopný overiť podpis a vyhodnotiť, či je transakcia platná. V prípade jednoduchých transakcií je overovanie založené na dvojici súkromného a verejného kľúča.

Peňaženka pomôže používateľom generovať adresy blockchainu a posielať podpísané transakcie. Sieť overí transakciu prostredníctvom verejného kľúča a ak je platná, bude zahrnutá do nového bloku.

Ak je transakcia prijatá a je obsiahnutá v bloku, ktorý bol pridaný do blockchainu, majetok bude vlastniť majiteľ adresy príjemcu. Iba nový vlastník ich môže minúť, opäť prostredníctvom podpisu vykonaného súkromným kľúčom. Používateľ môže samozrejme posielať aktíva aj sám sebe.

Tento koncept je rovnaký pre model UTXO aj model založený na účtovníctve, pretože je založený na kryptografii s verejným kľúčom (asymetrickej kryptografii).

Je dôležité si uvedomiť, že to, čo používatelia vnímajú ako mince alebo tokeny, sú v skutočnosti len digitálne čísla spojené s adresami blockchainu. Účelom transakcie je preniesť číslo z adresy odosielateľa a priradiť rovnakú hodnotu jednej adrese alebo ju rozdeliť medzi viacero adries príjemcu. Keďže sa vyžadujú poplatky, hodnota sa zvyčajne rozdelí na viacero adries. Hodnota na vstupe a výstupe transakcie musí byť vždy tá istá. Hodnota sa nemôže vytvoriť alebo stratiť počas spoločnej transakcie. Siete zvyčajne definujú pravidlá pre vytvorenie novej hodnoty.

Vždy, keď ľudia hovoria o minciach alebo žetónoch, vrátane tohto článku, v skutočnosti hovoria o číslach. Tokeny sú len abstrakciou čísel, ktorá je pre používateľov ľahko pochopiteľná.

Používatelia zaobchádzajú so svojimi aktívami ako so zostatkom na svojich účtoch. Peňaženky generujú všetky súkromné a privátne páry kľúčov, takže poznajú všetky verejné adresy používateľov. Všetky vytvorené adresy môžu obsahovať aktíva. Peňaženka spočíta všetky tokeny na adresách (spočíta všetky digitálne čísla) a zobrazí to používateľovi ako zostatok. Peňaženka by mohla mať len jednu jedinú adresu a všetko by fungovalo úplne rovnako.

Rozdiel medzi modelom UTXO a modelom založeným na účtoch

Rozdiel medzi modelom UTXO a modelom založeným na účtoch spočíva v tom, ako sú aktíva uložené na adresách a ako sa s nimi zaobchádza pri transakciách. Inými slovami, ako tieto dva rôzne modely narábajú so zostatkami a ako sa stav systému zaznamenáva. V širšom kontexte je dôležité, aké pravidlá a podmienky sú definované (a implementované v zdrojovom kóde uzlov) pri vytváraní nového bloku. Neoddeliteľnou súčasťou prenosu hodnôt je potvrdenie sieťou.

Výstup nespotrebovanej transakcie (UTXO) je technický termín pre počet digitálnych aktív, ktoré zostanú po spracovanej transakcii. UTXO je digitálne číslo, ktoré si môžete predstaviť ako počet aktív. V modeli UTXO môžete pojmy UTXO a aktívum (minca alebo token) používať zameniteľne.

Cardano používa rozšírený model UTXO, ktorý sa nazýva Extended-UTXO (EUTXO). V modeli EUTXO sa prevod aktív zaznamenáva ako usmernený acyklický graf (DAG) medzi adresami. Aj keď to znie desivo, netreba sa báť. V skutočnosti je to jednoduché na pochopenie.

Pochopenie stakingu v Cardane

V roku 2022 oslávi Cardano 2 roky od spustenia Proof-of-Stake. Staking si získal pozornosť od samého začiatku. V čase písania tohto článku je zaregistrovaných viac ako 3 100 poolov a viac ako 1,1 milióna stakerov. Budeme diskutovať o význame stakingu z pohľadu používateľov. Chceme vám ponúknuť rôzne uhly pohľadu na staking a jeho širší význam pre spoločnosť. Viac informácií tu.

Ako sme už povedali, každé UTXO je reprezentované digitálnym číslom a je abstrakciou mince alebo tokenu. UTXO si môžete predstaviť ako fyzické bankovky alebo mince, ale s tým rozdielom, že nie sú určené nominálne hodnoty, ktoré by UTXO museli mať. Napríklad 10 ADA môže byť jedna UTXO. 12 ADA môže byť tiež jedna UTXO. Dokonca aj 116,85 môže byť jedno UTXO.

Teraz si predstavte, že Alica má v peňaženke všetky tri UTXO. Nezáleží na tom, či má všetky tri UTXO na rovnakej adrese, alebo či je každé UTXO na vlastnej adrese. Ak chce vedieť svoj zostatok, musí zrátať všetky UTXO. Urobí to za ňu jej peňaženka. Jej zostatok je 10 + 12 + 116,85 = 138,85 ADA.

Rovnaký zostatok v peňaženke môže byť reprezentovaný rôzne, pokiaľ ide o rozdelenie UTXO na adresy. Môžete mať 3 UTXO na jednej adrese alebo 3 UTXO na 3 adresách.

Pozrime sa, čo sa stane, keď sa Alica rozhodne poslať 15 UTXO Bobovi. Bob má vo svojej peňaženke 21 ADA na jednej adrese. Rozhodne sa vytvoriť novú adresu, na ktorú chce od Alice prijať 15 ADA. Alicina peňaženka musí použiť 2 UTXO. Peňaženka si vyberie UTXO s 10 a 12 ADA. UTXO s 10 ADA sa minie v plnej výške. Z UTXO s 12 ADA sa vyberie len 5 ADA + 0,2 ADA (transakčný poplatok).

Po prijatí transakcie bude mať Alica len 2 UTXO s 6,8 a 116,85 ADA. Celkovo bude mať Alica 123,65 ADA. Bob bude mať 2 UTXO s 21 a 15 UTXO. Celkovo bude mať Bob 36 ADA. Na adresu poplatku sa pridá 0,2 ADA.

Prostredníctvom transakcie bol vykonaný prechod medzi dvoma stavmi. Transakcia bola vytvorená v stave N (blok N) a bola zaradená do bloku N+1.

Prostredníctvom transakcie bol vykonaný prechod medzi dvomi stavmi (blokmi). Zloženie transakcie je dôležité. Transakcia má vstupy a výstupy. Všimnite si, ako sa hodnoty na vstupe transformujú na hodnoty na výstupe podľa potrieb transakcie, presne tak, ako ju zostavil odosielateľ (peňaženka). Každý UTXO v transakcii sa musí minúť ako celok, pretože záznamy v predchádzajúcich blokoch sa nedajú upravovať. Vstup je súbor UTXO, ktoré sa majú minúť, t. j. celková hodnota sa použije na vytvorenie výstupov transakcie. Výstupom transakcie je tiež sada UTXO, ktorá sa má priradiť novej adrese. Alternatívne môžu byť niektoré alebo všetky UTXO priradené tej istej adrese s rôznymi hodnotami. Používateľ môže mať na jednej adrese 3 UTXO a želá si mať na tej istej adrese len 1 UTXO. Celková hodnota zostáva rovnaká.

V našom príklade sme mali dva vstupy a tri výstupy. Vstupom boli 3 UTXO patriace Alici. Výstupom boli 3 UTXO. Konkrétne UTXO s 15 ADA pre Boba, UTXO s 0,2 ADA ako transakčný poplatok a UTXO s 6,8 ADA, čo je suma vrátená Alici. Aby bola transakcia platná, musí sa počet mincí na vstupe zhodovať s počtom mincí na výstupe. V našom príklade je to 22 mincí ADA.

Ľuďom sa môže zdať zvláštne, že je potrebné vrátiť Alici 6,8 ADA. Je to podobné, ako keď vám pokladník v obchode vráti peniaze, ak zaplatíte vyššou bankovkou, ako je celková cena nákupu. Opäť platí, že každé UTXO sa musí minúť v plnej výške, preto je potrebné zabezpečiť, aby sa zvyšok vrátil (ak nejaký zvyšok existuje) Alici ako súčasť transakcie.

Všimnite si, že model UTXO pracuje s jednotlivými UTXO počas vytvárania transakcií. Pri výdaji určitého počtu tokenov sa musí vybrať potrebný počet vhodných UTXO. Ak je súčet tokenov vo vybraných UTXO vyšší ako počet tokenov, ktoré sa majú minúť, zvyšok sa musí vrátiť ako nové UTXO na adresu odosielateľa.

S UTXO sa zaobchádza rovnako ako so skutočnými peniazmi. Ak máte v obchode zaplatiť 85 dolárov, môžete zaplatiť 100-dolárovou bankovkou a pokladník vám vráti 15 dolárov (10 a 5-dolárové bankovky). Zo 100-dolárovej bankovky nemôžete nejako odrezať 85 dolárov a platiť ňou. V peňaženke by ste mohli nájsť 17 päťdolárových bankoviek a zaplatiť nimi. Rovnako dobre môžete mať v peňaženke Cardano 17 UTXO s 5 ADA.

Každé UTXO sa dá minúť len jedenkrát a v budúcnosti už nikdy viac. Po jeho minutí sa vytvorí jedno alebo viac nových UTXO, ktoré sa môžu následne minúť. Tento cyklus sa neustále opakuje. Model UTXO je spôsob organizácie blockchainu tak, aby sa žiadne aktíva neutratili dvakrát. Blockchain prechádza do nového stavu v pravidelných intervaloch. Používatelia môžu utrácať nespotrebované UTXO v ktoromkoľvek budúcom stave. Napríklad Bob môže dostať UTXO v stave N a rozhodnúť sa ich minúť o 14 dní, čo môže byť stav N+60 480. Utratiť UTXO v podstate znamená prenos hodnoty na inú adresu.

V každom bloku je niekoľko transakcií, takže sa minie veľa UTXO. Všetky transakcie spolu tvoria kolekciu (blok), ktorý predstavuje prechod medzi stavmi. V modeli UTXO predstavuje globálny stav celý graf výstupov transakcií, vydaných aj nevydaných. Je možné rozlišovať medzi aktuálnym stavom a všetkými predchádzajúcimi stavmi, čo je v podstate celá história transakcií od prvého bloku Genesis.

Ak by vás zaujímal počet všetkých tokenov, ktoré možno minúť v aktuálnom stave, museli by ste spočítať všetky nespotrebované výstupy (UTXO). Nájsť ich v podstate znamená prejsť všetky transakcie od bloku Genesis po súčasnosť. Plné uzly overujú všetky transakcie počas synchronizácie so sieťou, takže poznajú aktuálnu sadu UTXO.

Pozície UTXOs medzi stavmi. Na obrázku je 6 modrých UTXO, ktoré sú nevyužité.

Pozrime sa teraz na model založený na účtoch. Ten je podobný bankovnému účtu. Rovnako ako pri modeli UTXO sú aktíva digitálne čísla, ktoré sú spojené s adresami blockchainu. V modeli založenom na účte sa pre daný typ aktíva udržiava iba aktuálny zostatok na adrese. Transakcia upravuje zostatok na adresách takým spôsobom, že odoberie hodnotu z jednej adresy a pripočíta ju k inej adrese.

Ilustrujme si to na príklade. Alica má 138,85 ETH a rozhodne sa poslať Bobovi 15 ETH. Bob má na svojom účte 21 ETH.

Transakcia odoberie 15 ETH z Alicinho zostatku a pripočíta ich k Bobovmu zostatku. Ďalej sa z Alicinho zostatku (GAS) odpočíta transakčný poplatok 0,15 ETH.

V modeli založenom na účtoch možno globálny stav chápať ako databázu všetkých účtov a ich aktuálnych zostatkov rôznych aktív v sieti. Pri každom pridaní nového bloku sa stav systému aktualizuje podľa všetkých transakcií, ktoré sú v bloku obsiahnuté. Počet účtov zostáva konštantný a nezávislý od počtu uskutočnených transakcií, pokiaľ zostáva konštantný počet používateľov.

Posledný stav N+3 je aktuálny globálny stav.

Všimnite si rozdiely medzi týmito dvoma pojmami. Model UTXO na úrovni protokolu nepracuje s ideou peňaženky alebo zostatku. Model je založený len na histórii transakcií. Zostatok používateľa sa musí určiť lokálne na základe histórie prevodov UTXO.

Späť na bloky

Teraz sa vráťme k blokom a vysvetlime si ich význam pri prechode medzi stavmi. Každá transakcia je v podstate žiadosť o zmenu globálneho stavu. V prípade blockchainovej siete by mala požadovaná väčšina uzlov v sieti súhlasiť a prijať nový stav. Synchronizácia celej siete s každou jednotlivou transakciou by bola veľmi neefektívna z hľadiska zdrojov. Globálna synchronizácia uzlov je časovo náročný proces, pretože informácie sa musia vysielať do celého sveta. S rastúcim počtom transakcií by sieť nebola schopná synchronizovať sa včas. Riešením je blok, ktorý obsahuje viacero transakcií. Viaceré požiadavky používateľov sa spracúvajú v rámci synchronizácie prostredníctvom blokov.

Bloky sú srdcom sietí blockchain. Bitcoin prechádza z aktuálneho stavu do nového stavu v priemere každých 10 minút. Cardano približne každých 20 sekúnd.

Keďže každá jednotlivá transakcia je žiadosťou o zmenu stavu, blok so všetkými transakciami ktoré obsahuje, sa stáva žiadosťou o zmenu stavu a je prostriedkom synchronizácie siete. Ak sa má zmeniť globálny stav, požadovaná väčšina uzlov v sieti musí akceptovať celý blok. To znamená, že všetky transakcie v bloku musia byť platné jednotlivo a vzájomne. Napríklad pri overovaní nového bloku musí každý uzol zabezpečiť, aby sa ten istý aktív nevynaložil dvakrát . Ak celý blok nezodpovedá pravidlám validácie, sieť ho odmietne.

Sieť blockchain sa neustále synchronizuje. Prechod medzi stavmi sa uskutočňuje prostredníctvom blokov.

Blockchain je v podstate súbor blokov, ktoré sú prepojené takým spôsobom, že ich poradie nemožno zmeniť. Vo väčšine súčasných sietí náhodne vybraný uzol vytvorí nový blok. Tento blok sa potom rozošle všetkým ostatným uzlom v sieti. Je dôležité, aby sa nový blok rozšíril v celej sieti dávno predtým, ako iný náhodne vybraný uzol vytvorí ďalší nový blok, aby sa nový blok mohol prepojiť s predchádzajúcim blokom. Ak by bolo šírenie nových blokov príliš pomalé, vznikali by vidlice, čo je neželaný stav. Pri pridávaní ďalšieho bloku k predchádzajúcemu bloku by bolo potrebné vybrať jeden z dvoch blokov, čo znamená, že jeden z blokov by zostal v blockchaine naveky a druhý by bol oslobodený (so všetkými transakciami).

Modely UTXO a modely založené na účtoch sa v koncepcii prechodu do nového stavu na základe blokov nelíšia. Zásadný rozdiel je v globálnej aktualizácii stavu. V modeli UTXO sa globálny stav iba rozširuje vytváraním nových UTXO, zatiaľ čo v modeli založenom na účtoch sa globálny stav aktualizuje na úrovni zmien zostatkov.

Tieto dva modely sa líšia aj v spôsobe spracovania transakcií. Model UTXO je overovací model. Transakcie špecifikujú žiadaný výsledok prechodu stavu. Výsledok je definovaný ako nové UTXO, ktoré je vytvorené na základe vstupov do transakcie. Uzol overuje, či sú vstupy nevyčerpané a či je digitálny podpis transakcie alebo iné podmienky čerpania platné. Model založený na účte je výpočtový model. Transakcie inštruujú, ako by mal vyzerať prechod stavu**. Uzly vypočítajú nový stav na základe inštrukcií. V oboch prípadoch si zmena stavu môže vyžadovať vykonanie inteligentnej zmluvy. Inteligentné zmluvy možno považovať za rozšírenie inštrukcií prechodu stavu.

Rozdiely v modeloch založených na UTXO a na účtoch majú implikácie, pokiaľ ide o validáciu blokov, vykonávanie inteligentných zmlúv a škálovateľnosť.

Pochopenie základov

Predtým, ako sa pustíme do rozšíreného UTXO, je potrebné stručne vysvetliť niektoré základné pojmy, ktoré sú vývojárom dobre známe, ale nie širokej verejnosti.

Začnime s pojmami súbežnosť a paralelizmus .

Súbežnosť znamená, že viacero výpočtov prebieha “takmer” súčasne. Používateľ môže vnímať, že úlohy sa vykonávajú súbežne, ale na pozadí je len jeden aktér, ktorý veľmi rýchlo prepína medzi úlohami. To sa stáva, ak máte počítač s jedným procesorom. Súbežnosť umožňuje, aby textový editor a prehrávač hudby bežali súčasne. Proces venuje každému procesu krátky čas, takže z pohľadu používateľa sa zdá, že bežia súčasne. Je to preto, že procesor je oveľa rýchlejší ako ľudské vnímanie. Ak má počítač viacero procesorov, môže jednotlivé úlohy delegovať na vyhradený procesor. Úlohy tak môžu bežať paralelne .

Na dosiahnutie súbežnosti v rámci jednej veľkej úlohy alebo skupiny úloh (ktoré môžu, ale nemusia byť príbuzné) musí byť možné rozdeliť prácu na menšie časti tak, aby bolo možné nezávisle pracovať na pod úlohách.

Ak má jediný aktér spracovať skupinu úloh, môže dokončiť jednu úlohu pred začatím ďalšej. V tomto prípade by aktér spracúval úlohy postupne. Prípadne môže jednotlivý aktér vo vhodnom okamihu prepínať medzi úlohami postupne. Jeden aktér môže dokončiť všetky úlohy približne v rovnakom čase. Otázkou je, či je prepínanie pre dané úlohy efektívnejšie. V tomto prípade sa úlohy spracúvajú súbežne, ale nie paralelne.

Môže byť efektívnejšie, ak je k dispozícii viac agentov, ktorí sú schopní spracovať pár úloh. V tomto prípade musí byť viacero agentov schopných postupovať pri riešení úloh súčasne bez toho, aby si navzájom prekážali. Úlohy by sa spracúvali súbežne a tiež paralelne, takže by boli dokončené rýchlejšie.

Majme viac úloh, ktoré sa musia spracovať. Jeden aktér môže úlohy dokončovať postupne, t. j. sekvenčne. Prípadne môže jeden aktér prepínať medzi úlohami, ktoré sa spracovávajú súbežne. Vidíte, že úlohy môžu spracúvať 3 agenti. V tomto prípade sa úlohy spracúvajú súbežne a tiež paralelne.

Niekedy môže byť ťažké rozdeliť prácu na viacero úloh, ktoré by sa dali spracovať samostatne. Závisí to od toho, či je možné vstupy rozdeliť na samostatné jednotky, alebo či viacerí agenti potrebujú súčasne používať jediný zdroj. V takom prípade môžu agenti pociťovať závadu. Znamená to, že viac agentov chce používať unikátne zdroje v rovnakom čase, ale len jeden z nich môže skutočne uspieť. Víťaz môže zdroj spotrebovať natrvalo alebo ho uvoľniť pre ostatných, keď ho už nepotrebuje. Súperenie možno riešiť určitou formou synchronizácie agentov. Agenti môžu byť obmedzení pri spracovaní svojich čiastkových úloh.

Vo všeobecnosti je výhodné snažiť sa dosiahnuť maximálnu úroveň paralelizácie, keď nám ide o rýchlosť spracovania úlohy alebo skupiny menších úloh. Z hľadiska škálovateľnosti je pre blockchainové siete vždy výhodnejšie, ak je možné dosiahnuť vyššiu paralelizáciu, t. j. umožniť spracovanie väčšieho počtu transakcií súčasne. Môže však byť potrebné riešiť spornosť a mnohé ďalšie aspekty.

Nedá sa jednoznačne povedať, že paralelizácia je vždy najlepším možným riešením. Súbežnosť môže mať v niektorých špecifických prípadoch svoje výhody. Najmä ak je potrebná nejaká forma synchronizácie, aby sa predišlo problémom s kontingenciou. Neexistuje nič také ako najlepší univerzálny návrh. Skôr môžeme hovoriť o vhodnejšom riešení pre konkrétny problém.

Vysvetlime si pojem determinizmus . Deterministický algoritmus je algoritmus, ktorý pri danom vstupe vždy vytvorí tento istý výstup, pričom základný stroj vždy prechádza rovnakou postupnosťou stavov.

Z pohľadu používateľov to znamená, že môžu odhadnúť alebo dokonca vopred vedieť, aký výsledok môžu očakávať po vložení konkrétnych vstupov. Ak napríklad do kalkulačky zadáte operáciu 5+5, vopred očakávate, že výsledok bude 10. Akýkoľvek iný výsledok by bol chybou. Vývojári sa snažia vytvárať systémy tak, aby boli čo najviac deterministické, pretože to zaručuje vysokú úroveň spoľahlivosti, a tým aj vysoký užívateľský komfort.

V kontexte blockchainu chcú mať používatelia možnosť predvídať vopred výsledok predloženia transakcie. Determinizmus znamená, že keď používateľ vytvorí transakciu, chce, aby sa transakcia s nastaveným poplatkom dostala do bloku čo najskôr a mala očakávaný výsledok. Rovnaké očakávania majú používatelia aj v prípade overovania skriptov a vykonávania inteligentných kontraktov. Keď je transakcia odoslaná, nemala by zlyhať a používateľ by nemal platiť za transakciu, ktorá zlyhala.

Počas návrhu účtovného modelu spolu so spôsobom, akým sa majú inteligentné kontrakty spracovávať, je dôležité predvídať podmienky, za ktorých môže dôjsť k indeterminizmu. Je dôležité pochopiť dôvody, ktoré vedú k indeterminizmu, a pokúsiť sa navrhnúť systém, v ktorom sa mu možno vyhnúť alebo sa bude vyskytovať minimálne. Vývojári decentralizovaných aplikácií by mali mať k dispozícii nástroje, ktoré im pomôžu vytvoriť programy, ktoré sa správajú predvídateľne a sú bezpečné.

Jedným z rizík pre aplikácie je prístup k mutovateľným údajom hlavnej knihy, t. j. údajom, ktoré sa môžu neustále meniť. Ak výsledok transakcie alebo inteligentného kontraktu závisí od stavu mutovateľných údajov, môže počas vykonávania dôjsť k neurčitosti. Vždy je výhodné, keď je spracovanie operácií čo najviac izolované od svojho okolia (nepoužívať externé mutovateľné údaje) a závisí len od lokálnych údajov.

Každá operácia je vždy do určitej miery závislá od svojho prostredia. Otázkou je, do akej miery môže prostredie ovplyvniť výsledok operácie a ako možno prostredie ovplyvniť. Ak je útočník schopný zmeniť mutovateľné údaje účtovnej knihy, môže ovplyvniť výsledok transakcií a vykonávanie inteligentných kontraktov s cieľom získať osobný zisk. Návrh systému by mal minimalizovať možnosť útokov.

Stručná história vývoja účtovných modelov

Začnime najprv modelom Bitcoin, ktorý ako prvý prišiel s modelom UTXO. Výhodou UTXO je, že výpočet počas overovania transakcií sa vykonáva mimo reťazca. Transakcie sú zároveň výsledkami výpočtu (lokálne overenie) a dôkazmi. Transakcie stačí uložiť do blockchainu a nie je potrebné ďalej riešiť stavy a ich prípadné ukladanie.

Vstupy transakcií sú vždy existujúce nevyužité UTXO a pre uzol je jednoduché ich overiť. To znamená, že tá istá transakcia alebo tie isté vstupy nemôžu byť použité dvakrát. Overovanie je jednoduché, pretože prebieha v rámci bloku, čo je priestor s definovanou hranicou. Pokus o druhé použitie toho istého vstupu sa ľahko odhalí a nebude akceptovaný. Transakcie sa môžu spracúvať paralelne, pretože nezávisia od žiadneho vonkajšieho stavu.

Model UTXO v Bitcoine je veľmi slabý z hľadiska programovateľnosti. Je takmer nemožné vytvoriť komplexný výpočet. Pokus o vytvorenie stavového kontraktu nad modelom UTXO často vedie k vysokým nárokom na úložisko a nízkemu využitiu stavu. Každý vstup vyžaduje jediný svedecký skript a každý výstup vyžaduje jediný uzamykací skript. Takže s rastúcim počtom UTXO rastie aj počet súvisiacich svedeckých skriptov. Výpočtový výkon potrebný na overovanie skriptov spolu s potrebou ukladať skripty a údaje svedkov zvyšuje požiadavky na zdroje, a teda aj náklady.

Ethereum ako prvé prišlo s modelom založeným na účtoch. Ethereum umožnilo napísať malý program s komplexnou logikou nazývaný inteligentný kontrakt. Transakcie sa interpretujú ako udalosti, ktoré menia globálny stav. Ethereum Virtual Machine ( EVM ) vypočíta výsledok prechodu stavu týchto udalostí na základe predchádzajúceho stavu blockchainu.

Toto je dôležitý bod, pretože predchádzajúci stav sa stáva neoddeliteľnou súčasťou aktuálneho výpočtu nového globálneho stavu. Inými slovami, správnosť aktuálneho výpočtu je závislá od minulého stavu. Transakcie (vstupné údaje pre výpočet), ktoré ovplyvňujú stav blockchainu, sú syntakticky oddelené od výsledkov transakcií (výstupných údajov).

Globálny stav je uložený lokálne v uzloch a neprenáša sa v blokoch. Uzly dosiahnu väčšinový konsenzus o novom globálnom stave tak, že lokálne vykonajú vlastný výpočet globálneho stavu na základe transakcií (udalostí) a potom porovnajú svoj výsledok s prijatým výsledkom (State-Root). Inými slovami, všetky čestné uzly by mali po lokálnom výpočte získať rovnaký State-Root ako navrhovaný. Toto je jediný spôsob prechodu do nového globálneho stavu v rámci celej siete.

Uzol spracoval 3 transakcie (udalosti) a prešiel z globálneho stavu N do stavu N+3. Potom vytvoril nový blok so stavom Root. Všetky uzly v sieti by mali po spracovaní transakcií vypočítať rovnaký stav Koreň.

V modeli založenom na účtoch sú všetky účty stavové . To znamená, že v čase výpočtu prechodu do nového stavu (spracovanie inteligentného kontraktu) je globálny stav zamknutý, t. j. nezmeniteľný. Vývojári majú k dispozícii určitú abstrakciu, ktorá uľahčuje vývoj inteligentných zmlúv. Môžu pracovať so všetkými stavmi a interagovať s nimi. Na základe vypočítaného výsledku sa vytvorí nový globálny stav, ktorý sa pred ďalším výpočtom, ktorého výsledkom bude ďalší nový stav, opäť zamkne. Medzi jednotlivými stavmi existuje súslednosť prechodov.

Výhodou je, že vývojári môžu pracovať s ľubovoľným účtom (zostatkom), keď je globálny stav uzamknutý. To znamená, že s konkrétnym účtom je možné pracovať v rámci jedného bloku viackrát. Je to možné vďaka sekvenčnému spracovaniu transakcií a zmlúv. Inými slovami, Ethereum je dobré v súbežnosti.

Tento dizajn je vhodný pre vývojárov, pretože sa s ním ľahko pracuje. Na druhej strane vývojári nemôžu kontrolovať postupnosť spracovania transakcií a kontraktov, pretože to je v rukách výrobcov blokov a používateľov, ktorí stanovujú poplatky. Vývojári tak musia počítať s mnohými možnými výsledkami a pokusmi o útok. To môže byť výzvou.

Dodržiavanie postupnosti je dôležité, pretože je súčasťou obrany proti útoku dvojitých výdavkom. Každý účet má hodnotu “nonce”, ktorá je obsiahnutá v každej transakcii. Pri každej novej transakcii z daného účtu sa hodnota “nonce” zvyšuje. Tento mechanizmus zabraňuje paralelnému spracovaniu transakcií. Ak prvá z niekoľkých transakcií určitého účtu zlyhá a nie je zahrnutá do bloku, zlyhajú aj nasledujúce transakcie.

Je dôležité pochopiť, že transakcie (udalosti) sú na sebe závislé a na ich poradí v bloku záleží. Keď uzol dostane nový blok, prijme ho len vtedy, ak vypočíta rovnaký State-Root, ktorý je navrhnutý v bloku. To sa stane len vtedy, ak sa dodrží poradie spracovávaných udalostí, t. j. rovnaká postupnosť prechodov.

Jednoduchú transakciu v modeli založenom na účtoch možno považovať za žiadosť o zmenu zostatkov dvoch používateľov. Transakcia je udalosť, ktorá mení globálny stav, nie konkrétny vstup a výstup. Preto sa transakcia musí vyhodnotiť z hľadiska správnosti v kontexte predchádzajúceho stavu. To platí aj pre všetky ostatné aplikácie a protokoly, ktoré sú postavené nad EVM.

Používatelia pri zadávaní nových transakcií reagujú na určitý stav, napríklad na cenu aktíva. To, čo používatelia nemôžu veľmi ovplyvniť, je očakávané umiestnenie transakcie v rámci postupnosti prechodov v bloku. To môže byť problém pri zložitejších transakciách, ktoré pracujú s vopred definovanými podmienkami, pretože sa nedá vopred zaručiť, že navrhovaný prechod stavu bude v čase pokusu o zaradenie stále platný. Používateľ si nikdy nie je istý a nemôže si lokálne vopred overiť, že jeho transakcia bude do bloku pridaná. V dôsledku toho sa môže stať, že transakcia neuskutoční napriek zaplatenému transakčnému poplatku. Výsledok transakcií má vyššiu neistotu a nie je deterministický.

Neúspešné transakcie sú výsledkom globálneho stavu (mutovateľné zdieľané údaje). Viacero strán môže chcieť predložiť transakcie, ktoré zmenia globálny stav určitým spôsobom. Avšak zmenený globálny stav môže znemožniť spracovanie iných predložených transakcií. Inými slovami, spracovaná by mohla byť len prvá predložená transakcia v danom čase alebo za určitých podmienok. Ostatné transakcie by mohli zlyhať. To komplikuje vytváranie inteligentných kontraktov a možno to považovať za povrchovú oblasť pre útoky.

Uveďme si konkrétny príklad. Používateľ Bob môže zostaviť transakciu na základe stavu konkrétnych zostatkov, ktoré v danom okamihu vidí. Tieto zostatky však mohli byť zmenené Alicinou transakciou, ktorá bola neočakávane umiestnená pred Bobovou transakciou (Alica mohla použiť vyšší poplatok alebo sa baník rozhodol umiestniť Alicinu transakciu pred Bobovu, keďže poplatky boli rovnaké). V okamihu, keď je vložená Bobova transakcia, je globálny stav iný ako ten, ktorý vzal do úvahy Bob. Táto zmena globálneho stavu môže spôsobiť zlyhanie transakcie alebo v horšom prípade môže viesť k nepredvídateľnému stavu.

Zhrňme si to. Model založený na účtoch, ako ho implementuje Ethereum, má pre vývojárov aplikácií tú výhodu, že sa nemusia starať o konverziu. Vývojári môžu voľne pracovať s používateľskými účtami a meniť ich zostatok. Je zabezpečené, že zostatky sú prístupné jednotlivo podľa udalostí, takže je menšie riziko, že dvaja agenti budú mať prístup k rovnakému zostatku v rovnakom čase. Návrh aplikácie je teda pomerne jednoduchý. Model založený na účtoch umožňuje používateľom pristupovať k jednému účtu viacnásobne v rámci jedného bloku. To znamená, že Alica môže v rámci jednej transakcie poslať ETH zo svojho účtu Bobovi a v rámci inej transakcie poslať ETH aj Carlovi. Obe transakcie môžu byť v tom istom bloku.

Nevýhodou je už spomínaná zložitosť paralelizácie, časté neúspešné transakcie a nutnosť platiť poplatok aj za transakcie, ktoré neuspejú. Okrem toho sa v dôsledku poradia transakcií vyskytuje problém známy ako Miner Extractable Value (MEV).

Výhody E-UTXO

Spoločnosť Cardano používa model Extended UTXO, skrátene EUTXO. Cieľom modelu EUTXO je podporovať vyššiu expresivitu programovateľnosti a zároveň zachovať všetky výhody modelu UTXO Bitcoinu. Rozšírený model UTXO je pre Cardano dôležitý, pretože chce byť viac než len transakčnou sieťou. Cardano je platforma, preto je dôležité umožniť vývojárom vytvárať zložitejšie funkcie. To sa dosahuje prostredníctvom inteligentných kontraktov. V prípade Cardano je presnejšie hovoriť o validátoroch skriptov. V texte môžeme tieto pojmy používať zameniteľne, ale ide o to isté.

EUTXO ponúka niektoré výhody oproti modelu založenému na účtoch. Najmä väčšiu bezpečnosť pri vykonávaní inteligentných kontraktov, predvídateľnosť poplatkov, lokálne overovanie zabezpečujúce, že transakcie budú po predložení akceptované, a vlastne fragmentovaný stav blockchainu. To umožňuje paralelizáciu pri spracovaní transakcií, čo má pozitívny vplyv na škálovateľnosť na reťazci. Paralelizácia je dôležitá aj pre vykonávanie inteligentných kontraktov. Podobne ako transakcie, aj inteligentné zmluvy sa môžu vykonávať nezávisle, t. j. paralelne.

Pri spracovaní inteligentných zmlúv nezáleží na poradí v bloku, nie je potrebné brať do úvahy výsledky vykonávania iných zmlúv v bloku, takže samotné vykonávanie možno považovať za bezpečnejšie. Inými slovami, keďže výsledky vykonávania jednotlivých inteligentných zmlúv sú navzájom nezávislé a neexistuje spoločný mutovateľný (globálny) stav, je menší priestor pre útoky.

Je dôležité poznamenať, že škálovateľnosť decentralizovaných aplikácií je založená na možnostiach účtovného modelu. Vo všeobecnosti možno inteligentné zmluvy a ich vykonávanie považovať za vrstvu, ktorá závisí od možností blockchainu.

Možnosti paralelizácie vychádzajú z pôvodného návrhu UTXO, kde každý existujúci nespotrebovaný UTXO pozostáva zo sekvencie predchádzajúcich transakcií. S každým UTXO sa dá pracovať nezávisle. Neexistuje žiadna taká vec ako globálny stav, ktorú by bolo potrebné zohľadniť pri spracovaní a validácii EUTXO. Dôležitý je len lokálny stav. To znamená, že výsledok transakcie závisí len od použitia UTXO, ktoré sú nezmeniteľné, objekty na jedno použitie, ktoré slúžia ako vstupy transakcií, ktoré vytvoria výstupy.

Uzol Cardano spracoval 3 bežné transakcie a 3 skriptové transakcie. Potom vytvoril nový blok. Transakcie sú na sebe nezávislé a môžu byť spracované a overené paralelne.

Každá transakcia môže spotrebovať jeden alebo viac EUTXO, čím sa vytvoria nové EUTXO, ktoré budú mať tú istú celkovú hodnotu. Jediný spôsob, ako môže transakcia ovplyvniť účinok inej transakcie aplikovanej na účtovnú knihu, je spotrebovať rovnaké EUTXO, aké sa pokúša minúť neskoršia transakcia, čím uzol spôsobí jej odmietnutie.

Ak transakcia prejde lokálnym overením, používateľ si môže byť takmer istý, že sa transakcia dostane do nového bloku. Transakcie v modeli EUTXO sú navzájom nezávislé a sú deterministické, čo znamená, že transakcia s veľkou pravdepodobnosťou nezlyhá. Platí to aj pre overovanie skriptov Plutus. Používatelia môžu lokálne skontrolovať, či je možné skript Plutus odoslať a spustiť v reťazci. Zabezpečuje to, že poplatky sa nikdy nestratia. Je však potrebné dodržiavať jedno pravidlo, a to, že každé EUTXO možno minúť len raz a ako celok v rámci bloku.

Výdaj UTXO musí akceptovať celá sieť v rámci pridania nového bloku. To znamená, že príjemca UTXO ho môže minúť len v ďalšom bloku. Nie v tom istom bloku, v ktorom bolo UTXO prijaté. Pridanie nového bloku možno považovať za prechod stavu blockchainu Cardano. V samotných blokoch sú však jednotlivé transakcie a EUTXO **na sebe nezávislé.

Model EUTXO je deterministickejší ako model založený na účtoch, ale transakcia môže byť stále odmietnutá. Odmietnutie znamená, že napriek tomu, že transakcia je správne zostavená, nemôže byť použitá v blockchaine. Ak sa tak stane, transakcia nemá žiadny vplyv na stav blockchainu, takže sa neplatia žiadne poplatky. K zamietnutiu transakcie dochádza v prípade sporu. To znamená, že stav blockchainu sa zmenil v približne rovnakom čase, keď používateľ lokálne skonštruoval transakciu. Lokálne overenie prebehlo, ale stav blockchainu je v okamihu predloženia transakcie už iný. Determinizmus zabezpečuje, že vždy, keď je transakcia prijatá, bude mať len predvídateľné účinky na stav hlavnej knihy. Inými slovami, bude mať rovnaký vplyv na stav účtovnej knihy ako počas konštrukcie a lokálneho overovania.

Pre vývojára môže byť zložitejšie vytvoriť skript validátora, pretože sa musí sám vysporiadať s konkurzom. Transakcie sa môžu dostať do kontaktu, ak závisia od toho istého EUTXO v rovnakom čase. Ak by napríklad niekoľko EUTXO bolo uzamknutých inteligentným kontraktom, potom s nimi môže v rámci jedného bloku komunikovať len jeden agent. Všimnite si, že toto obmedzenie sa vzťahuje len na EUTXO. Rôzni agenti môžu interagovať s inými inteligentnými zmluvami bez akéhokoľvek zlyhania súbežnosti. Inteligentný kontrakt môže obsluhovať množstvo rôznych UTXO, ktoré tvoria jeho aktuálny stav a metadáta mimo reťazca, ktoré umožňujú interpretáciu týchto UTXO.

Súbežné a paralelné spracovanie. Agenti môžu súčasne spotrebovávať viacero UTXO. Keď chcú spotrebovať to isté EUTXO, môže u nich dôjsť k súpereniu.

Paralelizácia alebo schopnosť vykonávať viacero nezávislých operácií súbežne, je dôležitou vlastnosťou z hľadiska celkového výkonu a škálovateľnosti siete. Globálny stav modelu založeného na účtoch obmedzuje možnosti škálovateľnosti, pretože je mimoriadne ťažké dosiahnuť paralelizáciu pri spracovaní transakcií a tiež pri vykonávaní inteligentných kontraktov. S modelom EUTXO je možné dosiahnuť vyššiu úroveň konkurencie, čo otvára dvere zvýšenej škálovateľnosti.

Pozrime sa, čo je nové na modeli EUTXO v porovnaní s modelom UTXO, ktorý využíva Bitcoin. Spracovanie transakcie v sieti Cardano zahŕňa overenie požadovanej akcie. Uzol overuje, či je schopný vykonať požadovanú akciu a či autor transakcie poskytol príslušné údaje/vstupy.

Bežná akcia sa týka bežných transakcií, ktoré majú v úmysle minúť EUTXO, ktoré sú zamknuté verejným kľúčom. Uzol overí, či autor transakcie poskytol digitálny podpis s príslušným privátnym kľúčom. Ak je overenie úspešné, vykoná sa akcia, t. j. spotreba EUTXO. V porovnaní s Bitcoinom tu zatiaľ nie je nič nové.

Ďalšou akciou je validácia transakcií, ktoré majú v úmysle minúť EUTXO, ktoré sú zablokované adresou skriptu.

Skript je program (časť kódu), ktorý rozhoduje o tom, či transakcia, ktorá míňa EUTXO, je alebo nie je oprávnená tak urobiť. Skript obsahuje čisté funkcie, ktorých výsledkom je buď Pravda, alebo Lož. Na overenie transakcie uzol vyvolá prekladač skriptov, čo je program, ktorý dokáže preložiť a vykonať kód skriptu Plutus. Interpret vykoná skript, ktorého hash bol vytvorený adresou, na ktorej sú uzamknuté UTXO. Inými slovami, keď je EUTXO uzamknuté skriptom Plutus, kód skriptu tohto EUTXO je spojený s jeho adresou.

Uzol dostane transakciu s akciou na výdaj EUTXO, ktorá je uzamknutá adresou skriptu.

Pozrime sa, čo je na EUTXO v porovnaní s Bitcoinom skutočne inovatívne okrem vyššej expresivity programovateľnosti, ktorú umožňuje Plutus.

Rozšírené UTXO umožňuje používateľom voliteľne pridávať do UTXO ľubovoľné používateľské údaje vo formáte podobnom JSON. Tieto údaje sa nazývajú Datum. Datum umožní vývojárom poskytnúť skriptom funkčnosť podobnú stavom. Používateľské údaje možno považovať za lokálny stav skriptu. Tento stav má len lokálnu platnosť, pretože je spojený s konkrétnym UTXO. Využitie celého potenciálu Datum je na vývojároch.

Transakcie môžu niesť používateľské argumenty, ktoré sa nazývajú Prevodník. Redeemer možno chápať ako zámer autora transakcie o tom, ako minúť UTXO. Redeemer môžu vývojári decentralizovaných aplikácií používať na rôzne účely.

Medzi Datom a Redeemerom zvyčajne existuje väzba, ktorá závisí od konkrétnej funkčnosti konkrétnej aplikácie. Pri overovaní transakcie overovací skript pracuje s Datum, Redeemer a kontextom, ktorý obsahuje údaje o transakcii. Skript obsahuje podmienky, ktoré po ich splnení umožňujú spotrebovať UTXO. Datum, Redeemer a kontext transakcie sú údaje, ktoré sú vstupom do skriptu.

Na základe vstupných údajov (Datum, Redeemer a kontext transakcie) skript rozhodne, či je možné spotrebovať EUTXO.

Aby bolo možné minúť EUTXO, ktoré sú uzamknuté skriptom, je potrebné najskôr dostať skript do blockchainu. Odomknutie UTXO bude závisieť od skriptu, takže transakcia bude obsahovať skript a tiež UTXO, ktoré sa majú zamknúť.

Vývojári (alebo ich aplikácie) napíšu kód Plutus na reťazci a zabalia ho do špeciálneho formátu. Potom sa musí vytvoriť transakcia, do ktorej bude skript Plutus vložený. Po uložení transakcie do blockchainu možno odoslať ďalšiu transakciu na začatie vykonávania skriptu. Transakciu možno považovať za správu pre skriptu.

Vývojári rozdeľujú aplikácie na kód v reťazci a kód mimo reťazca. Kód mimo reťazca môže byť súčasťou peňaženky alebo môže ísť o decentralizovanú aplikáciu (DEX). Off-chain časť aplikácie môže vytvoriť transakciu, ktorá obsahuje on-chain skript a EUTXO, ktoré sa majú uzamknúť. Pre každé EUTXO je potrebné uviesť hash Datum. Používateľ musí transakciu podpísať. Po odoslaní transakcie a jej prijatí sieťou budú EUTXO uzamknuté skriptom.

Transakcia Plutus obsahuje skript validátora a pridáva dátum do EUTXO. Po zaradení transakcie do bloku bude EUTXO uzamknuté skriptom.

Validácia skriptu je oveľa náročnejšia na zdroje ako validácia bežnej transakcie. Jedným zo zdrojov neurčitosti môže byť veľkosť poplatkov za vykonanie inteligentného kontraktu/skriptu. V prípade Cardano je rozpočet na vykonanie skriptu súčasťou transakcie a presný poplatok je možné vypočítať lokálne vopred. Interpret skriptov sleduje spotrebu zdrojov počas vykonávania skriptu v kontexte rozpočtu. Ak je rozpočet na vykonanie vyčerpaný, vyhodnocovanie skriptu sa zastaví a výsledkom je False. Hodnota false znamená, že EUTXO sa nespotrebuje.

Upozorňujeme, že skript Plutus pracuje len so stavom, ktorý je spojený s EUTXO, a ďalej s údajmi, ktoré dostane v transakcii. Vykonávanie skriptu nie je závislé od ničoho iného. Jediná vec, ktorá sa z pohľadu účtovnej knihy na globálnej úrovni zmení, je presun EUTXO z adries na iné adresy pri každom novo pridanom bloku.

Na uzamknutie mincí Alice a Boba možno použiť ten istý kontrakt. Vykonanie skriptu pre Alicine mince nemá žiadny vplyv na vykonanie skriptu pre Bobove mince, pretože ide o dve nezávislé vykonania pre samostatné EUTXO. Výsledok týchto dvoch samostatných vykonaní závisí od lokálnych stavov.

Na interakciu so skriptom sa vytvára transakcia výdavkov (transakcia správ). Vstupom transakcie môže byť EUTXO, ktoré je uzamknuté skriptom. Výdajová transakcia vyvolá interpreter skriptu s cieľom overiť skript a odomknúť EUTXO, ak sú splnené podmienky. Odomknuté EUTXO sa tak prenesie na novú adresu.

Aby bolo možné spotrebovať EUTXO zo zostatku aplikácie, musí interpret Plutus vykonať skript Plutus spojený s EUTXO. Skript používa ako vstupné údaje Datum, Redemátor a kontext transakcie. Výsledkom vykonania je hodnota True (Pravda), takže EUTXO sa môže spotrebovať. 12 ADA sa odošle na Bobovu adresu.

Niektoré aplikácie môžu potrebovať pracovať s globálnym stavom vo viacerých EUTXO a môžu na to použiť Datum. Druh globálneho stavu je dosiahnuteľný v rámci konkrétneho návrhu protokolu. Návrhári protokolov si musia byť vedomí, že ak sú EUTXO uzamknuté skriptom, môže s nimi komunikovať iba jediný agent v rámci jedného bloku. Môže to vyžadovať určitý druh synchronizácie medzi agentmi.

Ilustrujme si to na príklade. Pooly likvidity, ktoré používa AMM DEX, sú zdieľané zdroje, pretože používatelia ich chcú používať v rovnakom čase (v rámci toho istého bloku). Každý fond likvidity obsahuje sadu EUTXO. Dostupné EUTXO sú preto tiež zdieľané zdroje, pretože ak si agent nejakým dohodnutým spôsobom nevyhradí konkrétne EUTXO pre seba, sú k dispozícii všetkým ostatným.

Aplikačný algoritmus musí zabezpečiť, aby pri vytváraní transakcií jednotliví agenti nesúperili o EUTXO v poole. Transakcie, ktoré chcú spotrebovať konkrétne EUTXO, sú z hľadiska validácie navzájom nezávislé. Závislosť však existuje, pretože viacerí agenti môžu chcieť spotrebovať ten istý zdroj (to isté EUTXO) v rovnakom čase na vytvorenie transakcie. Inými slovami, agenti chcú pracovať súbežne. Jedným z riešení, ktoré sa v súčasnosti používa, sú hromadné transakcie. Agenti vyhľadávajú vhodné požiadavky UTXO, ktoré chcú komunikovať s konkrétnym fondom likvidity s cieľom splniť požadovanú výmenu. Agenti to robia s ohľadom na všetky ostatné dostupné požiadavky na swap a vybrané swapy vkladajú do jednej veľkej hromadnej transakcie. Pri vytváraní dávkovej transakcie agenti vedia, ktoré UTXO už boli použité. Môžu zabezpečiť, aby sa konkrétne EUTXO nepoužilo v rámci dávkovej transakcie dvakrát.

Záver

Najlepšie na Cardane je, že ho tím neustále aktualizuje, čím sa postupne zvyšujú jeho možnosti. V čase písania tohto článku je pred nami hard-fork Vasil, ktorý do Cardana prinesie mnoho vylepšení v oblasti skriptovania. Konkrétne ide o Referenčné vstupy (CIP-31), Inline Datums (CIP-32), Referenčné skripty (CIP-33) a Vedľajšie výstupy (CIP-40). Všetky tieto vylepšenia poskytnú vývojárom viac možností pri navrhovaní ich aplikácií.


(Napísal @Cardanians.io) - preklad @Martin.M
Pôvodný článok: Understanding Cardano Extended-UTXO