­č窭čç░ Overovanie transakci├ş bez prekvapen├ş v syst├ęme Cardano: 2. ─Źas┼ą

Valid├ícia transakci├ş v Alonzo sa vykon├íva v dvoch f├ízach, aby sa zabezpe─Źila spravodliv├í odmena za valida─Źn├║ pr├ícu

No-surprises transaction validation: part 2

V na┼íom predch├ídzaj├║com blogovom pr├şspevku sme sa venovali deterministickej povahe valid├ície transakci├ş a skriptov v ├║─Źtovnej knihe Alonza, ktor├í poskytuje istotu, ┼że v├Żsledok aplik├ície transakci├ş a valid├ície skriptov na chaine mo┼żno presne predpoveda┼ą lok├ílne, e┼íte pred odoslan├şm transakcie.

Na z├íklade z├íruk, ktor├ę poskytuje deterministick├Ż dizajn hlavnej knihy v Alonzo, sme implementovali ┼ípecifick├║ dvojf├ízov├║ sch├ęmu overovania. Je navrhnut├í tak, aby minimalizovala zdroje, ktor├ę uzly vyu┼ż├şvaj├║ na valid├íciu sie┼ąov├Żch transakci├ş a z├írove┼ł eliminovala neo─Źak├ívan├ę n├íklady pre pou┼ż├şvate─ża. V tomto blogovom pr├şspevku sa hlb┼íie venujeme tomu, ako dvojf├ízov├í valid├ícia funguje.

V ├ęre Shelley, Allegra a Mary bolo overovanie transakci├ş jednostup┼łov├Żm procesom. Vplyv platnej transakcie na ├║─Źtovn├║ knihu bol plne predv├şdate─żn├Ż e┼íte pred jej pou┼żit├şm. Ak bola transakcia platn├í, bola zaraden├í do bloku a pridan├í do ├║─Źtovnej knihy. Ak nie, uzol ju po ne├║spe┼ínom pokuse o valid├íciu odmietol a transakcia nebola zaraden├í do bloku. Uzly, ktor├ę overovali prich├ídzaj├║ce transakcie, v┼íak spotrebovali ─Źas a zdroje bez oh─żadu na to, ─Źi transakcia skon─Źila v bloku alebo nie.

Alonzo predstavuje skripty Plutusu, ktor├Żch overenie m├┤┼że vy┼żadova┼ą podstatne viac prostriedkov v porovnan├ş s jednoduch├Żmi skriptami v predch├ídzaj├║cich obdobiach. Na rie┼íenie probl├ęmu uzlov, ktor├ę vynakladaj├║ zdroje na valid├íciu skriptov transakci├ş, ktor├ę s├║ odmietnut├ę, zav├ídza Alonzo dvojf├ízov├Ż pr├şstup valid├ície. T├íto strat├ęgia zachov├íva predv├şdate─żn├Ż v├Żsledok aplik├ície transakci├ş do ├║─Źtovnej knihy a z├írove┼ł zabezpe─Źuje spravodliv├║ kompenz├íciu uzlov za ich pr├ícu a vyu┼żitie zdrojov.

Dvojf├ízov├ę overovanie transakci├ş

Overovanie transakci├ş v syst├ęme Cardano je rozdelen├ę do dvoch f├íz. Hlavn├Żm d├┤vodom zavedenia dvojf├ízovej valid├ície je obmedzi┼ą mno┼żstvo nekompenzovanej valida─Źnej pr├íce uzlov. Ka┼żd├í f├íza sl├║┼żi na dosiahnutie tohto cie─ża. Zhruba povedan├ę, prv├í f├íza kontroluje, ─Źi je transakcia spr├ívne zostaven├í a ─Źi m├┤┼że zaplati┼ą poplatok za jej spracovanie. V druhej f├íze sa spustia skripty obsiahnut├ę v transakcii. Ak je transakcia platn├í pod─ża f├ízy 1, spustia sa skripty f├ízy 2. Ak f├íza-1 zlyh├í, nespustia sa ┼żiadne skripty a transakcia sa okam┼żite zahod├ş.

Od uzlov sa teda o─Źak├íva, ┼że do bloku pridaj├║ spracovate─żn├ę transakcie, aj ke─Ć transakcie nie s├║ platn├ę vo f├íze 2. To znamen├í, ┼że bu─Ć:

  • uzol vykon├í mal├ę mno┼żstvo nekompenzovanej pr├íce, aby zistil, ┼że transakcia nie je spracovate─żn├í ale nevykon├í sa ┼żiadna n├íkladn├í valid├ícia vo f├íze 2, alebo
  • transakcia je spracovate─żn├í. Uzol potom m├┤┼że vykona┼ą overenie skriptov vo f├íze 2, ozna─Źi┼ą transakciu pod─ża toho ─Źi je uznan├í za platn├║ alebo neplatn├║ vo f├íze 2 a prida┼ą ju do bloku. V oboch pr├şpadoch bude uzol nesk├┤r kompenzovan├Ż za obe f├ízy valid├ície prostredn├şctvom poplatku alebo z├íbezpeky vybranej z tejto transakcie.

O─Źak├íva sa, ┼że zlyhanie f├ízy-2 by malo by┼ą zriedkav├ę, preto┼że pou┼ż├şvate─ż, ktor├Ż predlo┼ż├ş transakciu so zlyhan├Żmi skriptami, strat├ş ADU, pri─Źom ni─Ź nedosiahne. Je to lok├ílne predv├şdate─żn├í a teda prevent├şvna udalos┼ą. F├íza je po┼żadovanou ochranou, ktor├í zaru─Źuje kompenz├íciu za potenci├ílne n├íro─Źn├ę v├Żpo─Źty skriptov na zdroje.

Pozrime sa bli┼ż┼íie na ┼ípecifik├í jednotliv├Żch f├íz.

Fáza 1

Prv├í f├íza valid├ície mus├ş by┼ą jednoduch├í. Ak t├íto f├íza zlyh├í, uzol nedostane kompenz├íciu za vykonan├║ pr├ícu, preto┼że nem├┤┼że prija┼ą poplatky za spracovanie nespracovan├Żch transakci├ş.

F├íza 1 valid├ície overuje dve veci: ─Źi je transakcia spr├ívne zostaven├í a ─Źi je mo┼żn├ę ju prida┼ą do ├║─Źtovnej knihy. T├íto valid├ícia zah┼Ľ┼ła nasleduj├║ce kontroly a niektor├ę ─Ćal┼íie:

  • plat├ş spr├ívnu v├Ż┼íku poplatkov a poskytuje spr├ívnu v├Ż┼íku z├íbezpeky (t. j. ADY vybranej v pr├şpade zlyhania skriptu, vysvetlen├ę ni┼ż┼íie)
  • obsahuje v┼íetky ├║daje potrebn├ę na vykonanie skriptov Plutus
  • neprekra─Źuje ┼żiadne hranice stanoven├ę v parametroch protokolu (t├Żkaj├║ce sa ve─żkosti v├Żstupu at─Ć.)
  • jeho vstupy sa vz┼ąahuj├║ na UTXO existuj├║ce v ├║─Źtovnej knihe
  • uveden├Ż v├Żpo─Źtov├Ż rozpo─Źet transakcie neprekra─Źuje maxim├ílny limit zdrojov na transakciu
  • kontroly integrity hash at─Ć.

Pred pridan├şm prich├ídzaj├║cej transakcie do mempoolu (a pr├şpadne do bloku) mus├ş uzol vykona┼ą v┼íetky overovacie kontroly f├ízy 1. Ak niektor├í z t├Żchto kontrol zlyh├í, transakcia sa odmietne bez zaradenia do bloku a ne├║─Źtuj├║ sa ┼żiadne poplatky. V predch├ídzaj├║cich obdobiach to bola jedin├í f├íza valid├ície a Cardano takto rie┼íilo v┼íetky zlyhania valid├ície.

Od poctiv├Żch, nekompromitovan├Żch uzlov sa neo─Źak├íva, ┼że bud├║ z├ímerne vytv├íra┼ą nespracovate─żn├ę transakcie. Uzly m├┤┼żu tie┼ż zru┼íi┼ą spojenia vykon├ívaj├║ce nepriate─żsk├ę ┼í├şrenie neplatn├Żch transakci├ş vo f├íze 1.

Fáza 2

V druhej f├íze overovania sa pou┼ż├şvaj├║ skripty Plutus, ktor├ę m├┤┼żu by┼ą v├Żpo─Źtovo n├íro─Źnej┼íie. Preto sa po ├║spe┼ínom alebo ne├║spe┼ínom ukon─Źen├ş druhej f├ízy ├║─Źtuj├║ poplatky. Vyzbieran├í ADA ide do banku poplatkov a tak kompenzuje uzly za zdroje pou┼żit├ę v procese valid├ície.

├Üspe┼ín├í valid├ícia vo f├íze 1 nezaru─Źuje, ┼że v┼íetky transakcie s├║ spracovate─żn├ę, iba to, ┼że je mo┼żn├ę vybra┼ą z├íbezpeku. Vo f├íze-2 sa vykon├íva valid├ícia skriptu Plutus a na z├íklade v├Żsledku valid├ície sa rozhoduje, ─Źi sa vykon├í ├║pln├ę spracovanie alebo len v├Żber z├íbezpeky:

  • ├║pln├ę uplatnenie transakcie (jedin├í mo┼żnos┼ą pred Alonzom) - ak skripty Plutus validuj├║ v┼íetky akcie transakcie,
  • vybra┼ą kolater├íl ADA a ignorova┼ą zvy┼íok transakcie - ak jeden zo skriptov Plutusu zlyh├í .

Pripome┼łme si, ┼że overovanie skriptov m├í lok├ílne predv├şdate─żn├Ż v├Żsledok a je zaru─Źen├ę, ┼że sa ukon─Ź├ş. Pou┼ż├şvatelia m├┤┼żu lok├ílne skontrolova┼ą v├Żsledky valid├ície skriptov a medzi poctiv├Żmi uzlami ned├┤jde k nezhode o tom, ako spracova┼ą dan├║ transakciu a skripty v nej.

Kolaterál

Aj ak sa skripty neoveria, mus├şme uzly za ich pr├ícu odmeni┼ą. Nem├┤┼żeme v┼íak len tak zobra┼ą peniaze zo vstupov transakci├ş, preto┼że tie mohli by┼ą uzamknut├ę pomocou skriptov - t├Żch, ktor├ę zlyhali! Namiesto toho teda Alonzo zav├ídza ┼ípeci├ílne ustanovenie na tento ├║─Źel. Z├íbezpeka transakcie je suma v ADA, ktor├í sa vyberie ako poplatok v pr├şpade zlyhania overovania skriptov vo f├íze 2. V spracovate─żnej transakcii mus├ş by┼ą t├íto suma aspo┼ł ur─Źit├Żm percentom poplatku za transakciu, ktor├í je uveden├í v parametri protokolu.

T├íto suma sa uv├ídza v ─Źase zostavovania transakcie. Nie priamo, ale pridan├şm kolater├ílnych vstupov do transakcie. Celkov├Ż zostatok v UTXO zodpovedaj├║ci t├Żmto ┼ípeci├ílne ozna─Źen├Żm vstupom je suma kolater├ílu transakcie. Tieto UTXO musia ma┼ą adresy verejn├ęho k─ż├║─Źa (nie skriptu) a neobsahuj├║ ┼żiadne in├ę tokeny ako ADA.

Z├íbezpekov├ę vstupy sa z ├║─Źtovnej knihy UTXO odstr├ínia len ak niektor├Ż skript neuspeje v 2. f├íze valid├ície. Ak v┼íetky skripty prejd├║, vyberie sa ur─Źen├í suma transak─Źn├ęho poplatku, ako v predch├ídzaj├║cich ├ęrach. Konkr├ętne t├íto suma poch├ídza z be┼żn├Żch, nekolater├ílnych vstupov a kolater├ílne vstupy sa jednoducho ignoruj├║. A dobr├í spr├íva! Je povolen├ę pou┼ż├şva┼ą tie ist├ę vstupy ako kolater├íl a aj regul├írne vstupy, preto┼że z UTXO sa v┼żdy odstr├íni len jedna z t├Żchto dvoch mno┼ż├şn.

Pri zachovan├ş integrity transakcie zohr├ívaj├║ d├┤le┼żit├║ ├║lohu aj podpisy potrebn├ę na overenie ─Źerpania kolater├ílnych vstupov. Robia to t├Żm, ┼że zabra┼łuj├║ protivn├şkom zmeni┼ą jej obsah tak, aby bola na─Ćalej spracovate─żn├í, ale aby nepre┼íla overen├şm v 2. f├íze. Pr├şkladom m├┤┼że by┼ą protivn├şk, ktor├Ż nahrad├ş kupuj├║ceho. Na vykonanie takejto zmeny sa vy┼żaduj├║ podpisy dr┼żite─żov zabezpe─Źovac├şch k─ż├║─Źov. Dr┼żitelia z├ílo┼żn├Żch k─ż├║─Źov s├║ tie┼ż jedin├ş pou┼ż├şvatelia, ktor├ş m├┤┼żu strati┼ą ADU, ak valid├ícia skriptu zlyh├í.

Ke─Ć┼że vyhodnotenie skriptu je deterministick├ę, dr┼żitelia zabezpe─Źovac├şch k─ż├║─Źov m├┤┼żu lok├ílne skontrolova┼ą, ─Źi transakcia prejde overen├şm f├ízy 2 v re┼ąazci, sk├┤r ako ju podp├ş┼íu. Ak ├íno, m├┤┼żu si by┼ą ist├ş, ┼że sa tak stane aj na re┼ąazci a o svoj kolater├íl ur─Źite nepr├şdu. Pou┼ż├şvate─ż konaj├║ci v dobrej viere by o svoj kolater├íl nikdy nemal pr├şs┼ą. Znamen├í to tie┼ż, ┼że m├┤┼żu opakovane pou┼żi┼ą rovnak├ę vstupy kolater├ílu pre viacero transakci├ş a ma┼ą istotu, ┼że kolater├íl nebude vybrat├Ż.

Ke─Ć┼że sme spustili verejn├║ testovaciu sie┼ą Alonzo, v├ştame v┼íetk├Żch pou┼ż├şvate─żov a v├Żvoj├írov, aby ju pos├║dili zostaven├şm a spusten├şm skriptov Plutusu. Viac inform├íci├ş sa m├┤┼żete dozvedie┼ą na ┼ípecializovanom ├║lo┼żisku Alonzo testnet alebo diskutova┼ą o t├ęmach Plutus a Alonzo s na┼íou r├┤znorodou komunitou.


P├┤vodn├Ż ─Źl├ínok: No-surprises transaction validation: part 2 - IOHK Blog

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