中級者用語を調べる
アカウントモデルとは
- 執筆
- CRYPTO PORT 編集部
- 公開日
- 更新日
- 読了目安
- 5 分
結論
アカウントモデルは、アドレスごとに残高の数値を保持し、送金のたびにその数値を増減させる方式です。イーサリアムが採用しており、スマートコントラクトが状態を持ち続けられるのはこの設計によります。UTXO方式との最大の違いは、「残高」がデータとして実在することです。
要点
- アドレスごとに残高とナンスを保持する方式
- 送金は残高の減算と加算として処理される
- コントラクトアカウントはコードと保存領域も持つ
- 同じ内容の取引はナンスで区別・再実行を防ぐ
定義
チェーンの状態をアドレス単位の残高として保持し、取引によってその値を更新する方式。イーサリアムをはじめ多くのスマートコントラクト対応チェーンが採用する。
イーサリアムには2種類のアカウントがあります。秘密鍵で操作する外部所有アカウント(EOA)と、コードを持つコントラクトアカウントです。どちらも残高とナンスを持ち、コントラクトアカウントはさらにバイトコードと永続的なストレージを保持します。チェーンの状態とは、これら全アカウントの集合です。
送金は「Aの残高から引き、Bの残高に足す」という状態の更新として表現されます。UTXO方式のようにお釣りを作る必要がなく、残高を直接読めるため、貸付や自動売買のように「現在いくらあるか」を参照するコントラクトが書きやすくなります。
同じ相手に同じ金額を2回送ると取引データはほぼ同一になるため、区別する仕組みが要ります。そこでアカウントごとのナンスが使われ、送信のたびに1ずつ増えます。これにより、同じ署名済み取引を第三者が再送信しても2度目は無効になります。
注意点
- · 残高が直接読めるぶん、コントラクトの不具合で状態が壊れると影響範囲が広い
- · UTXO方式と手数料の考え方が異なり、実行に使った計算量(ガス)で費用が決まる
- · 同じアドレスが複数チェーンで使えても、残高はチェーンごとに別物であり移動はしない