🇸🇰 Pochopenie bitiek o sloty

Pochopenie bitiek o sloty

Systém PoS spoločnosti Cardano je založený na Nakamotovom konsenze. Preto je možné dosiahnuť len tzv. pravdepodobnostnú konečnosť blokov. Preto sa niekedy stáva, že pooly produkujú bloky, ktoré budú osirelé. Budeme hovoriť o okolnostiach, za ktorých sa to stane, a o tom, ako sa s tým sieť môže vysporiadať.

Ako sa v sieti Cardano razia bloky

Epocha siete Cardano trvá 5 dní a je rozdelená na tzv. sloty s dĺžkou jednej sekundy. V jednej epoche je teda 432 000 slotov. Náhodnosť protokolu Cardano je nakonfigurovaná tak, aby sa blok vytvoril približne každých 20 sekúnd. V každej epoche sa teda môže vytvoriť približne 21 600 blokov.

Každý zaregistrovaný pool je potenciálny kandidát, ktorý môže vyťažiť blok v konkrétnom slote. Uzol, ktorý získa právo raziť blok, sa nazýva vedúci slotu. Výber lídrov slotov musí byť náhodný. V sieti prebieha lotéria, ktorá nie je závislá od žiadnej centrálnej kontroly. Jednotlivé uzly môžu autonómne zistiť, či vyhrali v lotérii v danom slote, t. j. či môžu vyrobiť nový blok.

Na vylosovanie lídra slotu sa používa kryptografický primitív nazývaný overiteľná náhodná funkcia (VRF). VRF zaviedli Micali, Rabin a Vadhan v roku 1999 a používa sa v rôznych kryptografických schémach, protokoloch a systémoch.

Základný koncept VRF je jednoduchý. Vlastník tajného kľúča môže vypočítať výstupnú hodnotu, ako aj súvisiaci dôkaz pre ľubovoľnú vstupnú hodnotu. Každý iný môže pomocou dôkazu a súvisiaceho verejného kľúča (overovacieho kľúča) skontrolovať, či bola výstupná hodnota skutočne vypočítaná správne.

V sieti Cardano môže bloky raziť len uzol, ktorý vytvorí potrebný certifikát a uloží ho do blockchainu. Prostredníctvom registračných certifikátov sú v blockchaine uložené všetky potrebné informácie (vrátane overovacích kľúčov). Všetky uzly tak majú všetky relevantné informácie na overenie blokov (a dôkazov) vytvorených inými uzlami.

Keď uzol dostane blok zo siete, môže si overiť, či je platný prostredníctvom dôkazu VRF a či ho vytvoril uzol, ktorý bol v danom slote skutočne lídrom.

Algoritmus VRF prijíma viacero vstupov, aby mohol vyhodnotiť, či sa daný uzol stal lídrom slotu v konkrétnom slote. Okrem iných medzi ne patrí ID aktuálneho slotu a ⅔ všetkých výstupov VRF z predchádzajúcej epochy, z ktorých sa vytvorí jeden hash (hodnota). Tento hash sa tiež nazýva Nonce. Nonce znemožňuje vypočítať výsledky VRF príliš dopredu.

Každý uzol si musí vypočítať svoje prahové číslo. Je to jednoduchá úloha, pretože sa odvodzuje od veľkosti podielu. Stávka sa skladá z mincí ADA prevádzkovateľa (zástava) a všetkých stávkujúcich. Čím väčší je vklad, tým viac blokov môže fond v danej epoche vyprodukovať.

Každú sekundu každý pool využíva algoritmus VRF na získanie výstupu VRF. Výstup VRF sa porovnáva s prahovou hodnotou. Ak je výstup VRF menší ako prahová hodnota, pool sa stal lídrom slotu a získava právo raziť nový blok.

V našom príklade sa vedúcim slotu stal uzol 7. Výstup VRF bol 28 454 834 a prahová hodnota bola 30 000 000. Uzol teda razí nový blok a do hlavičky bloku vloží dôkaz VRF (výstup VRF).

Dôkaz VRF obsiahnutý v navrhovanom bloku sa použije na overenie. Každý iný uzol v sieti používa algoritmus VRF na overenie platnosti bloku. Okrem dôkazu VRF musí byť blok podpísaný kľúčom KES (Key Evolving Signature cryptography). Ide o ďalšiu úroveň zabezpečenia, takže ak by sa útočníkovi podarilo nejakým spôsobom prelomiť fungovanie VRF, stále nemá k dispozícii kľúče KES prevádzkovateľa na podpisovanie blokov.

Kto vyhrá v bitke o slot?

Bitka o slot nastane, keď 2 pooly minú blok v tom istom slote. V jednom slote sú teda dvaja lídri. Teda potenciálne dva konkurenčné bloky. V danom slote môže byť do blockchainu vložený len jeden blok, takže jeden z nich musí byť vyradený. Hovorí sa, že ten druhý osireje.

V našom príklade sa lídrom slotu stal NODE 7, pretože výstup VRF bol 28 454 834, čo je menej ako prahová hodnota 30 000 000. V tom istom slote sa lídrom slotu stal aj uzol 3, ktorého výkon VRF bol 16 459 996, čo je menej ako prahová hodnota 27 500 000.

Oba uzly vyrazia nový blok, vložia do neho výstup VRF (VRF proof) a distribuujú ho ostatným uzlom v sieti Cardano. Blok, ktorý je osirelý, sa nezapočítava do odmeny v poole. To znamená, že odmenu za blok vytvorený v tom istom slote môže získať len jeden pool.

Ak je distribúcia bloku rýchla (nízke oneskorenie), je pravdepodobné, že oba bloky dostane mnoho ďalších uzlov v sieti. Takže blok vyrazený uzlom 7 s výstupom VRF 28 454 834 a blok vyrazený uzlom 3 s výstupom VRF 16 459 996.

Ak uzol dostane dva platné bloky pre jeden slot, vyberie si ten s nižším výstupom VRF. Uzol blok s vyšším dôkazom VRF zahodí, čím ho v podstate osirí. Bloky s nižším vkladom majú v boji o sloty výhodu, pretože je väčšia šanca, že sa vytvorí nižší výstup VRF.

Pravdepodobne už viete, že v našom príklade vyhral červený blok vyrazený uzlom 3 nad zeleným blokom z uzla 7.

Ak dôjde k bitke o slot, víťaza určí náhoda. Prevádzkovatelia poolu nemajú šancu ovplyvniť výber bloku, ktorý sa deje v iných uzloch siete, pokiaľ sa správajú čestne.

Z pohľadu blockchainu vyzerá situácia nasledovne. V slote N+40 došlo k bitke o slot. Uzol dostane dva bloky vyrazené v tom istom slote. Vyberie si červený blok ako posledný blok v blockchaine a zelený blok zahodí. Ďalší blok je vyrazený v slote N+60 a líder slotu správne nasledoval červený blok. S každým ďalším pridaným blokom je zrejmejšie, že reťazec za červeným blokom zostane v blockchaine navždy, zatiaľ čo zelený blok zostane osirelý.

Ako sme spomenuli na začiatku, v jednej epoche možno vyťažiť približne 21 600 blokov. Najlepší výsledok v niekoľkých posledných epochách bol 21 417 blokov vyrazených v epoche 411. Zvyčajne sa v epochách vyťaží približne 20 900 až 21 11 blokov. Uzol sa môže stať lídrom slotu a z nejakého dôvodu nemusí byť schopný vyraziť blok (napríklad preto, že v čase, keď sa stal lídrom slotu, nie je online).

Bitky o sloty sa vyskytujú relatívne často, približne 420 v každej epoche, t. j. približne 4 každú hodinu. Je to približne 2 % z celkového počtu blokov. Preto je dobré počkať niekoľko blokov, než blok s vašou transakciou budete považovať za konečný. Ak sú za hodinu približne 4 bitky o sloty, dovolím si tvrdiť, že čakanie 6 blokov (2 minúty) je dostatočne dlhé na to, aby ste si boli istí, že blok je finálny.

Záver

Blok sa môže stať osirelým aj z iného dôvodu. Ak sa nedostane do uzla, ktorý sa stane vedúcim slotu, dostatočne rýchlo, vedúci slotu je nútený nasledovať predchádzajúci blok (posledný dostupný). O tom budeme hovoriť nabudúce.


Pôvodný článok: Understanding slot battles | Cardano Explorer (cexplorer.io)