暗号資産におけるState Commitmentとは?
State Commitmentとは、特定の時点におけるブロックチェーンの現在の状態をコミットする暗号学的な要約です。簡単に言えば、はるかに大規模なブロックチェーンデータ群を表すコンパクトなフィンガープリントです。この大規模なデータには、ブロックチェーンの設計に応じて、アカウント残高、スマートコントラクトのストレージ、ノンス、バリデーター記録、トークン残高、オブジェクトの所有権、UTXO、その他の状態値が含まれます。State Commitmentにより、ノード、ウォレット、ブリッジ、ライトクライアント、ロールアップ、アプリケーションは、データベース全体をダウンロードしたり盲目的に信頼したりせずに、ブロックチェーンの状態に関する主張を検証できます。Ethereumでは、最もよく知られたState Commitmentはブロックヘッダーに保存されるステートルートです。公式のEthereum Merkle Patricia Trieドキュメントによると、Ethereumはクライアントがブロックを処理するたびに更新されるグローバルステートトライを使用しており、結果として得られるステートルートは暗号学的に検証可能です。
2つのノードが同じ有効なブロックを処理し、同じState Commitmentに到達した場合、両者が結果の状態について合意していることを示す強い証拠になります。1つのアカウント残高またはコントラクトストレージ値が変化すれば、State Commitmentも変化するはずです。このため、State Commitmentはブロックチェーンのコンセンサス、状態証明、不正証明、有効性証明、ライトクライアント検証、クロスチェーンメッセージングに不可欠です。暗号資産用語集においてState Commitmentは、ブロックチェーンの現在の状態をコンパクトかつ検証可能な形で表す暗号学的ルートまたはコミットメントを意味します。State Commitmentが重要な理由
State Commitmentが重要なのは、ブロックチェーンが多数の独立した参加者によって維持される共有データベースだからです。ユーザーは、正しい残高、コントラクト値、アカウント状態を報告するとして、1台のサーバーを信頼する必要があるべきではありません。State Commitmentは、より大きな状態を表す単一のコンパクトな値についてネットワークが合意する仕組みを提供します。これにより、盲目的な信頼ではなく証明を通じて状態を確認できます。例えばライトクライアントはEthereumの全状態を保存していなくても、信頼するステートルートに対して状態証明を検証できます。ブリッジでは、メッセージまたは出金記録が別チェーンの状態に存在することの証明が必要になる場合があります。ロールアップは、多数のオフチェーンまたはLayer 2トランザクションの結果を要約したステートルートを公開できます。ウォレットは残高データについてノードに依存する場合がありますが、より強力なシステムでは、ノードが虚偽を報告していないことを証明で検証できます。State Commitmentはブロックチェーン実行の監査可能性も高めます。各ブロックに結果の状態へのコミットメントが含まれることで、ユーザーはチェーンがプロトコルルールに従い、ある有効な状態から次の有効な状態へ移行したことを検証できます。State Commitmentとブロックチェーン状態の違い
ブロックチェーン状態とは、新しいトランザクションを処理するために必要な、稼働中のデータ全体を指します。State Commitmentは、その状態をコンパクトに暗号学的に表現したものにすぎません。State Commitmentには、すべての残高やストレージスロットが直接含まれているわけではないため、この区別は重要です。暗号学的データ構造を通じて、それらの値にコミットしているだけです。例えば、Ethereumのステートルートはブロックヘッダー内にすべてのアカウント残高を列挙しません。代わりに、アカウントオブジェクトを保存し、コントラクトストレージトライを参照するグローバルステートトライにコミットします。特定の値を証明したい場合、その値とコミットメントを接続する証明パスを提供します。検証者は、既知のコミットメントに対して証明を確認します。証明が有効であれば、検証者はその値がコミット済みの状態に属すると信頼できます。したがってState Commitmentは、稼働中のブロックチェーンデータベースに対する改ざん検知可能な封印のようなものです。State Commitmentとステートルートの違い
ステートルートはState Commitmentの一般的な種類です。Ethereumでは、ステートルートはブロック実行後のグローバルステートトライのルートハッシュです。公式のEthereumブロックのドキュメントでは、ブロックには重要な実行レイヤーデータにコミットするルートを含む実行ペイロード情報が含まれると説明されています。
ステートルートは特定のフィールドであり、State Commitmentはより広い概念です。他のブロックチェーンシステムでは、app hash、state hash、world state root、global root、ledger commitment、accumulator root、commitment rootなど、異なる用語を使う場合があります。正確な名称はプロトコルによって異なります。ただし、基本的な考え方は同じです。大規模な状態を小さな値で要約し、基礎となる状態が変わればその値も変化します。Ethereum系チェーンでは、ステートルートがユーザーや開発者が最もよく目にする実用的な用語です。ブロックチェーン理論では、State Commitmentがより一般的な概念です。State Commitmentの仕組み
State Commitmentは通常、構造化された状態値のデータベースから始まります。ブロックチェーンは、これらの値をMerkle tree、Merkle Patricia Trie、sparse Merkle tree、vector commitment tree、または別の認証済みデータ構造などの暗号学的データ構造に整理します。各値は決定論的な方法でハッシュ化またはコミットされます。これらのハッシュは、最上位のルートが生成されるまで上方向に結合されます。この最上位ルートがState Commitmentになります。1つのリーフ値が変われば、そのパス上のハッシュも変化します。この変化はルートが変わるまで上方向に伝播します。攻撃者が基礎となる暗号技術を破れない限り、偽の値は元のコミットメントと一致しないため、これにより改ざんを検知できます。State Commitmentは、巨大なデータベースを小さなルートと証明によって検証可能にするため有用です。証明にデータベース全体を含める必要はなく、1つの主張を確認するために必要なパスと補助データだけで十分です。EthereumにおけるState Commitment
Ethereumは、実行レイヤーの状態にコミットするために、改変されたMerkle Patricia Trieを使用しています。公式のEthereum Merkle Patricia Trieドキュメントでは、Ethereumには1つのグローバルステートトライがあり、ブロックが処理されるたびにこのトライが更新されると説明されています。Ethereumのアカウントオブジェクトには、nonce、balance、storageRoot、codeHashが含まれます。グローバルステートトライはアカウントアドレスをこれらのアカウントオブジェクトに対応付けます。各スマートコントラクトアカウントは独自のストレージトライを持つこともでき、そのストレージトライのルートはアカウントオブジェクトに保存されます。これは、EthereumのState Commitmentが階層構造を持つことを意味します。グローバルステートルートはアカウントにコミットします。各コントラクトアカウントのstorageRootは、そのコントラクトの永続ストレージにコミットします。トークンコントラクトがコントラクトストレージ内のユーザー残高を更新すると、コントラクトのストレージルートが変わり、グローバルステートルートも変化する可能性があります。このように、スマートコントラクトの実行はコミット済みのブロックチェーン状態の一部になります。State CommitmentとMerkle Patricia Trie
Merkle Patricia Trieは、Ethereumの現在の実行レイヤーで使用される認証済みキー・バリューデータ構造です。トライ形式のキーパス、Patriciaによるパス圧縮、Merkleハッシュを組み合わせています。トライの部分では、キーに基づく決定論的なパスで値を見つけられます。Patriciaの部分では、長いパスを圧縮して不要な構造を減らします。Merkleの部分では、構造を暗号学的に検証可能にします。公式のEthereumドキュメントでは、Merkle Patricia Trieは決定論的かつ暗号学的に検証可能であり、同一の状態はルートと証明パスを比較して証明できるとされています。これはまさにState Commitmentに必要な性質です。正直なノードが同じルートを算出するには、決定論的な構築が必要です。変更されたデータがコミットメントを変化させるには、暗号学的完全性が必要です。すべてをダウンロードせずに特定の値を検証するには、証明のサポートが必要です。State CommitmentとMerkle Proof
Merkle Proofは、特定の値がルートによってコミットされた状態に属することを示す証拠です。EIP-1186 eth_getProof仕様では、アカウントおよびストレージ値とMerkle Proofデータを返すJSON-RPCメソッドが説明されています。
証明には通常、対象値からステートルートまでのパスを再構築するために必要なノードまたはコミットメントが含まれます。再構築されたルートが信頼するState Commitmentと一致すれば、その値は検証されます。これにより検証者は、特定のブロック時点でアカウントが一定の残高を持っていたこと、またはコントラクトストレージスロットが特定の値を持っていたことを確認できます。Merkle Proofは、RPCプロバイダー、インデクサー、第三者APIへの信頼を減らすため重要です。単純なRPCレスポンスは、サーバーが状態について主張する内容を示すだけです。証明に裏付けられたレスポンスでは、その主張がState Commitmentと一致する理由を示せます。この違いは、ウォレット、ブリッジ、監査、クロスチェーンシステム、高額なアプリケーションにとって重要です。State Commitmentは、証明が検証対象となる信頼できるルートを必要とするため、これらの証明に意味を与えます。State Commitmentとブロックヘッダー
多くのブロックチェーンでは、ブロックヘッダーに、より大きなブロックデータへのコンパクトなコミットメントが保存されます。Ethereumのブロックヘッダーには、状態、トランザクション、レシートに関連するルートが含まれます。ステートルートは実行後のワールドステートにコミットします。トランザクションルートはブロック内のトランザクション一覧にコミットします。レシートルートはトランザクションレシートとログにコミットします。これらのコミットメントはそれぞれ異なる目的を持ちます。State Commitmentは、実行後にブロックチェーン状態がどうなったかに答えます。トランザクションコミットメントは、どのトランザクションが含まれたかに答えます。レシートコミットメントは、どのような実行出力とログが生成されたかに答えます。これらのルートを組み合わせることで、クライアントはすべての完全なデータをヘッダーに直接格納せずに、ブロックデータの重要部分を検証できます。State Commitmentとトランザクションコミットメントの違い
State Commitmentはトランザクションコミットメントと同じではありません。トランザクションコミットメントは、ブロックに含まれるトランザクションにコミットします。State Commitmentは、それらのトランザクション実行後の結果の状態にコミットします。例えば、あるブロックには、あるアカウントから別のアカウントへ資産を送るトランザクションが含まれる場合があります。トランザクションコミットメントは、そのトランザクションが含まれたことを証明します。関連する状態証明が提供されれば、State Commitmentは結果として生じた残高変化を証明します。この区別は、ブリッジや証明を構築する開発者にとって極めて重要です。トランザクションの包含を証明することは、最終状態を証明することと常に同じではありません。トランザクションは含まれていても、実行に失敗する場合があります。状態証明は、実行後にチェーン状態が実際にどうなったかを示せます。State Commitmentとレシートコミットメントの違い
レシートコミットメントもState Commitmentとは異なります。レシートは、実行ステータス、使用ガス、ログ、イベントを示すことができます。State Commitmentは、実行後の最終状態データベースを示します。イベントはインデックス作成やアプリケーションロジックで役立ちますが、コントラクトストレージと同じではありません。コントラクトは状態を変更せずにイベントを発行する場合があります。コントラクトは有用なイベントを発行せずに状態を変更する場合もあります。このため、一部の高セキュリティシステムはイベントのみに依存する前提よりもストレージ証明を優先します。レシートには価値がありますが、State Commitmentとは異なる問いに答えるものです。レシートコミットメントは、トランザクションが何を報告したかを証明するのに役立ちます。State Commitmentは、ブロックチェーン状態に実際に何が含まれるかを証明するのに役立ちます。ロールアップにおけるState Commitment
ロールアップはState Commitmentに大きく依存しています。ロールアップはベースチェーンの外部または別の実行環境でトランザクションを処理し、コミットメント、データ、または証明を決済レイヤーに投稿します。ロールアップのステートルートは、現在のLayer 2状態を要約します。ユーザーは、このコミットメントを利用して、ロールアップ内の残高、出金、メッセージ、アプリケーション状態を追跡できます。公式のEthereum zk-rollupドキュメントでは、ゼロ知識ロールアップは状態遷移が正しいことを証明するために有効性証明を投稿すると説明されています。
オプティミスティックロールアップでは、状態遷移が無効だと考える者がいれば、異議申立期間中にState Commitmentへ異議を申し立てられます。有効性ロールアップでは、コミットされた新しい状態がルールに従うことを示すために証明が使用されます。どちらの場合も、State Commitmentはロールアップ状態が何であるかについてのコンパクトな主張です。State Commitmentがなければ、ロールアップは大量のLayer 2実行を効率的に要約・決済する方法を持ちません。このため、State Commitmentは現代のブロックチェーンスケーリングに不可欠です。State Commitmentと不正証明
不正証明とは、主張された状態遷移が無効であることを示す異議申立てです。不正証明システムは、オプティミスティックロールアップの設計で一般的に議論されます。ロールアップ運営者は、トランザクションを実行した後に新しいState Commitmentを公開する場合があります。コミットメントが誤っている場合、別の参加者は古い状態から新しい状態への遷移が無効だったことを証明して異議を申し立てられます。異議申立てのプロセスには、古い状態、トランザクションデータ、主張された新しい状態に対する明確なコミットメントが必要です。したがってState Commitmentは、不正証明の証拠構造の一部です。不正証明は、何かが間違っているという主張だけではありません。主張をコミット済みデータおよび実行ルールに結び付ける必要があります。このため、データ可用性も不正証明にとって重要です。遷移を再計算するためのデータが利用できない場合、異議申立者は不正を証明できない可能性があります。State Commitmentと有効性証明
有効性証明とは、状態遷移が正しく実行されたことを示す暗号学的証拠です。有効性証明は、ゼロ知識ロールアップやその他の証明ベースシステムで一般的に使用されます。証明者は古いState Commitmentから開始し、ルールに従ってトランザクションを適用して、新しいState Commitmentが正しいことを証明します。証明システムが健全であり、必要なデータに関する前提が満たされていれば、検証者はすべてのトランザクションを完全に再実行する必要がありません。これにより、検証コストを実行コストより大幅に低くできる場合があります。証明には明確な開始時と終了時のコミットメントが必要なため、State Commitmentは中心的な役割を果たします。この証明は、実質的に、システムがあるコミット済み状態から別のコミット済み状態へ有効に移行したことを示します。これによりState Commitmentは、スケーラブルな検証のアンカーになります。有効性証明は、ロールアップ、ブリッジ、プライベートアプリケーション、圧縮実行システムを支援できます。コミットメントは、何の状態が証明されているかを定義します。State Commitmentとライトクライアント
ライトクライアントは、完全な状態を保存せずにブロックチェーン情報を検証するために、コミットメントと証明を使用します。ライトクライアントはブロックヘッダーを追跡し、それらのヘッダー内のルートに対して証明を検証する場合があります。状態値を検証するには、ライトクライアントには信頼できるState Commitmentと有効な状態証明が必要です。これにより、モバイルウォレット、組み込みデバイス、低リソースシステムは、少ないストレージと帯域幅で特定の事実を検証できます。したがってState Commitmentは、信頼を最小化するウォレット設計の主要部分です。これがなければ、ライトクライアントはリモートサーバーをより強く信頼する必要があります。リモートサーバーは残高を報告できますが、証明があればクライアントはその残高をコミット済み状態に対して確認できます。ライトクライアントの検証は、クライアントが信頼できるヘッダーとファイナリティに関する前提も必要とするため、常に簡単とは限りません。それでも、State Commitmentは原理上、軽量な検証を可能にします。これは認証済み状態がユーザーにもたらす最も重要な利点の一つです。State Commitmentとブリッジ
ブリッジでは、別のブロックチェーンまたはLayer 2ネットワークの状態を検証する必要がある場合が多くあります。ブリッジでは、入金が発生したこと、出金が確定したこと、またはメッセージがコミット済み状態に存在することの証明が必要になる場合があります。State Commitmentは、ブリッジがこれらの主張をより安全に検証するのに役立ちます。例えばブリッジコントラクトは、別システムの既知のステートルートに対して証明を検証できます。証明が有効であれば、ブリッジは資金をリリースしたりメッセージを渡したりできます。ただし、State Commitmentを使用していてもブリッジにはリスクがあります。ブリッジは、送信元チェーンのコンセンサス、ファイナリティ、データ可用性、証明形式、メッセージルールも検証する必要があります。正しい状態証明は、ブリッジの安全性を構成する一部にすぎません。脆弱なバリデーター、不適切なリレイヤー、スマートコントラクトのバグ、リプレイ攻撃、誤ったファイナリティの前提により、ブリッジ設計が不十分であれば失敗する可能性があります。State Commitmentは信頼を減らすのに役立ちますが、すべてのブリッジを自動的に安全にするものではありません。State Commitmentとデータ可用性
データ可用性とは、状態遷移の検証または再構築に必要なデータが公開され、利用可能であることを意味します。State Commitmentだけでは、状態がどのように生成されたかをユーザーが確認できる保証にはなりません。悪意ある主体は、遷移を検証するために必要なデータを隠したまま、新しいコミットメントを公開できる可能性があります。このため、データ可用性はロールアップ、シャーディング、モジュラーブロックチェーンシステムにとって大きな課題です。公式のEthereumデータ可用性ドキュメントでは、データ可用性とは、参加者が状態を検証または再構築できるよう、トランザクションデータが公開されているかどうかに関するものだと説明されています。
State Commitmentとデータ可用性は連携して機能します。コミットメントは、主張されている状態が何かを示します。利用可能なデータにより、他者はその状態への遷移が有効だったかを確認できます。データのないコミットメントはブラックボックスになり得ます。スケーラブルなブロックチェーンには、コンパクトなコミットメントとアクセス可能なデータの両方が必要です。State Commitmentとステートレスクライアント
ステートレスクライアントは、ノードが完全な状態をローカルに保存せずにブロックを検証するための長期的なスケーリング構想です。すべてのノードが状態データベース全体を保持する代わりに、ブロック生成者またはピアが、ブロックで参照される状態値を証明するwitnessを提供します。公式のEthereum statelessnessドキュメントでは、ステートレス化は大きなローカル状態データベースではなくwitnessを使ってノードがブロックを検証できるようにすることを目的としていると説明されています。
witnessはコミットメントに対して検証される必要があるため、State Commitmentはこの設計の中心です。witnessが、アクセスされたすべての値が以前のState Commitmentと一致し、結果の値が新しいコミットメントを生成することを証明すれば、検証者は少ないローカル状態でブロックを確認できます。これにより、時間の経過とともにノード運用が容易になる可能性があります。ただし、現在のMerkle Patricia Trieのwitnessは大きくなる可能性があります。これは、Ethereumの研究がVerkle treeとより小さなwitness構造に注力してきた理由の一つです。ステートレス化は単なるストレージの工夫ではありません。効率的な証明をサポートするState Commitmentに依存しています。State CommitmentとVerkle tree
Verkle treeは、Ethereumの状態証明をより小さく効率的にするために提案されているアップグレードパスです。公式のEthereum Verkle treesドキュメントでは、Verkle treeは、ブロックを検証する能力を維持しながらEthereumノードが大量の状態データを保存しないよう支援できるデータ構造だと説明されています。
Verkle treeは、ツリー構造とvector commitmentを組み合わせます。Verkleという名称は、vector commitmentとMerkle treeに由来します。現在のMerkle Patricia Trieの証明と比べ、Verkle Proofは多くの状態アクセスパターンで大幅に小さくなる可能性があります。より小さなwitnessは、ステートレスクライアントと将来のスケーリングにとって重要です。Verkle treeはState Commitmentの必要性をなくすものではありません。状態を表現・証明するために使用するコミットメント構造を変更するものです。これはState Commitmentが、異なる暗号学的データ構造で実装できる広範な概念であることを示しています。状態にコミットする必要性は根本的に残る一方で、コミットメント手法は進化し得ます。State Commitmentとvector commitment
vector commitmentとは、リストまたはベクトルの値に対する暗号学的コミットメントであり、個々の位置に関する効率的な証明をサポートします。vector commitmentは、一部のハッシュツリー方式と比べて証明サイズを縮小できるため、ブロックチェーン状態に有用な場合があります。Verkle treeは、ツリー状の構造の内部でvector commitmentを使用します。これは、兄弟ハッシュを使用してパスを検証する従来のMerkle treeとは異なります。vector commitmentは証明をよりコンパクトにできますが、スキームに応じて異なる暗号学的前提や実装の複雑性をもたらす場合があります。ユーザーにとって重要なのは、数学的な詳細ではありません。重要なのは、新しいState Commitmentシステムが状態証明のコスト削減を目指している点です。より小さな証明は、ライトクライアント、ステートレスクライアント、ロールアップ、ブリッジ、プライバシー保護システムに役立つ可能性があります。ただし、新しいコミットメントスキームは、大規模なパブリックネットワークを保護する前に慎重なテストが必要です。State Commitmentの設計は常に、証明サイズ、検証コスト、更新コスト、セキュリティ前提、実装リスクのバランスを取る必要があります。State Commitmentとsparse Merkle tree
sparse Merkle treeは、暗号資産システムでよく使われる別のState Commitment構造です。キーが非常に大きな固定キー空間に存在する場合によく使用されます。考えられる各キーはツリー内に位置を持ちますが、大半の位置は空である可能性があります。実装に応じて、空のブランチは圧縮または効率的に表現できます。sparse Merkle treeは、明確な包含証明と非包含証明をサポートするため有用です。一部のLayer 2システム、ブリッジ、ウォレット、アプリケーション固有のブロックチェーンは、State Commitmentにsparse Merkle treeまたはその派生形を使用します。これらはEthereumの現在のMerkle Patricia Trieと同一ではありません。同じ基本的な問題を解決する別の方法です。その問題とは、大規模なキー・バリュー状態にコミットし、個々の値を効率的に証明する方法です。この多様性は、State Commitmentが単一のデータ構造ではなく設計カテゴリであることを示しています。State CommitmentとBitcoin
Bitcoinは通常、Ethereum形式のグローバルアカウントState Commitmentで説明されません。Bitcoinのブロックは、ブロックヘッダーのMerkle rootを通じてトランザクションにコミットします。Bitcoinの利用可能なライブ状態はUTXOセットであり、トランザクション履歴から導出されます。公式のブロックチェーンに関するBitcoin開発者ガイドでは、ブロックヘッダーにブロック内トランザクションのMerkle rootが含まれると説明されています。
これは、Bitcoinが強力なトランザクション包含コミットメントを持つことを意味します。ただし、Ethereumがアカウント状態のステートルートを含めるのと同様の方法で、Bitcoinのブロックヘッダーには現在のUTXOセット全体への直接的なコミットメントは含まれません。利用可能な状態への直接コミットメントがライトクライアントや検証モデルに役立つ可能性があるため、UTXOコミットメントについては研究や提案が行われてきました。この比較は、異なるブロックチェーンが異なるデータにコミットすることを示すため有用です。Ethereum形式のスマートコントラクトシステムでは、アプリケーションが現在のアカウントおよびコントラクト状態に大きく依存するため、明示的なState Commitmentが必要です。Bitcoinのモデルは、トランザクション履歴とそこから導出されるUTXOセットにより直接的に焦点を当てています。State Commitmentとアカウントベースのブロックチェーン
アカウントベースのブロックチェーンでは、アカウント残高とコントラクトストレージが実行の中心となるため、明示的なState Commitmentが必要になることが多くあります。トランザクションが実行されると、アカウント残高、ノンス、スマートコントラクトストレージ、ステーキング記録、アプリケーションデータが更新される場合があります。他のノードが正確な結果を検証できるよう、結果の状態をコミットする必要があります。これが、スマートコントラクトプラットフォームでステートルートが一般的な理由です。ステートルートは、広範な状態データベースへの単一のコミットメントをネットワークに提供します。信頼できるState Commitmentがなければ、コントラクトストレージ値が正しいことを証明するのはより困難になります。アカウントまたはストレージ証明に依存するブリッジ、ロールアップ、ライトクライアントの構築も難しくなります。アカウントベースのチェーンは通常、単純な決済システムより複雑な状態を持ちます。この複雑性により、State Commitmentの設計は特に重要になります。チェーンのプログラム可能性が高いほど、認証済み状態の価値も高まります。State Commitmentとオブジェクトベースのブロックチェーン
一部のブロックチェーンは、単純なアカウントベースの状態ではなく、オブジェクトベースの状態モデルを使用します。オブジェクトベースのシステムでは、資産、コントラクト、データを、所有者、フィールド、権限を持つオブジェクトとして表現できます。これらのシステムにもState Commitmentが必要です。コミットメントは、オブジェクトの所有権、内容、バージョン番号、パッケージデータ、実行結果を要約する場合があります。正確な構造はEthereumのグローバルアカウントトライとは異なります。しかし、目的は依然として現在の状態を検証可能にすることです。オブジェクトの所有権が変われば、State Commitmentはその変化を反映するはずです。オブジェクトの内容が変われば、コミットメントはその更新を反映するはずです。これは、State CommitmentがEthereum形式のアカウントモデルに限定されないことを示しています。ライブ状態を維持するあらゆるブロックチェーンには、その状態に安全にコミットする手段が必要です。State Commitmentとスマートコントラクトストレージ
スマートコントラクトストレージは、State Commitmentが複雑になる主な理由の一つです。スマートコントラクトは、残高、承認、ポジション、注文、投票、設定値、その他多数の記録を保存できます。これらの値は各トランザクション後に変化する可能性があります。State Commitmentは、こうした変化を正確に反映しなければなりません。Ethereumでは、各コントラクトのストレージトライには独自のルートがあり、コントラクトアカウントはそのルートをグローバルステートトライ内に保存します。これにより、特定のコントラクトストレージスロットの証明が可能になります。例えば、トークン残高マッピングが特定のブロックで一定の値を持っていたことを証明できます。これは監査、ブリッジ、ガバナンス、ロールアップ、クロスチェーン検証に役立ちます。スマートコントラクトストレージはState Commitmentを強力にしますが、状態は非常に大きくなり得るため、より負荷も大きくなります。このため、ストレージコスト、状態肥大化、証明サイズは主要なスケーリング上の懸念事項です。State Commitmentとトークン残高
トークン残高は、ベースアカウント状態に直接存在するのではなく、スマートコントラクトストレージ内に存在する場合が多くあります。つまり、トークン残高を証明するには、トークンコントラクトのストレージ証明が必要になる場合があります。ネイティブコインの残高は、アカウントオブジェクトから証明できる可能性があります。トークン残高では、トークンコントラクトアカウントと、そのストレージルート内にある関連ストレージスロットの証明が必要になる場合があります。この区別は、ブリッジやエアドロップにとって重要です。トークン所有権を検証する必要があるシステムは、その所有権がどこに保存されているかを理解すべきです。すべての残高が同じ状態フィールドの一部だと想定すべきではありません。State Commitmentはネイティブコインとトークンの両方の証明をサポートできますが、証明パスは異なる場合があります。開発者は、証明システムを構築する前にトークン標準とストレージレイアウトを理解すべきです。State Commitmentは、検証者が何の値を証明しているかを正確に把握して初めて有用になります。State CommitmentとNFT
NFTの所有権もState Commitmentを通じて表現できます。NFTコントラクトは通常、各トークンIDの所有権データを保存します。NFT所有権の証明では、特定のブロックにおける関連コントラクトストレージ値の検証が必要になる場合があります。これは、クロスチェーンNFTブリッジ、スナップショット投票、アクセス制御、報酬、過去の所有権確認に役立つ可能性があります。ただし、NFTメタデータが常にブロックチェーン状態によって完全にコミットされているとは限りません。一部のNFTメタデータはオフチェーンに保存されるか、外部リンクを通じて参照されます。State Commitmentはオンチェーンの所有権を証明できますが、オフチェーンの画像またはメタデータファイルが永久に利用可能であることまでは証明できない可能性があります。状態証明がNFTに関するすべてを証明すると考えるユーザーにとって、この違いは重要です。通常、状態証明が証明するのは確認対象となるオンチェーン状態値のみです。State Commitmentは強力ですが、オフチェーンデータの永続性を自動的に検証するものではありません。State Commitmentと履歴状態
State Commitmentは、チェーン履歴内の特定のブロックまたは時点に紐づきます。現在のState Commitmentは現在の状態を証明します。検証者が古いブロックヘッダーと適切な証明を持っていれば、古いState Commitmentは過去の状態を証明できます。これは監査、スナップショット、法的記録、ガバナンス、過去の主張に役立ちます。ただし、過去の状態データの保存には大きなコストがかかる可能性があります。多くのフルノードは現在および最近の状態を保持しますが、古い中間状態はプルーニングします。アーカイブノードはより多くの履歴状態を保持するため、古いクエリにより迅速に応答できます。公式のEthereumアーカイブノードのドキュメントでは、アーカイブノードはすべての履歴状態を保存し、高速な履歴クエリに役立つと説明されています。
つまり、過去のState Commitmentは古いブロックヘッダーに存在する場合がありますが、過去の状態に対する証明を生成するには履歴状態データベースへのアクセスが必要になる可能性があります。State Commitmentは検証可能性を維持しますが、誰かが証明の構築に必要なデータを保持する必要があります。State Commitmentとアーカイブノード
State Commitmentだけでは完全な状態データを保存しないため、アーカイブノードは重要です。ブロックヘッダーには何年も前のステートルートが含まれている場合があります。その古いルートに対する証明を生成するには、ノードは関連する履歴トライノードまたは状態データにアクセスする必要があります。通常のフルノードでは、その古い状態をすぐに利用できない場合があります。アーカイブノードは、迅速なアクセスのために履歴状態を保持するよう設計されています。このため、エクスプローラー、分析企業、監査人、インフラプロバイダーはアーカイブノードに依存することが多くあります。ユーザーにとって実務上の問題は、証明データを簡単に利用できなければ、古い状態は現在の状態より検証が困難になる可能性があることです。開発者にとっては、履歴証明システムには慎重なデータ保存計画が必要であることを意味します。State Commitmentはコンパクトなアンカーですが、証明には補助データが必要です。アーカイブインフラは、履歴検証におけるこの隔たりを埋めます。State Commitmentと状態肥大化
状態肥大化は、稼働中のブロックチェーン状態が大きくなりすぎたときに発生します。新しいアカウント、コントラクト、ストレージスロット、トークン残高、注文、ポジションはいずれも、コミット・維持すべき状態量を増やす可能性があります。状態の増大は、ノードストレージ、同期時間、データベース負荷、証明の複雑性を増加させる場合があります。State Commitmentは状態のコストをなくしません。状態を要約し、認証するだけです。基礎となる状態が大きくなりすぎれば、ノードはその状態の一部を保存、更新、または証明する必要があります。このため、State Commitmentの研究は状態有効期限、ストレージレンタル、プルーニング、ステートレス化、Verkle treeと結び付いています。ブロックチェーンには安全なコミットメントが必要ですが、持続可能な状態管理も必要です。状態肥大化は、スマートコントラクトプラットフォームにとって最も難しい長期的課題の一つです。より優れたState Commitmentは役立つ可能性がありますが、それだけが解決策ではありません。State Commitmentとストレージレンタル
ストレージレンタルは、ブロックチェーン状態内のデータ保持に対して料金を請求または価値を留保する経済的な仕組みです。永続的なデータエントリーは最終的にコミット済み状態に含める必要があるため、State Commitmentと関連しています。データ保存が安すぎると、ユーザーやアプリケーションが低価値の状態を作成し、長年にわたりネットワークの負担になる可能性があります。ストレージが高価すぎると、有用なアプリケーションの構築が難しくなる場合があります。State Commitmentは状態を検証可能にしますが、その状態を保存する費用を誰が負担すべきかを決めるものではありません。ストレージレンタル、入金、ガスコスト、リベートは、状態増大の経済的側面を解決するのに役立ちます。State Commitmentは暗号学的側面を解決します。持続可能なブロックチェーン設計には、両方が必要です。ブロックチェーンは強力なステートルートを持っていても、状態が無制限に増加すれば問題を抱える可能性があります。このため、State Commitmentと状態経済学は併せて研究すべきです。State Commitmentとファイナリティ
State Commitmentは、確定済みまたは強く確認されたブロックに紐づくと、より有用になります。ブロックが再編成される可能性がある場合、そのState Commitmentは別のチェーン分岐にある別のState Commitmentに置き換えられる場合があります。これはブリッジ、出金、監査、クロスチェーンメッセージにとって重要です。ブリッジは、容易に覆る可能性のあるブロックのState Commitmentに依存すべきではありません。ライトクライアントは、検証する状態を持つチェーンのファイナリティモデルを理解すべきです。一部のチェーンには、時間とともに確信度が増す確率的ファイナリティがあります。一部のチェーンには、明示的な経済的ファイナリティまたはBFT型ファイナリティがあります。コミットメントは、ブロックに対する相対的な状態を証明します。ファイナリティは、そのブロックが正史チェーンとして維持されることについて、ユーザーがどの程度確信できるかを示します。基礎となるブロックコミットメントも関連するコンセンサスルールの下で確定している場合、状態証明は最も強力になります。State Commitmentとコンセンサス
コンセンサスとState Commitmentは連携しますが、同じものではありません。コンセンサスは、どのブロックをどの順序で受け入れるかを決定します。状態遷移関数はそれらのブロックを実行し、新しい状態を生成します。State Commitmentはその新しい状態を要約します。コンセンサスが誤ったステートルートを持つブロックを受け入れた場合、正直なノードは実行検証時にそのブロックを拒否するはずです。ノード間で実行ルールに関する見解が異なれば、異なるState Commitmentを計算して分岐する可能性があります。このため、クライアント実装はプロトコルルールに正確に従ってState Commitmentを計算しなければなりません。State Commitmentは、合意された実行結果を表すため、コンセンサスにとって不可欠です。単なるデータベースインデックスや任意のメタデータではありません。誤ったState Commitmentはブロックを無効にする可能性があります。State CommitmentとRPCプロバイダー
RPCプロバイダーは、ウォレットやdAppがブロックチェーンデータを読み取り、送信するために使用するサービスです。ウォレットが残高を要求すると、RPCプロバイダーはノードから状態を読み取ります。dAppがコントラクト値を確認すると、プロバイダーはコントラクトストレージを読み取るか、現在の状態に対して実行をシミュレートする場合があります。ただし、通常のRPCレスポンスは常に暗号学的証明ではありません。単にプロバイダーが報告した値である可能性があります。プロバイダーが証明データも提供する場合、State Commitmentによってより強力な検証が可能になります。Ethereumでは、EIP-1186がアカウントおよびストレージ証明用のeth_getProofを定義しています。つまり、より高い保証が必要なアプリケーションは、単純なレスポンスを信頼するのではなく証明データを要求できます。一般的なユーザーの大半は、これらの証明を手動で検証しません。それでもState Commitmentは、インフラプロバイダーへの信頼を減らせるツールの基盤を形成します。State Commitmentとインデクサー
インデクサーは、アプリケーションが迅速に検索できるようブロックチェーンデータを整理します。トークン送転送、NFT所有権、DeFiポジション、ガバナンス投票、アカウント活動を追跡する場合があります。生の状態とログは直接クエリしにくいため、インデクサーは有用です。ただし、インデックス化されたデータはState Commitmentと同じではありません。インデクサーは誤る、チェーンより遅れる、または独自の解釈ルールを使用する可能性があります。State Commitmentはプロトコルの暗号学的検証システムの一部です。高額またはセキュリティ上重要なアプリケーションでは、インデックス化されたデータをコミット済み状態またはレシートに対して確認する必要がある場合があります。これは、インデクサーの出力が金融上のアクションを引き起こす場合に特に重要です。インデクサーは使いやすさを高め、State Commitmentは検証可能性を高めます。信頼できる暗号資産アプリケーションは、この違いを理解すべきです。State Commitmentとプライバシー
State Commitmentはプライバシー保護システムを支援できますが、自動的にプライベートになるわけではありません。パブリックブロックチェーンでは、State Commitmentは通常、公開された状態または公開情報から導出可能な状態を要約します。チェーンやツールによっては、誰でも残高、コントラクトストレージ、トランザクション履歴を調べられる場合があります。プライバシー保護システムでは、コミットメントを異なる方法で使用する場合があります。例えば、プロトコルは隠された値にコミットし、すべての詳細を開示せずに遷移が有効であることを示すためにゼロ知識証明を使用できます。こうしたシステムでは、コミットメントは検証をサポートしながらデータを隠せます。したがって、commitmentという語はパブリックなステートルートよりも広い概念です。State Commitmentは、設計に応じて透明、プライベート、または部分的にプライベートになり得ます。プロトコルが明確にプライバシー機能を提供していない限り、State Commitmentがデータを隠すとユーザーは想定すべきではありません。大半のパブリックチェーンのState Commitmentは、機密性より完全性を目的としています。State Commitmentとゼロ知識証明
ゼロ知識証明では、実行前後の状態を表すためにコミットメントを使用することが多くあります。証明者は、検証者がすべてを再実行せずに、あるState Commitmentから別のState Commitmentへの遷移が有効だったことを示せます。これは有効性ロールアップ、プライバシーシステム、圧縮実行モデルで一般的です。証明は、新しいState Commitmentが古いState Commitmentと一連の有効な操作から導かれることを示せます。システムに応じて、一部のデータは公開され、一部のデータは隠されたままになる場合があります。このため、コミットメントはコンパクトな検証と複雑な計算をつなぐ橋渡しになります。State Commitmentは、何が証明されているかを定義します。ゼロ知識証明は、遷移を受け入れるべき理由を定義します。両者により、検証可能な正確性を維持しながら、システムを拡張したりプライバシーを維持したりできます。これは現代の暗号資産インフラにおけるState Commitmentの最も重要な高度な用途の一つです。State Commitmentと非包含証明
非包含証明は、キーまたは値がコミット済み状態に存在しないことを示します。包含証明は、何かが存在することを示します。非包含証明は、何かが存在しないことを示します。これはアカウント作成、nullifier確認、sparse Merkle tree、アイデンティティシステム、エアドロップ請求で重要になる場合があります。例えばプライバシーシステムでは、nullifierがすでに使用されていないことを証明する必要がある場合があります。ブリッジでは、メッセージが以前に処理されていないことを証明する必要がある場合があります。レジストリでは、名称またはキーがまだ割り当てられていないことを証明する必要がある場合があります。一部のコミットメント構造は、他の構造より非包含証明を容易にします。これが、単純な残高証明以外でもState Commitmentの設計が重要である理由の一つです。優れたState Commitmentシステムは、プロトコルが実際に必要とする証明タイプをサポートすべきです。State Commitmentとセキュリティ前提
State Commitmentは暗号学的前提に依存します。ハッシュベースのコミットメントは、ハッシュ関数の衝突耐性と原像計算困難性に依存します。vector commitmentは、スキームに応じて異なる数学的前提に依存する場合があります。基礎となる暗号技術が破られれば、コミットメントは信頼できなくなる可能性があります。実装のセキュリティも重要です。正しいコミットメントスキームであっても、クライアントソフトウェアが値を誤ってエンコードしたり、証明を不適切に検証したりすれば危険になり得ます。コンセンサス上重要なコードは、エッジケースを正確に処理しなければなりません。異なるクライアントは、同じ状態から同じコミットメントを計算する必要があります。このため、主要なブロックチェーンアップグレードにおけるState Commitmentの変更は慎重に扱われます。コミットメント構造を変えることは、チェーンのセキュリティモデルの深い部分を変えることです。State Commitmentと開発者ツール
開発者は、RPCメソッド、証明システム、ブロックヘッダー、ロールアップのステートルート、ストレージ証明、クライアントデータベースを通じてState Commitmentに接します。スマートコントラクト開発者は、証明を生成できるよう、トークン残高がどのように保存されているかを知る必要がある場合があります。ブリッジ開発者は、確定済みルートに対してストレージ証明を検証する必要がある場合があります。ロールアップ開発者は、バッチ処理後にステートルートを計算・公開する必要がある場合があります。ウォレット開発者は、RPC値を信頼するか証明を検証するかを判断する必要がある場合があります。インデクサー開発者は、インデックス化されたイベントをコミット済み状態と照合する必要がある場合があります。プロトコル研究者は、Merkle Patricia Trie、sparse Merkle tree、Verkle tree、その他のアキュムレーターを比較する場合があります。これらはすべて、異なる形のState Commitmentの問題です。この概念を理解することで、開発者はトランザクション包含、イベントログ、レシート、実際の状態を混同せずに済みます。最も安全なシステムは、どのコミットメントを検証し、どの状態値を証明しているかを明確にします。State Commitmentに関するよくある誤解
よくある誤解の一つは、State Commitmentに完全な状態が含まれるというものです。State Commitmentは状態のコンパクトな暗号学的要約にすぎないため、完全な状態は含まれません。もう一つの誤解は、トランザクション証明と状態証明が同じだというものです。トランザクション証明は包含を示せますが、状態証明は結果の状態値を示せます。3つ目の誤解は、State Commitmentがデータを利用可能にするというものです。コミットメントは完全性を証明しますが、データ可用性は別の要件です。4つ目の誤解は、すべてのブロックチェーンが同じ方法で状態にコミットするというものです。異なるチェーンは、異なる状態モデルとコミットメント構造を使用します。5つ目の誤解は、State Commitmentが自動的にプライバシーを意味するというものです。大半のパブリックState Commitmentは、機密性ではなく完全性と検証可能性を提供します。State Commitmentのメリット
State Commitmentの第1のメリットは、コンパクトな検証です。小さなルートで非常に大規模な状態データベースを表現できます。第2のメリットは、改ざん検知です。基礎となる状態を変更すると、コミットメントも変化します。第3のメリットは、証明のサポートです。ユーザーは包含証明または非包含証明を通じて特定の値を検証できます。第4のメリットは、ライトクライアントのサポートです。ライトクライアントは完全な状態を保存せずに、選択した状態値を確認できます。第5のメリットは、スケーリングのサポートです。ロールアップと証明システムは、大規模な実行バッチを要約するためにState Commitmentを使用します。第6のメリットは、クロスチェーン検証です。ブリッジやメッセージングシステムは、別のチェーンまたはレイヤーからのコミットメントに対して主張を検証できます。第7のメリットは、監査可能性です。State Commitmentは、各ブロックが特定の合意済み状態をもたらすことを示すのに役立ちます。State Commitmentの制限
第1の制限は、コミットメントだけでは基礎データを提供しないことです。ユーザーは主張を検証するために、依然としてデータ可用性と証明データを必要とします。第2の制限は、証明サイズです。一部のコミットメント構造では、効率的なライトクライアントまたはステートレス検証には大きすぎる証明が生成されます。第3の制限は、更新コストです。多くの状態値が変化した後にコミットメントを更新するには、大きな計算コストがかかる場合があります。第4の制限は、実装の複雑性です。エンコード、ハッシュ化、証明生成、証明検証は正確でなければなりません。第5の制限は、履歴へのアクセスです。古いコミットメントはブロックヘッダーに存在する可能性がありますが、証明生成にはアーカイブノードの古い状態データが必要になる場合があります。第6の制限は、セキュリティ前提です。異なるコミットメントスキームは、異なる暗号学的保証に依存します。第7の制限は、ユーザーから見えにくいことです。大半のユーザーはState Commitmentを直接目にしないため、ウォレットとアプリケーションは証明ベースのセキュリティを明確に説明する必要があります。State Commitmentシステムの評価方法
まず、何の状態にコミットしているかを特定します。次に、どのデータ構造がコミットメントを生成するかを確認します。コミットメントが包含証明をサポートするかを確認します。アプリケーションで必要な場合、非包含証明をサポートするかも確認します。証明サイズと検証コストを確認します。多数の状態値が変化したときの更新コストを確認します。コミットメントスキームの背後にある暗号学的前提を確認します。現在および履歴状態の証明データが簡単に利用可能かを確認します。コミットメントが確定済みブロック、ロールアップバッチ、または他の信頼できるアンカーに含まれるかを確認します。データ可用性が、コミットメント自体とは別に解決されているかを問いましょう。開発者向けベストプラクティス
証明検証を実装する前に、公式プロトコルドキュメントを使用してください。設計ではトランザクション包含証明と状態証明を分けてください。可能な限り、信頼できる確定済みコミットメントに対して証明を検証してください。イベントとログがコミット済みストレージ値と同じだと想定しないでください。トークン残高、NFT所有権、ガバナンス権限を証明する前に、コントラクトストレージレイアウトを理解してください。アプリケーションで古い状態スナップショットが必要な場合は、履歴証明生成を計画してください。State Commitmentの検証に加えて、データ可用性も考慮してください。小さなエンコードミスが重大な脆弱性になり得るため、証明検証コードを慎重に監査してください。システムがEthereumの状態証明に深く依存する場合は、Verkle tree研究などのロードマップ変更を追跡してください。アプリケーションが何を証明し、どのコミットメントを使い、どの前提が残るかを文書化してください。ユーザー向けベストプラクティス
表示された残高は、自身で検証した証明ではなく、RPCプロバイダーまたはインデクサーから得られたものである場合があることを理解してください。信頼できるウォレットとエクスプローラーを使用してください。ただし、高額なシステムではより強力な証明ベースの検証が必要になる場合があることを覚えておいてください。別チェーンの状態を検証すると主張するブリッジには注意してください。ブリッジがネイティブ証明、バリデーター、リレイヤー、マルチシグ、外部委員会のどれに依存するかを確認してください。State Commitmentは、すべてのデータに簡単にアクセスできることを保証しないと理解してください。古い状態を効率的に証明するにはアーカイブインフラが必要になることを覚えておいてください。トランザクションの包含が、最終的な状態変更の成功を意味すると想定しないでください。高額なアクションでState Commitmentに依存する前に、十分なファイナリティを待ってください。クロスチェーン状態証明に依存するシステムを利用する際は、少額のテストトランザクションを使用してください。証明ベースの主張は、実際に正しいコミットメントに対して証明が検証された場合にのみ、単なる主張より強力なものとして扱ってください。FAQ
暗号資産におけるState Commitmentとは何ですか?
State Commitmentとは、ブロックチェーンの現在の状態をコンパクトかつ検証可能な方法で表す暗号学的ルートまたはコミットメントです。State Commitmentとステートルートは同じですか?
ステートルートはState Commitmentの一般的な種類で、特にEthereum形式のブロックチェーンで使われます。State Commitmentは何を証明しますか?
State Commitmentだけで値を証明するわけではありませんが、有効な状態証明と組み合わせることで、ユーザーは値を検証できます。Ethereumがステートルートを使用する理由は何ですか?
Ethereumは、各ブロック実行後のグローバルなワールドステートにコミットするためにステートルートを使用します。State Commitmentとトランザクションルートの違いは何ですか?
State Commitmentは結果として生じたブロックチェーン状態を表し、トランザクションルートはブロックに含まれるトランザクションにコミットします。Merkle Proofとは何ですか?
Merkle Proofとは、検証者が値がルートによってコミットされた状態に属するかを確認できる補助データです。ロールアップはState Commitmentをどのように使用しますか?
ロールアップは、トランザクションバッチ実行後のLayer 2状態を要約するためにState Commitmentを使用します。State Commitmentはデータ可用性を解決しますか?
いいえ。State Commitmentは完全性を証明しますが、データ可用性は状態遷移を検証または再構築するために必要なデータへアクセスできることを保証します。Verkle treeとは何ですか?
Verkle treeは、vector commitmentを使用して、より小さなwitnessと効率的なステートレス検証をサポートするために提案されたState Commitment構造です。State Commitmentはプライベートですか?
必ずしもそうではありません。大半のパブリックチェーンのState Commitmentは、プライバシー保護暗号技術と組み合わせない限り、機密性ではなく検証可能性を提供するためです。結論
State Commitmentは、特定時点におけるブロックチェーンのライブ状態に対するコンパクトな暗号学的コミットメントです。これにより、大量の残高、アカウント、コントラクトストレージ、アプリケーションデータを、小さなルートまたはコミットメント値で表現できます。Ethereumでは、ステートルートがグローバル実行レイヤー状態の主なState Commitmentです。このルートはMerkle Patricia Trieから生成され、基礎となる状態が変わるたびに変化します。State Commitmentは、コンセンサス、ライトクライアント、Merkle Proof、ロールアップ、ブリッジ、監査、ステートレスクライアント研究に不可欠です。これによりユーザーは、データベースプロバイダーを盲目的に信頼せずに状態に関する主張を検証できます。また、不正証明、有効性証明、クロスチェーンメッセージングなどの高度なシステムも支えます。ただし、State Commitmentは完全なデータ可用性、トランザクション包含、レシートログ、プライバシーと同じものではありません。適切な証明、適切なデータ、適切なファイナリティに関する前提と組み合わせる必要があります。ブロックチェーンがより小さな証明、より高速な更新、より低いノード要件を追求する中で、State Commitmentの設計は進化を続けています。Verkle treeとステートレス化の研究は、State Commitmentの将来が依然として活発なエンジニアリングおよび暗号学のテーマであることを示しています。暗号資産用語集においてState Commitmentは、完全な状態をすべてのブロックヘッダーに格納せずに、ブロックチェーンがその状態を証明できるようにする暗号学的アンカーを意味します。重要なポイントは、State Commitmentが巨大なブロックチェーン状態を検証可能なルートに変換し、ノード、ウォレット、ロールアップ、ブリッジ、アプリケーション全体で信頼を最小化した検証を可能にすることです。関連コンテンツ
ZK-Rollup
ZK-Rollup-as-a-Service
zk-SNARK
ホット
現在、市場で大きな注目を集めているトレンドの暗号資産
トップ取引高
取引高が最も多い暗号資産

