ブロックチェーン/レベル VII · 進化/7.1 イーサリアム:ワールドコンピューター/レッスン 2
アカウントとグローバルステート
離散的なコインから、単一の変更可能なグローバルステートへ
用意するものイーサリアム・イエローペーパー(G.ウッド)ヴィタリック・ブテリンのイーサリアムホワイトペーパー(2013/2014年)Etherscanやその他のイーサリアムブロックエクスプローラーへのアクセス
問い
- 未使用の出力の集合として富を追跡することが、汎用プログラムの作成を難しくするのはなぜか?
- どのような機械的な結果が、任意のトランザクションにネットワーク全体のストレージを読み書きさせることから生じるのでしょうか?
- アカウントベースのモデルは、UTXOセットと比べて履歴の検証コストにどのような変化をもたらすのか?
探究
- ビットコインでは、価値は未使用のトランザクションアウトプット、つまりUTXOによって追跡される。各トランザクションは特定のインプットを消費し、新たなアウトプットを生成する。検証処理では、使用されるコインのみがチェックされる(レッスン2.2.1)。このモデルはローカルで離散的なものだ。2015年7月にヴィタリク・ブテリンやギャビン・ウッドを含む共同創設者たちによって開始されたイーサリアムでは、アカウントベースのステートマシンが採用されている。各アドレスには残高があり、それはその場で更新される。ネットワーク全体の履歴は、すべてのアカウントの現在の残高と、デプロイされたすべてのコントラクトのストレージスロットからなる単一のグローバルステートオブジェクトに圧縮される。
- このモデルには、プライベートキーによって制御される外部所有アカウント(EOA)と、コードによって制御されるコントラクトアカウントの2種類のアカウントタイプが存在する。EOAがトランザクションを開始し、コントラクトは呼び出された時にのみロジックを実行する。ステート遷移関数は現在のグローバルステータスとトランザクションを受け取り、新しいグローバルステータスを生成する。すべてのノードが同じ出発点から決定的にこの遷移を計算するため、信頼なしでもコンセンサスが形成される。また、どのアカウントもそのストレージに任意のデータを保持できるため、汎用計算が可能となる。
- アカウントモデルの表現力により、分散型取引所や貸出プロトコルといった複雑なアプリケーションが実現可能になる。コントラクトは数十億規模の価値を保持でき、グローバルな状況に基づいて高度な論理を実行することもできる。しかし、この強力さが脆弱性ももたらす。ステートは変更可能かつ共有されているため、あるコントラクトのコードに存在する単一のバグが、そのコントラクトの残高をすべて失わせたり、関連するコントラクトを破損させたりする可能性がある。2016年6月のThe DAOハックで悪用されたリーンエントリー脆弱性は、局所的な欠陥がグローバルなステートにどのような影響を与え、コミュニティ主導のフォークへとつながるかを示した。
- ステートの増加は、この設計における必然的な結果です。ビットコインのUTXOセットも増えていきますが、各エントリーは小さく、使用されると削除されます。一方、イーサリアムのコントラクトストレージは蓄積され続けます。すべての`SSTORE`操作によってデータが追加され、明示的にゼロに設定されない限り永遠に保持される(ただし、それにもガス代がかかる)。この無制限な増加により、フルノードの運用はディスク容量やメモリの面でますます負担が大きくなります。トランザクションを検証するためにノードは全体のグローバルステートを保持しなければならず、これによって計算能力と検証コストの間でトレードオフが生じます。
- イーサリアム・イエローペーパーでは、これを決定的な状態遷移関数として正式に定義している。EVMはスタックマシン上で命令を処理し、「ADD」や「SLOAD」といった演算はローカルの実行コンテキストを変更すると同時に、グローバルなアカウントストレージも更新する可能性がある。このアーキテクチャによりチューリング完全性が実現されるが、終了を保証するためにガスが必要となる。すべての演算はガスを消費し、無限ループを防ぎ、ブロックのガス制限に対して各トランザクションの計算コストを制限する。
- Etherscanのようなブロックエクスプローラーを開き、最近のコントラクトとのやり取りを調べてみましょう。コントラクトページの「Storage」タブを見ると、アカウントの永続的な状態を構成するキーと値のペアがリストアップされています。そのアドレスに関連する各トランザクションの後でこれらの値がどのように変化するかに注目してください。この表示によって、グローバルな状態の具体的な実態が明らかになります。コードは単に実行されるだけでなく保存され、そのデータはトランザクションを超えて持続し、時間とともに増加していくのです。
重要な事実
- イーサリアムは、残高がその場で更新されるアカウントベースのモデルを採用しており、これはビットコインのUTXOシステムとは対照的です。
- グローバルステートには、すべてのアカウント残高とコントラクトのストレージが含まれており、すべてのトランザクションで読み書きが可能です。
- コントラクトアカウントはコードによって制御され、外部所有アカウントはプライベートキーによって制御されます。
- コントラクトストレージが無期限に存在し続けるため、ステートの成長は制限されず、ノードのハードウェア要件も増大する。
- スマートコントラクトにおける1つのバグが、グローバルステータスの変更可能な性質により、その残高をすべて使い果たしてしまう可能性がある。
- EVMはすべてのノードで決定的に実行され、同一の状態遷移を通じてコンセンサスが保証される。
演習 九・六・三・一
9集めるデータ構造、検証範囲、ストレージの増加という観点から、ビットコインのUTXOモデルとイーサリアムのアカウントベースのステートマシンの間にある9つの具体的な違いを挙げてください。
6まとめるこれら9つの項目を、データ永続性、計算複雑度、セキュリティ上の影響、ノードのリソース消費量、コンセンサスメカニズム、開発者体験の6つのカテゴリーに分類してください。
3絞り込む6つのクラスターを、状態サイズの増大という代償を払ってもアカウントモデルが汎用計算を可能にする3つの根本的な理由に絞り込む。
1結晶化する変更可能なグローバルステートにより、UTXOシステムでは困難な複雑なコントラクト間の相互作用が実現できる。
事実確認
日付、数字、主張は、下記に記載された公表資料と照合して確認しました。