­č窭čç░ Overovanie transakci├ş bez prekvapen├ş v syst├ęme Cardano

Model EUTXO Cardana umo┼ż┼łuje deterministick├║ povahu vykon├ívania skriptov Plutusu

No-surprises transaction validation on Cardano

Ke─Ć┼że hard fork Alonzo prin├í┼ía do Cardana jadro inteligentn├Żch zml├║v - Plutus, hlavn├Ż ledger sa vyv├şja tak, aby sp─║┼łal rast├║cu potrebu zav├ídzania decentralizovan├Żch rie┼íen├ş. N├ívrh hlavnej knihy Cardano sa zameriava na vysok├║ istotu, bezpe─Źnos┼ą a osved─Źen├ę form├ílne overovanie. V s├║lade s touto strat├ęgiou je tie┼ż d├┤le┼żit├ę zabezpe─Źi┼ą, aby spracovanie transakci├ş bolo deterministick├ę, ─Źo znamen├í, ┼że pou┼ż├şvate─ż m├┤┼że predv├şda┼ą ich vplyv a v├Żsledok e┼íte pred ich skuto─Źn├Żm vykonan├şm.

Schopnos┼ą zaru─Źi┼ą n├íklady na vykonanie transakcie a to, ako sa transakcia spr├íva v ├║─Źtovnej knihe pred jej odoslan├şm sa st├íva e┼íte v├Żznamnej┼íou po zaveden├ş podpory inteligentn├Żch zml├║v. Tak├ęto mo┼żnosti poskytuj├║ blockchainy zalo┼żen├ę na Unspent Transaction Output (UTXO), ako napr├şklad Cardano. Blockchainy zalo┼żen├ę na ├║─Źtoch, ako napr├şklad Ethereum, s├║ nedeterministick├ę, ─Źo znamen├í, ┼że nem├┤┼żu zaru─Źi┼ą predv├şdate─żnos┼ą transakcie v re┼ąazci. Toto predstavuje riziko pe┼ła┼żn├Żch str├ít, nepredv├şdate─żne vysok├Żch poplatkov a ─Ćal┼íie pr├şle┼żitosti pre nepriate─żsk├ę spr├ívanie.

V tomto pr├şspevku sa bli┼ż┼íie pozrieme na v├Żhody deterministick├ęho dizajnu Cardana, ktor├Ż umo┼ż┼łuje bezpe─Źn├ę vyhodnotenie transakci├ş a skriptov pred ich vykonan├şm. V nasleduj├║com blogu, ktor├Ż vyjde koncom tohto t├Ż┼żd┼ła, sa budeme venova┼ą dvom f├ízam overovania transakci├ş v syst├ęme Cardano.

─îo je to transak─Źn├Ż determinizmus a pre─Źo je d├┤le┼żit├Ż?

Determinizmus je v kontexte spracovania transakci├ş a skriptov synonymom pre predv├şdate─żnos┼ą. To znamen├í, ┼że pou┼ż├şvate─ż m├┤┼że lok├ílne (mimo re┼ąazca) predv├şda┼ą, ako jeho transakcia ovplyvn├ş stav hlavnej knihy v re┼ąazci, bez toho, aby do┼ílo k:

  • neo─Źak├ívan├Żm v├Żsledkom alebo zlyhaniu valid├ície skriptu
  • neo─Źak├ívan├Żm poplatkom
  • neo─Źak├ívan├Żm aktualiz├íci├ím stavu ├║─Źtovnej knihy alebo skriptu.

Transakcia v deterministickom syst├ęme m├┤┼że by┼ą zamietnut├í aj ke─Ć je spr├ívne zostaven├í. Odmietnut├í znamen├í, ┼że transakcia nemohla by┼ą v├┤bec uskuto─Źnen├í a teda nem├í ┼żiadny vplyv na stav ledgeru, tak┼że sa neplatia ┼żiadne poplatky. D├┤vodom, pre─Źo by k tomu mohlo d├┤js┼ą, s├║ zmeny v ├║─Źtovnej knihe sp├┤soben├ę in├Żmi transakciami spracovan├Żmi v ─Źase medzi zostaven├şm po─Źiato─Źnej transakcie a jej spracovan├şm. To sa m├┤┼że sta┼ą aj pri jednoduch├Żch transakci├ích. Napr├şklad in├í transakcia m├┤┼że min├║┼ą UTXO, ktor├ę pou┼ż├şvate─ż tie┼ż pl├ínoval min├║┼ą. Determinizmus zabezpe─Źuje, ┼że v┼żdy, ke─Ć je transakcia prijat├í, bude ma┼ą len predv├şdate─żn├ę ├║─Źinky na stav ├║─Źtovnej knihy.

Rie┼íenie ot├ízky neur─Źitosti

Indeterminizmus znamen├í, ┼że pred vykonan├şm transakcie nem├┤┼żeme predpoveda┼ą, ak├Ż vplyv bude ma┼ą transakcia na ├║─Źtovn├║ knihu. Pri n├ívrhu ├║─Źtovnej knihy, ako aj inteligentn├ęho kontraktu je d├┤le┼żit├ę predv├şda┼ą podmienky, v ktor├Żch by mohol nasta┼ą indeterminizmus a prija┼ą n├ívrhov├ę rozhodnutia, aby sa im predi┼ílo. Jedn├Żm z hlavn├Żch nebezpe─Źenstiev v takomto pr├şpade je pr├şstup k mutabiln├Żm ├║dajom ├║─Źtovnej knihy - teda ├║dajom, ktor├ę mo┼żno zmeni┼ą alebo upravi┼ą. Ke─Ć zmeny, ktor├ę transakcia alebo inteligentn├Ż kontrakt vykon├í v ├║─Źtovnej knihe z├ívisia od jej stavu v ─Źase spracovania a nie iba od obsahu transakcie, m├┤┼że sa indeterminizmus sta┼ą probl├ęmom.

Ethereum je na tento probl├ęm mimoriadne n├íchyln├ę. Napr├şklad ceny plynu alebo kurz decentralizovanej burzy (DEX) m├┤┼żu kol├şsa┼ą v ─Źase medzi odoslan├şm transakcie pou┼ż├şvate─żom a jej spracovan├şm. To m├í za n├ísledok neo─Źak├ívan├ę poplatky za plyn alebo zmeny cien nakupovan├Żch akt├şv. Alebo m├┤┼że skript jednoducho zlyha┼ą, ─Źo m├í za n├ísledok vysok├ę n├íklady na vykonanie (stovky dol├írov) a ┼żiadny in├Ż efekt. K tomu by mohlo d├┤js┼ą napr├şklad vtedy, ak sa v polovici vykon├ívania vy─Źerpaj├║ prostriedky dostupn├ę na pokrytie n├íkladov na plyn. Deterministick├Ż n├ívrh ├║─Źtovnej knihy tieto mo┼żnosti eliminuje.

Medzi ─Ćal┼íie mo┼żn├ę zdroje neur─Źitosti patr├ş umo┼żnenie skriptom vidie┼ą:

  • ├║daje v bloku, ktor├Ż obsahuje transakciu, ale nie s├║ zahrnut├ę v ┼żiadnej transakcii, napr. syst├ęmov├í n├íhodnos┼ą, hlavi─Źka bloku alebo ─Ź├şslo aktu├ílneho slotu
  • ├║daje zmenen├ę alebo nahraden├ę protivn├şkom, ─Źo by mohlo zmeni┼ą v├Żsledok overenia skriptu, pri─Źom samotn├í transakcia zost├íva spracovate─żn├í.

Vo v├Ą─Ź┼íine syst├ęmov existuj├║ sp├┤soby, ako tieto probl├ęmy zmierni┼ą pomocou lep┼í├şch postupov p├şsania skriptov alebo rie┼íen├ş na druhej vrstve. Cardano je navrhnut├ę tak, aby zaru─Źovalo predv├şdate─żn├ę v├Żsledky pre v┼íetky skripty a transakcie.

Ak├ę v├Żhody m├í z├íkladn├Ż model UTXO z h─żadiska determinizmu

Hlavn├í kniha Cardana je postaven├í na ├║─Źtovnom modeli UTXO, ─Źo znamen├í, ┼że akt├şva s├║ v hlavnej knihe ulo┼żen├ę v nevyu┼żit├Żch v├Żstupoch a nie v ├║─Źtoch . Ka┼żd├Ż z t├Żchto v├Żstupov ┼ípecifikuje mno┼żstv├í akt├şv, ktor├ę s├║ v ┼łom ulo┼żen├ę, spolu s jeho adresou. Nespotrebovan├ę v├Żstupy s├║ nezmenite─żn├ę, tak┼że transakcia m├┤┼że spotrebova┼ą cel├Ż v├Żstup, ale nem├┤┼że ho zmeni┼ą.

Pri prevode akt├şv sa transakciou spotrebuje jeden alebo viac v├Żstupov a vytvoria sa nov├ę v├Żstupy, ktor├ę celkovo obsahuj├║ rovnak├ę mno┼żstvo akt├şv ako tie, ktor├ę sa spotrebovali. Tieto mno┼żstv├í - a ich adresy UTXO - s├║ uveden├ę vo v├Żstupoch transakcie. Jedin├Ż sp├┤sob, ako m├┤┼że transakcia ovplyvni┼ą ├║─Źinok inej transakcie aplikovanej na ├║─Źtovn├║ knihu je, ┼że minie rovnak├ę UTXO, ak├ę sa pok├║┼ía min├║┼ą neskor┼íia transakcia, ─Ź├şm sp├┤sob├ş, ┼że uzol ju odmietne. Toto je k─ż├║─Źov├í vlastnos┼ą, na ktor├║ sa model UTXO spolieha pri zachovan├ş determinizmu.

Hlavn├í kniha UTXO m├í oproti modelu zalo┼żen├ęmu na ├║─Źtoch v├Żhody aj nev├Żhody. Napr├şklad men┼í├ş po─Źet pr├şpadov vz├íjomn├ęho blokovania transakci├ş. Na rozdiel od UTXO s├║ ├║─Źty premenliv├Żmi ├║dajmi ├║─Źtovnej knihy. Tak┼że transakcia m├┤┼że vidie┼ą napr├şklad in├ę mno┼żstvo akt├şv na ├║─Źte v z├ívislosti od toho, ─Źi bola spracovan├í pred alebo po inej transakcii, ktor├í aktualizuje ten ist├Ż ├║─Źet. T├íto okolnos┼ą nemus├ş sp├┤sobi┼ą odmietnutie transakcie, ale m├┤┼że ma┼ą za n├ísledok r├┤zne - a nepredv├şdate─żn├ę - zmeny v ├║─Źtovnej knihe.

V├Żstupy UTXO s├║ len jedn├Żm z pr├şkladov ─Źinnost├ş, ktor├ę m├┤┼że transakcia vykona┼ą. ─Äalej vysvetl├şme, ─Źo s├║ to transak─Źn├ę akcie a ako ich mo┼żno overi┼ą. Najv├Żznamnej┼í├şm s├║borom zmien zaveden├Żch v syst├ęme Alonzo s├║ zmeny v procese valid├ície akci├ş.

Overovanie akci├ş pomocou podpisov a skriptov

D├┤le┼żit├Żm aspektom spracovania transakcie je overovanie vykon├ívan├Żch ─Źinnost├ş. Transakcia vykon├íva akciu, ke─Ć obsahuje ├║daje v konkr├ętnom poli pre t├║to akciu. Napr├şklad transakcia vykon├íva UTXO U, ke─Ć vo svojom vstupnom poli obsahuje odkaz na U, a minting token X, ke─Ć jej minting pole obsahuje X.

Ke─Ć uzol sprac├║va transakciu, overuje, ─Źi m├┤┼że vykona┼ą zam├Ż┼í─żan├║ akciu. Na tento ├║─Źel mus├ş autor transakcie poskytn├║┼ą pr├şslu┼ín├ę ├║daje, napr. skripty alebo podpisy. Be┼żn├Żm pr├şkladom akcie, ktor├í si vy┼żaduje overenie je vynalo┼żenie UTXO uzamknut├ęho verejn├Żm k─ż├║─Źom. Na vykonanie tejto akcie mus├ş transakcia poskytn├║┼ą podpis z pr├şslu┼ín├ęho s├║kromn├ęho k─ż├║─Źa.

Cardano pou┼ż├şva na overovanie akci├ş skripty. Tieto skripty, ─Źo s├║ ─Źasti k├│du, implementuj├║ ─Źist├ę funkcie s v├Żstupmi True alebo False. Overovanie skriptov je proces vyvolania interpretu skriptu na spustenie dan├ęho skriptu na pr├şslu┼ín├Żch argumentoch.

Overovanie skriptov je mo┼żn├ę vykona┼ą pre nasleduj├║ce akcie:

  • U┼żitie UTXO uzamknut├ęho adresou skriptu: spust├ş sa skript, ktor├ęho hash tvor├ş adresu.
  • Minting tokenu: spusten├Ż skript je ten, ktor├ęho hash tvor├ş ID politiky dan├ęho tokenu.
  • V├Żber odmeny: spusten├Ż skript je ten, ktor├ęho hash tvor├ş adresu stakingu.
  • Uplatnenie certifik├ítu: spust├ş sa skript, ktor├ęho hash tvor├ş poverenie autora certifik├ítu.

Okrem toho, ┼że uzol vie, ktor├Ż skript m├í spusti┼ą, v┼íetky transak─Źn├ę akcie nazna─Źuj├║ ako zostavi┼ą argumenty odovzdan├ę tomuto skriptu.

Multiassetov├í ├║─Źtovn├í kniha Cardano (Mary) podporuje jednoduch├ę skripty multisig a timelock. Tie umo┼ż┼łuj├║ pou┼ż├şvate─żom ┼ípecifikova┼ą podpisy potrebn├ę na vykonanie akcie (ako je napr├şklad vydanie UTXO alebo razenie nezamenite─żn├ęho tokenu (NFT)) a ─Źasov├Ż interval, v ktorom to mo┼żno vykona┼ą. Skript ─Źasov├ęho z├ímku nikdy nem├┤┼że vidie┼ą skuto─Źn├ę ─Ź├şslo slotu v transakcii, ktor├í ho obsahuje. Timelock m├┤┼że vidie┼ą iba interval platnosti nosnej transakcie. Ak by sa skriptu timelock umo┼żnilo vidie┼ą aktu├ílne ─Ź├şslo slotu (t. j. ├║daje poch├ídzaj├║ce z bloku a nie od autora), poru┼íilo by to determinizmus. To je zabezpe─Źen├ę t├Żm, ┼że pou┼ż├şvate─ż nem├┤┼że pozna┼ą presn├Ż slot, v ktorom sa transakcia sprac├║va a preto nem├┤┼że predv├şda┼ą, ako sa skript bude spr├íva┼ą.

Skripty v Mary s├║ na rozdiel od Plutus kontraktov v Alonzo ve─żmi obmedzen├ę v tom, ─Źo m├┤┼żu vyjadri┼ą. Hard fork Alonzo otv├íra nov├║ ├ęru v├Żkonn├Żch - stavov├Żch kontraktov, ktor├ę neohrozuj├║ vlastnos┼ą deterministickej ├║─Źtovnej knihy.

Plutus skripty

Alonzo zav├ídza nov├Ż pr├şstup k overovaniu transakci├ş v Cardane v─Ćaka implement├ícii skriptov Plutus. V├Żstup extended unspent transaction output (EUTXO), nasaden├Ż ako s├║─Źas┼ą syst├ęmu Alonzo, poskytuje infra┼ítrukt├║ru hlavnej knihy na podporu kontraktov Plutusu. Ni┼ż┼íie uv├ídzame preh─żad zmien v hlavnej knihe a transakci├ích na vy┼í┼íej ├║rovni. Podrobnej┼íie inform├ície o pr├íci s hlavnou knihou a skriptami Plutus n├íjdete v programe Plutus Pioneer!

Alonzo zmen├ş ├║daje v ├║─Źtovnej knihe takto:

  1. Skripty Plutus m├┤┼żu uzamkn├║┼ą UTXO.
  2. Nov├Ż komponent, pridan├Ż do obsahu v├Żstupn├Żch ─Źast├ş UTXO, umo┼ż┼łuje funkcionalitu podobn├║ stavu skriptov. Okrem akt├şv a adresy obsahuje UTXO uzamknut├ę skriptami Plutus aj datum. Datum je ─Źas┼ą ├║dajov, ktor├║ mo┼żno pova┼żova┼ą za interpret├íciu stavu skriptu.
  3. Existuje nieko─żko nov├Żch parametrov protokolu, ktor├ę sa pou┼ż├şvaj├║ na ulo┼żenie dodato─Źn├Żch po┼żiadaviek na valid├íciu transakci├ş. Patria medzi ne horn├ę limity v├Żpo─Źtov├Żch zdrojov, ktor├ę m├┤┼żu skripty spotrebova┼ą.

Na podporu skriptov Plutus boli transakcie aktualizovan├ę takto:

  1. Pre ka┼żd├║ svoju akciu teraz transakcia nesie pou┼ż├şvate─żom zadan├Ż argument, ktor├Ż sa naz├Żva redeemer. V z├ívislosti od skriptu m├┤┼że redeemer sl├║┼żi┼ą na r├┤zne ├║─Źely. M├┤┼że napr├şklad fungova┼ą ako ponuka, ktor├║ pou┼ż├şvate─ż zad├í v aukcii, alebo ako odhad pou┼ż├şvate─ża v tipovacej hre, okrem mnoh├Żch in├Żch funkci├ş.
  2. Transakcia ur─Źuje rozpo─Źet na vykonanie pre ka┼żd├Ż skript.
  3. Na zabezpe─Źenie toho, aby transakcia mohla zaplati┼ą svoj poplatok za vykonanie, zav├ídza Alonzo ─Ćal┼íie ├║daje, ktor├ę rozoberieme v nasleduj├║com blogovom pr├şspevku.
  4. Transakcie obsahuj├║ hash integrity, ktor├Ż je potrebn├Ż na zabezpe─Źenie toho, aby nebola ohrozen├í, zastaral├í at─Ć.

V porovnan├ş s Mary do┼ílo aj k ur─Źit├Żm zmen├ím v ┼ípecifik├ích valid├ície transakci├ş Alonzo. Pre ka┼żd├║ akciu uzol zostav├ş argumenty skriptu, ktor├ę o─Źak├íva interpret Plutus, vr├ítane:

  • datum
  • redeemer
  • rozpo─Źet na vykonanie
  • zhrnutie transakcie.

Uzol vykon├íva nov├ę, pre Alonzo ┼ípecifick├ę kontroly, ktor├ę zabezpe─Źuj├║ spr├ívne zostavenie transakcie. Napr├şklad nesmie prekro─Źi┼ą maxim├ílny rozpo─Źet prostriedkov na vykon├ívanie. Taktie┼ż vyvol├íva interpreter skriptov Plutusuu na spustenie skriptov.

D├ítov├ę objekty vs. stav skriptu

Podobne ako muta─Źn├ę ├║─Źty, aj muta─Źn├Ż stav skriptov patr├ş do kateg├│rie ÔÇťmuta─Źn├Żch ├║dajov ├║─Źtovnej knihyÔÇŁ zdrojov neur─Źitosti. U┼ż sme videli, ┼że model UTXO sa vyh├Żba probl├ęmu neur─Źitosti menite─żn├Żch ├║─Źtov. M├┤┼że n├ím tie┼ż pom├┤c┼ą znovu si predstavi┼ą koncept stavu skriptu sp├┤sobom, ktor├Ż zachov├íva determinizmus. Ak je UTXO uzamknut├ę skriptom Plutus, k├│d tohto UTXO je spojen├Ż s jeho adresou. Stavov├Ż anal├│g tohto skriptu je ├║daj ulo┼żen├Ż v tomto UTXO. Ke─Ć transakcia minie toto UTXO, vyma┼że sa z ├║─Źtovnej knihy vr├ítane d├ít. Obsah skriptu Plutus by si v┼íak mohol vyn├║ti┼ą aby transakcia, ktor├í ho nesie, vytvorila aj UTXO obsahuj├║ce konkr├ętny ├║daj, ktor├Ż mo┼żno pova┼żova┼ą za aktualizovan├Ż stav skriptu.

Rozpo─Źet na vykonanie skriptov

Nedeterministick├Ż model plynu m├┤┼że pou┼ż├şvate─żom ├║─Źtova┼ą nepredv├şdate─żne vysok├ę poplatky. V skript├ích Cardana je tento zdroj neur─Źitosti rie┼íen├Ż po┼żiadavkou, aby bol v transakcii zahrnut├Ż samotn├Ż rozpo─Źet zdrojov, ako aj poplatok potrebn├Ż na pokrytie tohto rozpo─Źtu. V syst├ęme Alonzo m├┤┼że pou┼ż├şvate─ż pri zostavovan├ş transakcie oboje predv├şda┼ą lok├ílne. Vykon├ívanie skriptov nevyhnutne vracia bu─Ć True alebo False a nebude sa cykli┼ą donekone─Źna. D├┤vodom je, ┼że ka┼żd├í oper├ícia, ktor├║ skript vykon├í, si vy┼żaduje nenulov├ę mno┼żstvo zdrojov, ktor├ę interpreter sleduje. Ak je rozpo─Źet ur─Źen├Ż transakciou prekro─Źen├Ż, vykon├ívanie skriptu sa ukon─Ź├ş a vr├íti sa False .

Valid├ícia transakci├ş v Alonzo

V s├║vislosti s mo┼żn├Żmi zdrojmi neur─Źitosti je mo┼żn├ę predv├şda┼ą v├Żsledky overovania skriptov a transakci├ş v─Ćaka nasleduj├║cim k─ż├║─Źov├Żm bodom:

  • interpreter skriptu sa v┼żdy ukon─Ź├ş a vr├íti rovnak├Ż v├Żsledok valid├ície, ak sa pou┼żije na rovnak├ę argumenty
  • transakcia nevyhnutne fixuje v┼íetky argumenty, ktor├ę bud├║ po─Źas valid├ície odovzdan├ę interpretu skriptu
  • transakcia ┼ípecifikuje v┼íetky akcie, ktor├ę vykon├íva a ktor├ę vy┼żaduj├║ valid├íciu skriptu
  • povinn├ę podpisy transakcie zabezpe─Źuj├║, ┼że ju protivn├şk nem├┤┼że zmeni┼ą sp├┤sobom, ktor├Ż by sp├┤sobil zlyhanie skriptov
  • pou┼żitie transakcie v modeli ├║─Źtovnej knihy EUTXO je deterministick├ę.

Posledn├Ż bod je do ve─żkej miery zdeden├Ż z modelu UTXO, ke─Ć┼że aktualiz├ície protokolu Alonzo ledger zost├ívaj├║ z ve─żkej ─Źasti konzistentn├ę s aktualiz├íciami v predch├ídzaj├║cich obdob├ş (vr├ítane sch├ęmy delegovania at─Ć.). Po aktualiz├ícii syst├ęmu Alonzo m├í zlyhanie alebo ├║spech valid├ície skriptu vplyv na sp├┤sob spracovania transakcie (viac o tom v druhej ─Źasti!). V├Żsledok Pravda alebo Nepravda, ako aj zmeny v ├║─Źtovnej knihe spojen├ę s oboma v├Żsledkami, s├║ v┼íak pre dan├║ transakciu predv├şdate─żn├ę.

Deterministick├ę spr├ívanie skriptov Cardana a overovanie transakci├ş nie je prirodzen├Żm v├Żsledkom pou┼ż├şvania modelu EUTXO. Na zabezpe─Źenie tejto vlastnosti musel t├şm IOG starostlivo sledova┼ą zdroj ka┼żd├ęho ├║daju, ktor├Ż m├┤┼że skript vidie┼ą.

Vlastnos┼ą deterministick├ęho vyhodnocovania je form├ílne ┼ípecifikovan├í v Alonzo ┼ípecifik├ícii a t├şm IOG tie┼ż na─Źrtol d├┤kaz, ┼że interpreter dostane len tie argumenty, ktor├ę by t├║to vlastnos┼ą neporu┼íili.

V na┼íom druhom pr├şspevku na blogu sa bli┼ż┼íie pozrieme na dvojf├ízov├Ż proces overovania transakci├ş Cardano. Druh├║ ─Źas┼ą si preto pozrite koncom tohto t├Ż┼żd┼ła.


P├┤vodn├Ż ─Źl├ínok: No-surprises transaction validation on Cardano

Nap├şsala Polina Vinpgradova z IOHK - preklad @Martin.M