Mastering Bitcoin「ブロックチェーン」「マイニングとコンセンサス」

これで終わり!次回はEthereumとBitcoinを比較する予定。

ブロックチェーン

定義

ブロックチェーンは、トランザクションを含むブロックが数珠つなぎに並べられていて、ひとつ前のブロックへのリンクを持つような構造となっている。 データ構造は単独のファイルあるいはシンプルなDBに保存されている。Bitcoin Coreクライアントの場合、Google LevelDBを使ってメタデータが保存されている。 ブロックはひとつ前のブロック(親)へのリンクを持っているので、垂直スタックとして表現される。(ブロックが追加されると、どんどんスタックにたされていくイメージ) なので、ブロックの距離は高さで表現され、最新のブロックは、トップや先端という言葉で表現される。

各ブロックは、ヘッダーをハッシュ化して得られるハッシュ値をIDとして持つ。ヘッダに、親のハッシュ値が格納される。親:子は長期的には1:1になる。 親を書き換えると、子ブロックのリンクのハッシュ値が変わってしまうので、改ざんを行う場合にはその時点での親からたどり、トップまでたどったすべてのブロックを修正する必要がある。 なので、古い世代のブロックの変更は不可能であり、Bitcoinの安全性の基礎となっている。

ブロックの構造

データサイズ、ヘッダー、トランザクション数、トランザクションのリストからなる。1ブロックに含まれるデータサイズは、80000byteほどになる。 ヘッダーは、バージョン、親ブロックハッシュ値、ブロックに関するルートのハッシュ木、タイムスタンプ、マイニング計算難易度、nonce。

ブロックは固有に持つハッシュ値か、ブロック高によって特定される。最初のブロック(Genesis block)は2009年1月に生成されたものである。 全てのノードは、このGenesisブロックを参照することで、ブロックチェーンを構築するときの安全な根幹を持つことが出来る。 また、Bitcoinのフルノードが新しいブロックをネットワークから受け取ったときに、その親ブロックを順にたどって、すべてのブロックをGenesis blockからの一連の流れに追加することが可能である。

一つのブロックに含まれているトランザクションのリストは、ハッシュ木でまとめられている。これは、Log2(N)回のハッシュ化計算をするだけで数十万個のトランザクションから特定のノードを検索することが出来るので、計算量的に重要である。

マイニングとコンセンサス

マイニング

マイニングは、新しいBitcoinを市場に追加する処理のことを指す。マイナーは、新しいBitcoinを報酬として受け取り、その対価としてBitcoinネットワークでのトランザクションに不正がないことを検証する処理を提供する。 トランザクションは10分ごとにマイニングされ、承認される。マイナーが受け取る報酬は、トランザクション手数料とブロック作成時に発行されるbitcoinの二種類がある。

マイニングによって発生するBitcoinの量は指数関数的に減っていき、2140年まで20,999,999.98 Bitcoin生成される。2140年以降は新しいBitcoinは発行されない。 そのため、Bitcoinは本質的にデフレ傾向が生じることになる。

コンセンサス

Bitcoinの発明者Satoshi nakamotoの主要な発明はemergent consensus(創発的コンセンサス)に対する分散メカニズムである。 以下4つのプロセスの相互作用により、中央集権となる仕組みがなくても合意が形成される。 * 独立したトランザクション検証(それぞれのノードが持つDBとの検証) * 独立したトランザクションの追加 * 独立した新規ブロック検証とブロックチェーンへの埋め込み * 独立したブロックチェーン選択

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

トランザクションを受け取ったノードはそれぞれ独自にトランザクションをチェックする。 チェックを通ったトランザクションは他のノードへ伝搬され、マイニングノードに到着した際にブロックとしてトランザクションが集積される。

独立したトランザクションの追加

マイニングノードは、検証されたトランザクションを集積し、ブロックとして追加する。その後、Proof of Workアルゴリズムにより、ブロックのハッシュ値が特定の条件を満たすまで、何度も(10億~1兆回)の計算を行う必要がある。 条件は、ハッシュ値が一定の値(Target)以下であることで、Targetを変更することでマイニングの難易度を調整する。

Targetの調整は、Bitcoinネットワークが自動的に調整する。 直近2016分の間に平均何分でブロックが発見されたかという実績値を元に、10分に1回ブロックが発見されるように、Targetが調整される。

独立した新規ブロック検証とブロックチェーンへの埋め込み

全てのノードは、新しいブロックを受け取った際にブロックの条件を検証する。このプロセスが分散して行われることで、マイナーがごまかして不正を行うことが出来ないようになっている。 その後、検証を通ったブロックがブロックのトップに追加される。 実際には、複数のブロックがマイニングに勝ち取ることは起こりえる。これは、ほとんど同時に二つ以上のマイニングノードが正解を提出したときである。 この場合、次以降のトランザクションで勝者が現れたブロックが追加され、difficultyが大きいものをネットワークが選択していく。

その他マイニングに関するトピック

マイニングプール

マイニング競争に勝たないと報酬が得られないのは、個人にはかなり厳しい状況になっている。なので、マイニングプールと呼ばれる計算力を束ねる仕組みを使って、個人や組織の計算力が無駄にならないようにしている。 これをマイニングプールと呼んでいる。同じマイニングプールの中で、より難易度の低い問題を個人や小さな組織で提供することで、貢献した計算量に対する報酬を与えることが可能である。

コンセンサス攻撃

51%以上の計算資源を独占した場合に、トランザクションを無効化したり、上書きできるものである。これは現状マイニング参加者がかなり大きくなっているので、非現実的なものになっている。

Alt coin

最終章のAlt coinは、10年以上前の書籍でほとんどのコインが残っていないので割愛。 ただ、Dogecoinがこの時から存在していることは驚いた。 Ethereum、Rippleについては、次回以降勉強します。