V článku vysvětlíme, proč se konsenzuální algoritmus první generace blockchainu tak málo škáluje a co je hlavní příčinou neefektivity. Dále si ukážeme, jak Input Endorsers začleňují prvky paralelismu a souběžnosti do konsenzu při zachování linearity blockchainu.
Efektivní Využívání Zdrojů
Distribuovaná síť Cardano se skládá z uzlů, které poskytují své výpočetní zdroje síti. Tyto zdroje však nejsou efektivně využívány v aktuální verzi konsensu Proof-of-Stake (PoS), protože je založen na algoritmu, který přišel s první generací blockchainu.
Síť Cardano razí nový blok v průměru každých 20 sekund. V tomto časovém období je pokaždé náhodně vylosován jeden producent bloku, aby vymintoval nový blok. Všechny ostatní uzly jsou validátory bloků. Ověření bloku trvá zhruba 50–100 milisekund.
Tento algoritmus lze považovat za plýtvání velkým množstvím výpočetního výkonu a šířky pásma sítě. To způsobuje, že CPU uzlů jsou po většinu času nečinné, s výjimkou krátkého období, kdy uzel buď razí nebo ověřuje blok. Použití dostupných síťových zdrojů „špičkovým“ způsobem je zanechává nedostatečně využité.
V popisu jsme zanedbali zdroje potřebné k řešení bitev o sloty (v jednom období se vyrazí více bloků) a difúzi transakcí.
Sítě blockchain první generace umisťují platné transakce do mem-poolů. Jednou za období může jeden náhodně vylosovaný producent bloků vzít pouze omezené množství transakcí a vložit je do bloku. Velikost bloku je omezená, takže nemusí vyhovovat všem dostupným transakcím. Jakmile transakce začnou zbývat v mem-poolu, uživatelé musí čekat na vypořádání delší dobu.
Čím větší je velikost bloku, tím delší je difúze v síti. Blok se musí dostat do všech uzlů v síti co nejrychleji, aby byl dostupný jako předek pro nový blok.
Jednoduše řečeno, s tímto jednoduchým konsensuálním algoritmem je škálovatelnost blockchainu určena frekvencí produkce bloků a jejich velikostí. Například 90 kilobajtů každých 20 sekund v případě Cardano nebo jeden megabajt každých 10 minut v případě bitcoinu.
Na obrázku níže můžete vidět čas rozdělený do slotů (sekund). V síti Cardano je ražen 1 nový blok v průměru každých 20 sekund. Uzly jsou většinu času nečinné (prázdné sloty označují nečinné uzly).
Síťové zdroje by mohly být použity paralelně, ale výše popsaný algoritmus je sekvenční. Použití sekvenčního algoritmu v paralelním systému nutně vede k neefektivnímu využití zdrojů.
Blockchain je lineární, protože každý nově přidaný blok navazuje na blok předchozí. Je to důsledek toho, že datové závislosti (zejména transakce) mají při validaci také lineární charakter. Ukažme si to na příkladu.
Jakmile jsou prostředky (UTxO) z adresy A přesunuty (tedy utraceny) na adresu B v transakci 1, není možné, aby byly stejné prostředky přesunuty z adresy A na adresu C v transakci 2 o chvíli později. Do hlavní knihy musí vstoupit pouze transakce 1 nebo transakce 2, nikoli však obě. V takovém případě by nové prostředky vznikaly z ničeho.
Distribuovaná síť musí zabránit útokům typu double-spend (pokus utratit prostředky dvakrát) decentralizovaným způsobem. Toho je v současné době dosaženo v mnoha blockchainových sítích pomocí sekvenčního algoritmu popsaného výše. Neefektivita pochází ze skutečnosti, že uživatelé používají síť paralelně, tj. transakce (a další data) se v síti objevují nepřetržitě a paralelně.
Hlavním důvodem nízké škálovatelnosti blockchainů je použití sekvenčního algoritmu v síti, ve které jsou data generována uživateli paralelně a v relativně velkém množství (při vyšší adopci se očekává nárůst objemu dat). Sekvenčnost se týká pouze produkce bloků. Validace nových bloků může probíhat paralelně.
Distribuovanou síť lze vnímat jako paralelní systém z pohledu uživatelů (generátoři dat), ale také z pohledu uzlů, které mohou na vzájemném konsensu pracovat do určité míry nezávisle na sobě (spracovávají data). Jinými slovy, dosažení jednotného globálního stavu vyžaduje synchronizaci a komunikaci která probíha nad určitým množstvím dat. Pokud zvýšíme množství dat na kterým se uzavírá konsensus, zvýšíme také škálovatelnost.
Cardano používá účetní model založený na UTxO. Transakce v účetních knihách UTxO explicitně identifikují všechny jejich vstupy a výstupy předem a tyto závislosti jsou kompletní. Nalezení transakcí, které jsou ve vzájemném konfliktu, je jednoduché. Nekonfliktní transakce v bloku lze přeskupit, tj. ověřit v jiném pořadí nebo paralelně, bez ohledu na výsledek ověření. Je poměrně snadné vytvořit prokazatelně bezpečný algoritmus využívající souběžnost a paralelizaci tak, aby byla současně zajištěna správnost dat v účetní knize.
Je tedy možné vytvořit distribuovaný paralelní algoritmus, který bude transakce zpracovávat souběžně. To znamená být schopen zpracovávat transakce a budovat blockchain od okamžiku, kdy je uživatelé pošlou do sítě.
Určitá linearita systému však musí být zachována na úrovni účetní knihy kvůli transakčním závislostem. Algoritmus musí částečně zůstat sekvenční, protože struktura blockchainu musí zůstat lineární (ochrana proti útokům typu double-spend).
Input Endorsers přináší nový distribuovaný algoritmus umožňující paralelní ověřování dat. Současné algoritmy to však již umí. Input Endorsers navíc umožní souběžný vývoj blockchainové struktury na nižší úrovni a zároveň zajistí, že zůstane lineární na vyšší úrovni. Stupeň souběžnosti ve struktuře blockchainu je omezen transakčními závislostmi.
Algoritmus Input Endorsers umožňuje síti dosáhnout paralelismu i souběžnosti při zpracování transakcí a několika druhů bloků. Paralelnost znamená, že více úloh může běžet současně, zatímco souběžnost znamená, že více úloh může postupovat v překrývajícím se časovém období.
Input endorsers umožňuje paralelismus tím, že umožňuje více transakcí, které mají být ověřeny a potvrzeny (bude vysvětleno později) současně různými uzly. Umožňuje také souběžnost tím, že umožňuje vytváření a šíření více bloků v každém slotu. Různé typy bloků, jako jsou ranking bloky a endorsement bloky (které budou vysvětleny později), mohou být raženy paralelně různými uzly a poté odeslány výrobcům bloků k zahrnutí do účetní knihy. To může zvýšit propustnost a výkon sítě Cardano při zachování robustních bezpečnostních vlastností.
Změna algoritmu, tedy pomocí paralelizace a souběžnosti, je jedinou možností, jak zvýšit škálovatelnost blockchainu. Škálovatelnost není možné zvýšit snížením frekvence produkce bloků nebo zvětšením velikosti bloku, protože to brzy narazí na limity (zejména současné možnosti internetu). Částečné úpravy jsou samozřejmě možné, ale vždy je třeba pečlivě zvážit kvalitativní dopady všech atributů sítě. Kromě toho lze těmito úpravami dosáhnout pouze mírného zlepšení škálovatelnosti ve srovnání se změnou algoritmu.
Změna algoritmu umožní lépe využít zdroje, které jsou již pro síť Cardano k dispozici (1200 aktivních poolů). Efektivnější využití zdrojů přinese vyšší škálovatelnost.
Input Endorsers Používá tři Typy Bloků
Funkce Input Endorsers používá 3 typy bloků: Input Blocks (IB), Endorsement Blocks (EB) a Ranking Blocks (RB). Vzhledem k tomu, že ražba bloků je v síti Cardano náhodný proces, může se stát, že některé typy bloků budou raženy paralelně v jednom slotu. Každý typ bloku bude mít nastavenou jinou frekvenci ražby.
Nejčastěji budou input bloky (vstupní bloky) raženy v rozsahu od 0,2 do 2 sekund. Endorsement bloky lze razit každých 5 až 10 sekund. Ranking bloky budou mít podobnou funkci jako aktuální bloky a budou raženy mezi 15 a 30 sekundami. Přesné frekvence ražby nejsou v současnosti známy a budou pravděpodobně upraveny podle potřeby. Dá se očekávat, že budou zpočátku nastaveny konzervativně.
Na obrázku níže vidíte možnou frekvenci ražby všech typů bloků. Input bloky (IB) jsou raženy každou sekundu. Endorsement bloky (EB) jsou raženy každých 5 sekund. Ranking bloky (RB) se razí jednou za 20 sekund.
Náhodně vylosovaný uzel může vytvořit input blok v daném slotu. Uzel vezme sekvenci transakcí ze svého mem-poolu. Tyto transakce musí být platné s ohledem na aktuální stav, tedy s posledním ranking blokem (z pohledu uzlu by měl být poslední). Jak vysvětlíme níže, ranking bloky zajišťují linearitu blockchainu. input bloky jsou raženy s ohledem na aktuální stav účetní knihy, tj. s ohledem na poslední ranking blok.
Input bloky odkazují na poslední (nebo poslední) ranking blok. Z hlediska správnosti údajů v účetní knize musí být možné přidávat nové transakce z input bloků.
Účelem input bloků je nést náklad blockchainu, tedy především transakce a certifikáty. Kromě sekvence transakcí obsahuje každý input blok také odkazy na poslední ranking blok. Odkaz je zahrnut, aby bylo jasné, ve kterém stavu účetní knihy se má použít k ověření transakcí ve vstupním bloku. Transakce v rámci vstupního bloku mohou na sobě záviset.
Na obrázku níže můžete vidět, že input bloky jsou raženy s ohledem na poslední ranking blok.

Všimněte si, že každou sekundu může jeden uzel v síti vyprázdnit celý svůj mem-pool za předpokladu, že se transakce vejdou do vstupního bloku. Frekvence vyprazdňování mem-poolu je výrazně rychlejší než u konsenzuálního algoritmu první generace.
Jakmile uzel vyrazí nový input blok, odešle jej do sítě dalším uzlům.
Jakmile ostatní uzly v síti obdrží input blok, mohou jej validovat (transakce, podpis výrobce bloku, VRF proof atd.). Ověření probíhá s ohledem na aktuální stav ledgeru, což by měl být stejný ranking blok, který odkazuje na input blok.
Input bloky se generují nejčastěji v síti (může to být i 5x za vteřinu), jsou tedy na sobě nezávislé. To znamená, že je mohou uzly ověřovat nezávisle na sobě.
Uzly mohou být náhodně taženy k ražení bloku potvrzení (endorsement bloky). Účelem potvrzovacích bloků je urychlit shodu v síti ohledně existence a platnosti vstupních bloků.
Uzly převezmou odkazy na všechny poslední input bloky, které jsou platné a které ještě nebyly zahrnuty v jiném endorsement bloku potvrzení, a vytvoří nový endorsement blok. Uzly mohou příležitostně také odkazovat na jiné endorsement bloky, pokud ještě nebyly odkazovány v ranking bloku. Aby bylo možné odkazovat, musí být oba endorsement bloky vzájemně kompatibilní.
Ukažme si to například. V čase T je vyražen endorsement blok EB-1, který odkazuje na input blok IB-1. V čase T+1 je vyražen další endorsement blok EB-2, který odkazuje na input blok IB-2. IB-1 i IB-2 nemají žádné konfliktní transakce, takže EB-2 může odkazovat na EB-1 jako na svůj nadřazený blok. Tímto způsobem se EB-2 stane podřízeným blokem EB-1 a EB-1 i EB-2 jsou vzájemně kompatibilní. To umožňuje vytvoření stromové struktury bloků potvrzení, kde každá větev představuje jinou sadu transakcí, které lze zahrnout do hlavní knihy prostřednictvím dalšího ranking bloku.
Na obrázku níže můžete vidět 3 endorsement bloky, které odkazují na několik vstupních bloků. Poslední endorsement blok také odkazuje na předchozí endorsement blok.
Stejně jako input bloky jsou endorsement bloky distribuovány v síti stejným způsobem jako jiné bloky, aby dosáhly uzlů, které je ověřují.
Jiné uzly ukládají endorsement bloky, protože je lze náhodně vylosovat a vydat endorsement report. Endorsement report musí být vystaven do určitého počtu slotů od ražby endorsement bloku (jedná se o síťový parametr). Pokud je uzel vylosován jako reportér, musí ověřit všechny input bloky (a případně odkazované endorsement bloky). Pokud je blok v pořádku, uzel vydá podepsanou zprávu o potvrzení.
Mít nejnovější endorsement bloky je předpokladem pro vydávání zpráv o potvrzení na endorsement bloky. Zprávy uvádějí, zda všechny input bloky, na které odkazuje endorsement blok, skutečně existují a jsou platné.
Účelem indosačních zpráv je prokázat shodu požadované výše stake s existencí a platností svazku vstupních bloků, na které se odkazuje. V agregované formě se svazek zpráv o potvrzení nazývá endorsement certificate.
Na obrázku níže můžete vidět náhodně vylosovaný uzel, který ověří endorsement blok včetně všech vstupních bloků, na které se odkazuje, a vydá zprávu o potvrzení.
Jakmile je pro daný endorsement blok vytvořen dostatečný počet zpráv o potvrzení, je možné je považovat za endorsement certifikát (endorsement certificate).
Na obrázku níže můžete vidět náhodně vybraný uzel, který obdržel dostatečný počet reportů, takže v podstatě má endorsement certifikát pro endorsement blok. To také znamená, že uzel může zahrnout endorsement blok do ranking bloku.

Z hlediska škálovatelnosti je důležité vědět, že různé endorsement bloky mohou být raženy současně na různých uzlech a mohou odkazovat na více stejných vstupních bloků.
Konečně se dostáváme k ranking blokům, které jsou základem pro síťový konsensus. Náhodně vylosovaný uzel převezme poslední endorsement bloky (které ještě nebyly použity v předchozích ranking blocích), pokud pro ně má také certifikáty potvrzení a vloží je do nového ranking bloku.
Může se stát, že uzel má k dispozici endorsement bloky a dosud neexistuje žádný certifikát, protože nebylo vydáno dostatečné množství reportů o potvrzení. V takovém případě se endorsement blok nedostane do aktuálního ranking bloku, který uzel razí. Na tom nezáleží, protože tento endorsement blok se velmi pravděpodobně dostane do dalšího bloku hodnocení (který bude ražen jiným uzlem).
Na obrázku níže můžete vidět uzel, který těží nový ranking blok. Uzel má k dispozici 3 endorsement bloky, ale pouze 2 certifikáty potvrzení. EB 3 proto není odkazován ranking blokem.
Jak jsme již vysvětlili, endorsement bloky se mohou navzájem odkazovat. Když je sada bloků potvrzení zahrnuta do bloku hodnocení, pouze poslední endorsement blok v řetězci musí být zahrnut do certifikátu potvrzení. Důvod je prostý. Certifikát potvrzení pro endorsement blok, který odkazuje na předchozí endorsement bloky, implicitně pokrývá tyto předchozí endorsement bloky.
Nový ranking blok musí odkazovat na předchozí ranking blok. Ranking blok je považován za platný, pokud odkazuje na předchozí platný ranking blok a obsahuje odkazy na endorsement bloky s odpovídajícími platnými potvrzeními. Ranking blok může odkazovat na nula nebo více endorsement bloků.
Uzel nemusí mít k dispozici všechny endorsement bloky a odkazované input bloky a přesto být schopen okamžitě přijmout nový stav účetní knihy. Konstrukce stavu účetní knihy (stahování všech bloků) může mírně zaostávat za přijetím stavu.
Na obrázku níže můžete vidět vztahy mezi všemi typy bloků. Černé šipky označují odkazy mezi IB a EB a také mezi RB a EB. Červené šipky označují odkazy IB na aktuální stav účetní knihy, tj. na RB. Modré šipky označují linearitu blockchainu, tedy vztah mezi RB, když nový RB musí následovat předchozí RB. Postupem času budou všechny transakce vstupovat do hlavní knihy prostřednictvím IB. Na obrázku můžete také vidět modré obdélníky za EB, které představují certifikáty.
Separování Výběru Transakcí od Produkce Bloků
Hlavním účelem funkce Input Endorser je oddělit výběr transakcí od produkce bloků.
V první generaci algoritmu prováděl uzel obojí, to znamená, že vybral platné transakce ze svého vlastního mem-poolu a vložil je do nového kandidátského bloku. Jedná se v podstatě o sekvenční proces, kterého se v každém kole (v jednom časovém období) účastní pouze jeden uzel. Následná validace kandidátského bloku ostatními uzly probíhá paralelně.
Na obrázku níže můžete vidět vytváření nových bloků, které obsahují všechny transakce z místního mem-poolu.
Je možné paralelizovat přípravu nového bloku (ranking block)?
Algoritmus Input Endorsers umožní připravit větší počet transakcí ve fázi výběru transakcí, protože se toho může zúčastnit více uzlů v síti současně. Endorsement ndoy ověřují a předem schvalují transakce, které pomáhají snížit výpočetní zátěž a požadavky na šířku pásma výrobců ranking bloků a také zvyšují rozmanitost a dostupnost poolů transakcí. Umožňují také rychlejší potvrzení transakcí, které dosud nebyly zařazeny do řetězce, tím, že poskytují důkaz o schválení, který může kdokoli ověřit.
Ranking bloky se používají k zajištění tradiční linearity blockchainu a k dosažení konsenzu v síti, ale místo aby obsahovaly transakce, obsahují odkazy na endorsement bloky. Input bloky a endorsement bloky umožňují paralelní a souběžné zpracování transakcí.
Na obrázku níže můžete vidět rozložení práce různých typů bloků z pohledu síťového konsenzu. Všimněte si, že zatímco frekvence ražby bloků v sekci produkce bloků je stejná jako na předchozím obrázku, v sekci výběru transakcí se odehrává více aktivit.
Konsensus je stále o výběru nejlepšího řetězce bloků, který se řídí pravidly protokolu Ouroboros. Vstupní bloky ve skutečnosti schvalují pouze transakce, které jsou platné a konzistentní se stavem hlavní knihy. Producenti endorsement bloků převezmou tyto schválené transakce a zahrnou je do bloků, které razí. Konsenzus se provádí u většího počtu transakcí, protože ty již byly předem schváleny a ranking bloky obsahují pouze odkaz na sadu bloků potvrzení, které jsou vzájemně kompatibilní.
Všimněte si, že Input Endorsers (IE nodes) nejsou zodpovědní za řazení transakcí do lineární sekvence bloků, ale pouze za jejich ověření a potvrzení. Potvrzené transakce jsou pak šířeny sítí v schválených blocích pomocí protokolu klepů (gossip).
Vylepšení škálovatelnosti
Nejdůležitější je poznamenat, že input bloky lze razit (streamovat) v podstatě neustále (každé 0,2-2 sekundy). To znamená, že namísto vytváření jednoho datového bloku každých 20 sekund lze za stejnou dobu vyrazit 10 až 100 vstupních bloků. Vysoká frekvence ražby vstupních bloků nebrání konsenzu sítě.
Z hlediska datové propustnosti lze škálovatelnost zlepšit zhruba 10x až 100x, pokud mají input bloky stejnou velikost jako současné Cardano bloky. Během 20 sekund dokáže Cardano zpracovat 3 000 až 30 000 transakcí. TPS může být od 150 do 1500, pokud uvažujeme pouze jednoduché (malé) transakce.
Zvětšení vstupních bloků by mělo přímý vliv na vyšší škálovatelnost. Zvětšením velikosti vstupních bloků by se však mohlo zásadně zpomalit jejich šíření v síti. Je důležité co nejlépe vybalancovat velikost vstupních bloků a frekvenci jejich ražby. To je poměrně vítaný problém, protože je do značné míry oddělen od konsensu, tedy od ranking bloků. Se zlepšujícími se možnostmi internetu se může zvýšit i škálovatelnost Cardana.
Zlepší se také konečnost transakcí, protože zprávy o potvrzení v zásadě představují souhlas velké části stake s obsahem endorsement bloků (které odkazují na input bloky). Přestože ranking blok může být osiřelý, existuje poměrně vysoká šance, že jakmile je transakce vložena do vstupního bloku, na který se bude odkazovat z endorsement bloků, transakce se dostane do blockchainu.
Závěr
Článek měl vysvětlit základní koncepty Input Endorsers a nebyl zde prostor pro některé okrajové případy a kritické body návrhu. K tomu se dostaneme příště.
Článek připravili Cardanians s podporou od Cexplorer.
Přečtěte si článek v AJ: https://cexplorer.io/article/understanding-input-endorsers