ブロックチェーンの仕組み。カリフォルニア大学バークレー校 ビットコインと仮想通貨の無料講義超訳|Week3-2

前回までの記事はこちら

ーーーーーーーーーー

こんにちは!クレメア(@cremea_tw)です。

前回に引き続き、カリフォルニア大学バークレー校の無料講義、
「ビットコインと仮想通貨のオンライン講座」で学んだ内容をシェアしていきます。

講義そのものにおいて、

読者対象:ビットコインや仮想通貨について詳しく知りたい全ての人
前提知識:不要

という感じなので、
講義内容を読むだけでもかなり理解が深まるのではないかと思います。

 

文章のスタイルとしては、
翻訳ではなく、個人的解釈バリバリの超訳をしてきます。

荒削りですがスピード重視で、
クレメア的な解釈も交えてお伝えするので、
間違いや意見などあればコメントいただければと思います。

 

また、太字や文字色などの文章の装飾は極力していません。

学びの本質はそこではない、時間がもったいない、あとでできる、
ということで、今回は泣く泣くカットしました。

見辛いかもしれませんが、予めご了承ください。

 

ということで、
講義の内容に沿って進めます。

今回の記事は、
ブロックチェーンの仕組みについてお伝えします。

それでは、本題に入っていきましょう。

イントロ: 改ざん防止用データベース

暗号学的ハッシュ関数とそのプロパティについて知ったところで、
ビットコインの改ざん防止用データベースを設計するために、
それらをどのように適用すればいいのでしょうか?

このセクションでは、ブロックの構造を見て、
不正の証拠を得るのに役立つブロックヘッダーに含まれる、
メタデータの一部を具体的に見ていきます。

 

改ざん防止用データベースとは

ブロックの例

この改ざん防止用データベースは、
実際にどのように見えるのでしょうか?

あなたが平均的なユーザーであれば
Blockchain.infoにあるブロックの実際の例を見ることができます。

Blockchain.infoは、ビットコインブロックチェーンに関する、
全ての情報を公開している企業です。

講義の中で、
これらのフィールドこれらのフィールドのそれぞれについて説明します。

これは同じブロックについてですが、JSON形式で表現されており、
コンピュータにとってはるかに理解できる形式となっています。

しかし、これらのさまざまな情報の、
それぞれの役割は一体何なのでしょうか?

 

ブロックチェーンの中身とは

概念的にブロックがどのように見えるかは次の通りです。

ブロックには4つの主要な構成要素があります。

ブロックヘッダー、ブロックサイズ、
トランザクションカウンタ、トランザクションの4つです。

「ブロックサイズ」フィールドは、
ブロックの大きさを示します。

「ブロックヘッダ」フィールドは、
ブロックの構成要素を理解するために必要なメタデータを残します。

「トランザクションカウンタ」フィールドには、
そのブロック内のトランザクションの数が表示されます。

「トランザクション」フォールドは、
実際のトランザクションデータです。

この講義では、最初にブロックヘッダーの構成、
つまりブロックチェーンのセキュリティを強化する情報に注目します。

 

ブロックヘッダとは

どのようにして改ざんを防止するのでしょうか?

ビットコインでハッシュ関数が適用されている場所を見ていきましょう。

ブロックヘッダは、
全てのブロックに関連づけられた、
全てのメタデータを参照します。

 

実装には6つのフィールドがありますが、
モジュール1で説明したプロトコルを実装する、
3つの重要なフィールドについて説明します。

それらは、
「マークルルート」フィールド、
「前ブロックのハッシュ」フィールド、
「ナンス」フィールドです。

マークルルートは、
トランザクションの概要を表します。

前ブロックのハッシュは、
チェーンを表します。

ナンスは、
Proof-of-Workを表します。

 

ブロックヘッダは、
これら全てのフィールドのハッシュを連結したものに過ぎません。

初めにマークルルートを見ていきましょう。

 

マークルツリーとは

マークルルートとは何でしょうか?
トランザクションの概要とはどういう意味でしょうか?

これは取引に関する全ての情報が、
1つの情報に含まれていることを意味するのでしょうか?

 

実際には、全ての情報の指紋が、
1つのデータに含まれていることを意味します。

マークルルートは、
マークルツリーのトップです。

これは暗号学的データ構造です。

これは間違いなく複雑なので、
最初からゆっくりと学んでいきましょう。

まず第1に、コンピュータサイエンスのツリーは、
いくつかのルートノードと、いくつかの子を持つデータ構造で、
他のツリーのルートでもあります。

 

バイナリツリーは、
全てのノードが最大で2つの子を持つツリーです。

マークルツリーはバイナリツリーの非常に特殊なバージョンで、
2つの事柄が真です

最下位レベルに2つの子のパワーがあり、
要約したい情報のハッシュが最も低いレベルです。

おそらく、マークルツリーを説明するためのより良い方法は、
その構造を記述することです。

 

まず、検証した一連のトランザクションを並べます。(図の一番下)

私たちはそれらを一列に並べています。

私たちはハッシュのレベルを得るために、
それぞれをハッシュします。(図の下から2番目の段)

 

次に、各ペアをハッシュして、
半分のハッシュで新しいレベルを作成します。(図の下から3段目)

 

最終的に一番上のハッシュが1つになるまで、
このプロセスは続行されます。

一番上にあるこのハッシュがマークルルートです。

 

このようにして、
マークルルートにコミットした後の、
トランザクションの変更を検出できます。

 

Quick Check 1

マークルツリーを表しているのはどれですか?

  • The proof-of-work
  • The summary of transactions
  • The chain linking blocks
  • None of the above

 

マークルツリー:改ざんの検出

トランザクションが変更されると、
マークルルートが影響を受けることになります。

トランザクション3が変更されると、
そのハッシュも変更されます。

その上にあるハッシュにも影響し、
一番上のレベルまで全て伝播していきます。

 

マークルツリー: インクルージョンの証明

トランザクションがマークルツリーに含まれていることを確認するには、
費用がかからないのでしょうか?

心配する必要はありません。
そうするために、すべてのトランザクションを思い出す必要はありません。

私たちは実際に深さごとにちょうど1つの情報で、
それを証明することができます。

トランザクション1を、
次の2つの情報でハッシュするだけで済みます。

ハッシュB、およびハッシュFです。

図の下から順番に、
TX1とハッシュBをハッシュする、
ハッシュEとハッシュFをハッシュするイメージです

これは、私たちの木が大きくなるにつれ、
大きな効率の向上を意味します。

 

前のブロックハッシュとは

チェーンの保護

これは前のブロックハッシュが、
何をするかをはっきり示しています。

単に、前のブロックのハッシュを含んでいます。

注意すべきは、
全てのブロックがこれを行うことです。

つまり、ブロックが変更された場合、
その後のブロックも、またその後のブロックも変更されるということです。

この履歴の一部を変更すると、
その時点以降の将来の全てのブロックも変更されます。

ブロックチェーン内のマークルルートが、
以前から改ざんされた時にどうなるかの例を示します。

それは、
次のブロックの「前のブロックハッシュ」を変更する、
「ブロックヘッダ」を変更します。

これは将来のブロックハッシュの残りの部分にも影響します。

ネットワークの残りの部分は、合意しないので、
このブロックチェーンによって提案された履歴を拒否します。

これが全ての改ざんが見やすいため、
ブロックチェーンが不変であると考えられる理由です。

 

Quick Check 1

前のブロックハッシュは何を表しますか?

  • The proof-of-work
  • The summary of transactions
  • The chain linking blocks
  • None of the above

 

Proof-of-Work: 部分的な現像ハッシュパズル

「前のブロックハッシュ」の仕組みについて話終わったので、
次に「ナンス」Proof-of-Workの物理的表現について話しましょう。

ネットワークに投票を提出する前に、
仕事をしていることを証明するエンティティが必要です。

つまり、自分たちのコンピュータが問題を解決し、仕事をしたことを証明するために、
問題やパズルをデザインする必要があるということです。

 

ビットコインでこれらを行う方法は、
部分的な原像ハッシュパズルです。

原像の定義を覚えておいてください。
それはすなわち「入力」です。

部分的な原像は、部分的な入力を意味します。

ビットコインでは、入力の一部が与えられ、
特定の出力を生成する他の部分を見つける必要があります。

満たされる必要のある条件は、
ブロックヘッダのハッシュが、ある目標値より小さいことです。

この条件が、
どのようにビットコインでProof-of-Workが実装されているかを示します。

その他の普及しているProof-of-Workの暗号通貨も同様です。

 

パズルのニーズを満たしために、
これらのハッシュパズルは3つの特徴を持つ必要があります。

計算が困難
パラメータ設定が可能
検証が容易

これら3つの特徴を持たなければなりません。

計算上の難しさは、
パズルの解を簡単には見つけることができないことを保証します。

ほとんど仕事がなかったら、Proof-of-Workにはなりません。

パラメータ設定が可能とは、
調節可能であることを意味します。

パズルの難易度は、それが決して簡単すぎないか、
または難しくなることがないように調整可能でなければなりません。

最後に、簡単に検証可能なパズルとは、
コンピュータがあまりに多くの作業をしなくても、
答えが正しいことを確認することができるということです。

ナンスが何百万回も試行されたとしても、
あるナンスが正しいことを証明するために、取るべきハッシュは1つだけです。

 

Quick Check 1

ナンスは何を表しますか?

  • The proof-of-work
  • The summary of transactions
  • The chain linking blocks
  • None of the above

 

Proof-of-Work: マイニング

マイニングがどのように機能するか理解するために、
比喩を使って説明してみましょう。

マイニングは、目隠しをしたまま、
ターゲットに向かってダーツを投げるようなものです。

これは2つのことを意味します。

1つ目は、ターゲットのどの部分にも、
同じ確率だけ当たる可能性があるということです。

私たちは、
中心から近いか遠いかを判断することはできません。

2つ目は、私たちにできることは、
ダーツをたくさん投げることだけです。

繰り返しますが、
個々のダーツをセンターに当てる可能性を高める方法がないため、
できるだけ多く投げることがベストな選択なのです。

これは、マイナーがいくつかのアルゴリズムで決定された、
目標値を下回るハッシュ出力を探しているマイニングと比較しています。

 

Proof-of-Work: ブロックのディフィカルティ

では、どのように円のサイズを調整するのでしょうか?

どのように目標を設定し、変更するのでしょうか?

これは全てディフィカルティ=採掘難易度を通じて行われます。
これはブロックを見つけるために必要な計算量を示します。

 

繰り返しますが、パズルを解くために、
どれだけの計算量を計算するのかを予測することはできません、が、
パズルが平均的にどれくらいの速さで解かれたかに基づいて近似することはできます。

このディフィカルティは、
ブロックヘッダハッシュの先行するゼロの数の要件として実装されます。

このため、このセクションの先頭にあるサンプルブロックには、
ブロックハッシュの先頭に多くのゼロが含まれていました。

ゼロの数が増えるにつれてディフィカルティが増し、
逆に減れば、ディフィカルティは減少していきます。

 

このディフィカルティはグローバルハッシュレートで調整されます。

マイナーがネットワークに参加したり離れたりすると、
ネットワークのコンピューティングパワーの量は常に変化しますが、
10分のブロック時間を維持したいと考えています。

このため、私たちは、
ハッシュパワーの成長とネットワークの崩壊に伴い、
ディフィカルティを上げたり下げたりしなければなりません。

 

このディフィカルティを再計算する方法は、
上記の方程式を使用しています。

ディフィカルティは、
それまでの2016ブロックの採掘するのに要した時間と、
2週間の比率との比に等しいです。

2週間ごとに、これらの2016ブロックの計算に、
どれくらいの時間がかかったかを確認します。

全てのブロックが正確に10分かかった場合、
それらの2016ブロックを生産するのに、正確に2週間かかるはずです。

計算すると、
10分×2016=20160分
20160分/60分=336時間
336時間/24時間=14日間

確かに計算すると2週間となります。

時間がかかり過ぎてしまった場合は、パズルを解くのが難しかったから、
時間がかからなかった場合は、パズルを解くのが簡単過ぎたから、
ということになります。

この計算にかかる時間に応じて、
パズルのディフィカルティを調整していきます。

 

あなたの理解度が正しいかどうか、チェックしていきましょう。

この式を参考に考えてみてください。

ディフィカルティは、
それまでの2016ブロックの採掘するのに要した時間と、
2週間の比率とのに等しいです。

現在のディフィカルティを10とします。

2016ブロックをマイニングする時間がちょうど2週間であれば、
新しいディフィカルティはいくつになるでしょう?

 

そう、答えは10です。

パズルは私たちが望むほど正確に難しいので、
ディフィカルティは全く同じです。

 

では、2016ブロックをマイニングする時間が、
ちょうど1週間だった場合、どうなるでしょう?

その場合、ディフィカルティは20になります。

これらのブロックは、
期待された半分の時間でマイニングされました。

つまり、必要な難易度の半分になったので、
2倍のディフィカルティにする必要があるのです。

 

では、2016ブロックをマイニングする時間が、
ちょうど4週間だった場合、どうなるでしょう?

その場合、ディフィカルティは5になります。

これらのブロックは、
期待された2倍の時間でマイニングされました。

つまり、必要な難易度の2倍になったので、
半分のディフィカルティにする必要があるのです。

 

要するに、ディフィカルティは、
マイニングの時間に反比例するのです。

 

Quick Check 1

ディフィカルティは現在10です。
2016ブロックの採掘に要した時間が1週間だった場合、
新しいディフィカルティは何になるでしょう?

ヒント、ディフィカルティの式は以下の通りです。

  • 10
  • 15
  • 20
  • 25

 

Proof-of-Work:コインベーストランザクション

マイナーのブロック報酬はどこへ行くのでしょうか?

それはコインベーストランザクションになります!

マイナーがブロックを生成するたびに、
まずマークルツリーの最初のトランザクションである、
コインベーストランザクションを行います。

このコインベーストランザクションは、
マイナーにいくつかのビットコインの報酬を与え、
あとで使用することができます。

これは、新しいビットコインが、
ネットワークに投入、もしくは導入される方法です。

また、コインベーストランザクションには、
ハッシュパズルでも使用される別のナンスフィールドがあります。

 

マイニング擬似コード

ここにマイニング擬似コードがあります。

有効なブロックが見つかるまで、無限ループします。

各ループでは、最初にコインベースナンスを試し、
次にインナーループで、ヘッダナンスの全ての値を使い果たします。
コインベースナンスをインクリメントし、このサイクルを繰り返します。

この順序でこれを実行したい理由は、
各コインベースナンスの全てのヘッダナンスを使い果たすことで、
コインベースナンスを変更することになり、
マークルルートが変更されることになるからです。

インナーループの各反復毎に、
毎回マークルルートを再計算する方がコストがかかるでしょう。

したがって、最も外側のループの各反復で、
マークルルートを計算するだけで済むように、
ナンスを試して最適化しています。

 

Quick Check 1

コインベーストランザクションはマークルツリーのどこにありますか?

  • Ethereum smart contract
  • In the block header
  • In the first transaction slot
  • In the last transaction slot
  • In any transaction slot

 

あとがき

 

むずかしすぎ!

自分の脳みそにとって、新しい概念だらけで、
3回くらいアタマが沸騰しました。

 

時間を置いて、また学びます。

ということで、

今回はこの辺で失礼します。

このブログを書く僕の目的は、
「ファンを作ること・仲間を増やすこと」です。

趣味が合う、気が合う、考え方が合う。
なんかええなーと思ったら、気軽にメッセージください。喜びます。

終わり。

 

次の記事
デジタル署名スキームと楕円曲線暗号。カリフォルニア大学バークレー校 ビットコインと仮想通貨の無料講義超訳|Week3-3

コメントを残す

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

ABOUTこの記事をかいた人

物語の引き金を引く男 / 「てめえの人生に火をつける」 / プロ火付け役 / 腐れニートからの再始動 / 見知らぬ人にMacBook Proを買った人 / 32日で100記事達成 / ただの足跡を伝説に変えていく男 / Youtubeで #クレメアラジオ 不定期配信 / サロン「裏世界」オーナー 参加希望者はDMまで