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

無料レッスン

取引記録から残高を計算する

このレッスンのあとで: 取引の記録を順にたどって、残高を求めることができる。

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

残高は保存せず、計算で求める

台帳とは、誰が誰にいくら払ったかを、順に書き残した記録です。ブロックチェーンは残高を保存せず、取引を最初から順にたどって、残高を計算します。

サークルの会費で考えます。ミキが8000円、ケンが3000円を持って始め、払うたびに記録だけを足します。

このレッスンのゴール

メモ

取引の記録を順にたどって、残高を求めることができる。

キーワード

ことばいみ
台帳取引を順に書き残した記録
取引誰が誰にいくら払うかを表す1件の記録
残高取引をたどって計算した、いま持っている額
二重支払い同じお金を、2回使おうとすること
拒否残高が足りない取引を、受け付けないこと

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

取引を最初から順にたどる

残高の欄を書き換えられると困るので、ブロックチェーンには、残高の欄がありません。持っているのは取引の記録だけです。

残高を知りたいときは、最初の残高から始め、取引を順に1件ずつ当てはめます。同じ記録からは、誰がやっても同じ残高になります。

ラボで4件の取引をたどる

次の Run は、3人の取引を順にたどります。名前は英語の Asha、Ben、Cara で、金額は単位のない数字です。balances は残高、refused は拒否された取引、from は払う人、to は受け取る人の意味です。

取引から残高を計算する

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

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

例: 4件の取引をたどる

取引AshaBenCara結果
はじめ1050
AshaからBenへ4690受け付ける
BenからCaraへ6636受け付ける
CaraからAshaへ8636拒否: Caraは6しかない
BenからCaraへ3609受け付ける

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

Python で残高を計算する

コード: python
start = {"ミキ": 8, "ケン": 3}
payments = [
    {"from": "ミキ", "to": "ケン", "amount": 5},
    {"from": "ケン", "to": "ミキ", "amount": 20},
]

money = dict(start)
for pay in payments:
    if money[pay["from"]] < pay["amount"]:
        print("拒否:", pay["from"], "の残高が足りません")
    else:
        money[pay["from"]] = money[pay["from"]] - pay["amount"]
        money[pay["to"]] = money[pay["to"]] + pay["amount"]

print(money)

# 2つ目の 20 を 5 に変えて、もう一度実行しましょう。

二重支払いを順番で止める

5000円しかない人が、同じ5000円を、AさんとBさんに続けて払おうとしたとします。取引を順にたどると、1件目で残高が0になり、2件目は拒否されます。

大切なのは順番です。ブロックチェーンは、全員が同じ順番で記録を持つことで、どちらが先かを決めます。

よくある間違い

注意

「どこかに残高の欄があって、それを書き換えれば、お金を増やせる」と考える人がいます。残高は取引から計算するので、欄がありません。過去の取引を書き換えれば、ハッシュが合わなくなり、検証で見つかります。

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

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