O českém návrhu na to, jak překopat zastaralý protokol pro poolovou těžbu bitcoinu, jsme psali už dvakrát. Do třetice se podíváme na nejžhavější otázky, které trápí nejen uživatelskou a těžařskou komunitu. Kromě Braiins odpovídají také bitcoin core vývojáři Peter Todd a Matt Corallo (autor konkurenční BetterHashe).
Co se dozvíte v článku
Vybrané odpovědi můžete nalézt také ve vlákně Ask me anything Mining / Stratum V2 v bitcoinové skupině r/Bitcoin na Redditu, která se objevila v souvislosti s vydáním počáteční specifikace pro Stratum V2 loni v listopadu.
Stratum V2 a tři základní problémy
Stratum V2 je projekt, na kterém čeští Braiins (provozovatel nejstaršího světového bitcoin mining poolu Slush Pool) v tichosti pracovali několik let.
Uspíšení jeho zveřejnění má nepřímo na svědomí bitcoinový vývojář Matt Corallo, který částečně z podobných pohnutek publikoval vlastní návrh na náhradu Stratum (V1) s názvem BetterHash, která na sebe okamžitě strhla velkou pozornost anglicky mluvící části světa. Hlavní problém BetterHashe ale zjednodušeně spočíval v tom, že byla vytvářena někým, kdo sám netěží, a chybí jí tak vhled do problémů, které musí těžaři a pooly dennodenně řešit (od konektivity přes incentivy až po bezpečnost).
Stratum V2 řeší tři základní problémy: neefektivitu přenosu, bezpečnost a větší decentralizaci těžby. Technicky jde o náhradu za v současnosti již sedm let starý bitcoin mining protokol Stratum, který má opět kořeny ve Slush Poolu a jemuž vděčíme za to, jak dnes těžba Bitcoinu vypadá. Dodnes používaný protokol původně ani vůbec nebyl určený přímo k těžbě, ale měl sloužit de facto jako backend bitcoinové peněženky Electrum. Brzy se nicméně ukázalo, že se k prvnímu účelu dá také použít, a protože světu de facto odemkl možnost snadné těžby v poolech, stal se brzy globálně používaným standardem a rychle nahradil zastarávající getwork.
Souvislosti: Pavel Moravec (Braiins): Stratum V2 může vést k eliminaci prázdných bloků při těžbě bitcoinů a Změní protokol Stratum 2 způsob, jak probíhá těžba bitcoinu v poolech?
Hlavní výhoda protokolu spočívala v tom, že umožňoval, aby si server řídil chování klienta. Do té doby nebylo prakticky možné efektivně koordinovat, co budou klienti, kteří se k serveru (ve velkém množství) připojují, dělat. Do té doby byl jediný dostupný nástroj komunikace minera a poolu neefektivní long polling. Stratum umožnil, že najednou bylo možné posílat nezávisle na sobě klientům práci ve formě push informací.
Slabiny původního protokolu
Původní Stratum nicméně trpí celou řadou problémů. Tím, že protokol využívá TCP socket a payload zakódovaný do JSON-RPC zpráv, je sice snadno srozumitelný pro člověka a umožňuje na něm snadno stavět další vrstvy, ale přenos dat, která dnes stejně čtou jen stroje, je díky tomu například extrémně neefektivní.
Stratum, tak jak je napsaný, také při dnešním způsobu těžby dává do rukou mining pool operátora enormní moc, a naopak samotným minerům pouze možnost hlasovat tím, že se od poolu odpojí. Nevýhody takové situace se několikrát podařilo prakticky demonstrovat během bitcoinové horečky v roce 2017 (zejména v boji o SegWit).
Nový protokol tyto problémy řeší, respektive (v případě rozdělení moci mezi minery a operátory) dává provozovatelům poolů na výběr a minerům k dispozici alespoň vyjednávací nástroj. Stratum V2 toho ale řeší mnohem více, ať již jde o bezpečnost, efektivnost komunikace mezi minery a poolem, nebo i o problémy čistě na síťové vrstvě.
Nyní již ale ke slibovaným odpovědím, které pro bitcoinovou komunitu připravili Jan Čapek a Pavel Moravec ze Slush Poolu společně s Bitcoin core vývojářem Mattem Corallem a Peterem Toddem.
TIP: Peter Todd: Bitcoin je absolutně neškálovatelný, to ale není velký problém
Těžební algoritmus a větší decentralizace těžby
Otázka, která netrápí jen samotné těžaře, ale také velkou část bitcoinové komunity (a která je nejčastějším terčem bitcoinových kritiků) je současná centralizace těžby (minimálně na úrovni poolů). Co přesně Stratum V2 v tomto ohledu mění?
Stratum V2 přináší možnost těžit vlastní vybraný blok (work selection) namísto toho, který navrhuje pool (pool ovšem musí mít tuto funkci Stratum V2 aktivní), co přesně to pro centralizaci znamená?
Na kritiku centralizace bitcoinové těžby se obvykle odpovídá, že je centralizována pouze na úrovni samotných poolů, ale mineři samotní jsou z celého světa a mohou se svobodně připojovat a odpojovat, jak se jim zlíbí. Pravda je taková, že stav centralizace na úrovni jednotlivých farem dnes nikdo přesně nezná, nový protokol ale dává minerům možnost volby. Podmínkou je, že pool tuto volbu aktivuje, k tomu jej ale mineři velkou hashrate mohou donutit jednoduše tím, že v případě, kdy tak neučiní, tak jednoduše odejdou.
„Namísto soustředění se na centralizaci poolů se můžeme nyní soustředit přímo na centralizaci těžařů a mining farem. Jak může vypadat změna distribuce hashrate, se můžete podívat v mojí prezentaci (obrázek níže) Consensus group centralization,“ říká Corallo.
Work selection není za všech okolností výhoda a přináší s sebou i řadu problémů (domluva na tom, jak vypadá blok, asynchronní validace, promítání do odměn, pokud miner pracuje na špatném bloku). Když si miner navíc sám vybere blok, jeho hodnota bude jiná než hodnota bloku, na kterém těží ostatní mineři na poolu, což je nutné nějak zahrnout do výše odměn minera. Jaké jsou tedy pro změnu hlavní incentivy pro minery vyjednat si s poolem vlastní transakční set a těžit vlastní bloky?
Dnes to funguje tak, že poté, co se miner připojí k poolu, respektive k počítači řízenému mining pool operátorem, zažádá nejprve operátora o částečný „block template“. (Pool zasílá minerovi práci, která se skládá ze všech položek hlavičky bloku nutných k hledání řešení.) Nad hlavičkou bloku s transakcemi je potřeba provést proof of work, aby se mohl stát platným. Všechny transakce zahrnuté do tohoto bloku byly před tím vybrány mining pool operátorem, miner vidí již pouze „Merkle tree path“, sérii hashí uzlu Merklova hašového stromu, aby mohl být spočítán jeho kořen. Vedle výběru transakcí operátor také rozhoduje o verzi použité „version bit“ (BIP 9), což je signalizační nástroj používaný hlavně během aktivace softforků protokolu (plus samozřejmě také o způsobu a výši odměn po minery, ale to je trochu jiné téma). To mu dává v důsledku do rukou extrémní moc.
„Pooly díky Stratum (V1) dnes fungují de facto jako extrémně velcí mineři a kontrolují tak významnou část celkové hashrate. To v praxi znamená, že mohou například bránit (cenzurovat) konkrétním transakcím se dostat do blockchainu, nebo mohou silně ovlivňovat BIP aktivační proces, jak jsme toho byli svědky během signalizace SegWitu v roce 2017,“ říká Pavel Moravec, který jedním dechem dodává: „Těžaři, kteří si vyjednají vlastní bloky, mohou této centralizaci zabránit podobně, jako kdyby těžili sólo. Paralelně ale stále čerpají výhodu těžby v poolu v podobě nízké variance výplaty.“
Jaký má takový způsob těžby dopad na výkon?
„Pokud jde o výkon, je to trochu komplikovanější. Se správně optimalizovaným klientem a rozumným připojením k internetu může být takovýto způsob těžby i rychlejší než současný příjem práce z poolu. Aby to bylo možné, pooly si musí trochu pohrát s nastavením a adekvátně optimalizovat,“ říká Corallo.
Mají ve Stratum V2 pooly právo veta nad navrhovanými transakcemi?
„U V2 mohou pooly vždycky aktivně odmítnout celý blok, navrhovaný minerem, ale nikdy nemohou odmítnout individuální transakce uvnitř bloku. To slouží k tomu, aby pooly mohly provést ověření celého bloku a odmítnout všechny bloky, které obsahují neplatné transakce,“ vysvětluje Moravec.
Jak přesně Stratum V2 zlepšuje bezpečnost pro pooly i minery
Oproti Stratum V1 přibyla u V2 také verifikace toho, že se miner připojil skutečně na server pool operátora, respektive pouze na něj samotný. Původní protokol je totiž otevřený man-in-the-middle útokům, kdy útočník nechá odvést minera práci a odměnu si následně pošle na svoji adresu, případně jen krade nějakou „zanedbatelnou“ část hashrate. Minerovi v případě Stratum 2 stačí znát veřejný klíč pool operátora, aby bezpečně ověřil, že částečný block template pochází skutečně od skutečného pool operátora.
Jaké jsou hlavní výhody použití šifrování u V2?
„Ve verzi V1 může útočník ukrást a upravit přiřazení úkolů dříve, než se dostanou k těžařům, a poté zachytit práci, když se ji těžař pokusí odeslat – to vše bez toho, aby pool nebo těžař věděli, že se to děje. V2 hashrate hijacking zabraňuje.
Ověřování podpisu veřejného klíče není ideální, protože je pomalé, takže ověření podpisu pro každou zprávu by bylo značně neefektivní. Moderní šifrovací schémata autentizace poskytují přesně to, co je potřeba: autentizovaný kanál mezi dvěma stranami, kde se k vytvoření sdíleného tajemství používá jedna relativně nákladná operace podpisu, kterou pak mohou použít mnohem rychlejší schémata autentizace symetrických klíčů. Moderní implementace jsou rychlé, poměrně dobře prozkoumané a je nepravděpodobné, že by narazily na nějaké nepříjemné technické překvapení,“ říká Peter Todd.
Šifrování pochopitelně přidává nějaký datový provoz, o kolik je datově náročnější?
„Ve směru od poolu k těžaři je to nárůst o 5 %, takže prakticky bezvýznamný. V opačném směru je to 16 bytů, tedy více než 50 %, což by se mohlo zdát dost, ale je třeba to chápat v širším kontextu. I se zapnutým šifrováním budou odesílané zprávy u V2 stále o 50 % úspornější než ve Stratum V1 a celkový počet přenosů je také nižší, takže v konečném důsledku se nedá příliš hovořit o nárůstu dat kvůli šifrování,“ vysvětluje Todd.
Jaké jsou hlavní motivace k adopci Stratum V2 (na straně minerů i poolů)
Hlavní výhoda Stratum V1 bylo, že umožňoval, aby si server řídil chování klienta. Dvojka řeší eliminace latencí v tomto procesu.
„Jednou z největších pobídek pro těžaře je zlepšení efektivity šířky pásma, které nyní umožňuje provoz i bez opravdu skvělého připojení k internetu. Zároveň je možné ušetřené datové pásmo využít k častějšímu zasílání výsledku od minerů a tím se sníží variance v hashrate, který pool každému těžaři měří. Výsledkem je tak i menší variance v odměnách. Z hlediska účinnosti by měla schopnost poolů distribuovat budoucí šablony bloků těžařům dopředu (odděleně od zprávy „SetNewPrevHash“), vyloučit těžbu prázdných bloků. A konečně, přechod z JSON (tj. lidsky čitelného) kódu na plně binární (tj. strojově čitelný) významně snižuje velikost datových přenosů,“ vysvětluje Jan Čapek.
Pro netěžaře ale pro jistotu uvedeme celý kontext. Dnes to vypadá tak, že když pool zadává práci minerům, posílá zhruba dvoukilobajtový packet do každého spojení. Ten obsahuje například informace o coinbase, Merkle path a podobně. Pooly ale z optimalizačních důvodů často jako první posílají jen prázdnou template (bez Merkle path a transakcí), protože jsou pak data menší a cesta ke coinbase mnohem kratší. Protokol je totiž hodně citlivý na latence a je v zájmu poolů, aby mineři začali těžit co nejdřív. To znamená, že pool nejprve posílá prázdný blok, protože je to pro něj v současnosti takto výhodnější, což ale není pro síť úplně ideální stav. Stratum V2 tento problém řeší elegantněji, a to tím, že umožňuje asynchronní předposílání prací pro příští blok. Pool tak dostane informaci k minerům relativně rychle a není to za cenu těžby prázdných bloků.
Funguje to tak, že například vím, že těžím na určité template, vybral jsem si nějaké transakce a můžu tušit, jaké transakce se nejspíš dostanou do bloku z jiných poolů, protože typická motivace poolů je maximalizace zisku. Na základě tohoto odhadu mohu vybrat transakce, které se s velkou pravděpodobností nedostanou do následujícího bloku, a postavit si dopředu template pro budoucí blok a posílat jej minerům asynchronně ještě před tím, než se vytěží současný blok.
„Další silnou motivací, kterou nelze podceňovat, je kryptografické ověření. Pokud dnes těžíte, je možné, že váš poskytovatel internetových služeb tiše krade 1 % vaší hashpower. Šifrování ve V2 toto řeší,“ říká Corallo.