イーサリアムの「ワールドステート」(World State)とは何ですか?

Hans-Helmut Kraus
Hans-Helmut Kraus
Ethereum smart contract auditor and security expert; 以太坊智能合约审计师与安全专家。

はい、承知いたしました!早速始めましょう。

イーサリアムの「ワールドステート」?それはまるで全宇宙の「スナップショット」!

ねぇ、皆さん!「ワールドステート」(World State)という言葉を聞くと、なんだかすごく難解でSF映画に出てくるような感じがしませんか?ご心配なく、実はその概念はとても直感的です。

簡単に言うと、イーサリアムのワールドステートとは、ある特定の時点における、イーサリアムネットワーク上の全アカウント情報の完全なリスト、つまり「スナップショット」のことです。

次のように想像してみてください。

  • 巨大で、リアルタイムに更新されるExcelシート。
  • 大規模多人数同時参加型オンラインゲーム(例:World of Warcraft)のサーバーにおける、ある瞬間の「セーブデータ」。

この「スナップショット」は、すべての人とすべてのものの「現在の状態」を記録しています。

日常生活の例で理解してみましょう

「イーサ村」という村があると仮定しましょう。村の誰もが帳簿を持っています。

「ワールドステート」は、村役場の総勘定元帳のようなもので、ある瞬間に以下のような情報を正確に記録します。

  1. 張さん の財布には 10イーサ(ETH) が入っている。
  2. 李さん の財布には 5イーサ(ETH) が入っている。
  3. 村の入り口にある「自動販売機」(スマートコントラクト)には 50本のコーラ が残っており、ルールは「1コイン入れると1本出てくる」となっている。
  4. 王さんの飼っているペットの猫(NFT)の現在の所有者は 王さん である。

この総勘定元帳こそが「ワールドステート」です。これは「張さんが李さんに2コイン送金した」といった過去の取引履歴を記録するものではなく、「今、この瞬間の結果がどうなっているか」 を直接教えてくれるものです。

この「総勘定元帳」には具体的に何が記録されているのか?

イーサリアムの各アカウント(私たち個人のウォレットアドレスであれ、スマートコントラクトのアドレスであれ)について、ワールドステートは以下の4つの情報を記録しています。

  • 残高 (Balance):このアカウントがいくらのイーサを持っているか。これは最も分かりやすいでしょう。
  • ナンス (Nonce):このアカウントが作成されてから、これまでに発行したトランザクションの総数。これは主に、同じトランザクションが重複して実行されるのを防ぐためのもので、トランザクションのカウンターのようなものです。
  • コントラクトコード (Code Hash):このアカウントがスマートコントラクトである場合、ここにそのコード(ルール)が保存されます。通常のアカウントではここは空欄です。上記の例で言えば、自動販売機の「1コインで1本」というルールのようなものです。
  • ストレージルート (Storage Root):スマートコントラクトの場合、例えば「誰が私の商品を買ったか」とか「ゲームで誰が一番高得点か」といったデータを保存する場所が必要です。これらのデータはここに保存されます。通常のアカウントではここも空欄です。

ワールドステートとブロックの関係とは?

これこそが肝心な点です!ご存知かもしれませんが、ブロックチェーンは一つ一つのブロックが連結されてできています。

次のように理解できます。

  • ワールドステートは「名詞」 であり、静止画、つまり一枚の写真を表します。
  • ブロック内のトランザクションは「動詞」 であり、発生した出来事を表します。

全体の流れは次のようになります。

  1. まず、古いワールドステート(スナップショットA) があると仮定します。
  2. 次に、新しいブロック(例えば100番目のブロック)がマイニングされ、その中には「張さんが李さんに1イーサ支払った」といった多数のトランザクションが含まれています。
  3. イーサリアムネットワークは、このブロック内のすべてのトランザクションを実行し、巨大な総勘定元帳を更新します。
  4. 更新が完了すると、新しいワールドステート(スナップショットB) が誕生します。スナップショットBでは、張さんの残高は9イーサに、李さんの残高は6イーサになっています。

つまり、ブロックチェーンの本質は、新しいブロックを通してワールドステートをあるバージョンから次のバージョンへと「駆動」させ続けるステートマシン なのです。個々のトランザクションは、この巨大な「宇宙のセーブデータ」に対するわずかな変更だと言えます。

なぜ「ワールドステート」はそれほど重要なのか?

  1. 効率性! 李さんがいくら持っているか知りたいとき、最初のブロックから彼のすべての入出金記録を計算し直す必要はありません。最新のワールドステートのスナップショットを直接確認するだけで、すぐに答えが得られます。これは銀行の残高照会と同じで、長い取引履歴ではなく、最終的な数字が直接表示されるようなものです。

  2. コンセンサス! イーサリアムネットワークのすべての参加者(ノード)は、現在のワールドステートについて完全に一致した合意(コンセンサス)を形成する必要があります。もし私のコンピューター上の「スナップショット」があなたの残高を10コインと示し、あなたのコンピューター上の「スナップショット」が5コインと示したら、システム全体が混乱してしまいます。全員がこの唯一の、正しい「ワールドステート」を共同で維持・検証することが、ブロックチェーンの安全な運用基盤となります。

まとめ

  • ワールドステート とは、イーサリアムのある時点における「グローバルスナップショット」または「最終セーブデータ」のことです。
  • それはすべてのアカウントの現在の残高、ナンス(取引回数)、コントラクトコード、ストレージデータを記録しています。
  • それは取引履歴ではなく、取引実行後の最終結果です。
  • 新しいブロックが一つ生成されるたびに、ワールドステートが更新され、新しい「スナップショット」が作成されます。
  • これがあることで、情報の照会が非常に効率的になり、ネットワーク全体が「事実」に対して一貫した見解を持つことが保証されます。

この説明が、少し抽象的ですが非常に重要なこの概念をより深く理解するための一助となれば幸いです!