ふつうのデータベースで足りる場面
ブロックチェーンが向かない場面は、思ったより多くあります。書く人が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 で試行の増え方を見る
# 難易度が1つ上がるごとに、平均の試行は16倍になります。
tries = 16
for difficulty in range(1, 7):
print("難易度", difficulty, "平均の試行", tries)
tries = tries * 16
# range の 7 を 9 に変えて、もう一度実行しましょう。
全員が同じ記録を持つと、秘密にできない
鎖は、全員が読めて、あとから消せません。氏名や成績のような個人の情報を入れると、見られ、取り消せなくなります。
秘密にしたい情報や、消す必要のある情報は、ふつうのデータベースに置きます。
例: 条件から道具を選ぶ
| 条件 | 向く道具 | 理由 |
|---|---|---|
| 書く人が1人 | データベース | 1人が管理すれば足りる |
| 秘密にしたい | データベース | 全員に見えてしまうのを避ける |
| 管理者を信頼できる | 署名つきの追記専用ログ | 足すだけの記録で改ざんが分かる |
| 多数が互いに信用せず、管理者もいない | ブロックチェーン | 手間と引き換えに管理人が要らない |
学生が入力するセルは、このプレビューでは空白です。
よくある間違い
注意
「改ざんされない記録が欲しいなら、いつでもブロックチェーンがよい」と考える人がいます。管理者を信頼できるなら、署名つきの追記専用ログで足ります。多数が互いに信用せず、管理者も置けない場合に限り、ブロックチェーンの手間に見合います。