Ergo a konsenzusný mechanizmus Autolykos: Časť II

This page is machine-translated.
Ergo Platform

20. júna 2022

Minulý týždeň sme predstavili hĺbkovú analýzu konsenzusného mechanizmu Autolykos v Ergu. S týmto článkom dokončujeme druhú časť tejto diskusie a ponoríme sa do ďalších podrobností. Pred čítaním tohto dokumentu sa odporúča, aby si čitatelia pozreli Časť I.

Na pripomenutie, tu sú pseudokódy pre ťažbu blokov a hashovaciu funkciu.

Pseudokód ťažby blokov Autolykos
unnamed (4).png

Hashovacia funkcia založená na Blake2b256
unnamed (5).png

Riadky 3, 4 – začiatok cyklu while a hádanie

Po vypočítaní listu R miner vytvorí nonce hádanie a vstúpi do cyklu, aby otestoval, či nonce nakoniec vytvorí výstup, ktorý je pod danou cieľovou hodnotou.

Riadky 5, 6 – semeno pre generovanie indexov

Riadok 5, i = takeRight(8, H(m||nonce)) mod N, produkuje celé číslo v [0,N). Algoritmus 3 sa využíva, ale s m a nonce ako vstupmi. Akonáhle je hash H(m||nonce) vrátený, 8 najmenej významných bajtov sa uchová a potom prejde cez mod N. Ako poznámku, najvyššia možná celočíselná hodnota s 8 bajtmi je 264 – 1, a predpokladajme, že N = 226, 8-bajtový hash mod N bude mať za následok, že prvé niekoľko číslic bude nula. Počet núl v i klesá, keď N rastie.

Riadok 6 produkuje e, semeno pre generovanie indexov. Algoritmus 3 sa volá s vstupmi i (vygenerovaným v riadku 5), h a M. Potom sa najvýznamnejší bajt numerického hashu zahodí a zostávajúcich 31 bajtov sa uchová ako hodnota e. Je tiež potrebné poznamenať, že hodnota e môže byť získaná z listu R namiesto toho, aby bola vypočítaná, pretože e je hodnota r.

Riadok 7 – generátor indexov

Element index J je vytvorený pomocou Algoritmu 6 s vstupmi e, m, a nonce. Funkcia genIndexes je pseudonáhodná jednosmerná funkcia, ktorá vracia zoznam k (=32) čísel v [0,N).

funkcia genIndexes
unnamed (6).png

Existuje niekoľko ďalších krokov, ktoré nie sú zobrazené v pseudokóde, ako napríklad výmena bajtov. Vytvorenie a aplikácia genIndexes môžu byť vysvetlené prostredníctvom nasledujúceho príkladu:

GenIndexes(e||m||nonce)...

hash = Blake2b256(e||m||nonce) = [0xF963BAA1C0E8BF86, 0x317C0AFBA91C1F23, 0x56EC115FD3E46D89, 0x9817644ECA58EBFB]

hash64to32 = [0xC0E8BF86, 0xF963BAA1, 0xA91C1F23, 0x317C0AFB, 0xD3E46D89 0x56EC115F, 0xCA58EBFB, 0x9817644E]

extendedhash (t.j. výmena bajtov a spojenie 4 bajtov opakovaním prvých 4 bajtov) = [0x86BFE8C0, 0xA1BA63F9, 0x231F1CA9, 0xFB0A7C31, 0x896DE4D3, 0x5F11EC56, 0xFBEB58CA, 0x4E641798, 0x86BFE8C0]

Nasledujúci python kód ukazuje proces krájania rozšíreného hashu, vracajúceho k indexy. V tomto príklade predpokladáme, že h < 614,400, takže N = 226 (67,108,864).

Krájanie a mod N[1]
for i in range(8):
idxs[i << 2] = r[i] % np.uint32(ItemCount)
idxs[(i << 2) + 1] = ((r[i] << np.uint32(8)) | (r[i + 1] >> np.uint32(24))) % np.uint32(ItemCount)
idxs[(i << 2) + 2] = ((r[i] << np.uint32(16)) | (r[i + 1] >> np.uint32(16))) % np.uint32(ItemCount)
idxs[(i << 2) + 3] = ((r[i] << np.uint32(24)) | (r[i + 1] >> np.uint32(8))) % np.uint32(ItemCount)

Hlavný záver je, že krájanie vracia k indexy, ktoré sú pseudonáhodné hodnoty odvodené zo semena, t.j. e, m, a nonce.

return [0x2BFE8C0, 0x3E8C0A1, 0xC0A1BA, 0xA1BA63, 0x1BA63F9, 0x263F923, 0x3F9231F, 0x1231F1C, 0x31F1CA9, 0x31CA9FB, 0xA9FB0A, 0x1FB0A7C, 0x30A7C31, 0x27C3189, 0x31896D, 0x1896DE4, 0x16DE4D3, 0x1E4D35F, 0xD35F11, 0x35F11EC, 0x311EC56, 0x1EC56FB, 0x56FBEB, 0x2FBEB58, 0x3EB58CA, 0x358CA4E, 0xCA4E64, 0x24E6417, 0x2641798, 0x179886, 0x39886BF, 0x86BFE8]

Tento index môže byť preložený na hodnoty v desiatkovej sústave, pretože sa odvoláva na čísla v [0, N). Napríklad, 0x2BFE8C0 = 46131392, 0x3E8C0A1 = 65585313, 0xC0A1BA = 12624314, a tak ďalej. Miner používa tieto indexy na získanie k r hodnôt.

Funkcia genIndexes zabraňuje optimalizáciám, pretože je mimoriadne ťažké, v podstate nemožné, nájsť semeno, tak aby genIndexes(seed) vrátil požadované indexy.

Riadok 8 – súčet r prvkov daných k

Použitím indexu generovaného v riadku 7, miner získa zodpovedajúce k (=32) r hodnoty z listu R a tieto hodnoty sčíta. To môže znieť mätúco, ale poďme to rozobrať.

Pokračujúc v príklade vyššie, miner uchováva nasledujúce indexy:

{0 | 46,131,392},
{1 | 65,585,313},
{2 | 12,624,314},
{3 | 10,599,011},

{31 | 8,830,952}

Na základe vyššie uvedených indexov miner získa nasledujúce r hodnoty z listu R uloženého v pamäti.

{0 | 46,131,392} → dropMsb(H(46,131,392||h||M))
{1 | 65,585,313} → dropMsb(H(65,585,313||h||M))
{2 | 12,624,314} → dropMsb(H(12,624,314||h||M))
{3 | 10,599,011} → dropMsb(H(10,599,011||h||M))

{31 | 8,830,952} → dropMsb(H(8,830,952||h||M))

Poznámka, že Takeright(31) operovaný na 32-bajtovom hashi môže byť tiež napísaný ako dropMsb – zahodiť najvýznamnejší bajt.

Keďže miner už uchováva list R v RAM, miner nemusí počítať k (= 32) Blake2b256 funkcií a namiesto toho vyhľadáva hodnoty. Toto je kľúčová vlastnosť odolnosti voči ASIC. ASIC s obmedzenou pamäťou musí vypočítať 32 iterácií Blake2b256, aby získal hodnoty, ktoré mohli byť vyhľadané v pamäti, a získavanie z pamäte trvá oveľa menej času. Nehovoriac o tom, že ASIC s obmedzenou pamäťou by vyžadoval 32 inštancií Blake2b256 fyzicky na die, aby dosiahol jeden hash na cyklus, čo by si vyžadovalo viac priestoru a vyššie náklady. Je jednoduché dokázať, že uchovávanie listu R v pamäti sa oplatí. Predpokladajme nasledujúce, GPU má hashovací výkon G = 100MH/s, _N = 226, k = 32, interval bloku t = 120 sekúnd, a prvky sa vyhľadávajú každé 4 hashe. Rád predpokladám, že prvky sa vyhľadávajú každé 4 hashe, pretože pre každé nonce hádanie vyžaduje viacero prvkov, ako sú i, J, a H(f), ktoré vyžadujú Algoritmus 3, t.j. inštancie blake2b hashu. Môžeme odhadnúť, že každá r hodnota bude použitá v priemere, (G * k * t)/(N*4) = 1430.51 krát.

Akonáhle sú 32 r hodnoty vyhľadané, sčíta sa.

Riadky 9, 10, 11, 12 – skontrolovať, či je hash súčtu pod cieľom

Súčet 32 r hodnôt sa hashuje pomocou Algoritmu 3, a ak je výstup pod cieľom b, PoW je úspešný, m a nonce sú vrátené uzlom siete a miner je odmenený v ERG. Ak je hash súčtu nad cieľom, Riadky 4 – 11 sa opakujú s novým nonce.

Ak ste sa dostali až sem, gratulujeme! Po prečítaní všetkých týchto informácií by ste mali mať dobré pochopenie Autolykos v2! Ak by ste chceli vidieť vizuálnu demonštráciu Autolykos, pozrite si grafiku na konci tohto dokumentu. Ak by ste chceli video vysvetlenie, môžete ho nájsť tu.

Odolnosť voči ASIC

Vieme z Etherea, že „pamäťovo náročné“ algoritmy môžu byť prekonané integráciou pamäte na ASIC. Ergo je iné, ale najprv si zopakujme, prečo je ASIC s obmedzenou pamäťou nekonkurenčný a prečo miner potrebuje uchovávať list R. Riadok 8 ťažby blokov Autolykos odrádza stroje s obmedzenou pamäťou. Ak miner ASIC neuchováva list R, vyžaduje veľa jadier na generovanie 31-bajtových numerických hashov na požiadanie. 32 r hodnoty nemôžu byť efektívne vypočítané pomocou jedného jadra, pretože výstup by bol generovaný iba každých 32. hash cyklu. Na to, aby sa vypočítalo jedno nonce na hash cyklus, je potrebných aspoň 32 inštancií Blake2b256 bežiacich dropMsb(H(j||h||M)). Ako sme už spomenuli, to výrazne zvyšuje veľkosť die a náklady. Je jasné, že uchovávanie listu R sa oplatí, pretože mať 32, alebo dokonca 16, jadier je veľmi drahé. Ešte presnejšie, čítanie z pamäte je rýchlejšie ako počítanie inštancií Blake zakaždým, keď je testované nonce.

Pozrime sa, či je ASIC s dostatočnou pamäťou konkurencieschopný, pretože to je relevantnejšie pre diskusiu. Porovnávaním Ethash a Autolykos je rozdiel v tom, že Ethash zahŕňa N prvkov pri hashovaní nonce a hlavička mixuje 64-krát, zatiaľ čo Autolykos zahŕňa N prvkov pri získavaní 32 r hodnôt na základe generovaných indexov. Pre každý testovaný nonce, Autolykos spúšťa asi 4 inštancie Blake2b256 a 32 vyhľadávaní pamäte, zatiaľ čo Ethash spúšťa asi 65 inštancií SHA-3 a 64 vyhľadávaní pamäte. Nehovoriac o tom, že k je momentálne nastavené na 32, ale táto hodnota môže byť zvýšená na získanie viac r hodnôt, ak je to potrebné. ASIC, ktoré bežia Ethash, majú veľa priestoru na zvýšenie rýchlosti hashovania SHA3, pretože 65 hashov sa dokončuje na každý testovaný nonce v porovnaní s približne 4 na Autolykos. Pomer vyhľadávaní pamäte k inštanciám hashovania je na Autolykos oveľa väčší. Z tohto dôvodu je Autolykos pamäťovo náročnejší ako Ethash, pretože šírka pásma pamäte zohráva oveľa väčšiu úlohu v porovnaní s rýchlosťou hashovania.

Oblasť, kde by sa mohla optimalizovať Autolykos, je naplnenie listu R. Naplnenie listu R vyžaduje N inštancií funkcie Blake2b256. N je veľké a len rastie, takže to je veľa hashovania. ASIC by mohol optimalizovať rýchlosť Blake2b256, čo by viedlo k viac času na ťažbu blokov, pretože list R by bol naplnený skôr. Aj keď sa to dá urobiť, naplnenie listu R si vyžaduje prechádzanie [0, N) a GPU s 32-širokými multiprocesormi už môže naplniť list R veľmi rýchlo (v sekundách). Na to, aby bol ASIC výrazne rýchlejší, by potreboval veľa Blake jadier – opäť, veľmi drahé a pravdepodobne to nestojí za to, pretože úzky bod by sa mohol stať šírkou pásma pamäte zapísať (t.j. zapisovanie listu R do RAM namiesto rýchlosti hashovania).

Posledná oblasť, ktorá môže byť optimalizovaná pre Autolykos, je rýchlosť čítania/zapisovania pamäte. ASIC mineri Ethash majú mierne rýchlejšiu rýchlosť čítania v porovnaní s GPU, pretože pamäť je taktovaná vyššie bez účinku obmedzenia GPU. Avšak tento rozdiel je dosť nevýznamný a očakáva sa, že sa stane ešte nevýznamnejším, keď sa GPU vyvinú. To je preto, že hardvér pamäte je sám o sebe rovnaký: DRAM. Môže sa objaviť otázka, či by sa mohol využiť rýchlejší hardvér pamäte, pri ktorom je rýchlosť čítania a zapisovania pamäte oveľa rýchlejšia… SRAM, napríklad, by mohol byť predstaviteľným ďalším krokom v prekonávaní pamäťovo náročných algoritmov, avšak SRAM nie je realizovateľným riešením jednoducho preto, že je menej husté.

SRAM na FPGA[2]

unnamed (7).png

Na vyššie uvedenej fotografii je FPGA s 8 pamäťovými čipmi na prednej strane a ďalšími 8 na zadnej strane. Celková pamäť SRAM je iba 576MB. Umiestnenie dostatočného SRAM na die nebude fungovať, pretože SRAM bude musieť byť umiestnené ďalej od jadra, pretože nie je dostatočne husté na to, aby sa zmestilo do jednej vrstvy okolo jadra. To môže viesť k oneskoreniam pri čítaní/zapisovaní, pretože elektrina musí prechádzať dlhšie vzdialenosti, aj keď je hardvér sám rýchlejší. Okrem toho, na ťažbu Erga sa požiadavka na pamäť zvyšuje, keď N rastie, takže umiestnenie dostatočného SRAM nie je v priebehu času realizovateľné. Preto nie je vhodné skúmať SRAM ASIC, aj keď by mal niekto dostatok peňazí na samotný SRAM.

Blake2b256

Jedným z hlavných rozdielov medzi algoritmom ako Autolykos a inými je použitie Blake2b256. To nie je náhoda. Blake sa silne spolieha na operácie sčítania pre mixovanie hashov namiesto XOR operácií. Operácia ako XOR môže byť vykonaná bit po bite, zatiaľ čo sčítanie vyžaduje prenášacie bity. Preto Blake vyžaduje viac energie a plochy jadra v porovnaní s SHA algoritmami, ale je stále rovnako bezpečný a v skutočnosti rýchlejší. Ako je uvedené na webovej stránke Blake2, „BLAKE2 je rýchly v softvéri, pretože využíva vlastnosti moderných CPU, a to paralelizmus na úrovni inštrukcií, rozšírenia inštrukčného súboru SIMD a viacero jadier.“[3] Takže, aj keď ASIC môže produkovať inštancie Blake rýchlejšie, vnútorná povaha funkcie obmedzuje optimalizácie tým, že vyžaduje sčítanie a zahŕňa funkcie nájdené v CPU, ako aj GPU.

Rýchlosť Blake2b v porovnaní s inými hashovacími funkciami

unnamed (8).png

Záver

Autolykos je skvelá inovácia, ktorá je nevyhnutnou reakciou na boj proti vzostupu ASIC strojov optimalizovaných pre PoW. Dúfame, že táto dvojdielna séria vám pomohla pochopiť Autolykos na technickej úrovni a prečo je pamäťovo náročnejší ako Ethash. Keď Ethereum prechádza na sieť PoS, bude existovať veľká komunita minerov, ktorí hľadajú miesto, kam nasmerovať svoju hashovaciu silu, a Ergo by mal byť významným hráčom pri prilákaní týchto minerov.

Ak sa vám tento článok páčil, autor vás pozýva, aby ste si pozreli ďalší obsah prostredníctvom svojho Twitter účtu, @TheMiningApple.

unnamed (9).png

[1] Kredit Wolf9466#9466 na Discorde
[2] http://www.ldatech.com/_images/imageGallery/SBM09P-3_front.jpg
[3] https://www.blake2.net/#:~:text=A%3A%20BLAKE2%20is%20fast%20in,of%20the%20designers%20of%20BLAKE2).

Share post

Ergo Infrastructure DAO: Decentralizácia chrbtice ekosystému Ergo

Ergo Infrastructure DAO: Decentralizácia chrbtice ekosystému Ergo

Misia Ergo bola vždy zakorenená v decentralizácii, nielen na konsenzuálnej vrstve, ale naprieč celým stackom.

Ergo Platform

13. augusta 2025

Mew Finance: Hravý DeFi nástroj pre ekosystém Ergo

Mew Finance: Hravý DeFi nástroj pre ekosystém Ergo

Mew Finance je decentralizovaná aplikácia na blockchainu Ergo.

Ergo Platform

12. augusta 2025

Lithos: Decentralizácia ťažby s on-chain poolmi

Lithos: Decentralizácia ťažby s on-chain poolmi

Lithos je nový protokol navrhnutý na prepracovanie fungovania ťažobných poolov presunutím ich na on-chain, čo dáva ťažiarom plnú k.

Ergo Platform

24. júla 2025

Sigma 6.0: Inteligentnejší, flexibilnejší Ergo

Sigma 6.0: Inteligentnejší, flexibilnejší Ergo

Sigma 6.0 je významná navrhovaná aktualizácia blockchainu Ergo.

Ergo Platform

23. júla 2025

Formovanie budúcnosti Rosen: Výzva komunity na päť kľúčových návrhov pokladnice

Formovanie budúcnosti Rosen: Výzva komunity na päť kľúčových návrhov pokladnice

Spoluzakladateľ Rosen, Armeanio, predložil päť nových návrhov pre Rosen Treasury.

Ergo Platform

9. júla 2025

Ergo's Extended UTXO a vzostup umelej ekonomickej inteligencie

Ergo's Extended UTXO a vzostup umelej ekonomickej inteligencie

Praktická vízia pre autonómne ekonomické agentov Autonómne ekonomické agenti na blockchaine Ergo vykonávajú užitočnú prácu v reál.

Ergo Platform

12. mája 2025

ErgoHACK X: Umelá inteligencia na Ergo blockchaine

ErgoHACK X: Umelá inteligencia na Ergo blockchaine

Oslavujeme desaťročie decentralizovanej inovácií Pridajte sa k 10.

Ergo Platform

10. apríla 2025

The Ergo Manifesto

The Ergo Manifesto

Ergo Manifesto dúfa vo vzdelanie a ukážku vízie, čo blockchain technológia môže dosiahnuť.

Ergo Foundation

26. apríla 2021