FPGA開発日記

FPGAというより、コンピュータアーキテクチャかもね! カテゴリ別記事インデックス https://msyksphinz.github.io

「Mastering Bitcoin」を読む (第8章 マイニングとコンセンサス)

「Mastering Bitcoin」を読んでいる。いよいよマイニングだ。 Bitcoinのマイニングは、どのような仕組みで、どのような計算をしているのかについて解説している。

ただし、このプロセスを踏むことによって、なぜマイナーが不正を行っていないことの証明になるのかが理解できない。 例えば、マイナーが既知のハッシュペアを組み合わせることによって不正なブロックを作ることもできそうだ。 これを防ぐ仕組みは、他のブロックが順方向にハッシュの計算をしても分からないのでは?

  • 例 : 悪意のあるトランザクションを含むブロックを構築する。
    • 自分で、そのブロックのハッシュを計算し、それをマイニング結果として放出する。
    • これが、他社により棄却できるのはなぜ?
      • そもそも、そのような悪意のあるトランザクションは作れない、ということなんだろうか... とすると、検証の意味がなくなってしまう...

もう少し読み進めていかなければ、理解できそうにない。

ビットコインとブロックチェーン:暗号通貨を支える技術

ビットコインとブロックチェーン:暗号通貨を支える技術

関連記事

これは著者が読んだ内容をまとめているだけなので、誤訳、理解不足により誤っている可能性があります!鵜呑みにしないようにお願いします。 文章の途中に挿入している画像は、 https://www.bitcoinbook.info/translations/ja/book.pdf に含まれている画像を使用させていただいています。

第6章、第7章は一応読んだが、第8章のほうが面白そうなので先にまとめる。

第8章 マイニングとコンセンサス

イントロダクション

  • マイニングにより、不正なトランザクションや、同じビットコインが二度使用される(ダブルスペンド)を防ぐことができる。
  • ビットコインのマイニングにより、2つの手段で報酬を得ることができる。
  • 新しいブロックを作ることにより得られる報酬は、採掘される総量に応じて減少している。
    • おおよそ4年に1度(正確には210,000ブロック)半減される。
    • この調子でいくとおおよそ2040年にはすべてのビットコインが彫りつくされ、マイナーは報酬を得ることができなくなる。
      • トランザクション手数料は残るため、こちらで稼ぐことになる。
      • 総額に応じて発行するビットコインの量を制限する仕組みは、デフレを防ぐ仕組みとなっている。
        • 紙幣のように、銀行が無限に発行することができないため、デフレを抑制する。

分散化コンセンサス

独立したトランザクション検証

マイニングノード

  • マイニングノードは特別な専用ビットコインノード
  • 通常のビットコインノードと同様に、新しいブロックを持っているが、別の新しいブロックが伝搬してくるということは、マイナー同士の競争が終了したことを示している。
    • この場合、新しいブロックを構成して再度マイニングをスタートさせる。

ブロックへのトランザクション集積

  • ブロックは、複数のトランザクションを集めて形成される。これを「候補ブロック」と呼ぶ。
  • 例えば、ジンが、ブロック277,314までのブロックチェーンを持っており、次の277,315のブロックをマイニングしているとする。
    • その間に、次のマイニングすべきブロックを組み立てる。
    • 277,315のマイニング中に、別のノードから277,315のブロックを受け取ると、競争が終わったことを示す。
      • すると、ブロック277,315に含まれている、マイニング済みのトランザクションを削除し、次の277,316のマイニングブロックの構成を作り始める。

トランザクション年齢、トランザクション手数料、トランザクション優先度

Generation トランザクション

ブロックのマイニング

  • SHA256関数を使って、ビットコインのマイニングを実行する。
  • 入力をランダムに修正しながら、偶然に欲しいハッシュが現れるまで試行を繰り返すことを、マイニングと呼ぶ。

Proof-of-Workアルゴリズム

  • SHA256アルゴリズムを用いる。再現性があり、同じ入力を与えれば、必ず同じっけ化を出力する。
  • 例 : テキストをSHA256によってハッシュ化するのだが、テキストの最後に "nonce" と呼ばれる数値を追加して、ハッシュ化した値の上位1桁の16進数が"0"となる "nonce" を算出せよ。
    • "nonce" を 0 から 15 までずらしていき、どの値によりハッシュ値が 0 になるかを確かめる。
    • 例 : "nonce=13" の場合ハッシュ値の上位1桁の値が "0" となれば、「マイニング完了」
    • この「ハッシュ化した値の上位1桁」が target difficulty となる。計算能力が上がれば、この target difficulty を再調整し、 10分に1度のマイニング競争が保たれるように調整される。
      • target difficulty は各ビットコインノードにより自動的に調整される。
      • また、急激な複雑性の変動がないように調整されている。
  • 本書が書かれている時点で、ビットコインネットワークは 000000000000004c296e6376db3a241271f43fd3f5de7ba18986e517a243baa7 よりも小さなハッシュヘッダを持つブロックを計算する必要がある。

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

  • ジンはASICを使ってビットコインのマイニングを行っている。ブロック277,316のマイニングを始めて11分後に、ハードウェアが解を発見。
    • → 陣のマイニングノードはブロックをすべてのピアに送信する。
    • 次のマイニングを開始する。

新しいブロックの検証

  • マイニングに成功したブロックの検証を行う。
    • ブロックのデータ構造が有効である。
    • ブロックのヘッダハッシュが target difficulty よりも小さいこと。
    • etc ...
  • ビットコインノードによって独立した検証が実施され、マイナーが不正を行うことを防いでいる。