見出し画像

Mining

Mining

ビットコインの分散型合意形成プロセスでは、ネットワーク内のノードが「ブロック」と呼ばれるトランザクションのパッケージを継続的に作成しようとする。ネットワークはおおよそ10分ごとに1つのブロックを生成することを目指していて、各ブロックにはタイムスタンプ、ノンス、前のブロックへの参照(つまりハッシュ)、そして前のブロック以降に行われた全てのトランザクションのリストが含まれる。時間とともに、これによって永続的で絶えず成長する「ブロックチェーン」が作られ、ビットコイン台帳の最新の状態を常に表すように更新される。

ブロックが有効かどうかをチェックするアルゴリズムは以下の通り

  • ブロックが参照する前のブロックが存在し、有効であることをチェックする。

  • ブロックのタイムスタンプが前のブロックよりも大きく、未来への2時間以内であることをチェックする。

  • ブロックの作業証明が有効であることをチェックする。

  • S[0]を前のブロックの終わりの状態とする。

  • TXをブロックのトランザクションリストとし、nトランザクションがあるとする。0...n-1の全てのiに対して、S[i+1] = APPLY(S[i],TX[i])を設定する。任意のアプリケーションがエラーを返した場合、終了してfalseを返す。

  • trueを返し、S[n]をこのブロックの終わりの状態として登録する。

基本的に、ブロック内の各トランザクションは、トランザクションが実行される前の正規状態から新しい状態への有効な状態遷移を提供しなければならない。状態はブロックにどのような形でエンコードされるわけでもなく、検証ノードによって記憶される純粋な抽象概念であり、ジェネシス状態から始めて全てのブロックの全てのトランザクションを順に適用することによってのみ(安全に)計算できる。また、マイナーがブロックにトランザクションを含める順序が重要であることにも注意。例えば、Aが作成したUTXOをBが使う2つのトランザクションAとBがブロック内にある場合、AがBの前に来ればブロックは有効だが、そうでなければ無効になる。

上記のリストにある他のシステムにはない一つの有効条件は、「作業証明」の要求だ。正確な条件は、各ブロックのダブルSHA256ハッシュが256ビット数として扱われ、動的に調整されたターゲットよりも小さくなければならないことで、これは執筆時点で約2187である。これはブロックの作成を計算上「難しい」ものにすることで、シビル攻撃者が自分たちに有利な全てのブロックチェーンを再作成するのを防ぐ目的がある。SHA256は完全に予測不可能な擬似ランダム関数として設計されているため、有効なブロックを作成する唯一の方法は、単純に試行錯誤であり、ノンスを繰り返しインクリメントして新しいハッシュが一致するかどうかを確認することだ。

現在のターゲット2187では、ネットワークは有効なブロックが見つかる前に平均して269回の試みをしなければならない。一般に、ターゲットはネットワークによって2016ブロックごとに再調整され、平均してネットワーク内のあるノードが10分ごとに新しいブロックを生成するようになっている。

マイニングによる報酬として、各ブロックのマイナーは25BTCを「無から」受け取る権利がある。さらに、トランザクションの入力が出力よりも高い総額を持つ場合、その差額も「トランザクション手数料」としてマイナーに渡る。面白いことに、これがBTCが発行される唯一のメカニズムであり、初期状態のブロックチェーンにはコインが全く含まれていなかった。

マイニングの目的をより深く理解するために、悪意のある攻撃者が現れた場合のシナリオを見てみよう。ビットコインの基礎となる暗号技術は安全であるため、攻撃者は直接暗号技術によって保護されていないビットコインシステムの部分、つまりトランザクションの順序を狙う。攻撃者の戦略は、ある商品と引き換えに商人に100BTCを送り、商品が配達されるのを待ってから、同じ100BTCを自分自身に送る別のトランザクションを作成し、そのトランザクションが最初に行われたものであるとネットワークを説得しようとすること。

一度商品が配達された後、攻撃者は100BTCを自分自身に送る新しいトランザクションを作成する。このトランザクションがそのまま放置されれば、処理されない。なぜなら、マイナーがAPPLY(S,TX)を実行しようとすると、TXが存在しないUTXOを消費していることがわかるからだ。そこで攻撃者は、ブロックチェーンの「フォーク」を作成し、古いものの代わりに新しいトランザクションを含む別のバージョンのブロック270000をマイニングし始める。この新しいブロックのデータが異なるため、作業証明をやり直す必要がある。さらに、攻撃者の新しいブロック270000は異なるハッシュを持っているため、元のブロック270001から270005はそれを指さない。結果として、元のチェーンと攻撃者の新しいチェーンは完全に分離される。

フォークが発生した場合、最長のブロックチェーンが真実と見なされるため、合法的なマイナーは270005チェーン上で作業を続け、攻撃者だけが270000チェーン上で作業をする。攻撃者が自分のブロックチェーンを最長にするためには、追いつくためにネットワークの残りの部分よりも多くの計算能力を持っている必要がある(これが「51%攻撃」と呼ばれる理由)。


フォーク

ブロックチェーン上で同じ起点から異なる2つ以上のブロックチェーンが生じる現象のことを言うよ。フォークは主に2つの種類に分けられる:ソフトフォークとハードフォーク。

ソフトフォーク

ソフトフォークは、新しいルールが古いルールと互換性があるアップデートを指す。新しいルールに従うブロックが古いルールを使うノードにも有効と認識されるが、古いルールに従って生成されたブロックが新しいルールを使うノードには有効でない可能性がある。ソフトフォークは、ブロックチェーンネットワーク全体の合意を必要とせず、更新を行ったノードだけが新しいルールに従う。そのため、比較的スムーズにアップデートを行うことができ、分裂のリスクが低い。

ハードフォーク

ハードフォークは、新しいルールが古いルールと互換性がないアップデートを指す。これは、新しいルールに従って生成されたブロックが古いルールを使うノードには無効とみなされるため、ブロックチェーンが2つの異なるチェーンに分裂する。ハードフォークが起こると、一つのチェーンは新しいルールに従い、もう一つのチェーンは古いルールに従い続ける。
この場合、ネットワークは分裂し、それぞれのチェーンは別々の通貨と見なされることがある。ハードフォークは大きな変更を実現するために行われるが、コミュニティの合意形成が必要であり、分裂による混乱や価値の分散が起こるリスクがある。

フォークが発生すると、ネットワークの参加者はどちらのチェーンを支持するか選択する必要があるが、技術的な進化やセキュリティの向上、新機能の追加といったブロックチェーンの成長にも必要。






よろしければサポートお願いします!よりいい情報を発信します。