225 / 691TARGET

Mining Target

作業証明の数値しきい値

Mining Target はヘッダーハッシュを比較するしきい値。数値そのもの、コンパクト形式の nBits、規則がそのブロックに要求する実際のターゲットを区別しよう。

Mining Target は作業証明の検証でヘッダーハッシュに適用する非負の数値しきい値。有効なネットワークターゲットは正で、規則に許可される必要があり、ハッシュはそれを超えてはならない。低いほど探索が難しい。

Bitcoin Core v29.0 は作業証明の検査で、導出されたターゲットを超えるハッシュを拒否する。条件は厳密な未満ではなく hash ≤ target となる。比較するのはヘッダー全体のハッシュ数値で、nonce だけではない。 [Bitcoin Core v29.0 — Proof-of-work checks]

数値が異なるハッシュでも先頭のゼロの数は同じになりうる。残りの桁と、ターゲットに対する数値の大小も重要だ。ゼロは希少性の説明にはなるが、完全な hash ≤ target 比較を代替しない。 [Bitcoin Core v29.0 — Proof-of-work checks]

nBits フィールドは 32 ビットだが、ターゲットは 256 ビットの空間で解釈する。符号化には指数と符号ビットを持つ係数が含まれる。例えば 0x04123456 は 0x12345600 に復号される。これは形式の例で、現在要求されるネットワークターゲットではない。 [Bitcoin Core v29.0 — Compact arithmetic]

80 バイトのヘッダーでは nBits を四つの little-endian バイトとして直列化する。数値 0x1d00ffff は ff ff 00 1d に対応する。データを読む際のバイト順と表示された数の桁順を混同しないようにしよう。 [Bitcoin Developer Reference — Block headers and nBits]

Bitcoin Core v29.0 の DeriveTarget は負のターゲット、ゼロ、オーバーフロー、ネットワークの powLimit 超過を拒否する。nBits の数を勝手に増やすだけではだめだ。コンパクト表記の展開成功はターゲットの有効性を証明しない。 [Bitcoin Core v29.0 — Proof-of-work checks]

文脈に基づく検証は前のブロックとネットワーク規則に従い nBits を GetNextWorkRequired と比較する。不一致は bad-diffbits となる。勝手に選んだ易しいターゲットを下回るハッシュでも、誤った nBits を正当化できない。 [Bitcoin Core v29.0 — Contextual and block validation]

一様な 256 ビットハッシュのモデルで許可されたターゲットを T とすると、試行一回の確率は p = (T + 1) / 2^256。ゼロから T まで両端を含めて許されるためだ。これは比較条件からの導出であり、ターゲットだけでハッシュレートや次のブロックの正確な時刻は決まらない。 [Bitcoin Core v29.0 — Proof-of-work checks]

Bitcoin Core はヘッダー以外に取引ルート、coinbase、ブロック制限、取引の有効性も検査する。正しいターゲットを満たすことは必要だが、これらの検査を代替しない。低いハッシュで無効なブロック内容は修復できない。 [Bitcoin Core v29.0 — Contextual and block validation]

理解を深めるには、この項目とあわせて次もお読みください Share Difficulty, Proof of Work, Nonce, ブロックヘッダー. 次の項目からも参照されています ASIC Miner, Nonce, Mining Share, Share Difficulty.

DOC · 001Bitcoin Core v29.0 — Proof-of-work checks一次資料 ↗DOC · 002Bitcoin Developer Reference — Block headers and nBits文書 ↗DOC · 003Bitcoin Core v29.0 — Compact arithmetic一次資料 ↗DOC · 004Bitcoin Core v29.0 — Contextual and block validation一次資料 ↗
一次資料を優先 · 投資助言ではありません