Difficulty Adjustment は、ブロックを見つける難しさを自動的に変える仕組みです。マイナーが速すぎるペースでブロックを見つければ探索を難しくし、遅すぎれば簡単にします。計算能力が大きく変化しても、Bitcoin が大まかなペースを保てるのはこのためです。ルールをすべて検証する各ノードが同じ基準で調整を確認し、管理者が値を決めるわけではありません。
新しいマイニング機器が大量に加わった場面を想像してください。全体で1秒あたりに試せる計算が増えるので、難易度が同じなら平均してより速くブロックが見つかります。ブロックは承認済みの取引をまとめたもので、その生成時には新しいビットコインが発行されることもあります。調整がなければ、高性能な機器は発行ペースまで速めてしまいます。マイナーはブロックヘッダーの数値的な指紋であるハッシュを繰り返し計算し、十分小さな結果が出れば成功です。基準を厳しくすると1回の試行が成功する確率が下がり、平均して必要な作業量が増えます。 [3]
Bitcoin の本番ネットワークである mainnet では、2 016ブロックごとに難易度を再計算します。1ブロックが平均10分なら、およそ2週間です。ただし、タイマーが鳴って変更されるのではありません。ブロック高と呼ばれる通し番号が所定の値に達すると調整が行われます。多くのマイナーが突然機器を止めれば、残りのブロックにはより長い時間がかかることがあります。まず古い難易度のままその期間を終える必要があり、mainnet に即時の緊急引き下げはありません。 [1] [2]
計算に使う経過時間が、目標の14日ではなく10日だったとします。次の期間は難しくなり、難易度はおよそ14対10の比率、つまり40%上がります。反対に測定した期間が28日なら、難易度はおよそ半分になります。これらは丸めを省き、許される最低難易度が計算を制限しないと仮定した簡略例です。その後の計算能力が同じなら、新しい設定によって期待されるブロック間隔が再び10分に近づきます。 [1] [2]
10分は長期的な平均であって、約束された待ち時間ではありません。2つのブロックが続けて見つかることもあれば、次の1つをずっと長く待つこともあります。自分の取引が次のブロックに入るとも限りません。手数料や、ほかに待っている取引も関係します。難易度調整は BTC の価格を操作せず、マイナーの利益も保証しません。また、1ブロックで新たに発行できる量も変えません。その量を定期的に半分にする Halving は別のルールに従います。 [2] [3]
ルールが扱うのは target という数値の上限です。target が小さいほどマイニングは難しく、難易度と呼ばれる数値はその逆の関係を表します。新しい target は、古い target に測定時間を掛け、目標時間の1 209 600秒で割って求めます。計算前に、測定時間を目標時間の4分の1から4倍までに制限し、1回の調整幅を抑えます。さらに target は最大許容値の powLimit を超えられません。ヘッダーには精度が限られるコンパクトな nBits 形式で保存されるため、先ほどの例の割合は近似値です。 [1] [2]
Bitcoin Core は、終了した期間の最後のブロックと最初のブロックについて、ヘッダーのタイムスタンプを比べます。2 016ブロックの間には2 015個の間隔があり、ルールはこの歴史的な特徴を引き継いでいます。タイムスタンプはネットワークのルールの範囲でマイナーが記入します。ブロック発見時刻の正確な測定値でも、過去のブロックから求める別の時間値 Median Time Past でもありません。調整の目的を理解するだけなら不要な細部ですが、計算を正確に再現する際には重要です。 [1]
ウェブサイトでは次回の難易度変更の予測をよく見かけます。期間が終わるまではブロックが増え続けるので、予測も変わり得ます。完了した調整は自分のノードで検証できます。期間の境界にあるブロックの時刻を比べ、nBits を数値の target に変換し、制限と丸めを含めて計算を再現します。Full Node、つまり Bitcoin のルールを独立して検証するノードは、ブロックを受け入れる際に必要な target を確認します。ここで説明したのは mainnet の仕組みで、テストネットワークではルールが異なる場合があります。 [1] [2]
理解を深めるには、この項目とあわせて次もお読みください Proof of Work, マイニング, Timechain / Blockchain, Block Subsidy. 次の項目からも参照されています Timechain / Blockchain, Proof of Work, マイニング, Halving.