226 / 736XNONCE

Extranonce

Jak těžař získá další možnosti k hledání

Alena se učí, jak vzniká nový blok. Těžař mění vstupní údaje a počítá jejich hash, krátký otisk, jehož číselná hodnota musí splnit podmínku sítě. Co ale dělat, když už vyzkoušel všechny hodnoty jednoho měnitelného pole a nic nenašel? Extranonce mu umožňuje připravit další varianty podkladů a pokračovat. Neusnadňuje pravidla Bitcoinu ani neslibuje odměnu; pomáhá zajistit, aby stroje neopakovaly stále stejné pokusy.

Extranonce jsou dodatečné proměnlivé údaje, které těžební software běžně umísťuje do coinbase, zvláštní první transakce bloku připisující těžební odměnu. Změna těchto údajů se promítne do souhrnného otisku transakcí v hlavičce bloku. Tím vznikne další podklad pro hledání. Samostatné pole nonce v hlavičce se přitom nezvětšuje.

Hlavička je stručný datový souhrn bloku. Bit zaznamenává nulu nebo jedničku; osm bitů tvoří bajt. Hlavička obsahuje mimo jiné nonce, pole o délce 32 bitů, které při nezměněném zbytku nabízí 2^32 hodnot. Zkoušet stejnou hlavičku se stejným nonce znovu by dalo stejný hash, tedy stejný výsledek. Extranonce toto pole neprodlužuje: mění jiné údaje, z nichž se připraví nová hlavička. Alena si tak může představit nové zadání, pro které lze počítadlo projít znovu. V praxi se při hledání mohou podle pravidel měnit i další části hlavičky. [1] [5]

Coinbase zde není burza, ale první transakce každého bloku. Když software změní její extranonce, změní se její datový zápis a TXID, identifikátor vypočtený z transakce. Z něj vede přes strom postupně spojovaných otisků cesta k Merkle root, společnému otisku transakcí uloženému v hlavičce. Software musí přepočítat dotčenou větev stromu. Ostatní transakce mohou zůstat stejné, ale starý kořen nelze bez přepočtu ponechat. Právě tato návaznost dává nové hlavičce jiné vstupní údaje pro těžbu. [1]

Pro jednoduchý model ponechme vše ostatní pevné a dovolme dva zcela volné bajty extranonce. Nabízejí 2^16 variant; společně s 32bitovým nonce vzniká 2^48 kombinací vstupů. Jde o počet možných pokusů, nikoli počet nalezených bloků. Alena tím nezískává snazší podmínku ani jistotu, že v této sadě uspěje. Přínos je praktický: má kde dál hledat. Samotné přidání volného prostoru také nezrychlí stroj, který tyto pokusy musí skutečně vypočítat. [1]

Prostor pro extranonce není prázdný formulář bez pravidel. BIP 34, konkrétní pravidlo Bitcoinu, vyžaduje na začátku vstupního datového pole coinbase zvaného scriptSig správně zakódovanou výšku bloku, tedy jeho pořadí v řetězci. Limit 100 bajtů se vztahuje na celý coinbase scriptSig, nikoli jen na extranonce. Software proto musí vyhradit místo pro povinné údaje a zachovat platný formát. Kdyby je Alena přepsala, další výpočty by hledaly řešení pro chybný blok. [3] [4]

Při společné těžbě v poolu je užitečné, aby různé stroje hledaly v různých variantách. Stratum V2, protokol pro předávání těžebních úloh, k tomu používá i rozdělení extranonce. Nadřazený server, označovaný upstream, přidělí pevný extranonce_prefix, tedy počáteční část těchto dat. Místní prostředník může rezervovat další část pro své klienty a zbytek poslat dále směrem downstream. Tyto směry jsou relativní k danému spojení. Přidělený prefix není automaticky oblast, kterou smí koncový těžař měnit; stálá hodnota prefixu pomáhá oddělit práci účastníků. [2]

U rozšířeného kanálu Stratum V2 odevzdává zpráva SubmitSharesExtended spolu s výsledkem také měněné bajty. Coinbase se skládá v pořadí coinbase_tx_prefix, extranonce_prefix, extranonce a coinbase_tx_suffix. Jsou to názvy částí dat, které si těžební programy předávají. Pole extranonce musí mít dohodnutou délku. I kdyby kratší zápis vypadal jako stejné číslo, jiná posloupnost bajtů může znamenat jinou transakci. Počítače porovnávají přesná data, nikoli jejich přibližný lidský význam. [2]

Standard Job ve Stratum V2 je úloha s pevným Merkle root. Koncový přístroj v ní může měnit jen povolené části polí version, nonce a nTime: verzi, počítadlo a čas hlavičky. Neodevzdává tedy vlastní extranonce způsobem rozšířeného kanálu. Novou coinbase a z ní nový kořen může připravit nadřazený software a dodat další úlohu. Alena proto nemusí najít ovládání extranonce přímo na svém zařízení, přestože se tento mechanismus v celé sestavě používá. [2]

Představme si, že dorazí nový prefix, zatímco se zpracovává výsledek starší práce. Zpráva SetExtranoncePrefix ve Stratum V2 platí pro úlohy poslané po ní na daném kanálu, tedy v příslušné těžební relaci. Výsledek musí zůstat spojený se správným job_id, identifikátorem úlohy, a jejím přiděleným prostorem. Dosadit všude nejnovější prefix by mohlo změnit data starého výsledku. Smyslem extranonce je vytvářet odlišné pokusy a udržet o nich přehled, nikoli zpětně přepisovat jejich zadání. [2]

Pro nejúplnější obraz čtěte toto heslo společně s Nonce, Merkle Tree, Mining Share, Block Template, Bitcoin. Opačným směrem na něj odkazují také ASIC Miner, Stratum V1, Stratum V2, Block Template.

DOC · 001Bitcoin Developer Guide — Mining and nonce spaceDokumentace DOC · 002Stratum V2 — Extended extranonce and jobsSpecifikace DOC · 003BIP 34 — Height in coinbaseSpecifikace DOC · 004Bitcoin Developer Reference — Coinbase inputDokumentace DOC · 005NIST — Binary data unitsDokumentace
Revidováno: Primární zdroje · Nejde o investiční doporučení