Mastering Bitcoin第8章マイニングとコンセンサスの前半(P183〜P200)をまとめます。
特に難しいことは書いてなかった。

マイニングはトランザクションをブロックに刻み、取引を成立させるとともに、新しいビットコインを掘り当てる作業になります。
マイナーは報酬としてビットコインを受け取る可能性と引き換えに、ビットコインネットワークに処理能力を提供します。

マイナーは以下の手順でマイニングを行います。

トランザクションを受け取る

マイナーは他のノードからトランザクションを受け取ります。
トランザクションはP2Pネットワークを伝搬してきます。

トランザクションが有効かチェックする

受けとったトランザクションはまず有効かどうかチェックします。
チェック項目はP188に18項目列挙されています。
チェックした結果、トランザクションが不正だった場合はそのまま破棄します。
有効なトランザクションは隣接するノードに転送する他、マイニングに使用するためメモリプールに保存しておきます。

有効なトランザクションを集めてブロックを作成する

メモリプールに溜まったトランザクションからブロックを作成します。
ブロックに入れるトランザクションは優先度の高いものから入れていきます。
優先度はインプットのvalueと年齢の積の総和をトランザクションの総データサイズで割ったものになります。
ブロックに最初に追加するトランザクションはgenerationトランザクションまたはconinbaseトランザクションと呼ばれます。
これは特別なトランザクションで、マイナーへの報酬のトランザクションになります。
このトランザクションにinputはなく、マイナーへの報酬のアウトプットのみが入っています。

マイニング

マイニングはブロックのヘッダーを何度もハッシュ化し、決まった値より小さくなるヘッダーを探します。
そのためにまずヘッダーを作成します。
ヘッダーには

サイズ フィールド名 説明
4バイト Version ソフトウェア/プロトコルバージョン番号
32バイト previous Block Hash 1つ前のブロックのハッシュ
32バイト Merkle Root ブロック内の全トランザクションに関するマークルツリーのrootハッシュ
4バイト Timestamp ブロックのおおよその生成時刻
4バイト Difficulty Target ブロック生成時のproof-of-workアルゴリズムのdifficulty
4バイト Nonce prrof-of-workアルゴリズムで用いられるカウンタ

が含まれています。
この中でNonceを変更しなたら欲しいハッシュが得られるまで演算を繰り返します。

疑問点

マイナーは他のノードにトランザクションを渡さず自分だけで保持しておくほうが得な気がする。

コメントを残す

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