メインコンテンツへスキップ

ブロックチェーン — ETH.BUILD

ブロックチェーンのマイニングの仕組み、ブロックがどのようにつながっているか、プルーフ・オブ・ワークがどのようにブロックチェーンを保護するか、そして誰かがデータを改ざんしようとしたときに何が起こるかについてのデモンストレーション。

Date published: 2021年1月14日

オースティン・グリフィスによる、ビジュアルプログラミングツールETH.BUILDを使用してブロックチェーンのマイニングの仕組みを実演するチュートリアルです。オースティンは、プルーフ・オブ・ワーク (PoW) のコンセンサス、ブロックのチェーン化、マイニングの難易度、ブロック・リワード、およびチェーンの不変性について解説します。

このトランスクリプトは、オースティン・グリフィスが公開した元の動画のトランスクリプト (opens in a new tab)のアクセシブルなコピーです。読みやすさのために軽く編集されています。

調整の問題 (0:00)

おはようございます、ハッピー・ボウタイ・フライデー!今回のETH.BUILDはブロックチェーンに焦点を当てます。本当に素晴らしいものです。私たちはこのピエロのボートに乗って、ビットコインの蝶ネクタイを締めています。さあ、始めましょう。

これまでのカリキュラムでは、鍵ペア、ハッシュ、台帳について一気に学んできました。そこで分かったのは、中央集権型ではなく分散型のネットワーク上で価値のトランザクションをやり取りしようとすると、調整の問題が発生するということです。異なる当事者が異なるタイミングで異なるトランザクションを受け取るため、コンセンサスを見つけることができないという問題に行き着きます。これを解決するさまざまな方法がありますが、プルーフ・オブ・ワークが登場するまで、どれも優れたものではありませんでした。

サイドクエストとしてビザンチン将軍問題を取り上げましたが、そこで学んだのは、安全でないネットワーク上でメッセージを送信する際、将軍たちは自分たちに軍隊があることを証明する必要があるということでした。そうすれば、受信側はその人が実際に攻撃を仕掛けようとしている軍隊を持つ将軍であることが分かり、調整を行うことができます。

ブロックとナンス (1:04)

したがって、この台帳では、ネットワークからトランザクションを送り込んでいます。個々のユーザー全員に作業を証明させるのではなく、プルーフ・オブ・ワークをトランザクションのブロックに抽象化し、マイナーにその作業を行わせます。

トランザクションを保持するブロックを用意します。ネットワークを流れてくるものは何でも、このブロックに読み込みます。このブロックの構造を見ると、ナンスも含まれています。そのナンスによって、ハッシュを微調整することができます。このブロック全体を取得し、文字列化してハッシュ化すると、ハッシュが得られます。トランザクションが変わるとそのハッシュも変わりますが、ナンスを変えてもハッシュは変わります。

ここでいくつかの作業を行います。ランダムなトランザクションのセットがあり、ハッシュの先頭がゼロになるまでナンスを変更し続けます。ビザンチン将軍問題に関するサイドクエストを見た方なら分かると思いますが、証明すべき任意の作業量として、この先頭のゼロを選びました。つまり、ナンスは1、2、3、4とすべての数字を順番に試していき、先頭がゼロになったときに、それが有効なブロックであると判断します。

プルーフ・オブ・ワークの実践 (3:00)

マイニングされたブロックを取り出し、ハッシュを抽出してハッシュ関数に入れると、先頭がゼロであることを証明できます。つまり、このブロックに対して作業が行われたことを証明できるのです。

ハッシュ関数は、限られたリソースであるCPUを消費します。私たちは、先頭がゼロのハッシュを見つけるために、すべてのCPUパワーを注ぎ込んでいます。それが見つかれば、有効なブロックが得られます。つまり、ブロックは基本的に凍結されます。その時点でそこにあったトランザクションはすべてこのブロックに収められ、誰もがそれを尊重し、次のブロックに進むことができます。

ブロックのチェーン化 (3:56)

ここに仕掛けがあります。古いブロックを取り出し、新しいブロックに接続します。構造を見ると、新しいブロックにはトランザクションがなく、ナンスも空ですが、トランザクションを持つ親が存在します。前のブロックは次のブロックの一部になるため、全体としてチェーンが形成されます。

トランザクション・プールから最新のトランザクションを投入し、ナンスを見つける作業を行います。ブロック番号2がマイニングされました。これらのトランザクションを有効にするには、10というナンスが必要でした。次に同じことを行います。古いブロックを接続し、新しいブロックを取り込み、最新のトランザクションを投入して、再び作業を行います。十分な試行を重ねた後、ブロック3のナンスを見つけました。ブロック4も同じプロセスで、これをどんどん進めていきます。

マイニングの難易度 (5:02)

これでは簡単すぎます。有効なブロックをすぐに見つけることができてしまうため、もっと難しくしたいのです。難易度を2に上げてみます。ブロック5を接続し、最新のトランザクションを取り込み、カウンターを回し続けます。これでマイニングが始まりました。難易度が上がったため、先頭に2つのゼロがあるハッシュが見つかるまで、限られたCPUパワーを使ってランダムなハッシュを無作為に投げ続けます。これには少し時間がかかります。

これで、5つのブロックからなるブロックチェーンができました。これらのブロックはトランザクションを保持し、それぞれが前のブロックを参照しています。各ブロックの生成には任意の作業量が必要であり、その作業量は難易度によって制御されます。

マイナー (6:46)

マイナーとは何かを見てみましょう。ビザンチン将軍問題では、「夜明けに攻撃」したかった将軍には兵士が必要でした。各兵士の内部で起こっていることは、ここでマイナーを使って行っていることとまったく同じです。メッセージとナンスを受け取り、先頭のゼロを得るために、できるだけ早くハッシュ関数に投げ込んでいます。先頭のゼロは、私たちが合意した任意の基準です。これは、あなたが兵士であること、または戦争を遂行できることを証明するのに十分な作業量です。

マイナーを導入して、これをもう少し早くやってみましょう。マイナーは私たちのブロックに対しても同じことを行います。トランザクション・プールから入ってくるトランザクションを受け取り、ブロックに送り込み、有効なハッシュが見つかるまでひたすら作業を続けます。

マイナーはもう少し効率的です。マイニングにより集中しています。ランダムにハッシュを投げています。これはまさに、先ほど私たちのマイナーが行っていたことを抽象化したものです。バックグラウンドでハッシュをひたすら計算し続けているのが見えます。見つかりました。ブロック6がマイニングされました。

二重支払いとネットワークの伝播 (10:00)

さて、二重支払いの問題や、ネットワークの伝播の問題についても話しました。台帳と分散型ネットワークがあり、誰かがトランザクションを送信すると、それは異なるタイミングで異なる人々に届きます。したがって、ネットワーク上にいる2人のマイナーがまったく同じタイミングでブロックをマイニングし、それぞれに異なるトランザクションが含まれる可能性があります。

その時点ではどちらも有効です。どちらもプルーフ・オブ・ワークを行い、どちらも先頭にゼロがあります。しかし、両方が正当なものになることはできません。両方が真実であることはあり得ないのです。そのため、どちらが本物のチェーンであるかについて、ネットワークがコンセンサスを得る方法が必要になります。

複数のマイナーとコンセンサス (12:27)

このブロックを掴んで、こちらに移動させてみましょう。私がやりたいのは、2人の異なるマイナーが同じ問題に取り組み、同じトランザクション・プールを監視しながら、独立してブロックを生成することです。マロリーとマイクという2人のマイナーがいます。難易度を3に設定し、両者とも先頭に3つのゼロがあるハッシュを見つける作業を行っています。

マロリーが先にブロックを見つけました!素晴らしい。さて、どうなるでしょうか。私たちは分散型ネットワーク上にいるため、マイクはまだマロリーのブロックについて知らないかもしれません。彼はまだ自分のバージョンの作業を続けている可能性があります。そして今、マイクも見つけました。これで、2つの有効な経路ができました。

もしあなたがネットワーク上の1つのピアであり、マロリーのブロックを先に見たら、それがメインのブロックだと思うでしょう。その後、マイクのブロックが到着します。どちらかが最も長いチェーンになった場合に備えて、両方を保持しておきます。そしてルールは、「最も長い有効なチェーンに従う」というものです。

コインベースとブロック・リワード (15:33)

マイナーがブロックをマイニングするとき、「これが希望するすべてのトランザクションで、これがナンスで、これが親です」と言いますが、同時に「これがそのブロックをマイニングした人です」とも言います。これはコインベースと呼ばれます。現在そういう名前の会社があると思いますが、それとは異なります。ここでは単に「マイナー」と呼ぶことにします。つまり、私たちのブロックにはマイナーのフィールドが必要になりました。

マイクがブロックを見つけたので、マイクはここから10の価値を得ることになります。マイナーにこれらすべての作業を行うインセンティブを与える必要がありますよね?彼らは基本的にネットワークを安全にするために、お金を使ってこれらのマイニング機器を購入しています。これらのマイナーは、すべてのハッシュパワーを使ってネットワークを保護するためにお金を費やしています。すべてのマイナーを合わせると、おそらく何万人にもなるでしょう。彼らはこれらのハッシュを計算する機器を構築するために大金を支払っており、彼らにインセンティブを与えるために、マイニングした各ブロックのブロック・リワードと呼ばれる報酬を与えます。

ブロック・リワードとインセンティブ (16:52)

したがって、このバージョンのブロックではマロリーが10ドルを持っていますが、こちらのバージョンではマイクが10ドルを持っています。これら2人のプレイヤーはそれぞれ、自分のチェーンを進め続けるインセンティブがあり、ネットワークの残りの部分はコンセンサスを見つける必要があります。基本的には、誰が最も長い有効なチェーンを持っているかに行き着きます。

マイクは自分のブロックを親として設定し、次のブロックの作業を開始します。マロリーも同じことを行います。そして、ネットワーク上の他の誰がどちらの側を選ぶかということになります。ネットワーク環境が悪い人を罰したくないため、イーサリアムではアンクルブロック(最も長いチェーンには入らなかった有効なブロック)にも報酬を支払っているはずです。なぜなら、それらもネットワークの保護に貢献しているからです。

調整とコンセンサスの問題がありましたが、トランザクションを有効にするために必要な任意の作業量を設けることで、これを解決しました。マロリーは、これらすべてのトランザクションと前のブロックのハッシュの先頭に3つのゼロを見つけるために、ハッシュ化に次ぐハッシュ化というすべての作業を行いました。

ブロックチェーンへのクエリ (18:30)

最も長いチェーンであれば何とでも通信できます。マイクはまだ7に進んでいないため、こちらの高さはまだ6であることが分かります。そして、人々の残高をクエリするようなことができます。残高を確認すると、何が得られるでしょうか?524です。つまり、ハイジは524、あるいはこのチェーンのネイティブトークンを何であれ保持し続けています。彼女のナンスを見ることができ、台帳でできたことはすべてできますが、今はブロックを積み重ねており、それらのブロックがトランザクションを保持しています。

単にお金を送るだけのユーザーからマイナーへと作業を抽象化し、このブロック・リワードを与えることで彼らにインセンティブを与えました。また、各人がトランザクションごとに支払う少額の費用もありますが、それについては後のエピソードで触れます。今はガスについて話したくありませんが、単にブロックをマイニングするだけでなく、多くのトランザクションを含む満杯のブロックをマイニングするインセンティブがあることを知っておくと役立ちます。しかし、それはより小さなインセンティブであり、いずれ説明します。

チェーンの不変性 (19:51)

ブロックがマイニングされるにつれて、それらはますます安全になります。どういう意味かお見せしましょう。マイクがブロックをマイニングし、マロリーはこちらでデモンストレーションを行っていたため、ブロックをマイニングできませんでした。そのため、今度はマイクのチェーンが最も長くなり、ネットワーク全体に伝わります。誰もがそれを見て、「よし、このチェーンには7つのブロックがあり、すべて有効だ。これに従おう」と言うでしょう。私たちが従っているルールが変更され、異なる人間のグループが異なるチェーンに従いたいと考えるような、ハードフォークや対立を伴うフォークが発生することもあります。面白いですね。

さて最後に、ブロック3に戻って何かを変更した場合、どんな小さな詳細でも変更した場合、ここに入ってみます。フランクへのトランザクションがあります。フランクの代わりにイブに変更したとしましょう。OKを押したときに何が起こるか見てください。見てください。ブロック3のほんの小さな部分を変更しただけで、突然チェーン全体が崩壊しました。もはや有効ではありません。もし私がそれをネットワーク上にブロードキャストしたら、人々は私を笑い飛ばすでしょう。

ブロックがマイニングされた後は、戻って変更に合わせて再マイニングしない限り、何も変更することはできません。基本的には、マイナーをここに接続し直し、7つのブロックを持つマイクに追いつくのに十分なパワーを持とうとしなければなりません。それは非常に、非常に困難です。ブロックが深ければ深いほど、そこから戻るのは難しくなります。カルロスがボブに84を送ったこのブロック3の事実について、ボブは複数のブロックの深さがあるため、そのお金が確実にあることを知ってかなり安心できます。ここで対立を伴うフォークが起こる可能性はありません。盤石です。これが私たちがファイナリティと呼ぶものです。

まとめ (22:00)

台帳とこのコンセンサスの問題を持つ代わりに、プルーフ・オブ・ワークを使用してハッシュを計算し、ブロックを検証します。「有効」とは、先頭に任意の数のゼロがあることを意味します。ブロックのチェーンを構築する際、マイニングされたブロックが実際に異なるタイミングで異なる場所に到着するという問題に依然として直面します。そのため、「有効であり、参加したいルールセットに従っている最も長いチェーンに従う」というさらなるコンセンサスアルゴリズムがあります。

それでは、ハッピー・ボウタイ・フライデー!以上がETH.BUILDでのブロックチェーンでした。これを保存してアップロードしておくので、「ロード」を押すだけで遊べるチェーンが手に入ります。ハッピー・フライデー!

このページは役に立ちましたか?