🇨🇿 Zkoumání možností škálovatelnosti UTxO modelu

UTxO model umožňuje paralelní zpracování transakcí, což je vlastnost, která je zásadní pro dosažení vynikající škálovatelnosti a rychlé finality transakcí. V tomto článku se ponoříme do různých strategií pro vylepšení konsenzu sítě, což může vést ke zvýšení propustnosti sítě a rychlejší finalitě transakcí. V článku se dozvíte na Input Endorsers, na sharding a jak ochrana proti double-spend útoku omezuje škálovatenost.

Základní vlastnosti modelu UTxO

UTxO jsou nezávislé a neměnné objekty. Jakmile je UTxO vytvořen jako výstup transakce, zůstane nezměněn, dokud nebude utracen v nové transakci. Když je utracena, je zcela spotřebována a jako výstup nové transakce se vytvoří nový UTxO.

Obrázek ilustruje kontinuální a paralelní odesílání nových transakcí uživateli. Každá transakce jednoznačně ukazuje na vstupní UTxO ze sady UTxO, jak ukazují červené šipky vedoucí k červeným UTxO. Termín STATE 1 představuje nový globální stav, který se objeví na každém uzlu po přijetí nového bloku. Červené UTxO byly odstraněny ze sady UTxO. Sada UTxO byla aktualizována přidáním nově vytvořených UTxO, znázorněných zelenými šipkami směřujícími k zeleným UTxO.

Model UTxO hraje klíčovou roli při řízení globálního stavu během ověřování transakcí. Globální stav v Cardano představuje aktivní sbírka UTxO, známá také jako sada UTxO. S přidáním každého nového bloku jsou všechny nově vytvořené UTxO začleněny do sady UTxO. Naopak UTxO, které jsou spotřebovány (utraceny) transakcemi, jsou ze sady UTxO odstraněny. UTxO lze vnímat jako entity na jedno použití.

Každý uzel v síti udržuje svou individuální sadu UTxO. Většina uzlů dodržujících konsensus má identickou sadu UTxO (globální stav), protože zachovávají stejnou historii blockchainu, včetně naposledy připojeného bloku. Nicméně kvůli zpožděním v síťovém přenosu dat neprochází globální stav okamžitými změnami napříč všemi uzly současně, ale spíše s menším zpožděním. Lze předpokládat, že v okamžiku, kdy uzel produkující bloky rozšíří nový blok do sítě, všechny uzly sdílejí stejný globální stav (to znamená, že přijaly poslední blok a podle toho aktualizovaly globální stav).

Jak zvýšit konečnost transakcí?

Cardano využívá mechanismus konsensu podobný konsensu ve stylu Nakamoto. To je typické pro pravděpodobnostní konečnost bloků a následně transakcí. To znamená, že pokud je transakce zahrnuta do nového bloku, označovaného jako BLOK 1, má počet potvrzení nula. Když je přidán blok, existuje šance, že tento blok nemusí přetrvávat v blockchainu, protože by mohl být nahrazen alternativním blokem vytvořeným přibližně ve stejnou dobu. Ujištění, že blok v blockchainu přetrvá, se stupňuje s přidáváním nových bloků za BLOK 1. To se často označuje jako zvýšení počtu potvrzení.

Na obrázku můžete vidět, že po BLOK 0 došlo k forku blockchainu. Byly vyrobeny dva alternativní BLOCK 1. Po připojení dalších bloků převládl horní řetězec. V horním řetězci byla transakce TX 1.

Cardano vykazuje nízkou finalitu transakcí. Doba bloku v Cardano je nakonfigurována na 20 sekund. To znamená, že pokud vaše transakce vyžaduje 10 potvrzení, budete muset čekat přibližně 200 sekund, což jsou zhruba 3 minuty.

Vzhledem k nezávislosti UTxO v rámci sady UTxO se validace transakcí také vzájemně vylučuje. Každý uzel může ověřit transakci nebo skupinu transakcí. Pořadí transakcí v rámci bloku je nedůležité, protože se vzájemně neovlivňují. V důsledku toho může uzel nejen ověřovat jednotlivé transakce po přijetí, ale také v nějaké formě připojit schválení nebo hlasování před šířením transakce do sítě. Každý následující uzel, který přijme transakci, bude také sledovat schválení od uzlů, které přijaly transakci dříve.

Na obrázku je vidět, jak transakce TX 1 postupně sbírá schválení na každém dalším uzlu, do kterého je spropagována. Když NODE 4 vytvoří nový blok, transakce již má 4 schválení. Všimněte si, že NODE 4 byl první, kdo upravil svůj memory pool. NODE 4 odstranil starý vstup UTxO (červený) z transakce TX 1 a vložil nově vytvořený UTxO (zelený).

Transakce, které byly v mem-poolu uzlu delší dobu, budou mít obecně více schválení a při přidávání do bloku by jim mohla být dána vyšší priorita. Toto je již vlastnost transakcí Cardano, protože Cardano funguje na principu „first-in, first-out“. Zásadní je, že pokud transakce získá souhlas většiny uzlů v síti, pravděpodobnost jejího vyřazení klesá, i když blockchain prochází reorganizací.

Proces dosažení konsensu o zahrnutí transakcí může probíhat rychleji a nezávisle na výrobě nových bloků.

I když má blok obsahující transakci pouze několik potvrzení (možná jen jedno), mezi uzly sítě již bude panovat shoda, že transakce by měla být součástí blockchainu. Síť může být navržena tak, aby nejstarší transakce s velkým počtem schválení byly zahrnuty do blockchainu při nejbližší příležitosti.

Potenciální reorganizace blockchainu však představuje výzvu pro konečnost transakcí. Navzdory vysokému počtu schválení transakce je teoreticky možné, že bude dočasně odstraněna z blockchainu. K tomu může dojít, pokud je část řetězce (nejnovější bloky blockchainu) nahrazena alternativní verzí. Bloky v této nové verzi subřetězce mohou obsahovat jinou sadu transakcí. Zlepšení konečnosti transakcí proto zahrnuje změnu konsenzu, aby se zabránilo reorganizaci blockchainu, nebo úpravu pravidel tak, aby odrážela počet schválení transakcí.

Na obrázku níže můžete vidět nechtěnou reorganizaci blockchainu. TX1 v horním řetězci měl 4 schválení a jedno potvrzení (BLOK 2). Přesto nakonec převážil nižší řetězec, ve kterém není transakce TX 1.

Finalitu transakce lze zvýšit uzly, které se dohodnou na její integraci do blockchainu během šíření sítě. To je možné díky modelu UTxO, protože validace transakce vyžaduje pouze ověření existence vstupních UTxO (jejich přítomnost v sadě UTxO), což znamená, že jsou utracené.

Níže v článku si ukážeme, jak je teoreticky možné dosáhnout rychlejší finality transakcí, než síť vyrobí další blok.

Kromě toho může být konečnost rozšířena urychlením konsenzu o nově připojeném bloku v rámci sítě. Toho lze dosáhnout tak, že uzly budou hlasovat o bloku buď před jeho přidáním do blockchainu, nebo krátce poté.

Input Endorsers

Input Endorsers je plán na zlepšení škálovatelnosti Cardana. Toto vylepšení lze vnímat jako formu hlasování před přidáním bloku (konsensuálního bloku) do blockchainu.

Input Endorsers používá 3 typy bloků: Input Blocks (IB), Endorsement Blocks (EB) a Ranking Blocks (RB). Každý typ bloku bude ražen v jiné frekvenci. Některé bloky mohou být raženy ve stejném slotu. Vstupní bloky budou raženy s nejrychlejší frekvencí.

Input Endorsers sledují všechny odeslané transakce a sdružují tyto transakce do předem vytvořených bloků. Hlavním účelem funkce Input Endorser je oddělit výběr transakcí od produkce bloků.

V tomto modelu by transakce mohly sbírat souhlasy na cestě do mem-poolů. Je to proto, že Input Endorsers začleňují prvky paralelismu a souběžnosti do konsensu při zachování linearity blockchainu.

Algoritmus Input Endorsers usnadní přípravu velkého počtu transakcí během fáze výběru transakce, protože umožňuje současnou účast více uzlů v síti. Uzly schvalovatele ověřují a předem schvalují transakce, což pomáhá snižovat výpočetní zátěž a požadavky na šířku pásma výrobců klasifikačních bloků a zároveň zvyšuje rozmanitost a dostupnost fondu transakcí. Navíc urychlují potvrzování transakcí, které mají být ještě začleněny do řetězce, tím, že poskytují ověřitelný důkaz o schválení.

Nasazení Input Endorsers je proveditelné pouze díky modelu UTxO, protože umožňuje uzlům nezávisle ověřovat transakce. Jediná linearita, kterou je třeba v systému zachovat, je na úrovni klasifikačních bloků, vzhledem k tomu, že blockchain je lineární sekvence bloků. Pořadí transakcí v rámci bloku, včetně klasifikačních bloků, je nedůležité. Zajímavé je, že bloky hodnocení neukládají transakce, ale pouze obsahují odkazy na ně prostřednictvím bloků potvrzení.

Obrázek znázorňuje uživatele odesílající transakce, které odkazují na vstupní UTxO (zobrazené jako červené UTxO) z aktivní sady UTxO (globální stav). Tyto transakce procházejí paralelním ověřováním a jsou následně začleněny do vstupních bloků. Uzly mohou podporovat tyto vstupní bloky současně. Systém zachovává linearitu a nejvyšší úroveň ověřování, která chrání před útoky typu double-spend a podobně, na nejvyšší úrovni konsensu, kdy jsou bloky hodnocení připojeny k blockchainu.

S každým nově připojeným blokem do blockchainu se mění i globální stav. Jak je popsáno výše, spotřebované UTxO jsou odstraněny ze sady UTxO a současně jsou do ní vloženy nové UTxO (zelené UTxO z transakcí).

Poznámka: Obrázek výše ukazuje pouze spotřebu UTxO, nikoli vkládání nových UTxO do sady UTxO.

Ochrana před double-spend útokem

Ochrana proti útokům typu double-spending je jedním z faktorů, které omezují škálovatelnost a paralelní zpracování transakcí. Vstupem pro ověřování transakcí je globální stav. Uzel ověřuje transakce v kontextu aktuálního globálního stavu, který udržuje.

Účetní model zásadně ovlivňuje, jak uzly pracují s globálním stavem a jaké mají možnosti ohledně paralelizace ověřování transakcí a škálovatelnosti.

V kontextu modelu UTxO může dojít k útoku typu double-spend, když uživatel odešle dvě transakce, které odkazují na stejný vstupní UTxO. To je podobné pokusu utratit stejné peníze dvakrát. Sofistikovaný útočník může odesílat transakce do sítě prostřednictvím různých uzlů, tedy na různých místech sítě. To znamená, že obě transakce budou určitou skupinou uzlů považovány za platné, dokud nepřijde další transakce se stejným vstupním UTxO. Tehdy dojde ke konfliktu.

V ideálním případě je útok s dvojitou útratou identifikován při nejbližší příležitosti. Jedna transakce bude začleněna do nového bloku, zatímco druhá bude zrušena. Transakce, která je zahrnuta, ovlivní globální stav. Spotřebovaný UTxO se stane neutracetelným, takže druhá transakce bude trvale neplatná, protože se vztahuje k již utracenému UTxO.

S implementací Input Endorsers může být potenciálně detekován útok typu double-spend ve fázi Input Blocks nebo Endorsement Blocks. I když tato detekce nenastane, útok bude jistě identifikován uzlem během konstrukce Ranking Block.

Obrázek ilustruje pokus o dvojitý útok. Transakce TX 1 je umístěna do jiného vstupního bloku než transakce TX 2. Následně jsou obě transakce zahrnuty do samostatných bloků potvrzení. V této fázi může síť potenciálně identifikovat konfliktní transakce a jednu z nich zahodit. Pokud k tomu však nedojde, konflikt bude vyřešen během stavby Ranking Block. Uzel odpovědný za vytvoření Ranking Block má všechny potřebné informace k detekci konfliktních transakcí a vyřešení problému.

Všimněte si, že systém usnadňuje paralelní zpracování transakcí při zachování schopnosti deterministicky urovnávat konflikty a mařit útoky typu double-spend. Většina transakcí je začleněna do Ranking Block, ale konfliktní transakce nemají šanci projít validací.

Představte si zlepšení, kde konečnost transakcí nebude závislá na počtu potvrzení na úrovni Block Ranking, ale spíše na počtu potvrzení. To znamená, že konečnost by byla zhruba úměrná rychlosti šíření transakcí v síti. Uzel, který uživatel použil k odeslání transakce do sítě, si musí být vědom počtu potvrzení. To vyžaduje mechanismus pro šíření bloků podpory. Uzel, který transakci inicioval, obdrží blok potvrzení a bude sledovat počet schválení pro transakci uživatele v něm. Tyto informace mohou být zobrazeny uživateli prostřednictvím peněženky nebo prostřednictvím průzkumníka blockchainu. Pokud by transakce získala souhlas, hypoteticky, 51 % podílu a bylo téměř jisté, že nedošlo k žádné konfliktní transakci, mohla by být transakce teoreticky považována za konečnou. Transakce však dosáhne konečné finality až poté, co se stane součástí ranking bloku.

UTxO a Sharding

Sharding je klíčová technologie, která zvyšuje škálovatelnost blockchainů. Blockchain síť je rozdělena na menší části nebo podsítě, známé jako „shardy“. Celková výpočetní a úložná zátěž je rozdělena na shardy.

Sharding je forma paralelismu v systému. Každý fragment funguje nezávisle a může zpracovávat vlastní sadu transakcí. Toto paralelní provádění transakcí zvyšuje celkovou efektivitu a propustnost systému.

Každý shard udržuje svou část globálního stavu. Toto je známé jako místní stáv. Globální stav celého blockchainu je pak souhrnem všech těchto lokálních stavů.

Komunikace napříč shardy je důležitým aspektem shardingu. Týká se procesu transakcí nebo výměny informací mezi různými shardy. To je zásadní, protože propustnost sítě sharded blockchain je výrazně ovlivněna komunikací mezi shardy.

Model UTxO je pro sharding výhodnější než model založený na účtu.

V kontextu modelu UTxO slouží transakce jako základní jednotka ověřování. Transakce je entita, kterou může nezávisle ověřit více stran současně. Výsledek těchto ověření bude vždy stejný. Cardano provádí ověřování transakcí deterministicky. Více stran může ověřovat transakce paralelně a jakýkoli příkaz, bez ohledu na blok, to znamená bez ohledu na to, kdy budou transakce začleněny do bloku a bez ohledu na pořadí transakcí v rámci bloku.

Naproti tomu v modelu založeném na účtu Ethereum je blok primární jednotkou ověřování. Transakce jsou na sobě závislé. Transakce Ethereum nemůže být ověřena izolovaně, ale pouze s ohledem na převládající globální stav. Globální stav v Ethereu lze pojmout jako sekvenci transakcí. Výsledek validace transakce závisí na její pozici v této sekvenci.

Nesourodost v účetních modelech významně ovlivňuje implementaci shardingu.

Jednoduše řečeno, považujte síť Cardano za jeden shard. Kdybychom měli 10 shardů, bylo by to podobné, jako kdybychom 10 sítí Cardano fungovalo vedle sebe. Teoreticky by to mohlo vést k desetinásobnému zvýšení propustnosti sítě. V praxi to však nemusí platit kvůli faktorům, jako je mezishardová komunikace, potřeba zajistit konzistenci a bezpečnost dat, latence sítě a režie správy (jako je vyrovnávání zátěže mezi shardy, správa připojování a opouštění uzlů, a směrování transakcí).

U blockchainů, které využívají model UTxO, je implementace shardingu relativně přímočará, protože globální stav přirozeně umožňuje paralelismus a transakce lze ověřovat nezávisle v rámci každého shardu.

Model UTxO má své výhody, pokud jde o komunikaci napříč shardy, protože je relativně snadné vytvořit transakci, která vyžaduje ověření ze dvou shardů.

Představte si transakci, která má vstupní UTxO z globálního stavu SHARD 1 a vytváří výstupní UTxO v globálním stavu SHARD 2. Tato transakce by byla součástí blockchainu v obou shardech. Výhodou je, že validace může probíhat bez ohledu na blok, tedy bez ohledu na pořadí transakce v bloku.

V každém datovém shardu s Input Endorsers by mohla transakce napříč shardy obdržet potvrzení (schválení) krátce po svém odeslání. Transakce by byla odeslána v SHARD 1, který by ji okamžitě přeposlal do SHARD 2. V obou shardech by transakce obdržela potvrzení současně. V obou shardech by transakce mohla potenciálně získat podporu řekněme 51 % podílu ve velmi krátké době. Musel by existovat mechanismus pro sdílení bloků potvrzení mezi shardy (stačila by podmnožina dat souvisejících s transakcemi napříč shardy). V době, kdy by každý ze shardů vkládal transakci do hodnotícího bloku, mohl daný shard očekávat s vysokou mírou jistoty, že transakce bude vložena do hodnotícího bloku v druhém shardu, díky vysokému počtu potvrzení.

Teoreticky nemusí SHARD 1 čekat na vložení transakce do Ranking Blocku. Samozřejmě pouze za předpokladu, že bude existovat mechanismus (a pobídky), který zajistí, aby se transakce s vysokým počtem souhlasů z většiny podílu dostala vždy do některého z dalších bloků.

Na obrázku vidíte transakci TX 1, která má vstup UTxO ze SHARD 1. Výsledkem transakce je výstupní UTxO, který je vytvořen v SHARD 2. Dá se říci, že se hodnota přenáší mezi shardy. Transakce se dostane do vstupního bloku ve SHARD 1. SHARD 1 předá transakci SHARD 2. TX se dostane do vstupního bloku ve SHARD 2. Transakce TX 1 se postupně dostane k blokům potvrzení v obou shardech a nakonec k blokům hodnocení. Jakmile je transakce vložena do Ranking Blocku, dojde ke změně lokálního stavu v daném shardu. Vstupní UTxO je odstraněno z místního stavu SHARD 1. V místním stavu SHARD 2 bude vytvořen nový UTxO.

Model UTxO nabízí několik výhod, včetně jeho použitelnosti pro Input Endorsers a sharding. Výše uvedený příklad ilustruje integraci těchto dvou technologií. Jakmile budou zavedeny Input Endorsers, sharding má potenciál zlepšit škálovatelnost Cardano. Zadavatelé vstupu však musí urychlit finalizaci transakce, aby zabránili pomalé komunikaci mezi jednotlivými shardy a zajistili integritu globálního stavu.

Proč je obtížné implementovat Sharding v Ethereu?

Ethereum funguje na modelu založeném na účtu, kde má každý účet přidružený stav. Globální stav Etherea je v podstatě databáze všech účtů a jejich aktuálních zůstatků aktiv. S každým novým blokem se stav systému aktualizuje na základě transakcí v tomto bloku.

Transakce jsou zpracovávány kontrolou zůstatku odesílatele, zda nemá dostatek prostředků. V případě úspěchu se zůstatek odesílatele sníží, zatímco zůstatek příjemce se zvýší. Ethereum Virtual Machine (EVM) pak z aktuálního stavu a transakce vypočítá nový stav, který se stane základem pro další transakci. Tento nepřetržitý vývoj stavu blockchainu znamená, že transakční objednávka je pro validaci klíčová.

Každá transakce může potenciálně změnit stav jakéhokoli účtu a její výsledek může záviset na pořadí jejího zpracování. Aby se zachovala konzistence a zabránilo se dvojímu utrácení, globální stav se během každé validace „uzamkne“, což umožňuje zpracovat pouze jednu transakci najednou. Tento uzamykací mechanismus je zásadní pro integritu systému a zabraňuje tomu, aby souběžné transakce způsobovaly nekonzistence nebo dvojí výdaje.

Transakční vstupy jsou zůstatky účtů, sdílený zdroj. To znamená, že zůstatek při odeslání transakce se může lišit od zůstatku při validaci, takže vstup transakce není deterministický, na rozdíl od modelu UTxO.

V Ethereu jsou zůstatky trvalé entity, které lze transakcemi kdykoli upravit, ale dvě transakce nemohou současně upravit stejný zůstatek.

Na obrázku vidíte, jak uživatelé zadávají 5 transakcí. Transakce lze zadávat paralelně. Všimněte si, že několik transakcí upravuje stejný zůstatek. Například TX 1 a TX 2 odečítají hodnotu od stejného zůstatku. Transakce TX 3 a TX 4 přidávají hodnotu ke stejnému zůstatku. STAV 1 až STAV 4 představují sekvenční zpracování transakcí a tím i postupnou aktualizaci globálního stavu. Globální stav je tvořen stejnými zůstatky, tedy trvalými objekty, jejichž stav lze pomocí transakcí mnohokrát za sebou změnit.

Představte si, o kolik komplikovanější je komunikace mezi shardy, pokud transakce musí současně změnit jeden zůstatek v SHARD 1 a druhý v SHARD 2. Pořadí transakcí v bloku Ethereum hraje důležitou roli ve výsledku validace. Při současné implementaci EVM by bylo nutné, aby oba shardy zahrnuly transakci do bloku a vzájemně si předávaly informace o výsledcích validace. Nedává smysl, že ve SHARD 1 byla validace transakce úspěšná a hodnota byla odečtena ze zůstatku, zatímco ve SHARD 2 by validace transakce selhala, tj. hodnota by nebyla připsána k zůstatku. Komunikace napříč shardy vážně omezuje schopnost postavit blok v každém shardu.

Na obrázku vidíte transakci TX 1, která se po odeslání vloží do mem-poolu. Poté je vložen z mem-poolu do BLOK 1. Validace transakce TX 1 změní aktuální místní stav v SHARD 1. SHARD 1 však potřebuje znát výsledek validace v SHARD 2. SHARD 1 tedy komunikuje se SHARD 2 o výsledek validace transakce v BLOK 2 (SHARD 2). Takže SHARD 2 musí vložit transakci TX 1 do BLOK 2 a provést validaci. Poté může sdělit výsledek ověření SHARD 1. Všimněte si že SHARD 1 musí znát výsledek validace ve SHARD 2 před tím, než do svého BLOCK 1 přidá další transakci.

Uvedený příklad je ve skutečnosti zjednodušenou reprezentací procesu implementace a zdůrazňuje významné výzvy, kterým tým Ethereum čelí při implementaci shardingu se současným mechanismem konsenzu.

Udržování atomicity transakcí během mezishardové komunikace v blockchainu založeném na účtu je složitý úkol. Aby byla zachována integrita systému, je důležité zajistit, aby transakce byla buď zcela provedena, nebo vůbec nebyla provedena.

Pro řešení tohoto problému byly navrženy různé strategie a protokoly, včetně dvoufázových protokolů odevzdání. Tato řešení však představují také své kompromisy a složitosti. Je pozoruhodné, že několik projektů úspěšně implementovalo sharding s modelem založeného na účtech.

Závěr

Změna konsensuálních mechanismů je pouze jednou z metod, jak zlepšit škálovatelnost sítě. Škálovatelnost lze také zlepšit prostřednictvím řešení druhé vrstvy, vrstvené architektury nebo zvýšením efektivity. Například Plutus V2 je efektivnější než jeho předchůdce Plutus V1, což vede k úsporám místa v bloku. Tato efektivita umožňuje více transakcí na blok, čímž se zvyšuje propustnost sítě. Input Endorsers však mohou poskytnout podstatnější vylepšení škálovatelnosti než samotné zvýšení efektivity.

Někteří členové komunity Cardano se domnívají, že by se pozornost měla zaměřit spíše na zlepšení škálovatelnosti prostřednictvím kryptografie ZK než na Input Endorsers. Cardano je připraveno na začlenění kryptografie ZK prostřednictvím hard forku Chang. Díky Cardanovu determinismu bude možné konstruovat ZK rollupy, které nevyžadují sekvencery.

UTxO model se velmi dobře hodí pro Input Endorsers nebo sharding, neboť globální state složený z jednorázově použitelných objektů je dobře paralelizovatelný. Několik nodů v síti může paralelně validovat transakce nezávisle na sobě a to i v případě shardingu.

Článek připravili Cardanians s podporou Cexplorer.

Přečtěte si celý článek: https://cexplorer.io/article/exploring-scalability-options-of-the-utxo-model