Extranonce は通常 coinbase 取引の入力に挿入する可変データ。変更すると Merkle root とヘッダーハッシュの入力を更新でき、ヘッダーの 32 ビット nonce フィールド自体は拡張しない。
nonce フィールドは 32 ビットで、他が同じヘッダーに 2^32 通りの値を与える。Extranonce はこのフィールドを延長しない。別のデータを変えて新しいヘッダーを作り、再び nonce の値を試せるようにする。 [Bitcoin Developer Guide — Mining and nonce space]
coinbase の extranonce を変えると直列化内容と TXID が変わり、対応する Merkle 木の枝とヘッダーの Merkle root を再計算する。他の取引を変える必要はないが、古いルートを再計算せず残すことはできない。 [Bitcoin Developer Guide — Mining and nonce space]
完全に自由な二つのバイトなら 2^16 通りになる。32 ビット nonce と他の固定データを使うモデルでは 2^48 通りの入力組み合わせとなる。これは試行の空間であり、発見ブロック数でも全探索後の成功保証でもない。 [Bitcoin Developer Guide — Mining and nonce space]
BIP 34 は coinbase の scriptSig の先頭に正しく符号化されたブロック高を要求する。100 バイトの上限は extranonce だけでなく scriptSig 全体に適用される。可変領域で高さを上書きしたり取引形式を壊したりしてはいけない。 [BIP 34 — Height in coinbase] [Bitcoin Developer Reference — Coinbase input]
Stratum V2 は extended extranonce を固定の upstream プレフィックス、ローカル予約部分、downstream 空間に分ける。これにより無駄な探索重複を避ける。割り当てられた extranonce_prefix は終端マイナーが自由に変更できる領域とは限らない。 [Stratum V2 — Extended extranonce and jobs]
SubmitSharesExtended では coinbase を coinbase_tx_prefix、extranonce_prefix、extranonce、coinbase_tx_suffix の順に組み立てる。提出する extranonce のバイト列は合意した長さが必要だ。同じ数を短いバイト列で表しても、同じ取引になるとは限らない。 [Stratum V2 — Extended extranonce and jobs]
Stratum V2 の Standard Job は固定の Merkle root を使い、version、nonce、nTime の許可された部分だけを変える。標準機器は extended チャネルのように自ら extranonce を提出しない。上位ノードが新しいジョブの準備時に coinbase を変更できる。 [Stratum V2 — Extended extranonce and jobs]
Stratum V2 の SetExtranoncePrefix はそのチャネルでメッセージ後に送られたジョブに適用される。結果は正しい job_id と割り当て空間に結び付けておく必要がある。最新プレフィックスは古い結果の元ジョブの記録を代替しない。 [Stratum V2 — Extended extranonce and jobs]
理解を深めるには、この項目とあわせて次もお読みください Nonce, Merkle tree, Mining Share, Block Template. 次の項目からも参照されています ASIC Miner, Block Template, getblocktemplate.