🇨🇿 Jak Ouroboros Leios změní Cardano konsensus

Cardano používá konsensus PoS, který je v době psaní článku schopen zpracovat 300 jednoduchých transakcí za sekundu. To je téměř 50krát více než konsensus PoW, který používá Bitcoin. Pro globální finanční systém je to však stále nedostatečné. Tým IOG pracuje na nové verzi PoS, kterou pojmenoval Ouroboros Leios.

Blockchain trilema

Tým vývojářů jakékoli blockchainové sítě vyvažuje tři klíčové vlastnosti, kterými jsou bezpečnost, decentralizace a škálovatelnost. Trilema blockchainu odkazuje na široce rozšířený názor, že decentralizované sítě mohou v daném okamžiku poskytovat pouze dvě ze tří vlastností. Bezpečnost je bezpodmínečná vlastnost, kterou nelze ohrozit. Týmy vyvažují především mezi decentralizací a škálovatelností. Upřednostňování škálovatelnosti před decentralizací však není nejlepším řešením, protože decentralizace je klíčovou vlastností blockchainu. Navíc s poklesem decentralizace klesá i Nakamotův koeficient a tím i bezpečnost.

Vytvoření blockchainové sítě, která dosáhne vysoké škálovatelnosti a zároveň neobětuje decentralizaci a bezpečnost, je pro odvětví blockchainu stále technologickou výzvou. Cardano je v současné době jednou z nejvíce decentralizovaných sítí s více než tisícovkou provozovatelů poolů, kteří produkují bloky. Je nezbytné, aby si Cardano udrželo svou současnou decentralizaci a nezavřelo si dveře k dalšímu růstu. Zvyšování škálovatelnosti je však také nezbytné pro poslání, které se Cardano snaží naplnit.

Ouroboros Leios je významným rozšířením současného konsensu PoS, které výrazně zvýší škálovatelnost a zachová současnou úroveň decentralizace. Podívejme se na dosud známé podrobnosti.

Propustnost

Blockchainové sítě používají bloky jako soubor transakcí a skriptů, nad kterými probíhá síťový konsensus. Z hlediska sítě není efektivní rozhodovat na globální úrovni o každé jednotlivé transakci. Efektivnější je vzít více transakcí současně a učinit rozhodnutí (konsensus) nad celou kolekcí.

Blok je základní jednotka používaná k přechodu do nového stavu na úrovni ledgeru. Pokud většina sítě považuje navržený blok za platný, bude nový blok navždy uložen v blockchainu a stane se výchozím bodem pro další přechod do nového stavu.

Propustnost blockchainových sítí ovlivňují dva parametry. Jsou to velikost bloku a čas bloku.

Velikost bloku definuje maximální velikost bloku, která ovlivňuje počet transakcí a skriptů, které se do něj vejdou. Pokud je velikost bloku 88 kB (90,112 B) a jednoduchá transakce má velikost například 300 B, vejde se do bloku 300 transakcí.

Čas bloku definuje časový interval mezi přidáváním nových bloků. Cardano má čas bloku nastavenou na 20 sekund. To znamená, že za 1 minutu může Cardano zpracovat 900 jednoduchých transakcí. Za 10 minut 9000 transakcí atd.

Může se stát, že pokud počet uživatelů, kteří chtějí síť používat, začne růst, síť nemusí být schopna vložit všechny nové transakce do nového bloku. Některé transakce tak musí čekat v mem-poolu na další blok.

To by se stalo například v případě, že by 400 uživatelů chtělo odeslat jednoduchou transakci během 20 sekund, a to by se opakovalo po dobu jedné hodiny. 400 transakcí je více než 300, které Cardano bez problémů zvládne. Každých 20 sekund zůstane 100 transakcí mimo nový blok, takže musí zůstat v mem-poolu.

Mem-pool si můžete představit jako dočasné úložiště transakcí v uzlech sítě. Když se producent bloku stane vedoucím slotu, tj. získá právo vytvořit nový blok v daném slotu, vezme předem ověřené transakce z mem-poolu a vloží je do bloku. Poté rozšíří blok do sítě. S každým nově přidaným blokem se prostor mem-poolu zvětšuje, protože transakce, které již v blockchainu jsou, mohou být vyjmuty. Stále však přibývají nové transakce.

Pokud je počet transakcí trvale vyšší, než kolik jich síť zvládne, je nutné zabránit zaplnění mem-poolu nad požadovanou mez. Síť je nucena nové transakce odmítat. Uživatelé musí déle čekat na vypořádání transakcí, které již v mem-poolu jsou. Uživatelé, kterým se nepodařilo odeslat transakci, to musí zkusit znovu. Obojí je pro uživatele nepříznivé. Uživatelé očekávají, že settlement bude krátký a že síť nebude mít problémy s propustností.

Mem-pool je schopen absorbovat krátkodobé špičky, ale nemá smysl, aby byl mnohonásobně větší než velikost bloku. Pokud by bylo v mem-poolu dostatek transakcí například na 100 bloků dopředu, znamenalo by to, že nově zadané transakce by se do bloku nedostaly po relativně dlouhou dobu. V ideálním případě by mem-pool měl být co nejmenší a síť by měla dostatečně škálovat, aby transakce nezůstávaly v mem-poolu jen proto, že se nevejdou do bloku.

Decentralizovaná síť je schopna šířit transakce relativně rychle a teoreticky je omezena pouze šířkou pásma internetu. Internet má vyšší propustnost než blockchainové sítě, protože blockchainy jsou omezeny velikostí a časem bloku. Jinými slovy, blockchainové sítě v současné době nejsou schopny využít propustnost internetu, pokud jde o produkci bloků. To, co blockchainové sítě brzdí, je pomalý konsensus, který je navíc omezen velikostí dat v daném intervalu. Transakce by sice mohly blockchainovou sítí proudit relativně rychle, ale jediným výsledkem by bylo zaplnění mem-poolu.

Existují zdánlivě jednoduchá řešení, jako je zvětšení velikosti bloku nebo zkrácení času bloku. Obojí vede k vyšší propustnosti, protože se do bloku vejde více transakcí a nový blok se vytvoří častěji. Bohužel změna těchto parametrů může mít negativní dopad na bezpečnost a decentralizaci. Například čím větší blok, tím déle trvá jeho šíření v síti Peer-to-Peer (zvyšuje se zpoždění). Čím kratší je velikost bloku, tím větší je riziko vzniku forků, protože producent bloku nemusí včas obdržet poslední vyrobený blok (a použít ten předchozí).

S rostoucím počtem uzlů v síti může růst počet skoků (hops), kterými musí data v síti projít. Vzhledem k tomu, že každý uzel před odesláním dat ověřuje jejich platnost (aby se předešlo odeslání nevalidních dat po síti), distribuce dat se zpomaluje.

Jak zvýšit propustnost

Jak jsme již řekli, v současné době blockchainové sítě nevyužívají většinu šířky komunikačního pásma. Většinu času uzly pouze čekají. Respektive přijímají, před-validují a dále distribuují nové transakce a skripty. Ověřování nově příchozích transakcí není pro uzly výpočetně náročný úkol. Mají pouze o něco více práce, když obdrží nový blok nebo jsou pověřeny výrobou nového bloku.

Pokud je doba bloku nastavena na 20 sekund, můžeme říci, že uzel vykonává minimální práci po dobu 19 sekund a ověřuje nebo vytváří nový blok jednou za 20 sekund. Z hlediska využití šířky pásma sítě je to podobné. Po síti se neustále posílá spousta malých transakcí, ale jednou za 20 sekund je třeba distribuovat relativně velký blok, což trvá mnohem déle než u transakcí.

Pro zvýšení škálovatelnosti je nutné využít výpočetní výkon uzlů a plně je vytížit. Nemá smysl využívat výpočetní výkon a šířku pásma sítě pouze tehdy, když je třeba vytvořit nový blok. Jednoduše řečeno, čím delší je doba trvání bloku, tím méně se využívá výpočetní výkon a šířka pásma sítě.

Nezaměňujte úlohu PoW, která spočívá především v losování dalšího výrobce bloku a zabezpečení proti přepsání historie, s ověřováním transakcí. V kontextu škálovatelnosti Bitcoinu síť také v podstatě 10 minut stojí, zatímco se těžaři snaží vyřešit výpočetně náročnou kryptografickou úlohu.

Je tedy nutné využít dostupné zdroje. Validované transakce a skripty by měly být přijaty a uloženy do blockchainu co nejdříve. Jinými slovy, výsledky validace je nutné dostat do bloku co nejdříve, bez ohledu na jejich množství.

Jak zvýšit propustnost při zachování bezpečnosti a decentralizace? Nesmí dojít k zásadní změně počtu uzlů v síti. Síť musí zůstat otevřená, aby se do ní mohl kdykoli připojit nový uzel.

Řešení musí být nezávislé na parametrech velikosti a času bloku. Je nutné využít celou propustnost komunikačního spojení, aby bylo možné rychle zpracovat co nejvíce nových transakcí a skriptů. Uzly mohou více využívat svůj výpočetní výkon při čekání na vytvoření nového bloku. Tým IOG našel řešení.

Je třeba oddělit ověřování transakcí a provádění skriptů od tvorby bloků. Ouroboros Leios rozděluje úlohy spojené s validací a produkcí bloků do dvou skupin uzlů. Každý uzel však může provádět obě úlohy.

Schvalovatelé vstupu (Input endorsers)

Cardano rozděluje čas do slotů. Délka jednoho slotu je jedna sekunda. Protokol je nastaven tak, že přibližně každých 20 sekund se jeden náhodně vybraný uzel stane vedoucím slotu. Vedoucí slotu získá právo vkládat transakce do nového bloku a publikovat je. Velikost stake ovlivňuje četnost, s jakou se uzel může stát vedoucím slotu. Vybraný slot leader je také producentem bloku, pokud využije svého práva a vytvoří nový blok.

Na obrázku níže vidíte čas rozdělený do slotů. Ve slotech 20 a 40 jsou vylosováni noví lídři slotů, jedná se o uzly označené 11 a 3. Tyto uzly mohou produkovat nový blok a publikovat jej.

V síti existují subjekty (provozovatelé staking poolů), kterým delegáti důvěřují, a toho lze využít. Kromě producentů bloků bude existovat i druhá skupina, která se nazývá schvalovatelé vstupů. V rámci jednoho slotu je tedy možné náhodně vybrat nejen vedoucí slotu, ale také jednoho schvalovatele vstupů (teoreticky více schvalovatelů vstupů).

Role vedoucích slotů se nemění a jejich úkolem je produkovat nový blok. Úkolem schvalovatelů vstupů je schvalovat vstupy, které mají být do bloku vloženy. O obsahu schvalovaného vstupu budeme hovořit později. Schvalovatele vstupů si lze představit jako druhou vrstvu, která předzpracovává transakce a skripty před tím, než je náhodně vybraný vedoucí slotu vloží do bloku.

Schvalovatelé vstupů budou náhodně vybíráni mechanismem podobným způsobu, jakým jsou vybíráni vedoucí slotů. Rozdíl je v tom, že tito schvalovatelé mohou být vybráni v každém jednotlivém slotu (jeden schvalovatel za sekundu) předtím, než je vybrán vedoucí slotu (přibližně každých 20 sekund). Vstup připravený schvalovatelem bude vedoucím slotu přijat pouze v případě, že je kryptograficky ověřeno, že schvalovatel vstupu získal právo vstup připravit.

Mezi dvěma bloky bude náhodně vybráno více schvalovatelů, kteří budou vstupy připravovat. Jakmile bude vybrán vedoucí slotu, bude existovat více schválených vstupů, které mohou být vloženy do bloku. Namísto toho, aby vedoucí slotu vkládal do bloku vybrané transakce a skripty, jak je tomu nyní, bude do bloku vkládat odkazy na schválené vstupy.

Bloky a schválené vstupy jsou v síti distribuovány nezávisle. Každý blok může obsahovat 0 až N schválených vstupů.

Na obrázku níže vidíte opět čas rozdělený do slotů. Přibližně každých 20 sekund se vylosuje nový vedoucí slotu. Kromě toho je v každém slotu vylosován schvalovatel, který má právo produkovat nový vstup. Souběžně tedy probíhají dvě losování najednou.

Schvalování vstupů je možné pouze proto, že Cardano používá model Extended-UTXO. Je možné potvrzovat transakce a skripty lokálně bez ohledu na okolní prostředí (žádný globální stav). Ověřování transakcí a provádění skriptů probíhá lokálně na úrovni vstupních schvalovatelů, tj. mimo hlavní řetězec, který zůstává pod kontrolou vůdců slotů. Odpovědnost za vyhledávání konfliktů dvojího utrácení zůstává na vybraných vedoucích slotu. Stává se však odlehčeným procesem, který se musí spoléhat pouze na detekci a řešení konfliktů v UTXO grafu.

Stejná transakce může být obsažena ve více schválených vstupech. K tomu může dojít, pokud schvalovatel vstupů neví, jak vypadají předchozí vstupy. V případě, že je transakce v blockchainu přítomna vícekrát, bude její kanonickou pozicí v účetní knize pouze její první výskyt.

Na obrázku níže můžete vidět, jak se každou sekundu vytváří nový vstup. Jakmile je vylosován nový lídr slotu, vzniknou další vstupy, které jsou připraveny k použití. Vedoucí slotu provede svůj ověřovací proces a může vložit všechny vybrané vstupy do nového bloku.

Podívejme se, co se děje od odeslání transakce po její vložení do bloku.

Když uzel přijme novou transakci, ověří ji. Všechny platné transakce budou vloženy do mem-poolu. Pokud uzel získá právo vytvořit vstup v daném slotu, zahrne do nového vstupu předem ověřené transakce. Vytvoří se jakási dávka transakcí. Můžete si to představit jako nový druh bloku. Schválené vstupy (bloky) jsou distribuovány v síti Peer-to-Peer. Kromě mem-poolu pro transakce bude existovat mem-pool pro schválené vstupy. Uzly budou ve vyhrazeném mem-poolu uchovávat více schválených vstupů, aby byly připraveny na výrobu nového bloku v případě, že by se staly lídrem slotu.

Uzly nejen uchovávají schválené vstupy, ale lokálně prokazují jejich platnost prostřednictvím certifikátů Mithril, což jsou kryptografické důkazy platnosti pro skupinu transakcí.

Jakmile je vybrán nový vedoucí slotu, vybere z mem-poolu schválené vstupy a ověří, že nedošlo k dvojímu utracení. Poté vloží do nového bloku odkazy na všechny vybrané schválené vstupy. Nový blok je poté distribuován do sítě a validace ostatními uzly se provádí podobným způsobem jako nyní. Během distribuce nového bloku mohou uzly vyjmout použité schválené vstupy ze svých mem-poolů.

Na obrázku níže vidíte, jak uzel přijímá nové transakce a také nové schválené vstupy ze sítě Peer-to-Peer. Obojí je uloženo ve vyhrazených mem-poolech. Uzel měl štěstí a byl zvolen jako vedoucí slotu, takže vytvořil nový blok.

Všimněte si, že tento koncept deleguje ověřování transakcí a provádění skriptů na všechny uzly a nezatěžuje uzel touto prací v okamžiku, kdy je zvolen jako vedoucí slotu. Umožňuje využít výpočetní výkon uzlů v době “nečinnosti”, kdy všechny uzly čekají na nového vedoucího slotu.

Transakce a skripty jsou sítí zpracovávány v podstatě neustále, takže vytvoření nového bloku je relativně rychlý proces. Protože se používají odkazy na schválené vstupy, může velikost bloku zůstat stejná jako dnes, i když objem zpracovávaných dat může být mnohonásobně větší. Jinými slovy, každý schválený vstup může obsahovat například 1000 transakcí. Distribuce bloku se tedy kvůli velikosti nezpomalí. Zároveň však uzly mají přístup ke všem potřebným datům, na která se nový blok odkazuje.

Tento koncept se může podobat řešením L2, jako jsou ZK Rollups a Optimistic Rollups, nebo jiným řešením, jako je Lightning Network. Výhodou však je, že neexistuje druhá síť s vlastní infrastrukturou. Vše bude pod kontrolou stávajících provozovatelů staking poolu v rámci sítě Cardano. Uživatelé změnu kromě lepšího výkonu nezaznamenají. Není třeba používat mosty (bridge) nebo odlišné adresy, takže uživatelský zážitek nebude negativně ovlivněn.

Závěr

V době psaní tohoto článku všichni fanoušci netrpělivě očekávají další podrobnosti od týmů IOG. Asi největší otázkou pro nás je, kde a jak budou uloženy transakce a skripty, protože blok bude pouze odkazovat na data. Protože Cardano bude mnohem lépe škálovat, bude také generovat více dat, která bude třeba někam ukládat. Ideální řešení by bylo prostřednictvím shardingu, aby uzly nemusely ukládat všechna data, ale jen jejich část. Uvidíme, jak to tým IOG vyřeší.

Je předčasné tvrdit, že trilema blockchainu je vyřešeným problémem. Ouroboros Leios však bude významným krokem vpřed, protože propustnost sítě nebude omezena parametry velikosti a času bloku. V tuto chvíli není známo, jak vysoká bude škálovatelnost Cardana, je však více než pravděpodobné, že se posuneme alespoň o řád výše. Dříve se říkalo, že blockchain je pomalá databáze. Ouroboros Leios toto tvrzení zneplatňuje a možná přepíše historii síťového konsensu.

Tento článek napsali Cardanians za podpory Cexplorer.