50 / 736NONCE

Nonce

Těžební čítač v hlavičce bloku

Nonce je číslo, které těžební zařízení mění při hledání nového bitcoinového bloku. Každou změnou získá jiný vstup do výpočtu a může zkusit, zda tentokrát výsledek splní pravidla těžby.

Těžař počítá hash, číselný otisk hlavičky bloku. Aby splnil Proof of Work (tedy důkaz výpočetní práce), musí být tento výsledek menší nebo roven předepsanému limitu zvanému target. Nonce je jednou z hodnot, jejichž změnou lze připravit další pokus. Není to heslo ani tajný klíč: po zveřejnění bloku ho může vidět každý.

Anna provozuje těžební zařízení, které zkouší sestavit nový blok transakcí. Z jeho hlavičky, stručného souboru údajů o bloku, vypočítá pomocí SHA-256 číselný otisk neboli hash. Bitcoin používá tento výpočet dvakrát za sebou, tedy double-SHA-256. Pokud je výsledek nad povoleným limitem, zařízení změní například Nonce z 10 na 11 a zkusí to znovu. Anna čísla ručně nehádá; zařízení provádí obrovské množství pokusů automaticky. Vyšší Nonce přitom neznamená menší hash ani přiblížení k cíli. A přesně stejná hlavička vždy dává stejný hash, takže její opakovaný výpočet novou šanci nepřinese. [1] [2]

Pro Nonce jsou vyhrazené čtyři bajty, tedy 32 bitů. Vejdou se do nich celá čísla od 0 do 4 294 967 295 včetně: celkem 4 294 967 296 možností, zkráceně 2^32. Je to hodně pro člověka, ale specializované těžební zařízení ASIC dokáže takový rozsah projít velmi rychle. Ani vyzkoušení všech hodnot nezaručuje úspěch. Pokud ostatní údaje v hlavičce zůstanou stejné, návrat na začátek pouze zopakuje předchozí výsledky. Proto těžební software musí připravovat i jiné hlavičky. [1] [5]

Jednou z možností je změnit Extranonce. Podobné jméno může mást: tato hodnota není dalším políčkem hlavičky, ale součástí coinbase transakce, první transakce bloku, která přiděluje těžební odměnu. Její úpravou se změní její identifikátor txid a následně Merkle root, společný otisk transakcí uložený v hlavičce. Zařízení tak dostane jiný vstup do výpočtu. Může znovu použít stejné hodnoty Nonce, ale tentokrát počítá hashe jiných hlaviček. Nová sada 2^32 možností opět není zárukou nalezení bloku. [2] [3]

V prohlížeči bloků můžete u jednoho bloku vidět malé Nonce a u druhého vysoké. Samotné číslo neříká, jak obtížné bylo blok najít nebo zda je lepší. Full Node, program samostatně ověřující bloky a transakce podle pravidel Bitcoinu, vypočítá hash celé hlavičky a porovná jej s platným limitem target, jehož kompaktní zápis obsahuje pole nBits. Rozhoduje, zda je hash menší nebo roven tomuto limitu, nikoli velikost Nonce. Tím kontrola nekončí: uzel musí ověřit i transakce a další pravidla platnosti bloku. [1] [8]

Na slovo nonce narazíte také při podepisování transakcí. Tam může označovat tajnou pomocnou číselnou hodnotu, odborně skalár, kterou podpisový algoritmus používá spolu se soukromým klíčem neboli Private Key. Její chybné opakované použití pro různé zprávy může klíč prozradit. To není případ těžebního Nonce: ten je veřejný a stejné číslo se může objevit v různých hlavičkách. Veřejné části podpisu navíc nejsou totéž co tato tajná pomocná hodnota. Pravidla jednoho použití proto nelze bez kontextu přenášet na druhé. [9]

Když těží mnoho zařízení společně v těžebním sdružení Mining Pool, neměla by všechna počítat stejné hlavičky. Takové opakování by nepřidalo nové pokusy. Koordinátor jim proto přiděluje odlišné údaje, například pro coinbase a Extranonce. Komunikaci úloh zajišťují protokoly jako Stratum; jednotlivé připojené těžební jednotky se označují také jako workers. BIP23 popisuje navíc volitelný parametr noncerange pro vymezení rozsahu Nonce. Neznamená to, že ho musí používat každý pool nebo že pool může měnit pravidla platnosti bloku. [4] [2]

Merkle Tree je způsob, jak postupným spojováním otisků transakcí vytvořit jeden společný otisk, Merkle root. Identifikátor coinbase transakce, její txid, do tohoto výpočtu vstupuje jako jeden z listů stromu. Změna Extranonce proto vede přes nový txid k nové Merkle root. Těžař může ponechat ostatní transakce i odkaz na předchozí blok a přesto získat jinou hlavičku. Nejde o přepis již potvrzeného bloku; mění se návrh nového bloku, pro který se teprve hledá platný Proof of Work. [1] [2]

Software může další varianty hlavičky vytvářet také změnou času nTime v povolených mezích nebo změnou povolených bitů verze. Druhému postupu se říká version rolling. BIP320 navrhuje využití vybraných bitů pole nVersion pro obecné účely; samotný návrh nedává těžaři volnost měnit libovolné bity. Nadále musí respektovat pravidla sítě i přidělené těžební úlohy. Žádná z těchto možností neobchází podmínku, že výsledný hash musí splnit platný target. Novější BIP323 navrhuje více bitů; zatím má stav Draft, tedy návrh. [4] [5] [10]

Pro čtení technické dokumentace je užitečné znát i formát. Hlavička má 80 bajtů: verzi, hash předchozího bloku, Merkle root, čas, pole nBits a čtyřbajtové Nonce. Nonce má datový typ uint32, tedy 32bitové celé číslo bez znaménka. Zapisuje se v pořadí little-endian, při kterém jde nejméně významný bajt jako první. Změna samotného Nonce mění hlavičku a její double-SHA-256 hash, nikoli seznam transakcí. Tento přesný zápis je důležitý pro software, i když k pochopení smyslu těžby není nutné ho umět sestavit ručně. [1]

Pokročilý čtenář může v Bitcoin Core použít příkaz getblockheader s hashem konkrétního bloku. Výchozí podrobný výstup ukáže mimo jiné nonce, bits a time. Nastavení parametru verbose na false vrátí přesných 80 bajtů hlavičky zapsaných šestnáctkově. Z nich lze znovu spočítat double-SHA-256 a porovnat číselný výsledek s platným limitem target. Při vlastní implementaci je nutné dodržet pořadí bajtů používané Bitcoinem; chybně otočené bajty vedou k jinému porovnání. Samotné přečtení Nonce z prohlížeče takovou kontrolu nenahrazuje. [1] [6] [8]

Pro nejúplnější obraz čtěte toto heslo společně s Block Header, Těžba, Proof of Work, Mining Target, Coinbase transakce, Bitcoin. Opačným směrem na něj odkazují také Block Header, Coinbase transakce, ASIC Miner, Stratum V1.

DOC · 001Bitcoin Developer Reference — Block headersDokumentace DOC · 002Bitcoin Developer Guide — MiningDokumentace DOC · 003Bitcoin Developer Reference — TransactionsDokumentace DOC · 004BIP 23 — getblocktemplate pooled miningSpecifikace DOC · 005BIP 320 — nVersion bits for general purpose useSpecifikace DOC · 006Bitcoin Core RPC — getblockheaderDokumentace DOC · 007Bitcoin Core RPC — getblocktemplateDokumentace DOC · 008Bitcoin Core v30.0 — Proof of Work validationPrimární zdroj DOC · 009BIP 340 — Schnorr SignaturesSpecifikace DOC · 010BIP 323 — 24 nVersion bits for general purpose useDokumentace
Revidováno: Primární zdroje · Nejde o investiční doporučení