「Mastering Bitcoin」を読んでいる。いよいよマイニングだ。 Bitcoinのマイニングは、どのような仕組みで、どのような計算をしているのかについて解説している。
ただし、このプロセスを踏むことによって、なぜマイナーが不正を行っていないことの証明になるのかが理解できない。 例えば、マイナーが既知のハッシュペアを組み合わせることによって不正なブロックを作ることもできそうだ。 これを防ぐ仕組みは、他のブロックが順方向にハッシュの計算をしても分からないのでは?
- 例 : 悪意のあるトランザクションを含むブロックを構築する。
- 自分で、そのブロックのハッシュを計算し、それをマイニング結果として放出する。
- これが、他社により棄却できるのはなぜ?
- そもそも、そのような悪意のあるトランザクションは作れない、ということなんだろうか... とすると、検証の意味がなくなってしまう...
もう少し読み進めていかなければ、理解できそうにない。
- 作者: アンドレアス・M・アントノプロス,今井崇也,鳩貝淳一郎
- 出版社/メーカー: エヌティティ出版
- 発売日: 2016/07/14
- メディア: 大型本
- この商品を含むブログ (7件) を見る
関連記事
これは著者が読んだ内容をまとめているだけなので、誤訳、理解不足により誤っている可能性があります!鵜呑みにしないようにお願いします。 文章の途中に挿入している画像は、 https://www.bitcoinbook.info/translations/ja/book.pdf に含まれている画像を使用させていただいています。
第6章、第7章は一応読んだが、第8章のほうが面白そうなので先にまとめる。
第8章 マイニングとコンセンサス
イントロダクション
- マイニングにより、不正なトランザクションや、同じビットコインが二度使用される(ダブルスペンド)を防ぐことができる。
- ビットコインのマイニングにより、2つの手段で報酬を得ることができる。
- 新しいブロックを作ることにより得られる報酬は、採掘される総量に応じて減少している。
分散化コンセンサス
- ビットコインは分散ネットワークで構築されており、中央集権的なコンセンサスをとっていないため、それぞれのビットコインネットワークノードで判断が行われる。
- ノード間での相互作用によりネットワーク内での相互作用が生じることになる。
独立したトランザクション検証
- すべてのノードは、隣接したノードからトランザクションが転送されると、そのトランザクションの検証を行う。
- 検証結果が正しいトランザクションである場合、そのトランザクションは「トランザクションプール」「メモリプール」に格納される。
マイニングノード
- マイニングノードは特別な専用ビットコインノード
- 通常のビットコインノードと同様に、新しいブロックを持っているが、別の新しいブロックが伝搬してくるということは、マイナー同士の競争が終了したことを示している。
- この場合、新しいブロックを構成して再度マイニングをスタートさせる。
ブロックへのトランザクション集積
- ブロックは、複数のトランザクションを集めて形成される。これを「候補ブロック」と呼ぶ。
- 例えば、ジンが、ブロック277,314までのブロックチェーンを持っており、次の277,315のブロックをマイニングしているとする。
- その間に、次のマイニングすべきブロックを組み立てる。
- 277,315のマイニング中に、別のノードから277,315のブロックを受け取ると、競争が終わったことを示す。
- すると、ブロック277,315に含まれている、マイニング済みのトランザクションを削除し、次の277,316のマイニングブロックの構成を作り始める。
トランザクション年齢、トランザクション手数料、トランザクション優先度
Generation トランザクション
- ブロックの最初のトランザクションは、「Generationトランザクション」または「Coinbaseトランザクション」と呼ばれている。
- このブロックのマイニングの競争に勝った場合、マイナーのウォレットへの支払いのためのトランザクションがこれに相当する。
- 手数料の総和 + 新しいブロックに対する報酬 (これはビットコインネットワーク全体で決まっている)
ブロックのマイニング
- SHA256関数を使って、ビットコインのマイニングを実行する。
- 入力をランダムに修正しながら、偶然に欲しいハッシュが現れるまで試行を繰り返すことを、マイニングと呼ぶ。
Proof-of-Workアルゴリズム
- SHA256アルゴリズムを用いる。再現性があり、同じ入力を与えれば、必ず同じっけ化を出力する。
- 例 : テキストをSHA256によってハッシュ化するのだが、テキストの最後に "nonce" と呼ばれる数値を追加して、ハッシュ化した値の上位1桁の16進数が"0"となる "nonce" を算出せよ。
- 本書が書かれている時点で、ビットコインネットワークは 000000000000004c296e6376db3a241271f43fd3f5de7ba18986e517a243baa7 よりも小さなハッシュヘッダを持つブロックを計算する必要がある。
うまく行ったブロックのマイニング
- ジンはASICを使ってビットコインのマイニングを行っている。ブロック277,316のマイニングを始めて11分後に、ハードウェアが解を発見。
- → 陣のマイニングノードはブロックをすべてのピアに送信する。
- 次のマイニングを開始する。
新しいブロックの検証
- マイニングに成功したブロックの検証を行う。
- ブロックのデータ構造が有効である。
- ブロックのヘッダハッシュが target difficulty よりも小さいこと。
- etc ...
- ビットコインノードによって独立した検証が実施され、マイナーが不正を行うことを防いでいる。