![](https://nostr.build/i/p/nostr.build_848a1b204c782679c042d18b0c8aa880e919fb4e7218cc5c9646119864e1625e.jpg)
@ Kuba
2024-11-29 15:54:28
V dnešním pokračování miniseriálu o domácí těžbě bitcoinu se podíváme na těžební pooly. Co je to těžební pool? Jak funguje a jaké služby nabízí? Jaké mohou být nevýhody nebo rizika spojená s těžbou v poolu? A existují způsoby, jak tato rizika zmírnit, například pomocí protokolů Stratum V2 nebo DATUM?
## Těžební pool pro těžbu bitcoinu
Těžební pool je služba, která umožňuje více těžařům spolupracovat na těžbě bitcoinu a následně si rozdělit odměnu podle množství práce, kterou každý z nich odvedl. Spolupráce a koordinace mezi těžaři je pro ně výhodná, protože společným úsilím zvyšují šanci na úspěch, protože jejich sdružený hashrate tvoří větší podíl vůči celkovému hashrate bitcoinové sítě. Díky tomu se zkracuje průměrná doba mezi dvěma odměnami, které pool získá.
> Jednoduše řečeno, čím vyšší hashrate těžaři v rámci poolu dají dohromady, tím větší podíl na celkovém výkonu sítě budou mít a tím častěji získají odměnu za nalezení bloku. Pravidelné a časté odměny jsou pak klíčové pro pokrytí nákladů spojených s těžbou.
Co však těžební pool musí (nebo může) pro své těžaře zajistit? Než se podrobně podíváme na jeho fungování, pojďme si nejprve připomenout, jak samotná těžba bitcoinu funguje.
### Postup těžby bitcoinu
Těžba bitcoinu je proces, při kterém vznikají nové mince jako odměna pro těžaře, který jako první najde správný hash bloku transakcí čekajících na potvrzení. Tento hash, vypočítaný pomocí algoritmu SHA-256, musí splňovat požadovanou obtížnost, což znamená, že jeho začátek obsahuje stanovený počet nul.
Hledání správného hashe (hashování) je výpočetně náročný proces využívající prvku náhodnosti. Těžaři postupně generují obrovské množství potenciálních výsledků, dokud nenaleznou ten, který odpovídá požadované obtížnosti. Jakmile takový hash najdou, oznámí ho ostatním uzlům v síti. Ty ho zkontrolují, a pokud je správný, potvrdí ho a zařadí odpovídající blok transakcí do blockchainu.
Proces těžby bitcoinu probíhá v cyklu, který se opakuje pro každý nový blok a obsahuje následující kroky:
#### Proces těžby bitcoinu krok za krokem:
1. **Výběr transakcí z mempoolu** - Těžař vybírá transakce z mempoolu čekající na potvrzení. Mempool je část bitcoinového uzlu, kde jsou uloženy nepotvrzené transakce. Transakce jsou obvykle vybírány podle výše poplatku za jejich zpracování.
2. **Vytvoření coinbase transakce** - Coinbase transakce nemá žádné vstupy. Pouze generuje odměnu za vytěžení bloku (aktuálně nově vytvořené bitcoiny) a připočítává poplatky ze všech vybraných transakcí. Tato odměna je zaslána na adresu těžaře.
3. **Výpočet Merkle root** - Vybrané transakce jsou uspořádány do binárního stromu, tzv. Merkle tree. Výsledkem je Merkle root, což je hash reprezentující všechny transakce zahrnuté v bloku.
4. **Sestavení hlavičky nového bloku** - Hlavička bloku obsahuje následující údaje:
- *Verzi bloku*
- *Hash předchozího bloku* – odkaz na poslední validní blok v blockchainu
- *Merkle root* – hash všech transakcí v bloku
- *Časové razítko* – čas vzniku bloku
- *Obtížnost těžby* – určuje, kolik nul musí hash bloku obsahovat na začátku
- *Nonce* – 32bitové náhodné číslo, které se při každém pokusu o výpočet mění a zajišťuje jeho variabilitu a jedinečnost
5. **Hashování hlavičky bloku** - Hlavička bloku je opakovaně hashována pomocí algoritmu SHA-256. Při každém pokusu se mění hodnota *Nonce*, aby byl výpočet jedinečný. Proces pokračuje, dokud není nalezen hash, který splňuje požadovanou obtížnost, nebo dokud blok nenalezne jiný těžař.
6. **Propagace nového bloku** - Jakmile těžař najde správný hash, nový blok je odeslán do bitcoinové sítě. Uzly v síti jej ověří a v případě, že je blok validní, zařadí jej do blockchainu.
Nejnáročnější částí celého procesu těžby je hledání SHA-256 hashe, který splňuje cílovou obtížnost. Aktuální obtížnost (95.6T) vyžaduje v průměru 432 zettahashů (432 × 10<sup>21</sup> hashů) k nalezení správného hashe. Aby tento proces byl efektivní, byly vyvinuty specializované zařízení a čipy, které jsou optimalizované pro výpočty podle SHA-256 algoritmu.
### Role poolu v těžbě
#### Rozdělení odměny mezi těžaře
Pokud má těžební pool zajistit spravedlivé rozdělení odměny za vytěžený blok mezi všechny spolupracující těžaře, musí mít pod kontrolou alespoň následující části těžebního procesu:
- **Vytvoření Coinbase transakce** - Pool musí správně vytvořit Coinbase transakci, která převádí odměnu za vytěžený blok a následně ji rozděluje mezi všechny spolupracující těžaře.
- **Sběr důkazů o odvedené práci (PoW)** - Pool musí shromažďovat důkazy o odvedené práci od všech těžařů. Tyto důkazy ukazují, jakým způsobem a v jakém poměru se má odměna rozdělit mezi těžaře.
První bod může být realizován dvěma způsoby:
- Pool může do Coinbase transakce zahrnout vlastní bitcoinovou adresu a vytěžené bitcoiny následně mezi těžaře rozdělit pomocí standardní transakce.
- Nebo může do Coinbase transakce přímo uvést adresy a částky pro jednotlivé těžaře, které odpovídají jejich podílu na těžbě.
Sběr důkazů o odvedené práci se realizuje tím, že těžaři musí poolu reportovat nejen nalezení bloku (tedy nalezení hashe, který splňuje cílovou obtížnost sítě – tzv. *network difficulty target*), ale i všechny hashe, které splňují nižší obtížnost (tzv. *share difficulty target*). Tento target odpovídá reálnému výkonu těžícího zařízení, kde je pravděpodobnost nalezení odpovídajícího hashe výrazně vyšší. Tyto hashe se nazývají *shares*. Pool může pomocí počtu nalezených *shares* v daném období stanovit poměr odvedené práce mezi jednotlivými těžaři.
> Rozdělení odměny mezi těžaře je vlastně jediná klíčová povinnost poolu, která zajišťuje jeho smysl a fungování.
Způsob výpočtu míry přispění každého těžaře se může mezi jednotlivými pooly lišit, v principu ale existují dva základní přístupy: PPLNS a (F)PPS.
**PPLNS - Pay Per Last N Shares**
Tento model vyplácí těžaře na základě množství *shares*, které odeslali do poolu před tím, než byl blok vytěžen. Odměna je tedy závislá na podílu hashrate jejich zařízení vůči celkovému hashrate poolu a také na štěstí poolu při hledání bloku. Výhodou systému PPLNS je, že odrazuje těžaře od přeskakování mezi pooly a podporuje jejich loajalitu. Nevýhodou však může být nepředvídatelnost velikosti odměny v daném období. Vzhledem k náhodnosti objevování bloků mohou být četnost a termíny výplat velmi proměnlivé.
**(F)PPS - (Full) Pay Per Share**
Těžaři jsou vypláceni podle množství odeslaných podílů, bez ohledu na to, zda byl blok nalezen. Výhodou systému PPS je jeho předvídatelnost. Těžaři přesně vědí, kolik za každý podíl obdrží, a výplaty jsou pravidelné, obvykle na denní bázi. Nevýhodou je nízká motivace k věrnosti poolu, protože těžaři mohou přeskakovat z jednoho (F)PPS poolu do druhého, aniž by tratili oproti setrvání v jednom z nich. *Full* v názvu znamená, že součástí odměny jsou i vytěžené transakční poplatky.
Pravidelnost a předvídatelnost výplaty v modelu (F)PPS jsou v přímém rozporu s neurčitostí a nepředvídatelností při hledání nového bloku. Pool na sebe přebírá riziko "ztráty štěstí" a garantuje stabilní výplaty těžařům na základě jejich odvedené práce, bez ohledu na to, zda byl skutečně nalezen nový blok. Tato "pojistka proti smůle" však není zadarmo. Pooly si proti riziku dlouhodobé neúspěšnosti při hledání nového bloku pomáhají spoluprací na vyšší úrovni. "Smůla" jednoho poolu je většinou "štěstím" jiného. Pokud se pooly dokážou domluvit a sdílet vytěžené odměny, mohou si "smůlu" vzájemně kompenzovat a potlačit riziko neúspěchu úměrně podílu tohoto "super poolu" na celkové hashrate sítě. O tom, že se pooly domluvit dokážou, si můžete přečíst v článku [Konec mýtu o decentralizované těžbě](https://jakubadamczyk.substack.com/p/konec-mytu-o-decentralizovane-tezbe).
> Je důležité si uvědomit, že model (F)PPS jako "pojišťovna" není dlouhodobě udržitelný. Variabilitu ve výplatách totiž nezpůsobuje pouze střídání štěstí a smůly, ale také změny v transakčních poplatcích a jejich podílu na odměně za nalezený blok. V současnosti se transakční poplatky pohybují v jednotkách procent z odměny za nový blok (3.125 BTC). Po několika dalších půlení se však tento podíl může zvýšit na desítky procent a významně ovlivní celkovou variabilitu odměny za nový blok. Pokud budou těžaři i nadále vyžadovat stabilní odměnu za svou práci, cena "pojištění" této služby (tj. poplatek poolu) vzroste.
#### Sestavení šablony bloku
Těžební pooly však vykonávají i jiné kroky procesu těžby bitcoinu. Dalším klíčovým je sestavení šablony nového bloku. Proč je důležitý? Protože pro sestavení šablony je nutné do nového bloku vybrat transakce, které čekají na potvrzení (a spočítat pro ně Merkle root hash, viz. výše). Výběrem transakcí lze ovlivnit celkovou výši odměny za vytěžení bloku, jelikož ta obsahuje i všechny transakční poplatky. Zároveň tímto výběrem může pool cenzurovat některé transakce nebo bitcoinové adresy tím, že je do bloku nezahrne.
V důsledku přenesení této činnosti na pool pak všichni těžaři v poolu pracují na stejném bloku.
#### Validace a propagace nového bloku do bitcoinové sítě
Těžební pool rovněž ověřuje nově nalezené bloky. Tuto činnost provádí bitcoinový uzel, který pool musí provozovat, aby měl přístup k mempoolu – databázi transakcí čekajících na potvrzení. Prostřednictvím tohoto uzlu také pool šíří nově vytěžené bloky do bitcoinové sítě.
Pro úspěšnou propagaci nového bloku je zásadní kvalitní konektivita s nízkou latencí a široké propojení s ostatními uzly. Tím se zvyšuje šance, že blok bude přijat, i když byl jiný blok nalezen ve stejný čas jiným těžařem.
Pokud pool obdrží z bitcoinové sítě nový platný blok vytěžený někým jiným, okamžitě informuje své těžaře. Ti musí přerušit práci na aktuálním bloku a začít těžit nový. Pool jim proto obratem připraví novou šablonu, která obsahuje dosud nepotvrzené transakce.
## Rizika těžby v poolech
Poolová těžba umožňuje těžařům získávat odměny úměrně jejich podílu na výkonu poolu, aniž by museli sami najít nový blok. To přitahuje téměř všechny těžaře, protože nabízí stabilitu příjmů. Pro nejmenší těžaře je pool často jediným způsobem, jak získat odměnu ještě za svého života. Malí těžaři takto dokážou pokrýt náklady na energii a velké farmy s úvěrovým financováním si zajistí pravidelné splátky svých dluhů. Tento model však přináší i určitá rizika, zejména spojená s centralizací těžby.
Proč dochází k centralizaci? Aby těžba v poolu přinesla výše zmíněný benefit jistoty pravidelného příjmu, musí být pool schopen najít nový blok dostatečně často. Co znamená dostatečně často? Nebudu zabíhat do statistiky a teorie směrodatné odchylky, ale zkusím to vysvětlit na jednoduchém příkladě: Ačkoliv vaše odměna za konstantní hashrate 1 Th/s vašeho Braiins BMM 101 mineru bude při daném celkovém hashrate sítě teoreticky ve všech poolech za dostatečně dlouhé období stejná, vyberete si radši malý pool, který najde nový blok v průměru 1x za rok, ale díky náhodnosti těžby klidně následující 3 roky žádný, nebo velký pool, který nalezne nový blok v průměru 1x za den, ale díky náhodnosti těžby klidně následující 3 dny nenalezne nic? Zcela jistě si vyberete ten větší pool.
Velké pooly rostou a koncentrují většinu výkonu sítě (hashrate), což je klíčové pro jejich úspěch. Tento růst však má své limity. Pooly obvykle nepřekračují podíl 30–40 % na celkovém výkonu sítě, protože těžaři se při takové koncentraci začínají obávat rizika 51% útoku (viz dále). Na druhou stranu malé pooly často ztrácejí schopnost pravidelně vyplácet své těžaře, což je činí méně atraktivními. Těžba v nich se postupně začne podobat solo miningu, kde odměnu získá pouze těžař, který najde blok, a časem zaniknou pro nezájem těžařů.
Počet relevantních poolů se proto stabilizoval na relativně nízké úrovni. Dnes si 99 % odměn z těžby dělí přibližně 20 poolů, přičemž 95 % z této odměny připadá na 10 největších z nich. I kdyby nebylo přirozené tendence k centralizaci výkonu do velkých poolů, existoval by určitý logický limit jejich počtu. Například pokud bychom předpokládali, že pool má smysl pouze tehdy, pokud najde nový blok alespoň jednou denně, mohlo by teoreticky existovat maximálně 144 poolů (při generování jednoho bloku každých 10 minut).
Proč je tedy centralizace těžby nebezpečná? Všechny obavy mají svůj původ v současné praxi poolů centrálně vybírat transakce a sestavovat šablonu bloku. Díky tomu mohou pooly samy rozhodovat, které transakce do bloku vloží a které nikoliv. Těžaři přitom nikdy nevidí celý blok se všemi transakcemi k ověření, ale pouze hash jejich struktury (Merkle root hash). Obava z cenzury transakcí je tedy na místě. Zvláště pokud o obsahu 95% nových bloků může rozhodovat třeba jen 10 lidí nebo o 99% jen 20, viz. výše. Přijde vám to bláznivé? "*To, že jsi paranoik, ještě neznamená, že po tobě nejdou.*" (Woody Allen).
Další hrozbou spojenou s centralizovanou těžbou v poolech je riziko **51% útoku**. Co to znamená? Tento termín se vztahuje k situaci, kdy určitý subjekt ovládne více než polovinu celkového výkonu sítě (hashrate). S takovým podílem získává statistickou jistotu, že bude nacházet více bloků než zbytek sítě. To mu umožní vytvořit delší verzi blockchainu, která bude podle konsensu bitcoinové sítě považována za platnou. K čemu to může vést? Existují dvě hlavní rizika:
- Riziko dvojí útraty - nepoctivý uživatel, který ovládl nadpoloviční podíl hashrate, vytváří skrytě svůj vlastní řetěz nových bloků. Zároveň paralelně v existujícím veřejném blockchainu utratí své bitcoiny za jinou hodnotu (prodá je na burze). Následně uveřejní svou delší verzi blockchainu, která bude automaticky považována za platnou a tím pádem anuluje původní transakce (jeho bitcoiny mu zůstanou na původních adresách, zatímco hodnotu, kterou za ně získal, již mohl utratit).
- Riziko DoS útoku na blockchain - útočník s nadpolovičním podílem na celkové hashrate sítě může těžit pouze prázdné bloky, čímž efektivně síť zablokuje, protože transakce z mempoolu nebudou potvrzovány.
Obě rizika lze celkem úspěšně zlehčovat poukázáním na obrovské náklady jejich provedení, nelze je však zcela zanedbat. Nedokážeme efektivně bránit situaci, aby někdo ovládl více než 51% výkonu sítě. Může tomu bránit "bdělost těžařů", kteří nenechají žádný pool vyrůst nad 30% a na dva kliky mohou své těžební stroje přesměrovat do jiného poolu? A víme určitě, že ti 3 lidé za třemi největšími pooly nejsou ve skutečnosti pouze jeden člověk? Důkazy pro takové tvrzení se hledají obtížně, ale [mnohé indicie naznačují, že se některé pooly nebojí "spolupracovat" a používat společného kustodiána svých bitcoinů](https://jakubadamczyk.substack.com/p/konec-mytu-o-decentralizovane-tezbe).
## Další problémy těžby v centralizovaných poolech
Těžba v současných poolech má i další nevýhody, o kterých se tolik nemluví nebo si je těžaři přímo neuvědomují.
### Netransparentní odměňování
Česká společnost Braiins a jejich těžební pool se aktivně snaží zvyšovat povědomí o těžbě bitcoinu, objasňovat základní pojmy (a vyvracet některé mýty) a pravidelně publikují zajímavá data o bitcoinové těžbě. Navštivte jejich [Braiins Academy](https://academy.braiins.com/en/), kde můžete najít například [tento článek o těžbě v poolu](https://braiins.com/blog/bitcoin-mining-pools-luck-shares-estimated-hashrate) nebo [podrobnou specifikaci výpočtu odměn dle FPPS modelu](https://academy.braiins.com/en/braiins-pool/rewards-and-payouts/#fpps-specification) pro těžaře v jejich poolu.
Přesto je odměňování ve většině současných poolech v principu netransparentní. Proč? Nelze ho nezávisle ověřit. Žádný z těchto poolů neposkytuje veřejně všem svým těžařům potřebná data, která by jim umožnila zkontrolovat správnost jejich podílu na odměně získané vytěžením bloku. (V rámci této série o domácí těžbě bitcoinu mám na mysli především malé nezávislé těžaře; pokud máte k dispozici výkon v řádu několika Eh/s, vaše pozice vůči poolu bude samozřejmě jiná). Chybí především informace o celkovém výkonu poolu, tedy o počtu *shares*, které jednotliví těžaři přispěli za den (pro FPPS model), nebo mezi dvěma nalezenými bloky (pro PPLNS model). Další komplikace nastávají při výpočtu průměrného poplatku, který je započítán do odměny. Některé pooly totiž nejvyšší poplatky v bloku do odměny nezapočítávají s odůvodněním, že je možná budou vracet, pokud se ukáže, že šlo o chybu při vytváření transakce.
Zcela mimo kontrolu těžařů je však systém urychlování transakcí mimo mempool, s využitím tzv. out-of-band transaction accelerators (OOB). O co jde? Standardní výběr transakcí do šablony následujícího bloku probíhá s ohledem na maximalizaci odměny z transakčních poplatků a tedy prioritizací transakcí s nejvyšším poplatkem za vByte. Pokud zvolíte poplatek příliš nízký, může se vám stát, že transakce zůstane v mempoolu "viset" nezpracovaná po dobu delší, než potřebujete. V takovém případě máte tři možnosti, jak problém vyřešit.
- Buď s pomocí funkce replace-by-fee (RBF) vyšlete do bitcoinové sítě původní transakci znovu s vyšším poplatkem
- Nebo vytvoříte novou transakci, která utrácí některý z výstupů uvízlé transakce (musíte k nim mít příslušné klíče) a nastavíte vyšší poplatek tak, aby výsledný průměrný poplatek za obě transakce byl pro těžaře motivující (tzv. child-pays-for-parent CPFP transakce)
- A nebo se domluvíte s tím, kdo sestavuje šablonu nového bloku ve velkém poolu, aby vaši transakci do šablony zařadil a úplatu zaplatíte přímo jemu.
Ve třetím případě se takový poplatek v blockchainu vůbec neobjeví a nikdo nedokáže zjistit, jak veliký ve skutečnosti byl (těžaři neví, jaké transakce v bloku potvrzují, znají pouze jejich Merkle tree hash, viz. výše). Tyto transakce můžete najít v blockchain exploreru (třeba Mempool.space), [jsou označeny jako "Upřednostněné / Prioritized"](https://mempool.space/cs/tx/7cceab6f376b84a1a253be53cf0f586525ff4e6023014135977caae6691bb996), pokud měli nápadně nízké poplatky oproti ostatním transakcím v bloku. (Pokud by jste takovou službu někdy sami potřebovali, zkuste [Mempool Accelerator™](https://mempool.space/accelerator) nebo třeba [ViaBTC transaction accelerator](https://www.viabtc.com/tools/txaccelerator)).
Možná si řeknete, že je to vlastně dobrý nápad, který umožňuje poolům trochu si přivydělat bokem a dopad do odměn pro těžaře z části chybějících poplatků za jednu z mnoha transakcí v bloku nebude zas tak zásadní. Ale co když se těžební pool rozhodne vytěžit [SPAM v podobě Ordinalu](https://mempool.space/cs/block/000000000000000000021665966be1f16b419ddd7b3bbc2aabba16af78921910), který zabírá celý blok? Na uvedeném odkaze si povšimněte transakčních poplatků za tuto "transakci" (1 sat/vB - celkem 0.01 BTC) a celkových transakčních poplatků za bloky, které předcházeli nebo následovali za tímto blokem (v průměru 0.7 BTC). Neokradl tady Mara pool své těžaře? Nevím, možná se s nimi o OOB poplatek za tuto transakci nakonec podělil. Mara pool není veřejný pool.
### (Ne)bezpečnost a (ne)efektivita
Těžba v současných poolech, respektive koordinace těžařů a jejich těžebních zařízení je v naprosté většině řízena protokolem Stratum V1. [Navrhl jej Slush na sklonku roku 2011](https://bitcointalk.org/?topic=55842) a komunikace těžebních zařízení s poolem byl pouze jeden ze zamýšlených případů užití (tím hlavním byl lehký komunikační protokol pro klienty serverů Electrum).
Více než desetileté používání tohoto protokolu však odhalilo jeho slabiny, mezi které patří (kromě výše zmíněné centralizace) bezpečnost a neefektivita. Protokol je postavený na JSON-RPC zprávách, které nejsou šifrované a data přenášejí v lidsky čitelné podobě. Nezabezpečená komunikace mezi těžařem a poolem přináší riziko útoku "man-in-the-middle", tedy situaci, kdy útočník odposlouchává a modifikuje jejich komunikaci. Úpravou přenášených dat může například nechat těžaře pracovat pro svůj účet nebo přesměrovat jeho hash rate do úplně jiného poolu. Vše samozřejmě pouze v takovém objemu, aby byla krádež obtížně zjistitelná. Tento útok je znám pod označením "hashrate hijacking" ([detailní popis a příklad provedení](https://i.blackhat.com/asia-21/Thursday-Handouts/as-21-Liu-Disappeared-Coins-Steal-Hashrate-In-Stratum-Secretly.pdf)).
Neefektivita přenášení lidsky čitelných dat ve formátu JSON (data jsou zapisována ve formě *"klíč":"hodnota"*, což usnadňuje člověku jejich porozumění, ale takové zprávy jsou výrazně větší, než jejich reprezentace v binárním formátu) se projevuje výrazně vyššími nároky na datové pásmo (rychlost připojení). To určitě není problém pro domácího těžaře s jednou S9kou, farmě s tisíci minery to již vrásky na čele může způsobit. A skutečným problémem, jehož řešení si vyžaduje velmi rychlé a stabilní připojení k internetu, to pak je pro pool samotný. Pool může účinně řídit svou potřebu šířky datové pásma vhodným nastavením cílové obtížnosti pro nalezení *shares* těžařům, čímž omezí četnost jejich komunikace. Zároveň tím ale učiní své měření práce jednotlivých těžařů méně přesné a zvyšuje tak variabilitu výplat odměn. Efektivita komunikace je tedy pro pooly důležitým parametrem.
## Stratum V2 a DATUM jako odpověď na slabiny současného protokolu
Bylo by překvapivé, kdyby po více než deseti letech těžby bitcoinu v poolech neexistovala nějaká řešení zmíněných problémů. Můžu vás ale uklidnit – existují. Tedy, spíše existují na papíře a mohla by existovat, kdyby... Kdyby celý segment těžby bitcoinu už léta nebyl tvrdým, vysoce konkurenčním byznysem, kde jde primárně o zisk, nikoli o bitcoinový éthos, respekt k svobodě a nezávislosti. V takovém prostředí se inovace zavádí pouze tehdy, když mohou přinést konkrétní prospěch, a bohužel disrupce moci a vlivu poolů ve prospěch decentralizace a svobody volby takový prospěch nenabízí. Takže jsem vás asi moc neuklidnil. I když, 29. září 2024 se přece jenom blýsklo na lepší časy. Ale nepředbíhejme!
### Stratum V2
Česká společnost Braiins, provozovatel Slush poolu (dnes Braiins pool) si byla nedostatků svého původního protokolu Stratum (V1) vědoma a dlouho pracovala na návrhu specifikace nové verze, která by je účinně odstranila. Výsledek této práce poprvé prezentovala v létě roku 2019. Vznikl návrh protokolu Stratum V2, který reaguje na všechny existující výtky protokolu původního.
Stratum V2 je binární, šifrovaný protokol, díky čemuž zvyšuje bezpečnost, zefektivňuje datové přenosy a snižuje nároky na těžební infrastrukturu. Je modulární a flexibilně umožňuje těžařům a poolům implementovat pouze ty jeho části, které chtějí využívat.
Stratum V2 ve své specifikaci definuje několik rolí (komponent) a jejich vzájemné vztahy a komunikaci (komunikační protokoly).
Tou první z nich je **Miner**. Tuto roli představují jednotlivá reálná těžební zařízení, jako třeba Antminer S9, Bitaxe nebo Braiins Mini Miner BMM101.
Druhou nezbytnou rolí je **Pool**. Ten primárně koordinuje těžbu a rozděluje odměny za nalezené bloky.
Další rolí je **Proxy**, neboli prostředník mezi **Minery** a **Poolem**. **Proxy** plní hlavně dvě funkce:
- Zastřešuje komunikaci s **Minery** - jedna **Proxy** může koordinovat více těžebních zařízení
- Překládá těžební protokol Stratum z verze V1 na V2 nebo naopak. Tím umožňuje připojit těžební zařízení se Stratum V1 firmwarem ke Stratum V2 **Poolu**.
Těžební zařízení (**Minery**), **Proxy** a **Pool** spolu komunikují prostřednictvím **Mining Protokolu**.
**Template Provider** je role, která vybírá transakce z mempoolu bitcoinového uzlu a připravuje šablonu nového bloku. Může existovat jak na straně poolu, tak na straně těžaře. Na straně těžaře však představuje základní předpoklad pro decentralizaci těžby - umožňuje mu vybrat transakce do šablony nového bloku dle vlastní vůle.
Poslední rolí je **Job Declarator**. Jeho odpovědností je validovat navržené šablony nového bloku a připravit úlohy pro **Minery**. **Job Declarator** může opět existovat jak na straně poolu (tzv. **Job Declarator Server**), tak na straně těžaře (tzv. **Job Declarator Client**). Obě instance pak spolu komunikují prostřednictvím **Job Declaration Protokolu**.
Čistě teoreticky může role **Template Provider** a **Job Declarator** pro těžaře a pool provozovat nezávislá třetí strana a poskytovat tuto službu třeba více těžařům nebo více poolům. Chybí k tomu ale ekonomická motivace, protože takové nastavení nezvyšuje vzájemnou důvěru mezi těžařem a poolem a přináší dodatečné náklady.
Jednotlivé role a jejich vzájemné interakce ukazuje následující obrázek.
![Stratum V2 protokol](https://image.nostr.build/7192093274533dedb3eb453408dde7031e9ca8c7fa6800b5467c1c8378ffd150.jpg)
Role **Template Provider** a **Job Declarator** na straně těžaře nejsou povinné. Pokud existují, umožňují decentralizovaný výběr transakcí do nového bloku. Pokud ne, odpovídá celé nastavení konfiguraci stávajících poolů, přináší však zabezpečenou a efektivnější komunikaci díky binární podstatě protokolu a jeho šifrování.
Decentralizovaná těžba v těžebním poolu s využitím protokolu Stratum V2 probíhá následovně:
1. **Template Provider** na straně těžaře získá z vlastního bitcoinového uzlu šablonu nového bloku (buď prostřednictvím RPC GetBlockTemplate nebo nově navrženého Stratum V2 subprotokolu **Template Distribution**) a poskytne ji svému **Job Declaratoru**.
2. **Job Declarator Client** šablonu zvaliduje a nabídne ji prostřednictvím **Job Declaration protokolu** svému protějšku na straně poolu, **Job Declarator Server**.
3. **Job Declarator Server** šablonu zvaliduje podle svých pravidel. Pokud ji akceptuje, vytvoří těžební úlohu a pošle ji zpět těžaři. Součástí úlohy je i poolem definovaná coinbase transakce.
4. Pokud **Job Declarator Server** návrh odmítne, **Job Declarator Client** může šablonu nabídnout jinému poolu nebo vytvořit těžební úlohu sám a pokračovat v těžbě bez poolu (v módu Solo Miningu).
5. **Job Declarator Client** předá vytvořenou úlohu prostřednictvím **Job Distribution Protokolu** na **Proxy**, která ji distribuuje **Minerům**.
6. Těžební zařízení zpracovávají úlohu (hledají hash dle zadané obtížnosti). Nalezený blok nebo každou nalezenou *share* posílají zpět **Proxy**.
7. **Proxy** posílá nalezený blok nebo všechny nalezené *shares* prostřednictvím **Mining Protokolu** do **Poolu**.
8. Pokud těžař reportuje nalezený blok, **Pool** jej ověří a propaguje dále do bitcoinové sítě.
9. **Pool** také na základě počtu nalezených *shares* a použitého modelu pro odměňování těžařů vypočítá příslušnou odměnu a pošle ji těžařům (tuto odpovědnost však Stratum V2 protokol neřeší)
Z uvedeného popisu stojí za povšimnutí možnost poolu odmítnout těžařem navrhované transakce v šabloně nového bloku (krok 4). Je to pojistka pro pool, která mu umožňuje nepodílet se na těžení transakcí, se kterými z jakéhokoliv důvodu nesouhlasí (nesmíme zapomenout, že pooly jsou většinou právními subjekty, které podléhají jurisdikci země jejich sídla a případným regulacím). Stratum V2 pro takový případ nabízí těžaři možnost obrátit se automaticky na jiný pool nebo v krajním případě pokračovat v těžbě daného bloku samostatně (Solo Mining).
> Startum V2 však díky této vlastnosti zcela neeliminuje riziko cenzury transakcí.
Stratum V2 je takovým "Torovým kladivem" na většinu neduhů současné těžby v poolech. Jde o velmi komplexní protokol, který řeší všechny možné scénáře dnešní těžby, včetně těch okrajových, a poskytuje všem zúčastněným hráčům – od výrobců těžebních zařízení po těžaře a operátory poolů – větší svobodu volby. Bohužel, "Money talks" a tak chybí vůle na jeho prosazení. Po pěti letech od jeho představení se podporou Stratum V2 chlubí pouze Braiins pool a reálně použitelným scénářem je pouze přímá komunikace poolu s minerem, který používá BraiinsOS firmware. O decentralizaci zatím nemůže být řeč.
V březnu tohoto roku (2024) se na Githubu objevila první verze [Referenční Implementace Stratum V2](https://github.com/stratum-mining/stratum), zatím ve velmi omezené funkcionalitě.
> V nedávném rozhovoru přiznali Jan Čapek a Pavel Moravec, zakladatelé Braiins a provozovatelé Braiins poolu, že implementace komponent, které reálně decentralizaci těžby dle protokolu Stratum V2 umožní, zatím nejsou prioritou...
Doporučuji si celý rozhovor poslechnout. [Protokolu Startum V2 se pánové věnují v čase 41:30-59:00](https://www.youtube.com/watch?v=im1rLSuvXXs&t=2485s).
### DATUM
DATUM, neboli "Decentralized Alternative Templates for Universal Mining" je protokol, který si zvolil decentralizaci těžby bitcoinu za svůj primární cíl. [Ocean.xyz pool jej představil 29. září 2024](https://ocean.xyz/docs/datum-press-release). Jako jednu z motivací uvedl ztrátu důvěry, že Stratum V2 protokol dokáže, navzdory svým proklamacím, vyřešit problém centralizace bitcoinové těžby v dohledné době.
Co přesně DATUM dělá? Umožňuje jednotlivým těžařům vytvářet své vlastní šablony bloků a zároveň se dále podílet na sdílení odměn za těžbu v poolu. Nic víc. Krátce po představení protokolu byly zpřístupněny i [zdrojové kódy referenční implementace DATUM gatewaye](https://github.com/OCEAN-xyz/datum_gateway) a připravené aplikační balíčky pro [StartOS](https://github.com/OCEAN-xyz/datum-gateway-startos) a [Umbrel](https://github.com/getumbrel/umbrel-apps/tree/master/datum). Ano, čtete správně, DATUM si můžete spustit na svém bitcoinovém uzlu. O tom ale o kousek dále. Napřed si popíšeme, jak DATUM funguje.
![DATUM protokol](https://image.nostr.build/bb8e0d33de92e12cc1e8597cfb4337e0bc636984d9d7e00469f1e82d57205bf7.jpg)
Na rozdíl od protokolu Stratum V2 definuje DATUM protokol na straně těžaře pouze jedinou komponentu: **DATUM Gateway**. Ta zastřešuje komunikaci se všemi těžícími zařízeními (**Minery**) protokolem Stratum V1, komunikaci s lokálním bitcoinovým uzlem, ze kterého získává šablonu nového bloku a šifrovanou komunikaci s poolem, kterému posílá nalezené *shares* a případné nové bloky. Na straně poolu je klientem DATUM protokolu komponenta **DATUM Prime**. Dešifruje komunikaci přes DATUM protokol a předává poolu od těžaře získané důkazy o odvedené práci (*shares*). V současné verzi protokolu provádí pool také validaci bloků po koordinaci s těžařem, aby zajistil, že těžaři nebudou omylem vytvářet neplatné bloky. V budoucnu však bude odstraněna i tato funkce a pool tak nebude mít žádnou možnost bloky od těžaře jakkoliv ovlivnit.
Těžba bitcoinu s protokolem DATUM probíhá následovně:
1. **DATUM Gateway** na straně těžaře získá z lokálního bitcoinového uzlu šablonu nového bloku prostřednictvím RPC GetBlockTemplate.
2. **DATUM Gateway** získá prostřednictvím DATUM protokolu z poolu coinbase transakci, sestaví hlavičku bloku a celou těžební úlohu.
3. Sestavenou těžební úlohu předá **DATUM Gateway** těžebním zařízením.
4. Těžební zařízení zpracovávají úlohu (hledají hash dle zadané obtížnosti). Nalezený blok nebo každou nalezenou *share* posílají zpět na **DATUM Gateway**.
5. Ta posílá nalezený blok nebo všechny nalezené *shares* prostřednictvím **DATUM Protokolu** do **Poolu**.
6. Pokud těžař nalezne nový blok, **DATUM Gateway** jej ověří a propaguje dále do bitcoinové sítě prostřednictvím lokálního bitcoinového uzlu.
7. **Pool** na základě počtu nalezených *shares* a použitého modelu pro odměňování těžařů vypočítá příslušnou odměnu a pošle ji těžařům.
Pokud uvedený postup srovnáte s postupem dle protokolu Startum V2, najdete jeden důležitý rozdíl. Těžař neposkytuje poolu ke schválení své vybrané transakce v rámci vytvořené šablony bloku. Záleží jen na něm, které transakce vybere a tvorbu nového bloku má tak zcela pod svou kontrolou.
> V protokolu DATUM nemá pool možnost cenzurovat těžařem vybrané transakce. Rozhodnutí, jak využije prostor ve svém bloku a jakým transakcím dá přednost, je tak opět zcela na těžaři. Tvorba obsahu bitcoinového blockchainu se vrací tam, kde ji navrhl Satoshi Nakamoto ve svém Whitepaperu.
Pool poskytuje těžaři pouze coinbase transakci do hlavičky nového bloku. Protokol DATUM nepředepisuje konkrétní systém odměňování v poolu. Pool může sestavit coinbase transakci dle vlastní potřeby. Může například v coinbase transakci přímo a transparentně vyplatit těžaře, jako to dělá [Ocean.xyz pool](https://ocean.xyz/) pro částky vyšší než cca 1.05M SATů, nebo si převést celou odměnu na svou adresu a těžaře vyplatit později jinou standartní transakcí, jako to dělají všechny ostatní pooly.
Protokol DATUM v současnosti podporuje pouze jediný pool - Ocean.xyz. Volně dostupné zdrojové kódy na Githubu jsou pouze pro **DATUM Gateway**, část na straně poolu, **DATUM Prime**, zatím chybí. Na druhou stranu protokol DATUM je živý protokol. s jeho pomocí bylo vytěženo již 22 bloků ze 40, které za dobu od jeho představení Ocean.xyz pool vytěžil. A 50% sleva z poplatků poolu za těžbu prostřednictvím DATUM protokolu jako podpora jeho adopci dokazuje, že to Ocean.xyz myslí s decentralizací bitcoinové těžby opravdu vážně.
## Domácí decentralizovaná těžba bitcoinu? Ano!
Pokud vám vše výše napsané dává smysl a chcete podpořit decentralizaci těžby bitcoinu, můžete. A dokonce to již nepředpokládá hluboké technické znalosti. Jak jsem napsal výše, implementace **DATUM Gatewaye** je již nyní k dispozici pro nejrozšířenější operační systémy bitcoinových uzlů Umbrel a StartOS. Její instalace je jednoduchá, stejně tak jako konfigurace, a nároky na hardware jsou zanedbatelné. Všechny vaše domácí těžící zařízení můžete obsluhovat přes jednu **DATUM gateway**, která poběží přímo na vašem RPi 4 bitcoinovém uzlu. Jak na to?
![Domácí kombo decentralizované těžby - Bitaxe Ultra a Bitcoin node na RaspberryPI](https://blossom.primal.net/eec3ace5575959685c2ecf67e977293f06f3babdc1a4de0541a5b75262116c85.jpg)
DATUM gateway potřebuje ke svému běhu plnohodnotný bitcoinový uzel, který podporuje RPC interface a proceduru GetBlockTemplate. Můžete si vybrat jakoukoliv dostupnou implementaci (Bitcoin Core, Bitcoin Knots nebo třeba Libre Relay). Já vám však doporučím Bitcoin Knots, protože nabízí nejširší možnosti konfigurace sestavení šablony bloku. Dostanete tedy nejlepší možnost volby, které transakce do svých bloků zahrnout a které ne (SPAM - pokud vás zajímá více o SPAMu v bitcoinovém blockchainu, přečtěte si článek [Nevyžádaná data v bitcoinovém blockchainu](https://jakubadamczyk.substack.com/p/nevyzadana-data-v-bitcoinovem-blockchainu)).
### Bitcoin Knots
Nedávná aktualizace UmbrelOS na verzi 1.3 celou instalaci výrazně zjednodušila. Přinesla možnost zvolit si implementaci bitcoinového uzlu a odstranila tak závislost ostatních aplikací (jako Electrum serverů nebo Lightning uzlů) na Bitcoin Core. Můžete si nainstalovat Bitcoin Knots přímo z Umbrel App Store.
V případě StartOS (Start9) najdete Bitcoin Knots v oficiálním Marketplace.
Po instalaci si zkontrolujte a případně nastavte preferovaná pravidla filtrování bitcoinového SPAMu (ostatně proto si instalujete Bitcoin Knots). Najdete je v nastavení ( Umbrel: *Advanced Settings -> Optimization*, StartOS: *Config -> Mempool*).
V základu je již nastaveno (verze 27.1.020240801):
*Datacarrier* (`datacarrier=1`) - Relay transaction with embedded data - OP_RETURN
*Datacarrier Size* (`datacarriersize=42`) - Maximum size of relayed transactions with embedded data - OP_RETURN
*Reject Parasites* (`rejectparasites=1`) - Reject parasitic transactions
*Permit Bare Multisig* (`permitbaremultisig=0`) - Relay old type of multisig transaction
Pokud chcete filtrovat i Runes, nezapomeňte povolit:
*Reject Tokens* (`rejecttokens=1`) - Reject tokens transactions
S protokolem DATUM můžete v současné době těžit pouze v Ocean.xyz poolu. Ten distribuuje odměny za vytěžený blok těžařům přímo v coinbase transakci, která díky tomu značně nabyla na velikosti a může mít i několik kilobajtů. Protože je celková velikost bloku omezená, je třeba na to myslet při vytváření šablony nového bloku a pro coinbase transakci, kterou vám pošle Ocean.xyz pool rezervovat potřebné místo. Zkontrolujte si, že vaše instance Bitcoin Knots má nastaveny následující limity velikosti bloku.
*Max Bloc Size* (`blockmaxsize=3985000`) - Max block size in bytes
*Max Block Weight* (`blockmaxweight=3985000`) - Max block size in weight
### DATUM
Po dokončení synchronizace blockchainu, což může trvat dle výkonu vašeho HW i několik dní, nainstalujte aplikaci DATUM (opět přímo z Umbrel App Store nebo Start9 Marketplace).
Aplikace ve verzi pro Umbrel zatím nemá konfigurační GUI. Vše podstatné je již nakonfigurováno v souboru *datum_gateway_config.json*. Pokud by jste konfiguraci chtěli upravit, najdete jej v adresáři
`/home/umbrel/umbrel/app-data/datum/data/settings/datum_gateway_config.json`
Za pozornost stojí parametry v sekci *Mining*:
*Bitcoin Address* (`pool_address`) - vaše bitcoinová adresa pro zasílání odměn v případě, že ji nevyplníte na těžícím zařízení (viz. [[#Nastavení těžebního zařízení]]).
*Primary Coinbase Tag* (`coinbase_tag_primary`) - První popisek do coinbase transakce v případě solo miningu. V případě těžby v poolu bude přepsán popiskem poolu (pool's name).
*Secondary Coinbase Tag* (`coinbase_tag_secondary`) - Druhý popisek do coinbase transakce. S jeho pomocí můžete identifikovat vámi nalezené bloky v blockchainu.
A v sekci *Datum*:
*Pool Host* (`pool_host`) a *Pool Port* (`pool_port`) - URL a port poolu s podporou DATUM Prime, ke kterému se DATUM Gateway připojí. Pokud není vyplněn, nebo se k němu nepodaří připojit a současně nebude nastaven parametr *Pooled Mining Only* (`pooled_mining_only=false` viz. dále), přepne se DATUM Gateway do solo mining módu (odměnu získáte pouze pokud naleznete blok a bude celá patřit vám).
*Pool Pass Workers* (`pool_pass_workers=true`) - Pokud je nastaven, bude DATUM Gateway posílat do poolu i vámi definované jméno konkrétního těžícího zařízení (viz. [[#Nastavení těžebního zařízení]]).
*Pool Pass Full Users* (`pool_pass_full_users=true`) - Pokud je nastaven, bude DATUM Gateway posílat do poolu celé vámi definované uživatelské jméno konkrétního těžícího zařízení. Tím je většinou vaše bitcoinová adresa pro zasílání odměn. Pokud bude nastaven na `false`, použije DATUM Gateway bitcoinovou adresu definovanou parametrem *Bitcoin Address* (`pool_address`).
*Pooled Mining Only* (`pooled_mining_only=true`) - Pokud je nastaven a DATUM Gateway ztratí spojení s poolem, přeruší spojení i se všemi těžícími zařízeními. To jim umožní připojit se na záložní pool, mají-li jej nastaven. Pokud je nastaven na `false` a DATUM Gateway ztratí spojení s poolem, přepne se do solo mining módu.
![Vše běží tak, jak má...](https://image.nostr.build/3f6329e11cae8fcc2371e54cdba1641be8030cf84f228f8ee9da502dda367deb.jpg)
### Nastavení těžebního zařízení
Nasměrujte svůj miner na IP adresu vašeho uzlu (Umbrel nebo StartOS) a port služby DATUM Gateway: **23334**. Místo IP adresy můžete použít lokální URL, pokud jej máte nastaveno. Výsledná Stratum adresa bude vypadat přibližně takto:
`stratum+tcp://192.168.x.y:23334` (x a y nahraďte odpovídajícími hodnotami)
nebo
`stratum+tcp://umbrel.local:23334`
Do pole *Username* vložte svou bitcoinovou adresu. Na tuto adresu budou zasílány vaše odměny z Ocean.xyz poolu. K této adrese můžete za tečku připojit unikátní jméno těžebního zařízení. Například:
`bc1qabcdefghijklmnopqrstuvwxyz.bitaxe`
Pokud svou bitcoinovou adresu neuvedete, zkontrolujte si, že ji máte nastavenu v konfiguraci DATUM Gatewaye v sekci *Mining*, parametr *Pool Address* a v sekci *Datum* je parametr *Pool Pass Full Users* nastaven na `false`.
Pole *Password* může zůstat prázdné, pro Ocean.xyz pool nemá žádný význam.
## Závěr?
A to je vše. Ale není to závěr, ale spíše začátek další etapy v těžbě bitcoinu. Etapy decentralizované těžby. Přeháním? Poolu Ocean.xyz se za 11 měsíců své existence povedlo přilákat hashrate až 4.5 Eh/s a dostat se mezi nejvýkonnějších 20 poolů. Za dva měsíce dostupnosti protokolu DATUM bylo s jeho pomocí nalezeno v poolu více než polovina nových bloků. To jsou na poměry v bitcoinové těžbě neuvěřitelná čísla, která dokazují, že bitcoinový étos není mrtvý a decentralizace těžby má v bitcoinové komunitě stále své zastánce.
A co více? Objevují se empirická měření výkonosti poolů, která ukazují, že transparentní odměňování v Ocean.xyz poolu může v delším časovém horizontu vydělat více SATů než jiné public FPPS pooly. Podívejte se třeba na [tuto studii](https://docs.google.com/spreadsheets/d/1qtlC6u9GZxU4KK-8yE7f7bvLDKWdgYMDrKBPbID0RkM/edit).
Domácí decentralizované těžbě bitcoinu: Zdař Bůh!