クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

フォークとコンセンサスの仕組み

このレッスンのあとで: 分かれた鎖の中から、正しい鎖を選ぶことができる。

55分のレッスンコマンド1件ブロックチェーンラボ:読んで、壊して、マイニングして、署名するおもちゃのチェーン

鎖が2本に分かれたら、どちらが正しいか

コンセンサスとは、離れた多くのコンピュータが、どの記録を正しいとするかについて、同じ答えに至ることです。2人が同時にブロックを足すと、鎖が2本に分かれ、これをフォークと呼びます。

管理人がいないので、決まりが要ります。このレッスンでは、検証に通る鎖から、仕事量が最も多い鎖を選ぶ決まりを学びます。

このレッスンのゴール

メモ

分かれた鎖の中から、正しい鎖を選ぶことができる。

キーワード

ことばいみ
コンセンサス全員が、同じ記録を正しいとする合意
フォーク同じ鎖から、2本以上に分かれること
仕事量鎖を作るのに使った、計算の量
有効な鎖検証にすべて通る鎖
ノード鎖のコピーを持つ、1台のコンピュータ

学生が入力するセルは、このプレビューでは空白です。

なぜ、鎖は分かれるのか

世界中のノードがほぼ同時にブロックを足すと、あるノードはAを、別のノードはBを先に受け取ります。同じ前のブロックから、2本の鎖ができます。

どちらも検証に通る正しい鎖で、悪意はありません。ただ、どちらかを選ばないと、台帳が1つになりません。

ラボで2本の鎖を比べる

次の Run は、同じ2ブロックから、Aは3ブロック、Bは4ブロックの鎖を作ります。表示は英語で、blocks はブロック数、work は仕事量、valid は有効、wins は勝つの意味です。A と B は鎖の名前です。

2本の鎖を比べる

コマンド
docker exec jupyter python3 steps/fork.py

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

出力の読み方

2本とも有効です。Aは3ブロックで仕事量768、Bは4ブロックで1024です。決まりは「仕事量が多い鎖を選ぶ」ので、Bが勝ちます。

最後の行の False は、2本の最後のブロックが違うという意味です。Aだけにあった取引は、鎖から外れます。

例: 仕事量の計算

鎖ブロック数1ブロックの平均仕事量
A3256768
B42561024

学生が入力するセルは、このプレビューでは空白です。

Python で仕事量を比べる

コード: python
# 難易度2のとき、1ブロックの平均の試行は 16 の2乗 = 256 回です。
DIFFICULTY = 2
chain_a = 3
chain_b = 4

work_a = chain_a * 16 ** DIFFICULTY
work_b = chain_b * 16 ** DIFFICULTY
print("Aの仕事量", work_a)
print("Bの仕事量", work_b)

# chain_a を 5 に変えて、もう一度実行しましょう。
# どちらの鎖を選ぶかが、変わります。

よくある間違い

注意

「ブロックが多い鎖なら、必ず勝つ」と考える人がいます。先に調べるのは有効かどうかで、書き換えられた鎖は、長くても失格です。有効な鎖が複数あるときだけ、仕事量を比べます。

選ぶ決まりは2段階

1. 検証にすべて通らない鎖は、候補から外します。

2. 残った鎖のうち、仕事量が最も多い鎖を選びます。難易度が同じなら、ブロック数が多い鎖です。

全員が同じ決まりで選ぶので、通信が遅れても、やがて全員が同じ鎖に落ち着きます。

このラボとソースについて: ブロックチェーンラボ:読んで、壊して、マイニングして、署名するおもちゃのチェーン

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。