Hlavní navigace

Změní protokol Stratum 2 způsob, jak probíhá těžba bitcoinu v poolech?

Autor: Depositphotos
Karel Wolf

Stratum, nově označovaný jako Stratum 1, je protokol pro těžbu bitcoinu v těžebních poolech. Vedle řady dalších slabin vkládá enormní moc do rukou pool operátora, jenže to by se brzy mohlo změnit a s tím i to, co se poolům nejčastěji vytýká.

Doba čtení: 7 minut

Sdílet

Protokol Stratum má české kořeny, před sedmi lety jej poprvé představil (nutno říci, že bez řádné dokumentace) mining pool Marka „Slush“ Palatinuse. Stratum původně vůbec nebyl určený k těžbě bitcoinu, protokol měl sloužit de facto jako backend bitcoinové peněženky Electrum (první zmínka o něm pochází přímo od Palatinuse a nachází se na BitcoinTalk), ale brzy se ukázalo, že se k prvnímu účelu také hodí víc než dobře, 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 (Stratum je v podstatě evolucí getworku s podporou miningu v poolech).

Technicky Stratum představuje protokol využívající TCP socket a payload zakódovaný do JSON-RPC zpráv, tedy žádná velká věda. Klient vždy nejprve otevře socket, napíše požadavek v JSON formátu zakončený „\n“, odešle a čeká na odpověď (opět v JSON-RPC formátu). Výhoda takového, v zásadě primitivního, řešení je především univerzálnost a popularita JSON formátu a extrémně jednoduchá implementace i debugging. To je umožněno tím, že obě strany komunikují ve formátu, který je pro člověka snadno čitelný. Další výhodou je snadná rozšiřitelnost protokolu bez hrozící ztráty zpětné kompatibility.

TIP: Technický popis těžby naleznete v našem článku z roku 2017: Jak porozumět blockchainu v deseti minutách aneb Jak funguje technicky a k čemu je 

Když se podíváme na to, jak Stratum funguje pro těžbu, uvidíme, že poté, co se miner připojí k poolu, respektive k počítači řízenému mining pool operatorem, 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 ostatně vidí již pouze „Merkle tree path“ (merkle branch), sérii hashí uzlu Mrklova hašového stromu aby mohl být spočítán jeho kořen (merkle root). První listová transakce je tzv. coinbase, miner dostává její prefix a suffix, mezi které vkládá náhodná data, pro zvětšení prohledávacího prostoru. Výběr transakcí není jedinou silnou zbraní v rukou operátora, ten také rozhoduje o verzi použité „version bit“ (BIP 9), což je signalizační nástroj používaný hlavně během aktivace softforků protokolu. (Za běžného provozu se nic nesignalizuje a verze bloku zůstává nastavena na 0×20000000.)

Miner následně začne pracovat na samotném hashování a doufá, že se mu podaří správně trefit nonci a jeho hash vyústí do platné hlavičky bloku.Tato hash musí splňovat obtížnost úkolu přirazenou poolem (tzv. pool difficulty target).

Pokud je náhodou úspěšný, vrátí výsledek mining operátorovi, který ověří, že výsledek splňuje zadanou obtížnost a zaúčtuje minerovi jeho úsilí. (Pokud by to neudělal, neměl by jak při nalezení bloku určit poměrové rozdělení odměny). Pokud výsledný blok navíc splňuje difficulty target sítě, zkompletuje pool celý blok, vyšle jej do sítě a shrábne odměnu za vytěžený blok. Ta se následně dělí mezi všechny minery zapojené v poolu podle podílu jejich s poolem sdílené hashrate a odečte se poplatek poolu, každý pool má trochu jiná pravidla pro distribuci odměny a způsob měření participace. Odměnu opět distribuuje mezi minery pool operátor. 

Podtrženo sečteno, tak, jak je Stratum napsaný, dává do rukou mining pool operátora enormní moc. Za normálních okolností (a v ideálním světě) by to nemuselo vadit, jak jsme ale byli svědky v roce 2017 při boji o SegWit a snahách několika silných hráčů de facto unést síť vlastním forkem, jsou chvíle, kdy je to zcela konkrétní reálný problém. 

Pool operátor může také cenzurovat, nebo upřednostnit konkrétní transakce (což se celkem běžně děje, upřednostnění konkrétních transakcí několikrát prováděl i samotný Slush pool), výběrem a prioritizací transakcí provést pokus o double spend a v extrémním případě iniciovat i 51% útok na síť (pokud je k tomu přítomna dostatečná hashrate). Jednotliví mineři, kteří odvádí pro pool veškerou energeticky náročnou práci, oproti tomu mají možností a práv minimálně, když to trochu zjednodušíme, tak v podstatě jen právo z poolu odejít.

To by nyní chtěla společnost Braiins, která dnes Slush pool provozuje, změnit druhou generací protokolu označovanou coby Stratum V2. Na nové verzi se v tichosti pracovalo již nějakou dobu a dle slov svých tvůrců řeší všechny nejpalčivější problémy „jedničky“. Jako bonus má přinést mnohem větší efektivitu (což je argument, který by v konečném důsledku mohl pomoci prosadit Stratum V2 u provozovatelů poolů) a má některé pokročilejší funkce (umožňuje například snadnou správu jednotlivých těžebních farem). Otázkou je, zdali se s pokročilejšími vlastnostmi trochu neztrácí původní jednoduchost a univerzalita protokolu. Minimálně nahrazení pro člověka čitelného JSON textu binárním kódem je v tomto ohledu krokem značně diskutabilním, vzhledem k záměrům tvůrců jde ale asi o nezbytné zlo.

Stratum 2 je údajně inspirovaný jiným návrhem na náhradu původního protokolu Stratum, a to mining protokolem BetterHash Matta Coralla z Chaincode Labs, ten se ale objevil relativně nedávno, čili skutečná míra možné inspirace je trochu diskutabilní*. Jisté je to, že oba protokoly se pokoušejí vrátit rozhodovací moc do rukou jednotlivých minerů tím, že jim umožní (volitelně) vytvářet si vlastní block template a ten až následně nabízet mining poolu. To v praxi znamená možnost sám vybrat do bloku zahrnuté transakce a také množnost zvolit verzi bloku. Díky BetterHash se také odhalila některá úskalí. Jedním příkladem je hrozba, že miner bude generovat neplatné block templaty a do poolu posílat neplatné bloky. Stratum 2 by mělo umožňovat operátorům automaticky ověřit validitu minerem vytvořeného zaslaného bloku.

*Aktualizace (9. 8. 2019): „O novém protokolu jsme přemýšleli mnohem dříve. Draft BetterHashe ale trochu přispěl k zintenzivnění činnosti. Možnost výběru práce v BetterHashi nás inspirovala tuto vlastnost v bezpečnější formě zaintegrovat i do V2, Mattovi jde plný kredit za tento nápad.  O podobné koncepty se už ale snažili „Slush“,“ prozradil nám po přečtení článku druhý z ředitelů Braiins, Jan Čapek. „Pokud jde o spolupráci s Mattem, byli jsme požádání o review a spolupráci na BetterHashi, po prostudování „specifikace“ jsme ale došli k závěru, že není bezpečné pro pool implementovat možnost uživatelského výběru šablony bloku. Samotná binární forma BetterHashe nám také nepřišla ideálně navržena, proto jsme se rozhodli dále pokračovat na našich původních ideách ve formě Stratum V2,“ dodává.  

Toto řešení pochopitelně sice řeší jeden problém, ale nahrazuje jej novým – jak zařídit, aby požadavky minerů na ověření jejich block templatů po úspěšném nalezení nového bloku nezahltily pool? Braiins se pokusilo problém vyřešit šalamounsky, protokol umožňuje pool operatorům ověřovat validitu nových block templatů asynchronně. Z pohledu minera situace vypadá tak, že zašle poolu svůj nový block template a okamžitě jej začíná hashovat. V tento okamžik ale template nového bloku nemusí být nutně zvalidovaný, pool operátor totiž všechny bloky validuje průběžně a blok se může jako nevalidní ukázat až zpětně. Není to samozřejmě také ideální řešení, ale je funkční a použitelné do neideálního světa, ve kterém žijeme. Skrze zpětnou úpravu odměny dokonce vytváří určitou (byť trochu spornou) incentivu pro minery, aby se snažili do poolu posílat jen platné block templaty.    

PR Summit tip Horák_sponzoring

Nejde pochopitelně o jedinou novou vlastnost protokolu, oproti Stratum V1 přibyla například verifikace toho, že se miner připojil skutečně na server pool operátora, respektive pouze na něj samotný. Původní protokol byl totiž (minimálně teoreticky) otevřený man-in-the-middle útokům, kdy útočník nechal odvést minera práci a odměnu si následně nechal poslat na svoji adresu. 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.

Obsahuje také vícero změn, které se týkají efektivity, jistou daní za zvýšenou efektivitu je bohužel ztráta JSON textu, který byl nahrazen pro stroje daleko efektivnějším binárním kódem. Důsledkem je ztráta všech výhod popisovaných na začátku článku ve stručném technickém popisu protokolu. Seznam nových vlastností protokolu navíc není podle Braiins konečný a bude se dále vyvíjet. Ty oznámené jsou tak vlastně hlavně takovou sondou zjišťující reakce potenciálních „zákazníků“ před tím, než svůj odladěný návrh zveřejní ve formě BIP. To je pravděpodobně dobrá strategie, neboť ve světě decentralizované bitcoinové governance není úspěch žádného návrhu automatický, ani když se jmenujete Braiins.