🇨🇿 Mintování Cardano blokůe

V síti Cardano mohou vytvářet bloky pouze uzly, které byly náhodně vylosovány v daných slotech a jejichž registrační certifikáty byly uloženy v blockchainu. Musí být ověřitelné, že nově navržené bloky byly raženy uzlem, který vyhrál v loterii a byl k tomu oprávněn. Přijďte se dozvědět, jak se razí nové bloky a jak se ověřují.

Proč je nutné ověřovat bloky?

Na každou veřejnou blockchainovou síť jsou kladeny požadavky na decentralizaci a zabezpečení. V souvislosti s výrobou bloků to znamená, že musí být zavedena náhodná loterie pro výběr výrobců bloků a mechanismus pro ověřování bloků.

Blockchainové sítě jsou navíc otevřené, takže kdokoli se může dobrovolně a zcela anonymně připojit a začít vyrábět bloky. Mohou to udělat i subjekty, které chtějí síť úmyslně napadnout. Je proto nutné definovat pravidla provozu sítě (protokol). Dokud se bude většina uzlů v síti chovat podle pravidel (protokolu), bude pro síť snadné eliminovat útoky a pravidelně přidávat nové platné bloky do blockchainu.

Většina současných blockchainů funguje tak, že v daném časovém období jeden uzel vyrobí blok a všechny ostatní uzly tento blok ověří. Navrhovaný blok může být buď přijat (pokud je platný) nebo vyřazen. Pokud se v daném časovém období objeví více bloků, musí existovat pravidlo, které určí, který blok se má přidat na konec blockchainu (stane se posledním blokem). Pravidlo může být závislé na přidání více nových bloků (pravidlo delšího řetězce).

Ověření bloku obvykle spočívá v ověření konkrétního kryptografického důkazu, že blok byl vytvořen uzlem, který vyhrál loterii. Další údaje v hlavičce bloku lze ověřit. Například pro ověření pravosti a integrity bloku.

Každý blok se skládá ze záhlaví a těla (obsahu). Ověřuje se i obsah bloku, tedy ověřují se transakce. Blok může mít platnou hlavičku, ale pokud je obsah bloku neplatný, nemůže být platný ani blok. Tento článek se zaměřuje na produkci bloků, takže obsah bloku nás zajímat nebude. Potřebujeme pouze data v hlavičce bloku.

Blockchain lze považovat za decentralizovaný a bezpečný, pokud je široká sada nezávislých uzlů schopna připojovat bloky a útočník není schopen tento proces jakkoli narušit. Poctivé uzly jsou schopny v pravidelných intervalech dosáhnout síťového konsenzu.

Jak Cardano dělí čas

Cardano rozděluje čas na úseky trvající jednu sekundu a epochy trvající 5 dní. Jedna epocha trvá 432 000 slotů.

Při přechodu mezi epochami se pořizuje tzv. snímek (snapshot).

Snímky jsou vytvářeny uzly, které se aktivně účastní Cardano konsensu (tedy výroby bloků). Snímky jsou pořizovány na konci každé epochy a zaznamenávají distribuci stake a stav delegování v síti.

Stakeři mohou delegovat kdykoliv během epochy, takže stake jednotlivých poolů a jejich počet (nové registrace stake poolu) se může neustále měnit. Stav odrážející změny se nazývá živý stake (live stake). Uzly účastnící se síťového konsensu pracují se stavem, který je pořízen během snapshotů, který se nazývá aktivní stake. Snímky poskytují systému zabezpečení, stabilitu a předvídatelnost.

Na obrázku níže můžete vidět snímek (kandidát na aktivní stake) pořízený během přechodu mezi epochami. Všimněte si slotů, které jsou rozděleny 20sekundovými intervaly. Náhodnost v Cardano je nastavena tak, že přibližně každých dvacet slotů je vyroben nový blok. Někdy může být časový interval mezi bloky (počet slotů) kratší, někdy delší.

Na každém uzlu probíhá soukromá loterie v každém slotu nezávisle na ostatních. Pokud uzel (nebo více uzlů) zjistí, že získal právo razit blok, stává se tzv. slot leaderem. K podrobnostem se vrátíme později.

Vraťme se do epoch, abychom vysvětlili další detail. Na obrázku níže probíhá epocha N+3 (zelený obdélník). Poslední snímek byl pořízen mezi přechodem mezi epochami N+2 a N+3, ale není použit jako aktivní stake. Jako aktivní stake se používá snímek pořízený na začátku předchozí epochy N+2. Tento snímek odráží stav epochy N+1 (modrý obdélník).

Stav rozdělení stake a delegování ze snímku, který byl pořízen na začátku předchozí epochy, se v aktuálním období používá jako aktivní stake. Jinými slovy, předchozí snímek je použit jako aktivní stake.

Jedním z hlavních důvodů tohoto pravidla je, že od pořízení předchozího snímku uplynulo dost času (5 dní), aby bylo zaručeno, že se bloky v blockchainu (včetně obsahu) nezmění.

Příprava uzlu pro ražbu a ověřování bloků

Náhodné loterie a ražba bloků jsou založeny na kryptografii v Cardano. Pro náhodnou loterii se používá kryptografické primitivum Verifiable Random Function. Key-Evolving Signature schéma pro podepisování bloků a zajištění neměnnosti historie blockchainu.

V tomto článku se nebudeme zabývat kryptografickými detaily, ale pouze praktickým využitím pro ražbu a ověřování bloků. Stačí nám vědět, že provozovatelé poolu musí vytvořit několik párů klíčů, které jim umožní vytvořit potřebné certifikáty pro registraci poolu a provoz block-producer uzlu.

Každý provozovatel fondu musí vytvořit následující páry klíčů.

  • Pár klíčů pro stake pool (studený klíč)
  • Pár klíčů pro Key-Evolving Signature (KES) (teplý klíč)
  • Pár klíčů pro Verification Random Function (VRF) (teplý klíč)
  • Pár klíčů pro Stake address key (studený klíč)

Každý pár klíčů se skládá ze soukromého klíče (podpisového klíče), který musí vlastník (tj. provozovatel poolu) udržovat v tajnosti. Dále z veřejného klíče (ověřovacího klíče), který lze publikovat. Na obrázcích bude podpisový klíč zobrazen červeně a ověřovací klíč zeleně.

Všechny uzly poolu používají podpisový VRF klíč pro soukromou loterii a podpisový klíč KES pro podepisování nově ražených bloků.

Na obrázku níže vidíte provozovatele poolu, který vytvořil všechny potřebné klíče pro obsluhu poolu. Vložil podpisové klíče VRF a KES do horkého úložiště v uzlu. Všimněte si, že pro identifikaci poolu (ID) se používá ověřovací klíč poolu. Pro výběr odměn z účtu odměny slouží podpisový klíč stake adresy.

Aby bylo ověření možné, musí být ověřovací klíče VRF a KES dostupné všem uzlům v síti. Kromě toho je nutné, aby klíče byly správně přiřazeny ke konkrétnímu operátorovi poolu. Toho je dosaženo prostřednictvím ID (klíče podílového poolu). Certifikáty se používají k distribuci klíčů.

Všichni provozovatelé poolu musí pool zaregistrovat a vložit do něj (mimo jiné) ověřovací VRF klíč. Musí také vytvořit certifikát operačního klíče a vložit do něj ověřovací klíč KES (nazývaný také operační klíč). Všechny certifikáty jsou distribuovány prostřednictvím transakcí Cardano a jsou uloženy v blockchainu.

Na obrázku níže vidíte provozovatele poolu, který vytvořil registrační certifikát poolu a certifikát provozního klíče a vložil do nich požadované veřejné klíče. Dodejme, že oba certifikáty musí být podepsány podpisovým klíčem stake poolu.

Držitelé ADA delegují své stakes do vybraných poolů prostřednictvím dvojice certifikátů, certifikátu o registraci stake adresy a certifikátu o delegování. Tyto certifikáty jsou také uloženy v blockchainu. Delegované ADA coiny zvyšují celkové stake poolů.

Na obrázku níže můžete vidět uživatele, který vytvořil certifikáty potřebné pro delegování stake. Všimněte si, že klíč (ID) poolu je součástí certifikátu delegování.

Na obrázku níže můžete vidět, jak stakeři a provozovatelé poolu předkládají certifikáty blockchainu prostřednictvím transakcí během epochy. Certifikáty zůstanou uloženy v jednotlivých blocích (včetně všech ověřovacích klíčů). Obrázek je pouze ilustrativní. Blok může obsahovat více certifikátů. Vytvoří se také snímek, který bude odrážet distribuci stake a stav delegování sítě pro danou epochu.

Aby byl uzel připraven ověřit bloky navržené jinými nody v síti, musí udržovat místní stav se všemi potřebnými informacemi. Uzel musí být schopen rychle ověřit příchozí bloky bez zbytečného hledání informací v blockchainu.

Uzly sledují sadu aktivních adres stakes. Sledovaná data obsahují credentials (klíč nebo hash skriptu) z každého certifikátu o registraci stake adresy. Uzly aktualizují sadu na základě ověření transakcí v příchozích blocích. Uzly jsou schopny ověřit transakce, které vybírají odměny za stake z účtů odměn (součást každé registrované stake adresy).

Uzly sledují sadu aktivních poolů, které indexují na základě ověřovacích klíčů stake poolů (přesněji hashů klíčů). Dále uzel sleduje informace týkající se certifikátů operačních klíčů, včetně počítadla, které představuje sériové číslo certifikátu. Platný je pouze certifikát s nejvyšším číslem čítače (všechny starší certifikáty s nižším číslem čítače jsou neplatné).

Uzly sledují aktivní delegovací certifikáty (všechny stake adresy, které jsou delegovány na hash ověřovacích klíčů stake poolu (ID).

Aby bylo možné hrát loterii o slot lídra a vypočítat odměny za staking za epochu, musí uzly vědět, kolik stakes je delegováno do poolů. Toto je součet všech stake adres delegovaných na každý jednotlivý klíč ověřovací stake pool klíč (opět hash klíčů).

Na obrázku níže můžete vidět uzel, který udržuje místní stav se všemi nezbytnými informacemi, které potřebuje udržovat pro ověření bloků (a transakcí). Všimněte si, že uzel ví o všech registrovaných poolech a zná hash klíčů stake poolů a jejich celkové stake. Ví také o všech aktivních KES (provozních) a VRF klíčích.

Některé sady jsou neustále aktualizovány (například sada UTxO se mění s každým nově přidaným blokem), zatímco jiné odkazují na předchozí snímek (aktivní stake). Aby bylo zajištěno, že všechny uzly budou pracovat se stejným stavem výroby bloků, nelze použít živý stake.

Nyní víte, co je nutné pro uzel, aby mohl razit nové bloky a ověřovat ty, které navrhují jiné pooly.

Ražba bloku

Představte si, že v několika předchozích slotech nebyl zvolen žádný vůdce slotů. Nové kolo loterie pro aktuální slot nyní probíhá soukromě na každém poolu. Jedná se o soukromou loterii, protože je nutné použít podpisový VRF klíč, který má k dispozici pouze provozovatel poolu a nikdo jiný (pokud není klíč kompromitován).

Aby uzel mohl určit, zda se stane vedoucím bloku, musí použít funkci VRF. Funkce VRF přijímá několik parametrů jako vstup a vytváří výstup VRF. Vstupem pro funkci VRF je ID slotu (aktuální slot), Nonce a podpisový klíč VRF (je uložen v horkém úložišti v uzlu).

Nonce se vypočítá jako XOR dvou hodnot: epochální nonce a extra entropie. Epocha nonce je hash, který je vytvořen použitím prvních 2/3 výstupů VRF z bloků, které byly vytvořeny v předchozí epoše. Extra entropie je volitelná hodnota, kterou může vložit kdokoli, kdo předloží platný registrační certifikát pro stake pool s neprázdným polem nonce. Extra entropie může být použita ke zvýšení náhodnosti a bezpečnosti systému nebo k zotavení z ohrožené epochy nonce.

Funkce VRF na každém uzlu generuje náhodný výstup (Y) a důkaz (⍴) pro aktuální slot. Uzel porovnává výstup VRF s prahovou hodnotou, která závisí na jeho celkové stake. Pokud je výstup pod prahovou hodnotou, uzel je zvolen jako vedoucí slotu a může v tomto slotu razit blok.

Na obrázku níže můžete vidět, jak všechny pooly v síti hrály loterii v daném slotu a porovnaly výstup VRF s prahem. Uzel 7 se stal lídrem slotu.

Ve většině případů je ve slotu zvolen pouze jeden vedoucí slotu. Předpokládejme, že i v našem scénáři. Vedoucí slotu má právo postavit blok. Uzel musí vytvořit hlavičku bloku a vložit do těla platné transakce.

Node vloží tyto informace do hlavičky bloku.

  • Číslo bloku, což je pořadové číslo bloku v řetězci.
  • Číslo slotu (ID slotu), ve kterém byl blok ražen.
  • Hash předchozího bloku, což je hash záhlaví předchozího bloku v ledgeru.
  • Vydavatel bloku. Je to ověřovací klíč provozovatele stake poolu, který blok razil.
  • Výstup VRF (Y) a důkaz (⍴).
  • Velikost bloku, což je velikost bloku v bajtech.
  • Hash těla bloku. Je to hash těla (transakce a data).
  • Provozní certifikát.
  • Verze protokolu. Je to verze parametrů protokolu, které se používají pro validaci bloku.

Blok můžete vidět na obrázku níže. Nenechte se zmást velikostí proporcí. V praxi je hlavička bloku podstatně menší než tělo bloku. V prvním kroku se pomocí funkce VRF zjistí, zda se daný uzel stal vedoucím slotu. Pokud ano, uzel vloží všechna potřebná data do bloku hlavičky a podepíše blok podpisovým klíčem KES (uloženým v horkém úložišti na uzlu).

Podepsaný blok je připraven k odeslání do sítě Cardano. Blok bude celosvětově distribuován do všech ostatních uzlů Cardano prostřednictvím reléových uzlů. Ostatní uzly začínají ověřením informací v hlavičce bloku a pokud je to v pořádku, pokračujte v ověření těla.

Ověření bloku

Ověření navrženého bloku je pro uzly velmi snadnou záležitostí, protože všechny potřebné informace (včetně kryptografického materiálu) mají připraveny v aktivních sadách.

Blokování bude považováno za platné, pokud jsou splněny následující podmínky:

Výsledkem VRF je náhodná hodnota, která určuje způsobilost provozovatele poolu razit blok v daném slotu. Důkaz VRF je kryptografický důkaz, který ukazuje, že výsledek VRF byl vygenerován operátorem poolem pomocí jejich páru klíčů VRF. Obojí lze snadno ověřit.

Uzel, který se chystá ověřit příchozí blok, potřebuje znát nonce aktuální epochy. Není to problém, protože všechny poctivé uzly používají stejné nonce (použily k tomu stejný proces). Uzel používá ověřovací algoritmus VRF ke kontrole, zda se výsledek VRF a důkaz shodují s veřejným klíčem VRF (je převzat z aktivní sady) a epochou nonce. Uzel také kontroluje, zda je výsledek VRF pod prahovou hodnotou, která závisí na stake uzlu, který navrhl blok. Pokud tyto kontroly projdou, uzel akceptuje, že kandidát na blok byl vyražen platným vedoucím slotu.

Je důležité si uvědomit, že toto ověření bude úspěšné pouze v případě, že se pool se stejným klíčem (ID) zaregistroval, což muselo proběhnout nejpozději v epoše odpovídající použitému snímku (aktivní stake).

Další součástí ověření je kontrola podpisu KES. Navrhovaný blok musí v záhlaví obsahovat certifikát ověřovacího klíče. Pamatujte, že uzly mají seznam aktivních certifikátů operačních klíčů dostupných ve svém místním stavu.

Čítač certifikátu operačního klíče v bloku nesmí být menší než čítač certifikátu operačního klíče v aktivní sadě uzlu, který blok ověřuje.

Na obrázku níže můžete vidět, jak uzel ověřuje hlavičku nově příchozího bloku, k čemuž využívá informace, které si připravil na základě certifikátů uložených v blockchainu.

Závěr

Ražba bloků je navržena tak, aby v daném slotu nemohl razit blok nikdo jiný než vedoucí slotu. K tomu musí být uzel registrován v blockchainu prostřednictvím certifikátu a mít dostatečně velký celkový stake. Navíc musí mít platný KES klíč pro dané období KES (privátní klíč pro podepisování bloků se v pravidelných intervalech mění kvůli ochraně historie blockchainu). Veškerý kryptografický materiál pro ověření bloků je k dispozici všem účastníkům blockchainu. Uzly nepřijímají blok, který neprojde ověřením.

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

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