本文へスキップ
buybitcoinsmart

用語集 / マイニングとコンセンサス

ナンス

ナンスとは?
ナンスとは、ブロックヘッダー内にある4バイトのカウンターのことで、マイナーは目標値未満のハッシュを探す間これを増やしていきますが、ヘッダー1つあたりの試行回数は4,294,967,296回にとどまります。

BIP-320で規定されています。

この語は「number used once」(一度だけ使われる数)の略で、ビットコインでは、変えるためだけに存在するヘッダーの1つのフィールドを指します。4バイトは2009年には余裕があるように見えましたが、現在ではごくわずかです。最新のマシン1台で、全範囲を一瞬で使い切ってしまいます。そのためマイナーはヘッダーの他の部分も変化させており、ナンスは探索の最も内側のループにすぎません。

仕組み

ナンスは80バイトのヘッダーの最後の4バイトを占めており、マイニングとはその値を順に試していく行為です。

マイナーは候補となるヘッダーを組み立て、SHA-256で2回ハッシュ化し、その結果を目標値と比較します。結果が大きすぎる場合は、カウンターを増やしてヘッダーを再びハッシュ化します。他に何も変える必要がないため、このループは低コストに保たれます。SHA-256は64バイトの塊ごとに処理するので、ヘッダーの最初の64バイトは一度だけ処理し、試行のたびに再利用できます。

問題は範囲です。4バイトには4,294,967,296通りの異なる値が収まり、200テラハッシュ毎秒の性能を持つASICは、それらすべてをおよそ21マイクロ秒で通過します。そのため探索には3つの外側のループがあります。マイナーはエクストラナンス、すなわちコインベース取引のインプットスクリプトにある予備の数バイトを変化させます。これによりその取引が変わり、マークルルートが変わり、まったく新しいヘッダーが生まれて探索できるようになります。ルールの範囲内でタイムスタンプを先に進めることもできます。そしてBIP320以降は、マスク0x1fffe000を使ってバージョンフィールドの16ビットを変化させることができ、取引リストにまったく触れることなく探索空間をさらに65,536倍に広げます。

サトシ自身の探索は記録を残しています。ジェネシスブロックのヘッダーには2083236893という値が入っており、これは2009年にCPUで、エクストラナンスの変化もバージョンビットも使わずに見つかったものです。

目にする場所

すべてのブロックエクスプローラーのすべてのブロックページには、勝ち取ったナンスが表示されますが、その数字から分かることはほとんどありません。

マシンは探索空間を予測できない順序で進み、現在では実際の変化のほとんどがエクストラナンスとバージョンロールから生じるため、採掘されたブロックのこの数字はほぼランダムです。低い値や高い値に意味を読み取るのは、初心者によくある間違いです。このフィールドはむしろファームウェアの開発者にとって重要です。Stratumは接続された各マシンにエクストラナンスの独自の範囲を割り当て、同じプールの2つのワーカーが作業を重複させないようにします。またStratum V2は、同じ調整の問題を中心にジョブの交渉を再構築します。

この語はマイニングから遠く離れた場所でも目にします。暗号化スキームは、2つのメッセージが同じ暗号文を生まないようにするためにナンスを使います。Ethereumは取引のカウンターとしてアカウントナンスを使い、ウェブのログインはリプレイ攻撃を防ぐためにナンスを使います。いずれもブロックヘッダーのフィールドではなく、この共有された語は、ビットコインにおける他のどの借用語よりも、避けられる混乱を引き起こします。

よくある質問

ブロックのナンスはなぜ4バイトしかないのですか?

2009年当時、40億回のハッシュを素早く試せるマシンは存在しなかったため、それで十分でした。現代のマイナーはその範囲を瞬時に使い切り、コインベース取引のエクストラナンスとバージョンロールに追加の探索空間を見出しています。

エクストラナンスとは何ですか?

ヘッダーのナンスを使い切ったときにマイナーが変化させる、コインベース取引のインプットスクリプト内の予備のバイトです。これを変えるとマークルルートが変わり、新しいナンスの範囲を持つまったく新しいヘッダーが生まれます。

関連用語

マイニングとコンセンサスのその他の用語

このページを英語で読む