🇨🇿 Pochopení Cardano Konsensu

Každý uzel Cardano udržuje svou vlastní verzi účetní knihy (ledgeru). Aby to mohl uzel udělat, potřebuje spojení s ostatními uzly a možnost rozhodnout se, zda přijme nové bloky. Přijďte se podívat, jak se přidávají nové bloky a jak je chráněna neměnnost účetní knihy.

Proč Cardano potřebuje mechanismus konsensu?

Každá distribuovaná blockchainová síť potřebuje mechanismus konsensu, který zajistí, že všechny poctivé uzly budou udržovat stejnou verzi účetní knihy. Každý uzel se chová autonomně a v síti nesmí být žádný centrální orgán, který by rozhodoval o tom, která verze účetní knihy je ta správná. Dá se říci, že autoritu nahrazují pravidla. Účastníci přijímají pravidla instalací klientů na své vlastní uzly.

Mechanismus konsenzu je tedy soubor pravidel a procesů, které umožňují uzlům vzájemnou koordinaci a spolupráci, aniž by se spoléhaly na centrální autoritu. Poskytuje také zabezpečení a spolehlivost pro síť, protože zabraňuje zlovolným aktérům manipulovat s účetní knihou nebo vytvářet podvodné transakce.

Pokud má většina účastníků nainstalovanou stejnou verzi klienta Cardano, akceptují přesně stejná pravidla. Pravidla jsou úplná a deterministická, takže každý udržuje stejnou verzi účetní knihy.

Podvodní účastníci se snaží změnit pravidla na svých uzlech. Pak se snaží oklamat čestné účastníky. Pokud je však většina mincí ADA na straně poctivých účastníků, jsou jejich pravidla dodržována.

Všimněte si, že šíření bloků v distribuované síti má tendenci být zpožděné, takže v jednom okamžiku se verze účetní knihy může mírně lišit, ale pouze v posledních několika blocích. Historie ledgeru je však na všech uzlech stejná.

Pravidla konsenzu jsou transparentní, protože jejich definice je volně dostupná všem ve zdrojovém kódu na GitHubu.

Pochopení vrstev

Každý uzel Cardano udržuje svou vlastní verzi účetní knihy podle pravidel konsenzu definovaných v klientovi Cardano. Ukážeme si, na čem závisí konsenzus a kde přesně se účetní kniha nachází.

Cardano si můžete představit jako 3 vrstvy, kde vyšší vrstva závisí na nižší.

Obrázek níže ukazuje, že konsenzuální vrstva závisí na síťové vrstvě. Vrstva hlavní knihy závisí na vrstvě konsensu. Tímto způsobem je oddělena funkčnost jednotlivých vrstev. Lze je tedy upgradovat nezávisle na sobě.

Síťová vrstva udržuje spojení typu peer-to-peer mezi všemi distribuovanými uzly v síti Cardano. Každý uzel je spojen s několika sousedními uzly. Tato vrstva slouží k distribuci transakcí a bloků po internetu.

Pro větší bezpečnost používá síť Cardano dva typy uzlů: Reléové uzly a uzly, které udržují účetní knihu, říkejme jim konsenzuální uzly (také block-producer nody). Konsenzuální uzly jsou připojeny k jednomu nebo více reléovým uzlům. Útočník se nemůže dostat ke konsenzuálnímu uzlu přes přenosový uzel, pokud operátor správně nastaví spojení mezi přenosovým a konsenzuálním uzlem.

Konsenzuální vrstva je místem, kde běží konsensus Ouroboros PoS. V této vrstvě se ověřují příchozí bloky a rozhoduje se o jejich přijetí. V případě vidličky je vybrán vítězný řetězec. Pokud se jedná o uzel produkující bloky, je zde vyražen nový blok. V této vrstvě uzly udržují místní stav potřebný pro rozhodování. Například seznam aktivních poolů, seznam aktivních delegačních certifikátů, aktivní podíl všech poolů atd.

Vrstva hlavní knihy udržuje stav hlavní knihy a pravidelně ji aktualizuje pokaždé, když je přijat nový blok.

Konsenzuální vrstva nepotřebuje znát stav účetní knihy (například aktivní sadu UTxO). Konsenzus PoS potřebuje ke své činnosti pouze ověřit některá pole z hlavičky bloku. Nově přijatý blok je buď přijat, v takovém případě může aktualizovat stav účetní knihy, nebo odmítnut.

Účetní kniha

Cardano ledger se skládá ze série bloků, které jsou propojeny pomocí hash. Hashe jsou jedinečné identifikátory, které představují obsah každého bloku. Více si o tom povíme později. Nejprve se podívejme, jak blok vypadá.

Každý blok obsahuje záhlaví a tělo. Záhlaví obsahuje metadata, jako je číslo slotu, číslo epochy, verze protokolu, ID producenta bloku a hash předchozího bloku. Tělo obsahuje skutečné transakce a další informace, které ovlivňují stav hlavní knihy.

Pokud uzel Cardano přijme nový blok prostřednictvím konsensu PoS, tělo bloku aktualizuje stav hlavní knihy. Můžete si to představit jako přidání nového bloku na konec blockchainu, který v podstatě také přijímá všechny transakce v něm obsažené. V dalším textu se zaměříme na neměnnost účetní knihy.

Výše jsme řekli, že bloky jsou propojeny pomocí hashů. Hash je jedinečný identifikátor s pevnou délkou, který je odvozen z dat bloku pomocí kryptografické (matematické) funkce. Celý blok, tedy záhlaví a tělo, se používá jako vstup pro kryptografickou funkci, která vytváří jedinečný 256bitový výstup. Hašovací funkce používaná Cardano se nazývá Blake2b.

Hašování funguje tak, že pokud vezmete stejný vstup a použijete ho na stejnou kryptografickou funkci, vždy vytvoří stejný výstup. Pokud byste změnili byť jen jediný bit informace na vstupu (v bloku), výstup funkce by byl úplně jiný.

Hash předchozího bloku je důležitou součástí hlavičky bloku, protože zajišťuje integritu a kontinuitu blockchainu. S každým novým blokem přidaným do blockchainu je obtížnější měnit historii účetní knihy, tedy předchozí bloky včetně jejich obsahu.

Zahrnutím hashe předchozího bloku do hlavičky aktuálního bloku vytvoří Cardano řetězec bloků, které lze vysledovat zpět k bloku Genesis, což je vůbec první blok vytvořený v síti.

Cardano PoS konsensus ověřuje data v hlavičce bloku, která uzel přijal. Uzel se musí rozhodnout, zda blok přijme. Jedno z polí v hlavičce bloku, které konsensus ověřuje, je hash předchozího bloku.

Konsensus musí zajistit integritu a kontinuitu blockchainu. Konsensus nemůže přijmout blok, pokud by to znamenalo porušení kontinuity. To by se například stalo, pokud by hash předchozího bloku odkazoval na neexistující nebo příliš starý blok.

Nově ražené bloky mají pořadové číslo (číslo bloku) a ID slotu, ve kterém byly raženy. Pro uzel provádějící ověřování je velmi snadné rozhodnout (na základě konsensuálních pravidel), zda bude akceptací bloku zachována kontinuita a integrita účetní knihy.

Na obrázku níže můžete vidět čas rozdělený do slotů. Nové bloky byly raženy přesně po 20 sekundách ve slotech s ID 1000, 1020, 1040 a 1060. V hlavičce bloku můžete vidět 4 bloky, které obsahují pouze některá pole. Zelené šipky ukazují ID slotů, tedy sloty, ve kterých vedoucí slotů razili nové bloky. Vedoucí slotů přiřadili blokům čísla 15, 16, 17 a 18. Červené šipky ukazují vazby mezi bloky, tedy hash předchozího bloku.

Z účetní knihy nelze odstranit např. blok s číslem bloku 16, protože by došlo k narušení kontinuity. Blok s číslem bloku 17 musí ukazovat na blok, jehož hash je označen písmenem Q (Q je hash bloku s číslem bloku 16) na obrázku a na žádný jiný.

Hash bloku závisí nejen na jeho vlastních datech, ale také na hash předchozího bloku. Pokud tedy útočník změní nějaká data v bloku z historie, změní se hash tohoto bloku, a tak se musí změnit hash dalšího bloku a tak dále. To by vytvořilo rozvětvení v blockchainu (fork), kde útočníkova verze bloku nebude přijata zbytkem sítě.

Tato situace je naznačena na dalším obrázku. Útočník změnil tělo bloku s číslem bloku 16. Tím však také změnil hash bloku, který má nyní hodnotu X. Útočník tedy musí změnit i bloky s číslem bloku 17 a 18. Na jeho uzlu byl vytvořen fork. Útočník se může pokusit distribuovat podvodný řetězec v síti do jiných uzlů. Jiné uzly však podvodný řetězec odmítnou po ověření ostatních polí z hlavičky bloku.

Dále si ukážeme, jak si síť dokáže poradit s forky.

Konsensus

K rozvětvení blockchainu v síti Cardano dochází z různých běžných důvodů, nejen při pokusu o útok.

V našem článku jsme detailně popsali jak jsou nové bloky mintovány a verifikovány. Dozvíte se také více o lokálním stavu, který uzly udržují pro ověření bloků. Nyní se zaměříme na to, jak si Cardano poradí s forky.

Nejprve si však musíme říci něco o finalitě bloků.

Cardano používá konsensus Proof-of-Stake ve stylu Nakamoto. Nakamotův konsensus je schopen dosáhnout tzv. pravděpodobnostní finality. Pravděpodobnostní finalita znamená, že za určitých předpokladů o účastnících sítě můžeme pravděpodobnost finality bloků pouze odhadovat. To platí nejen pro naposledy přidaný blok, ale také pro předchozí bloky.

U posledního bloku je jistota ohledně finality nejmenší (tedy spíše nejistota). Čím starší blok, tím větší jistota, že blok je konečný.

Dosažení případného konsenzu znamená, že v určitém okamžiku v budoucnu se všechny uzly shodnou na neměnnosti určité sady bloků. Dosažení konečného konsensu může trvat dlouho. Navíc není možné dopředu určit, jak dlouho to bude trvat.

Zatímco nově vyražený blok mohou přijmout všechny uzly v síti (pokud projde ověřením), o tom, zda je blok konečný, rozhoduje jiný pool (výrobce bloků). O finalitě posledního bloku nehlasují normální uzly, ale pouze náhodně vybraný uzel produkující bloky. Tento uzel posiluje konečnost posledního bloku tím, že se rozhodne připojit svůj vlastní blok za tento blok.

Každý další přidaný blok znamená další hlasování o finalitě všech předchozích bloků.

Na obrázku níže vidíme 5 bloků. Každý blok byl vytvořen jiným vedoucím slotu (producentem bloku). Blok 1 je s největší pravděpodobností konečný (stále však nemáme absolutní jistotu), protože pro něj hlasovali 4 lídři slotů a k žádnému forku zatím nedošlo. Naopak nejmenší jistotu máme u bloku 6. Stále existuje šance, že po bloku 5 dojde k forku. Pro blok 6 zatím nikdo jiný než výrobce bloku nehlasoval.

Forky v síti Cardano se vyskytují z různých důvodů. V jednom slotu mohli být zvoleni 2 vedoucí slotu, kteří oba nezávisle razili nový blok (nevědí o sobě). Může se stát, že dva vedoucí slotů jsou zvoleni na slotech, které jsou blízko sebe. Druhý vedoucí slotu nemusel dostat blok od předchozího vedoucího, a proto nenásledoval poslední blok, ale blok předchozí. Vznikne tak vidlice.

Na obrázku níže můžete vidět, jak došlo k rozvětvení blockchainu v síti Cardano po bloku 5. Ve slotu 1058 byla zvolena vedoucí slotu Alice a ve slotu 1060 byl zvolen vedoucí slotu Bob. Alice razila nový blok 6 po bloku 5. Vedoucí slotu Bob byl zvolen později a protože nedostal blok 6 od Alice včas, připojil nový blok také po bloku 5. Takže byly 2 bloky s číslem 6.

Jak jsme vysvětlili dříve, pravidla konsenzu musí být úplná a deterministická. Protokol vznik této situace předvídá a dokáže se s ní snadno vypořádat. Protokol bude používat následující pravidla pro výběr řetězce.

  1. Pravidlo nejdelšího chainu.
  2. Pokud mají oba alternativní řetězce stejný počet bloků, dává se přednost řetězu s nižším výstupem VRF v posledním bloku.

Záhlaví bloku obsahuje několik polí, která uzly ověřují. Konsenzuální vrstva mimo jiné ověřuje VRF proof a VRF výstup, aby ověřila, že uzel byl skutečně zvolen jako vedoucí slotu a měl právo razit blok. Dále se ověřuje podpis KES.

Na obrázku níže můžete vidět podobný scénář jako výše. Přidali jsme výstup VRF a název lídra slotu. Alice razila blok 6 ve slotu 1058 a její výstup VRF je 39578. Bob vytěžil blok 6 později, ve slotu 1060, a jeho výstup VRF je 28887. Oba připojili blok 6 po bloku 5, čímž vytvořili vidlici.

Finalita obou bloků 6 je nízká a velmi nejistá, protože pouze jeden může zůstat v blockchainu, zatímco druhý osiří. Na obrázku můžete vidět další vedoucí slotu Carol, která razila blok ve slotu 1080. Pro ni byl úkol jednoduchý, uplatnila totiž druhé pravidlo pro výběr chainu.

Bobův blok měl nižší VRF výstup, a tak si Carol vybrala jeho blok. Aličin blok zůstane osiřelý včetně všech transakcí. Konsensuální rozhodnutí se odráží ve vrstvě účetní knihy.

Vidlice může nastat i při pokusu prosadit podvodný řetěz. Útočník by se mohl pokusit změnit obsah bloku hluboko v historii účetní knihy nebo část bloků zcela zahodit.

Je důležité poznamenat, že ačkoli může být pro útočníka snadné vytvořit podvodný řetězec lokálně na svém uzlu, je v podstatě nemožné prosadit podvodný řetězec na jiné uzly v síti.

Slot lídři jsou voleni na základě celkového podílu v poolech, tedy na základě distribuce ADA coinů. Pouze zvolení vedoucí slotů jsou schopni vložit platný VRF důkaz a výstup VRF do hlavičky bloku a podepsat blok pomocí podpisového klíče KES.

Co se týče vynucení podvodného řetězce, jde v podstatě o pokus o 51% útok. Útočník k tomu potřebuje více než polovinu množství mincí použitých pro staking. Útočník nemusí přímo vlastnit všechny ADA coiny potřebné k útoku, ale může zneužít delegované coiny.

Závěr

Konsensus je v podstatě jen soubor pravidel, která rozhodují o stavu účetní knihy. Schéma Key-Evolving Signature (KES) a kryptografie Verifiable Random Function (VRF) se používají k hlasování o vedoucích slotů a k ochraně účetní knihy před přepsáním. V článku to nebylo výslovně zmíněno, ale klíče KES používané k podepisování bloků jsou pravidelně mazány, což je další významnou překážkou pro útočníka, který se snaží přepsat historii Cardano knihy.

Každý uzel se chová autonomně a udržuje své vlastní verze účetní knihy a lokální stav. Ví tedy, jak se stake postupně měnil, zná všechny vedoucí slotů, umí ověřovat podpisy bloků a zná aktuální (místní) stav. Proti tomu všemu útočník bojuje.

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

Přečtěte si celý článek: https://cexplorer.io/article/understanding-the-cardano-consensus