🇨🇿 Jak probíhají slot bitvy

Cardaní PoS je založen na Nakamotově konsensu, který umožňuje pouze dosažení pouze tzv. pravděpodobnostní finality bloků. Proto se někdy stává, že pooly produkují bloky, které osiří. Řekneme si, za jakých okolností k tomu dochází a jak se s tím může síť vypořádat.

Jak se razí bloky v síti Cardano

Cardano epocha trvá 5 dní a je rozdělena do tzv. slotů o délce jedné sekundy. V epoše je tedy 432,000 slotů. Náhodnost protokolu Cardano je nakonfigurována tak, aby vytvořila blok přibližně každých 20 sekund. V každé epoše tak lze vytvořit přibližně 21,600 bloků.

Každý registrovaný pool je potenciálním kandidátem, který může razit blok v konkrétním slotu. Uzel, který získá právo razit blok, se nazývá vedoucí slotu. Výběr vedoucích slotů musí být náhodný. V síti běží loterie, která není závislá na žádném centrálním řízení. Jednotlivé uzly mohou autonomně zjistit, zda v daném slotu vyhrály loterii, tedy zda mohou vyrobit nový blok.

K vylosování vedoucího pozice slotu se používá kryptografické primitivum nazývané Verifiable Random Function (VRF). VRF byl představili Micali, Rabin a Vadhan v roce 1999 a používá se v různých kryptografických schématech, protokolech a systémech.

Základní koncept VRF je jednoduchý. Vlastník tajného klíče může vypočítat výstupní hodnotu a také související důkaz pro jakoukoli vstupní hodnotu. Všichni ostatní mohou pomocí důkazu a souvisejícího veřejného klíče (ověřovacího klíče) zkontrolovat, zda byla výstupní hodnota skutečně vypočtena správně.

V síti Cardano může razit bloky pouze uzel, který vytvoří potřebný certifikát a uloží jej do blockchainu. Prostřednictvím registračních certifikátů jsou všechny potřebné informace (včetně ověřovacích klíčů) uloženy v blockchainu. Všechny uzly tak mají všechny relevantní informace pro ověření bloků (a důkazů) vytvořených jinými uzly.

Když node obdrží ze sítě blok, může ověřit, že je validní skrze VRF důkaz a že byl vytvořený nodem, který byl v daném slotu opravdu lídrem.

Algoritmus VRF potřebuje více vstupů, aby mohl vyhodnotit, zda se daný uzel stal lídrem slotu v konkrétním slotu. Kromě jiného mezi ně patří aktuální ID slotu a ⅔ všech výstupů VRF z předchozí epochy, ze kterých je vytvořen jeden hash (hodnota). Tento hash se také nazývá Nonce. Nonce znemožňuje vypočítat výsledky VRF s velkým předstihem.

Každý uzel potřebuje vypočítat své prahové číslo. Je to snadný úkol, protože je odvozen od velikosti stake. Stake se skládá z ADA coinů operátora (závazek) a všech delegátů. Čím větší stake, tím více bloků může pool v dané epoše vyprodukovat.

Každý pool využívá každou sekundu algoritmus VRF k získání výstupu VRF. Výstup VRF je porovnán s prahovou hodnotou. Pokud je výstup VRF nižší než prahová hodnota, pool se stal lídrem slotu a získává právo razit nový blok.

V našem příkladu se NODE 7 stal lídrem slotu. Výstup VRF byl 28 454 834 a prahová hodnota byla 30 000 000. Takže uzel vyrazí nový blok a vloží VRF proof (výstup VRF) do hlavičky bloku.

Pro ověření se používá VRF důkaz obsažený v navrhovaném bloku. Jakýkoli jiný uzel v síti používá algoritmus VRF k ověření platnosti bloku. Kromě VRF důkazu musí být blok podepsán klíčem KES (Key Evolving Signature cryptography). Toto je další úroveň zabezpečení, takže pokud by útočník dokázal nějakým způsobem narušit fungování VRF, stále nemá klíče KES operátora k podepsání bloků.

Kdo vyhraje bitvu o sloty?

Bitva o slot nastane, když 2 pooly vyrazí blok ve stejném slotu. V jednom slotu jsou tedy dva vedoucí slotů. Tedy dva konkurenční bloky. Do blockchainu může přibýt pouze jeden blok pro jeden slot, takže jeden z nich musí být vyřazen. Říká se že ten druhý blok osiří.

V našem příkladu se NODE 7 stal lídrem slotu, protože výstup VRF byl 28 454 834, což je méně než prahová hodnota 30 000 000. Ve stejném slotu se také NODE 3 stal lídrem slotu s výstupem VRF 16 459 996, což je méně než prahová hodnota 27 500 000.

Oba uzly vyrazí nový blok, vloží do něj VRF výstup (VRF proof) a rozesílají jej do dalších uzlů v síti Cardano. Blok, který je osiřelý, se nezapočítává do odměny. To znamená, že pouze jeden pool může získat odměnu za blok vyrobený ve stejném slotu.

Pokud je distribuce bloků rychlá (malé zpoždění), je pravděpodobné, že mnoho dalších uzlů v síti přijme oba bloky. Tedy blok ražený NODE 7 s VRF výstupem 28 454 834 a blok ražený NODE 3 s VRF výstupem 16 459 996.

Pokud uzel obdrží dva platné bloky pro jeden slot, vybere si ten s nižším výstupem VRF. Uzel zahodí blok s vyšší odolností proti VRF, čímž se v podstatě stane osiřelým. Pools s nižší stake mají výhodu v bitvě o sloty, protože je větší šance, že bude produkován nižší VRF výstup.

Asi už víte, že v našem příkladě vyhrál červený blok vymintovaný NODEM 3 nad zeleným blokem od NODE 7.

Pokud dojde k bitvě o slot, vítěz je určen náhodností. Operátoři poolu nemají šanci ovlivnit výběr bloků jinými uzly, pokud se ti chovají čestně.

Z pohledu blockchainu vypadá situace takto. Ve slotu N+40 proběhla bitva o sloty. Uzel obdrží dva bloky vyražené ve stejném slotu. Vybere si červený blok jako poslední blok v blockchainu a zelený zahodí. Další blok je vyražen ve slotu N+60 a slot lídr uzel správně následoval červený blok. S každým dalším přidaným blokem je jasnější, že řetězec za červeným blokem zůstane v blockchainu navždy, zatímco zelený blok zůstane osiřelý.

Jak jsme zmínili na začátku, za epochu lze vyrazit zhruba 21 600 bloků. Nejlepší výsledek v posledních několika epochách byl 21 417 bloků vyražených v epoše 411. Obvykle se v epochách razí kolem 20 900 až 21,11 bloků. Uzel se může stát vedoucím slotu a z nějakého důvodu nemusí být schopen razit blok (například proto, že v době, kdy se stal vedoucím slotu, není online).

Slotové bitvy se vyskytují relativně často, asi 420 v každé epoše, tedy asi 4 každou hodinu. Jsou to asi 2 % z celkového počtu bloků. Je proto dobré počkat několik bloků, než budete blok s vaší transakcí považovat za konečný. Pokud se odehrají cca 4 bitvy o sloty za hodinu, troufám si tvrdit, že čekání 6 bloků (2 minuty) je dostatečně dlouhá doba na to, abyste měli jistotu, že blok je konečný.

Závěr

Blok může osiřet z jiného důvodu. Pokud nedosáhne dostatečně rychle uzel, který se stane vedoucím bloku, bude vedoucí bloku nucen následovat předchozí blok (poslední dostupný). O tom si povíme příště.

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

Přečtěte si článek v AJ: https://cexplorer.io/article/understanding-slot-battles