🇸🇰 Model EUTxO ponúka používateľom determinizmus

Model EUTxO ponúka používateľom determinizmus

Z pohľadu vývojárov aplikácií sa model UTxO zásadne líši od modelu založeného na účtoch. Model založený na účtoch je jednoduchý a ponúka vývojárom vysokú flexibilitu, najmä ak je potrebné definovať zložitú logiku vykonávania. Prílišná flexibilita je však na úkor záruk vykonávania, čo vedie k zraniteľnosti systému a útokom. Práca s modelom UTxO je zložitejšia, ale vývojárom (a teda aj používateľom) ponúka niekoľko výhod, a to determinizmus. Vysvetlíme si ho podrobnejšie.

Model UTxO z pohľadu transakcií

V prípade modelu UTxO možno transakciu vnímať ako funkciu, ktorá spotrebúva jeden alebo viacero vstupných UTxO a produkuje jeden alebo viacero výstupných UTxO.

UTxO, ktoré vstupujú do transakcie, sú nemenné a, ako si ukážeme neskôr, z pohľadu používateľa aplikácie je možné zabezpečiť exkluzívny prístup. Počas validácie transakcie sa zabezpečuje, aby sa hodnota vstupných UTxO rovnala hodnote všetkých výstupných UTxO. Na úrovni validácie všetkých transakcií v bloku je možné zabezpečiť ochranu proti útoku dvojitého míňania, pretože každý vstupný UTxO môže byť spotrebovaný len raz a úplne. Každý novo pridaný blok do účtovnej knihy definuje stavový prechod týkajúci sa vlastníctva UTxO.

Transakcie sú vo svojej podstate bezstavové. Overenie transakcie závisí v podstate len od vstupných UTxO. Je možné lokálne overiť, či vstupné UTxOs môžu byť transakciou vynaložené (t. j. použité). Prechod stavu je lokálne overiteľný bez závislosti od akéhokoľvek iného globálneho stavu v reťazci.

Je možné lokálne predpovedať, ako transakcia ovplyvní stav v reťazci. Inými slovami, logika mimo reťazca (používateľ alebo aplikácia) sa môže uistiť, že transakcia nezlyhá, ak sa odošle do siete.

Transakcia takmer určite nikdy nezlyhá, ak má používateľ (alebo agent) výhradné právo minúť vstupné UTxO. To je prípad, keď Alica posiela mince alebo tokeny Bobovi zo svojej vlastnej peňaženky. Vstupné UTxO nemôže minúť nikto iný.

Pozrime sa na jedinú možnosť, kedy môže transakcia zlyhať. To je v podstate obmedzené na prípad, keď viac agentov môže minúť to isté UTxO. Ako si ukážeme neskôr, môže to byť prípad so zásobou likvidity.

Na obrázku môžete vidieť, ako sa dvaja agenti snažia zostaviť transakciu. Obaja agenti majú správny posledný stav účtovnej knihy. Zhodou okolností si zvolili rovnaké vstupné UTxO. Lokálna validácia mimo reťazca bude úspešná. Obaja agenti preto odošlú transakciu do siete a predpokladajú, že aj overenie transakcie v reťazci bude úspešné.

Každé UTxO sa však môže minúť len raz. Preto bude úspešná len jedna transakcia a druhá bude neúspešná.

Na obrázku nižšie môžete vidieť, že v nasledujúcom bloku sa do účtovnej knihy dostala iba transakcia 1. Transakcia 2 zlyhala.

Ako sme už vysvetlili, tento stav môže nastať len vtedy, ak používatelia používajú aplikáciu, v ktorej sú zdieľané UTxO.

Predstavme si teraz bežnú decentralizovanú burzu (DEX), ktorá používa niekoľko bazénov likvidity. Každý pool likvidity možno vnímať ako množinu obsahujúcu niekoľko UTxO s rôznymi hodnotami. Používatelia, ktorí predkladajú transakcie s cieľom vykonať výmenu, chcú v podstate získať časť likvidity (tokenov), ktorá sa nachádza v poole likvidity. V podstate chcú získať jeden alebo viac UTxO z poolu likvidity. Inými slovami, používatelia môžu (takmer) paralelne predkladať swapové transakcie a súťažiť o likviditu.

Kľúčovým bodom je výber vstupných UTxO pre transakcie. Ak nemajú transakcie zlyhať, agenti sa musia navzájom synchronizovať.

Cardano teoreticky umožňuje vytvoriť takú aplikáciu, ktorá zabezpečí, že transakcie používateľov nikdy nezlyhajú. Logika aplikácie mimo reťazca (agenti) sa musia navzájom synchronizovať. Vďaka tomu je možné pred odoslaním transakcie rezervovať konkrétne UTxO zo zdieľaného fondu likvidity. Inými slovami, lokálna validácia mimo reťazca môže zabezpečiť, že transakcia takmer určite nezlyhá.

Na obrázku nižšie môžete vidieť, že pred lokálnou validáciou transakcií dochádza k vzájomnej synchronizácii mimo reťazca medzi agentmi. Každý agent si vyhradzuje iné UTxO, takže je veľmi pravdepodobné, že obe predložené transakcie prejdú overením v reťazci.

Samozrejme, bude to fungovať len vtedy, ak je možné rezervovať UTxO. Môže sa tiež stať, že pri pokuse o odoslanie transakcie nebude k dispozícii žiadne vhodné UTxO. V takom prípade je možné počkať (a transakciu neodoslať), alebo riskovať a čakať, či sa vhodné UTxO neobjaví neskôr. Podrobnosti závisia od konkrétnej implementácie DEX a používateľského rozhrania.

Model EUTxO prispieva k bezpečnosti a deterministickej povahe systému Cardano. V tomto modeli transakcie nezávisia od používateľských účtov alebo zostatkov ako v prípade modelu založeného na účtoch, ale len od UTxO, ktoré sa na transakcii podieľajú. To znamená, že pre danú transakciu sú dôležité len zapojené UTxO, nie používateľské účty, ktoré majú globálny charakter.

V modeli UTxO je zostatok konkrétneho účtu v podstate len zoznamom UTxO na adresách patriacich jednému vlastníkovi.

Prečo je model založený na účtoch nedeterministický

Blokové reťazce založené na účtoch sú indeterministické, pretože vplyv transakcie na účtovnú knihu je nepredvídateľný. Dôvodom je, že používateľské účty sú vo svojej podstate mutovateľné.

V blockchaine založenom na účtoch možno transakciu považovať za funkciu, ktorá mení zostatky na účtoch. Každá transakcia zahŕňa prevod mincí alebo tokenov z jedného účtu na druhý, čím sa menia zostatky týchto účtov.

Potvrdzovanie transakcií závisí od účtov a ich zostatkov. To môže viesť k nedeterministickému správaniu, keďže výsledok transakcie závisí od stavu blockchainu v presnom okamihu ich zaradenia do bloku.

Účty možno vnímať ako zdieľané zdroje v systéme. Všetky transakcie totiž spracováva celá sieť a každá transakcia môže potenciálne ovplyvniť stav ktoréhokoľvek účtu v systéme. Táto zdieľaná povaha účtov je jedným z dôvodov, prečo sa Ethereum a iné podobné blockchainy považujú za stavové blockchainy.

Transakcie v Ethereu možno považovať za stavové. Úplný stav Etherea opisuje aktuálny stav všetkých účtov a zostatkov, ako aj kolektívne pamäte všetkých inteligentných kontraktov nasadených a spustených v EVM. Aktuálny stav je možné meniť pomocou transakcií.

Vráťme sa k nášmu príkladu, v ktorom sa dvaja používatelia (agenti) snažia zadať výmennú transakciu, aby získali časť likvidity (tokeny) z fondu likvidity.

Nie je možné rezervovať časť konkrétneho zostatku pre transakciu rovnakým spôsobom, ako je možné rezervovať UTxO v Cardano. Ak by sa transakcii podarilo rezervovať časť zostatku z poolu likvidity a následne by nebola na dlhý čas zaradená do blockchainu (možno kvôli nízkemu poplatku), zablokovala by vykonávanie ďalších swapov.

Jednotlivé aplikácie sú svojím spôsobom závislé aj od seba navzájom, keďže aktivita v sieti ovplyvňuje náklady na GAS. Náklady GAS ovplyvňujú výber transakcií a ich poradie v bloku. To vedie k nedeterministickému správaniu.

V modeli AMM sú pooly likvidity v podstate rezervy dvoch alebo viacerých tokenov uzamknutých v inteligentnom kontrakte. Používatelia obchodujú s týmito inteligentnými zmluvami, a nie medzi sebou navzájom, a sadzby sú založené na matematických vzorcoch.

V ekosystéme Ethereum používatelia v podstate súťažia o zostatok alebo likviditu v danom poole likvidity. Keď používatelia predkladajú transakcie paralelne, sieť Ethereum uprednostňuje transakcie na základe poplatkov GAS. Čím vyšší poplatok GAS je používateľ ochotný zaplatiť, tým vyššia je priorita jeho transakcie. To znamená, že transakcie s vyššími poplatkami budú spracované ako prvé a budú mať prvú šancu spotrebovať likviditu.

Táto súťaž o likviditu môže viesť k tzv. vojnám GAS, v ktorých sa používatelia navzájom neustále predbiehajú v poplatkoch GAS v snahe čo najrýchlejšie spracovať svoje transakcie. To je jeden z dôvodov, prečo môžu byť transakčné poplatky na Ethereu niekedy vysoké.

Na obrázku môžete vidieť, že dvaja agenti chcú spotrebovať rovnaký zostatok. Obaja agenti vidia, že zostatok je dostatočný na ich transakciu, a preto transakciu odošlú približne v rovnakom čase. Prvý agent nastaví vyšší poplatok ako druhý.

Predložené transakcie nemajú zaručený úspech, ale používatelia v podstate musia podstúpiť riziko a skúsiť predložiť transakciu, ak chcú uskutočniť výmenu. Transakcia s nízkym poplatkom môže byť odložená a ostatné transakcie s vyšším poplatkom môžu byť uprednostnené. Transakcie s nízkymi poplatkami môžu následne zlyhať. Poplatok bude účtovaný bez ohľadu na konečný stav. Používateľ teda platí za pokus o swap bez záruky, že sa swap uskutoční.

Na obrázku vidíte, že sa podarila iba transakcia 1, pretože agent nastavil vyšší poplatok. Transakcia 1 odčerpala z fondu také veľké množstvo likvidity, že transakcia 2 sa nemohla uskutočniť. Druhý agent musel zaplatiť poplatok napriek tomu, že transakcia 2 zlyhala.

Ako už bolo popísané, agenti sa nemôžu navzájom synchronizovať a rezervovať si časť zostatku v rezerve likvidity. Agenti reagujú len na stav, ktorý je platný v čase, keď sa pokúšajú odoslať transakciu.

Nedeterminizmus je nevýhodný aj z hľadiska férovosti, pretože poskytuje nepriateľským agentom možnosť zneužiť zraniteľnosť siete. Známe sú útoky typu front-running, pri ktorých boti skenujú transakcie v mem-poole a hľadajú vhodné príležitosti, z ktorých by mohli profitovať. Ak takéto transakcie nájdu, stačí, aby predložili podobnú transakciu s vyšším poplatkom.

V našom prípade by to znamenalo, že transakcie oboch agentov by zlyhali, pretože útočník by odčerpal celú likviditu z poolu len pre seba.

V prípade Cardano by podobný útok zlyhal, ak by existoval rezervačný systém mimo reťazca, v ktorom by si agenti mohli rezervovať konkrétne UTxO pre seba.

Záver

Vývojárom sa model založený na účtoch páči, pretože je jednoduchý a ľahko sa s ním pracuje. Aplikácie v podstate pracujú len so zostatkami. Nevýhodou však je, že transakcie sa nesprávajú deterministicky a môžu zlyhať. Je to spôsobené tým, že v čase medzi odoslaním transakcie používateľom a jej vykonaním sa môže zmeniť globálny stav systému, t. j. zostatok na účtoch.

Model UTxO je zložitejší na pochopenie a výber vstupných UTxO sa môže zdať trochu ťažkopádny. Je jednoduchšie odpočítať sumu z účtu a pripísať ju na iný účet, než aby bolo potrebné vybrať viacero UTxO a vytvoriť z nich nové výstupné UTxO (vrátane UTxO, ktoré časť hodnoty vrátia späť na pôvodnú adresu). Vývojári sú nútení uvažovať o aplikáciách s ohľadom na paralelizáciu. Musia sa postarať o synchronizáciu medzi agentmi tak, aby nevznikol problém s kontingenciou. Z pohľadu používateľa je však možné vytvoriť také aplikácie, ktoré sa budú správať deterministicky. Ak prejde lokálna validácia mimo reťazca, prejde aj validácia v reťazci.


Pôvodný článok: EUTxO Model Offers Determinism to Users | Cardano Explorer (cexplorer.io)