Mastering Bitcoin第8章マイニングとコンセンサスの後半(P200〜)をまとめます。

ブロックのマイニング

マイニングとはあるパラメータを変更しながらブロックヘッダをハッシュ化して、ある条件のハッシュ値になるまで繰り返す作業です。
これを行うただ一つの方法は 入力を切り替えながら欲しいハッシュが出るまで計算し続けること です。

Poor-Of-Workアルゴリズム

ブロックヘッダーに含まれる4byteのnonceを切り替えながらある閾値(=difficulty target)より小さいハッシュを見つけます。
targetより小さいハッシュを見つけたということはそれだけのハッシュ計算(=仕事)をしたという証明になります。

difficultyを1bit小さくする度に解を見つける時間が指数関数的に増えます。

difficultyの表現

例えば ブロック277,316では bitsという記法でかかれたdifficulty targetが0x1903a30cという値で入っています。
この記法はdifficulty targetを係数部/指数部で表します。
最初の2桁の16進数が指数部(exponent)、次の6桁の16進数が係数(coeffcient)

target = coeffcient * 2^(8 * (exponent -3))

Difficulty Target と Retargeting

ビットコインは10分ごとに新しいブロックが生成されるように設計されています。これは一定に保たれる必要があるので、コンピュータが処理速度が早くなっても、10分に調整される仕組みが有ります。
difficulty targeとは2016ブロックごとに調整されます。
2016ブロックの生成にかかった時間を計測し、予想される時間(20160分)と比較します。

変動の最大は4倍、最小は1/4

もし急激なハッシュパワーの変化があったとしてもdifficultyの変動の最大は4倍、最小は1/4です。
4倍or1/4倍を超えるような変動は数回のretargetingを経て均衡されていきます。

うまくいったブロックのマイニング

マイナーはブロックを見つけるとネットワークにブロードキャストします。マイニングノードがこれを受け取って検証を終えたとき、同じ高さのブロックのマイニングをやめて次のブロックのためのハッシュ計算に移ります。

新しいブロックの検証

すべてのビットコインノードが独立に新しいブロックを検証します。検証して正しいブロックだけ次のピアに伝達します。
これは有効なブロックだけがネットワークを伝搬するようにするためです。
このことによって、マイナーは不正なブロックを作るインセンティブを失います。報酬も得られないし、ハッシュパワーも無駄になります。

ブロックの検証内容は p211参照

興味深いのはブロックのタイムスタンプのチェックで、ノードのサーバーの2時間未来より小さいことが条件に含まれています。

ブロックチェーンの組み立てと選択

ノードは3種類のブロックセットを持ちます

  • メインチェーンに紐付けられたブロック
  • メインチェーンから分岐したブロック
  • ブロックチェーンに既知の親がないブロック

新しいブロックを受け取った時、ブロックのprevious block hashフィールドを確認して親を探します。ほとんどの場合はチェーンの先頭のブロックです。

たまにメインチェーン以外のチェーンを拡張するブロックを受け取ります。この場合ノードは分岐チェーンとメインチェーンの累積difficultを比較してメインチェーンより上回っていれば、今度は分岐チェーンをメインチェーンとして扱います。

ほぼ同時にマイニングされた2つのブロックを逆順に受け取ると、親がいないオーファン(孤児)ブロックとして、親を受け取るまでオーファンブロックプールに保持します。

マイニングノードはどのチェーンを拡張するかを選ぶことでマイニングパワーをチェーンに「投票」していることになる。

マイニングとハッシュ化競争

マイニング競争はめっちゃ激しくて個人ではもう随分前から無理です。

extra nonceによる解決

ヘッダーのnonceは4byteなので約4億通りしかないのでこれが問題になってきます

  • difficultyが上がってくると4億通りでは足りなくなってきた
  • タイムスタンプもちょっと変更して対応
  • 4GH/sを超えるマイニングハードウェアだと1秒以内に4億通り終わっちゃう
  • coinbaseトランザクションのcoinbase script(8byteのスペース)にextra nonceを入れる

マイニングプール

  • ソロマイナーは勝ち目がない。
    • 機材を手に入れてもある期間内に掘れるかどうかは運によるので最悪期待値通りに掘れずに損害が大きい
  • マイングプールではみんなのハッシュパワーを集めて、誰かが掘り当てた場合、寄与したハッシュパワーに応じて報酬を山分けする
    • どうやってプール参加者のハッシュパワーを計測しているかというと、実際のdifficultyよりも緩いdifficultyに対するハッシュ値の提供を課し、それによって寄与度を把握する

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です