Nonce v block headeru je veřejná uint32 souřadnice vyhledávacího prostoru, nikoli tajemství nebo kryptografický podpisový nonce. Pro jednu pevnou hlavičku existuje jen 2^32 hodnot, takže moderní ASIC tento prostor vyčerpá velmi rychle. Mining software proto mění také extranonce v coinbase transakci, Merkle root, nTime a někdy povolené version bits.
Bitcoin block header má 80 bajtů: version, hash předchozího bloku, Merkle root, time, nBits a čtyřbajtový nonce. Nonce je unsigned 32bit integer. Jeho změna mění serializovanou hlavičku a tím i double-SHA-256, aniž by sama měnila seznam transakcí.
SHA-256 nedává při malé změně vstupu žádný užitečný směr. Nonce zvýšený o jedna vytvoří prakticky nesouvisející 256bitový hash, takže každý pokus je další pravděpodobnostní trial. K výherní hodnotě nelze postupovat gradientem.
Čtyřbajtový nonce nabízí pro jednu pevnou hlavičku přesně 4 294 967 296 možností. Současné ASICy tento rozsah projdou mnohokrát za sekundu, takže samotný header nonce pro moderní mining nestačí.
Pooly a mining software používají extranonce uvnitř coinbase transakce. Přes název nejde o další pole block headeru. Změna extranonce změní coinbase txid, následně Merkle root a tím vznikne úplně nová hlavička s novým prostorem 2^32 nonce hodnot.
Coinbase transakce je list Merkle tree. Jakmile se změní její txid, změna se propaguje přes strom až do Merkle root v hlavičce. Těžař tak dostane nový header i se stejným previous-block hashem a téměř stejným obsahem bloku.
Další prostor lze získat změnou nTime v povolených mezích a rollingem povolených version bits. BIP320 popisuje general-purpose použití vybraných nVersion bitů. Nic z toho nemění konsenzus: výsledný header hash musí stále splnit target.
V poolovém miningu pool nebo job negotiator přiděluje workerům unikátní coinbase/extranonce a další parametry, aby zařízení nehashovala totéž. BIP23 pracuje i s nonce range; Stratum protokoly rozdělují search space mezi velké množství ASICů efektivněji.
Samotná číselná hodnota nonce není dobrá ani špatná. Full node zahashuje celý konkrétní header a výsledek porovná s targetem odvozeným z nBits. Nízký nonce nic nedokazuje; důkaz práce je pouze dostatečně nízký hash celé hlavičky.
Slovo nonce se používá i u podpisů, kde může jít o tajný jednorázový skalár a jeho opakování může kompromitovat private key. Mining nonce je naopak veřejný údaj v block headeru a žádné utajení nepotřebuje. Tyto dva významy se nesmějí zaměňovat.
Bitcoin Core přes getblockheader vrací pro blok mimo jiné nonce, bits a time. Pro nezávislé ověření lze přesně serializovat 80bajtovou hlavičku, provést double-SHA-256 a ověřit, že výsledná číselná hodnota splňuje target.
Pro nejúplnější obraz čtěte toto heslo společně s Hlavička bloku, Těžba, Proof of Work, Mining Target, Coinbase transakce, Bitcoin. Opačným směrem na něj odkazují také Hlavička bloku, Coinbase transakce, Mining Target, Extranonce.