🇨🇿 Pochopení Finality Transakcí

Ouroboros PoS používá pravděpodobnostní finalitu, kde je blok považován za konečný, když za ním bylo připojeno dostatečné množství bloků. Kolik bloků musí být připojeno a co se vlastně stane s transakcí poté, co ji uživatel odešle do sítě? V článku si vysvětlíme pojmy transakční latence a finalita.

Příběh Transakce

Alice chce poslat Bobovi 10 ADA. Pojďme si popsat, co se děje s transakcí od vytvoření až po finalizaci bloku.

Alice vytvoří transakci ve své peněžence nebo aplikaci. To zahrnuje specifikaci podrobností transakce, jako je Bobova adresa a částka ADA, která má být převedena.

Alice musí transakci podepsat svým soukromým klíčem. Pokud používá HW peněženku, musí transakci potvrdit například podržením tlačítka. To poskytuje důkaz pravosti a zajišťuje, že transakci může iniciovat pouze vlastník ADA coinů.

Podepsaná transakce je vysílána do sítě Cardano. Je převzata uzly Cardano, které ověří transakci podle pravidel protokolu.

Jakmile je transakce ověřena, je přidána do poolu (mem-pool) platných transakcí, které čekají na zahrnutí do nového bloku.

V konsensuálním mechanismu Ouroboros PoS projektu Cardano je čas rozdělen do epoch a slotů. Vedoucí slotu je náhodně vybrán pro každý slot na základě jejich stake. Vedoucí slotu vybere transakce z poolu, ověřuje je a vymintuje nový blok.

Nový blok obsahující transakci Alice spolu s dalšími transakcemi je připojen k místnímu ledgeru a vysílán do sítě.

Blok je převzat uzly Cardano, které jej ověří (včetně všech transakcí) podle pravidel protokolu. Každý uzel udržuje svou vlastní ledgeru a autonomně rozhoduje, který blok k němu připojit.

Proces výběru transakcí a ražby nového bloku se opakuje přibližně každých 20 sekund. Přestože většina uzlů v síti přidá do ledgeru blok, nelze transakci stále považovat za konečnou.

Latence a Finalita Transakce

Upozorňujeme, že transakci nelze považovat za vyřízenou nebo platnou, jakmile ji Alice odešle do sítě. Bob si může být jistý, že vlastní ADA coiny až v okamžiku, kdy je transakce konečná.

V popsaném procesu jsou dvě důležitá časová období: latence transakce a finalita transakce.

Jednoduše řečeno, transakční latence je doba mezi submitnutím transakce a jejím objevením se v ledgeru. Finalita transakce je čas, kdy je transakce neměnná.

Pojďme si to popsat podrobněji a na příkladech.

Latence transakce je časové období od odeslání transakce do sítě, dokud ji vedoucí slotu nevloží do nového bloku. Transakce většinou čeká v poolu s dalšími transakcemi.

Cardano zpracovává transakce podle zásady „kdo dřív přijde, je dřív na řadě“. Pokud je však v poolu více transakcí, než se do bloku vejde, Alicina transakce nemusí být vedoucím slotu vložena do bloku a bude muset v poolu počkat na další kolo.

Další slot lídr už má Alicinu transakci ve svém poolu. Jakmile obdrží nový blok, může ze svého poolu odstranit transakce, které jsou v bloku. V novém kole se Alicina transakce vloží do nového bloku.

Latence transakce se liší podle toho, kdy přesně Alice transakci odešle, a podle počtu dříve odeslaných transakcí v poolu. Transakce se v síti rozšíří během několika sekund. Za normálních okolností se transakce i blok (který je větší) dostanou k 95 % uzlů do 5 sekund.

Pokud Alice odešle transakci těsně před vyražením nového bloku a ten se dostane do poolu vedoucího slotu, může být latence doslova několik sekund. Několik sekund po odeslání transakce Alice vidí, že je obsažena v bloku (je v účetní knize). Alice měla štěstí.

Alice však může mít menší štěstí a transakci odešle těsně po vyražení nového bloku. V tomto případě může transakce čekat v poolu přibližně 15 sekund (když 5 sekund proběhlo šíření), než ji vedoucí slotu vloží do nového bloku. Pokud je síť intenzivně využívána a pool je plný, může trvat několik bloků, než vedoucí slotu vloží transakci do nového bloku. Alice může počkat několik minut, než uvidí transakci v bloku.

Jakmile je transakce v bloku a dostane se do účetní knihy, přichází na řadu konečnost transakce.

Cardano používá pravděpodobnostní konečnost, což znamená, že blok je považován za konečný, když bylo připojeno dostatečné množství bloků, že se záměrně spustit paralelní řetězec a pokusit se vrátit kanonický řetězec stane neúměrně drahým nebo nepraktickým. Jinými slovy, pravděpodobnostní finalita se vztahuje k myšlence, že pravděpodobnost zrušení transakce klesá s tím, jak blok obsahující tuto transakci klesá hlouběji do řetězce.

Uživatel nemá žádnou jistotu, že nově přidaný blok do účetní knihy v ní zůstane navždy. Může se stát, že bude raženo více bloků se stejnou výškou (height) v jednom slotu, nebo ve dvou slotech blízko sebe. V takovém případě vzniká tzv. Vidlice (fork). Jeden z bloků zůstane zachován, zatímco druhý osiří. Transakce v osiřelém bloku jsou stornovány.

Finalitu bloku (tedy všech transakcí v něm) 100% garantuje Ouroboros PoS po K blocích, kde K je síťový parametr nastavený na 2160. Finalita je zaručena po 12 hodinách.

Uživatelé naštěstí nemusí čekat tak dlouho. Přestože se forky v síti vyskytují poměrně často, obvykle jsou vyřešeny během několika bloků.

Na obrázku vidíte bloky a sloty, ve které byly raženy. Ve slotu N+40 byly raženy 2 bloky. Došlo k rozvětvení. Slot lídr náhodně vylosovaný ve slotu N+60 připojí nový blok k červenému bloku, protože má nižší výstup VRF. Pokud mají ostatní vedoucí slotů k dispozici všechny bloky, je pro ně snadné se rozhodnout, který řetězec následovat.

Vysoký stupeň jistoty ohledně finality bloku (neměnnosti transakce) představuje cca 70 bloků, což je cca 25 minut. Poměrně velkou mírou jistoty je však pouhých 5 bloků, což jsou zhruba 2 minuty.

Pokud by Alice poslala Bobovi 10M ADA, Bob by měl téměř absolutní jistotu vlastnictví mincí až po 25 minutách. V případě 10 ADA stačí 2 minuty.

Každý uživatel si může definovat vlastní úroveň jistoty. Není to úplně ideální doporučení, ale pro konsensus s pravděpodobnostní konečností neexistuje lepší řešení.

Všechny poctivé uzly chovající se podle jednotných pravidel protokolu přijímají platné bloky. Všechny uzly se chovají autonomně a vzájemně neví jaká rozhodnutí ohledně bloků dělají ostatní nody v síti. Vedoucí slotů rozhodují, který blok následovat. Pasivní uzly, které pouze synchronizují bloky, nerozhodují o finalitě (ačkoli se samy rozhodují o přijetí bloků).

Ve většině případů (pokud je to možné) si vedoucí slotu vybírá předchozím blok (jeli dostupný). To je ten blok, který byl minted předchozím vedoucím slotu. Pokud aktuální vedoucí bloku neobdržel předchozí blok, bude pokračovat blokem, který považuje za nejnovější. V takovém případě vznikají forky.

Forky se řeší podle jednoduchých pravidel a pokud se většina uzlů chová poctivě, může být blok považován za konečný, pokud je za ním dalších 5 bloků. Finalita se zvyšuje s každým dalším nově přidaným blokem. Blok s 25 dalšími bloky za sebou je téměř jistě finální. Naprostá jistota je 2160 bloků.

Závěr

Když uživatel odešle transakci do sítě, obvykle se podívá do průzkumníka blockchainu a čeká, až se objeví v ledgeru. Toto je transakční latence. Poté obvykle čekáme na počet potvrzení, což je v podstatě počet bloků, které jsou připojeny k bloku, ve kterém je transakce uživatele. Takto se obvykle chovají uživatele kteří používá síť s Nakamoto konsenzem, takže podobné procesy probíhají v bitcoinové síti. Existují však sítě s rychlejší konečností, protože uzly mohou poskytnout „schválení“ buď před nebo po vyražení bloku.

Článek napsali Cardanians s podporou Cexplorer.

Přečtěte si celý článek v AJ: https://cexplorer.io/article/understanding-transaction-finality