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

無料レッスン

ブロックチェーンが向かない場面

このレッスンのあとで: ブロックチェーンが向かない場面を、理由をつけて言うことができる。

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

ふつうのデータベースで足りる場面

ブロックチェーンが向かない場面は、思ったより多くあります。書く人が1人のとき、秘密にしたいとき、速さが要るときは、ふつうのデータベースのほうが、安く、速く、簡単です。

このレッスンでは、手間と引き換えに何が得られるかを考え、条件から道具を選べるようになります。

このレッスンのゴール

メモ

ブロックチェーンが向かない場面を、理由をつけて言うことができる。

キーワード

ことばいみ
管理者記録を預かり、書き込みを決める信頼できる人や組織
データベース管理者が持つ、ふつうの記録の置き場
追記専用ログ足すだけで消せない記録。署名やハッシュで守る
処理速度1秒に記録できる取引の数
電力消費計算に使う電気の量
秘密性見せたくない情報を、見せないこと

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

ブロックチェーンは、何のための道具か

互いに信用しない多くの相手が、管理人なしで、1つの記録を共有するための道具です。そのために、全員が同じコピーを持ち、手間のかかる採掘で書き換えを高くつかせます。

裏返すと、管理者を信頼できるなら、この手間は要りません。

手間は、どのくらい増えるか

第2回で見たとおり、難易度が1つ上がると、採掘の試行は16倍になります。次の Run は、同じ採掘をもう一度見せます。表示は英語で、difficulty は難易度、tries は試行回数です。全員が同じ計算をするので、電気も同じだけ使います。

難易度ごとの試行回数を見る

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

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

難易度6の平均の試行を求める

コマンド
docker exec jupyter python3 -c "print(16 ** 6)"

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

出力の読み方

1つ目の Run は、難易度1から4で、15、835、7992、109028回の試行を示します。2つ目の Run は、難易度6の平均が16777216回だと示します。

このように、安全のために難易度を上げるほど、電力と時間が増えます。遅さと電力は、この仕組みの代金です。

Python で試行の増え方を見る

コード: python
# 難易度が1つ上がるごとに、平均の試行は16倍になります。
tries = 16
for difficulty in range(1, 7):
    print("難易度", difficulty, "平均の試行", tries)
    tries = tries * 16

# range の 7 を 9 に変えて、もう一度実行しましょう。

全員が同じ記録を持つと、秘密にできない

鎖は、全員が読めて、あとから消せません。氏名や成績のような個人の情報を入れると、見られ、取り消せなくなります。

秘密にしたい情報や、消す必要のある情報は、ふつうのデータベースに置きます。

例: 条件から道具を選ぶ

条件向く道具理由
書く人が1人データベース1人が管理すれば足りる
秘密にしたいデータベース全員に見えてしまうのを避ける
管理者を信頼できる署名つきの追記専用ログ足すだけの記録で改ざんが分かる
多数が互いに信用せず、管理者もいないブロックチェーン手間と引き換えに管理人が要らない

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

よくある間違い

注意

「改ざんされない記録が欲しいなら、いつでもブロックチェーンがよい」と考える人がいます。管理者を信頼できるなら、署名つきの追記専用ログで足ります。多数が互いに信用せず、管理者も置けない場合に限り、ブロックチェーンの手間に見合います。

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

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