Alt: イーサリアムの状態変更新しいブロックがネットワーク上の検証者とともに処理およびブロードキャストされると、他の参加者はそれを自身のストレージに追加し、グローバルステートを更新します。各ブロックの検証者はランダムに選択されます。ランダム化分散型自律組織(RANDAO)パラメータ。ブロック構造は厳密に順序付けされており、ブロックの作成およびコンセンサスプロセスは、イーサリアムのプルーフオブステークプロトコルの下で指定されています。
ブロックにはヘッダーと本文に複数のフィールドが含まれています。たとえば、ブロックヘッダーにはスロット、提案者インデックス、親ルート、ステートルート、および本文フィールドが含まれます。ブロック本文には、randao_reveal、eth1_data、graffiti、提案者スラッシング、Attesterスラッシング、Attestations、Deposits、Voluntary_exits、sync_aggregate、およびexecution_payloadが含まれます。各フィールドには異なるパラメータがあり、異なるニーズを処理します。

イーサリアムの12秒ブロック作成期間は、「スロット」とも呼ばれ、ネットワーク参加者が新しいブロックと合意に達するために十分な時間を確保することから来ています。この期間中:
ブロックを処理する際、Ethereumはブロックのデータを取り、ハッシュ関数を適用してユニークな文字列に縮小します。ハッシュ関数では、すべての入力がユニークな出力を生成します。ブロック内のハッシュ値は唯一の不変の部分です。これは、総ステークされたETHの三分の一が燃やされることで変更可能です。ただし、この金額はMerkle Trieのハッシュを再計算してチェックポイントまで到達するまでのものです。各ブロックのハッシング処理の出力は、blockHashパラメータとともに返されます。blockHashパラメータにはブロック内のすべてのデータが含まれています。
ブロックのハッシュ値や他の必要なパラメータは、マークル木に格納されています。イーサリアムは、マークル・トライのアーキテクチャを異なるバージョンで使用しており、メルクル・パトリシア・トライなどがあります。
Merkle木は、大量のチャンクをハッシュ化し、それらを部分に分割するための構造化された方法です。Merkle化により、データはペアで整理されます。それぞれが一緒にハッシュ化されます。Merkle化プロセスは、単一のMerkleルートが得られるまで繰り返されます。
Ethereumは、基本的なデータ処理(トランザクションデータなど)にはバイナリTriesを使用し、このアプローチはそのような状況に対してより効率的ですが、より複雑な状況(状態の処理など)では、より複雑なMerkle Patricia Triesを使用しています。Merkle Patricia Triesは、Merkle Trie構造のデュアルMerkle Trie構造を好みます。
ステートトライのデータストレージシナリオでは、Ethereumはキーバリューマップを活用しています。キーはアドレスを表し、値はアカウント宣言を表します。ステートトライはバイナリトライよりも動的です。したがって、新しいアカウントを頻繁に挿入したり、キーを頻繁に挿入および削除したりできます。このプロセスには、全データセット全体を再計算する必要がない、迅速に更新可能なデータ構造が必要です。
トライの根はデータにのみ依存し、順序には依存しません。異なる順序でデータを更新しても、根自体は変わりません。
Alt: バイナリメルクルトライEthereumは一部の機能を持つ改変されたMerkle Patricia Trieを使用していますPATRICIA(Practical Algorithm to Retrieve Information Coded in Alphanumeric)および修正されたマークルトライとともに。このアーキテクチャは決定論的であり、暗号的に検証可能です。この構造における状態ルートを生成する唯一の方法は、それぞれの状態の個々の部分から計算することです。2つの同一の状態は、ルートハッシュとそれにつながるハッシュを比較することで簡単に証明することができます。
最終的に、異なる値で状態を変更することは不可能です。なぜなら、異なる状態ルートハッシュが生じるからです。Ethereumの実行レイヤーのすべてのトライ構造はMerkle Patricia Trieを使用しています。ネットワークには3つのトライがあります:State Trie、Storage Trie、Transaction Trie。さらに、すべてのブロックには独自のReceipts Trieがあります。Merkle Patricia Triesは多くの点で効率的ですが、Ethereumは状態の無効化を達成するためにそれらをVerkle Triesで置き換えることを目指しています。
Alt: Merkle Patricia Trie### ガスGasは、実行に必要なプロパティです。EVMは実行に計算リソースを使用し、これらの努力の戻りは、EVMのセキュリティを確保するためにガスで支払われます。ガス料金は、必要なガス量に単位ごとのコストを乗じたものとして計算されます。これは動的な値であり、操作の種類に依存します。
Alt: https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdfEIP-1559トランザクション手数料メカニズムにいくつかの重要な変更を加えました。過去にはブロックにトランザクションを含めるためのガス料金は、オークションのような方法で支払われていました。EIP-1559では、ベース料金と呼ばれる最小限度が導入され、プライオリティ料金と呼ばれるチップが導入されました。ブロックは最も優先度の高い料金を持つトランザクションから開始することが提案されています。ブロック処理後、ベース料金は燃やされ、プライオリティ料金はバリデーターをインセンティブするために使用されます。
イーサリアムには、グローバルステート内のアカウント、残高、展開されたスマートコントラクト、関連するストレージが含まれています。イーサリアムのステートは、これらのパラメータの追加と変更に伴い成長します。ノード全体をホスティングするハードウェアコストが高くなりすぎると、ステートの成長が問題になります。これらの課題を踏まえて、Vitalik Buterin導入2017年に提案されたステートレスなEthereumのコンセプト。Ethereumにおけるステートの成長を修正するために提案された方法には、データとステートの有効期限が含まれています。
主観性とは、ネットワークのノードが現在の状態について合意に達するために社会的情報に依存することを指します。この観点から、弱い主観性とは、社会的に取得された情報の初期シードを持ちながら客観的に進行できるチェーンを指します。ただし、弱い主観性のチェックポイントは、合意に責任を持つネットワーク上のすべてのノードが正規のチェーンに属していることを意味します。弱い主観性のチェックポイントは、イーサリアムPoSが信頼できるソースから最新の状態(弱い主観性のチェックポイント)を同期するのに役立ちます。
EIP-4444実践的な道を提供します@hBXHLw_9Qq2va4pRtI4bIA"/ryzBaf7fJx?ref=ghost-2077.arvensis.systems">弱主観を介してデータの有効期限を達成します。この提案の目的は、Ethereumノードが状態データを処理する方法を変更することではなく、むしろ、過去のデータへのアクセス権を変更します。
データとステートの有効期限は、オープンな研究領域です。これらの提案されたステータスを達成するための現在のアプローチには、それらを中央集権化されたネットワーク/プロバイダを通過させることが含まれています。現時点では、弱いステートレス性とステートの有効期限は、イーサリアムで部分的に達成されています。
EIP-161最初の状態縮小アプローチを導入しました。 EthereumはDoS(サービス拒否)攻撃を受け、この脆弱性により、グローバルなEthereumの状態を増やす空のアカウントを作成することができました。 EIP-161は、この攻撃から来たnonceがゼロ(0)の空のアカウントを削除することを提案し、低コストで実行されました。この提案が実行され、状態が巻き戻されました。
状態のない方向へのもう一つの取り組みが提案されましたEIP-4788この提案は、EVM内のビーコンチェーンブロックのルーツを明らかにしようとしたものです。Gate.comのアプローチに類似しています。Eth1-Eth2ブリッジビーコンチェーン(コンセンサスレイヤー)と実行レイヤーを接続することで、この提案はEVMとコンセンサスレイヤーの間で最小限の信頼を必要とするアクセスを可能にします。
各実行ブロックには親ビーコンブロックのルートが含まれているため、ミスしたスロットイベントは以前のブロックルートを変更する必要はありません。したがって、実行の前提条件は、各実行ブロックに信頼最小限のオラクルのための小さなスペースを確保することに絞られます。この提案では、ルートコントラクトにブロックルートの小さな履歴を保存してオラクルの効率を向上させることを提案しています。
Ethereumにおける無状態性は、弱い無状態性または強い無状態性のいずれかとして可能です。
ブロック提案者は完全な状態データを保存する必要があります。ただし、検証クライアントはネットワーク上で状態データを保存する必要はありません。代わりに、状態ルート(完全な状態のハッシュ)を保存できます。弱いステートレス性が必要です提案者-ビルダー分離(PBS) and ヴァークルが試みます実装。
提案者は、状態の変化を証明するために状態データを使用して証人を作成し、検証者はその証明を状態ルートハッシュに対して検証します。
ただし、一部の変更とプロパティを使用すると、ステートレスを実現することができます。EIP-2935は、ステートレス実行を許可するために、状態から歴史的なブロックハッシュを提供することを提案しています。
EIP-2935は、ブロック処理ロジックの一部として使用するために、最後の8192個の歴史的なブロックハッシュをシステム契約に保存することを提案しています。この提案が解決しようとしている問題は、EVMがクライアントが最近のブロックハッシュを持っているという前提に依存していることです。この前提に基づいたアプローチは、将来のEthereumや特にステートレスクライアントには適用されません。
過去のブロックハッシュを状態に含めることで、これらのハッシュを証人の視点でハッシュ関数とバンドルすることが可能になります。証人は後で状態レスクライアントに提供され、実行を検証し状態レス実行を達成します。この提案は、Verkleトライへの適応前に実装できるため「事前Verkle種特化」と呼ばれ、コアプロトコルでのVerkleトライへの適応を容易にします。
blockHashが提供するブロックの範囲を8192ブロックに拡張すると、実行方法へのソフトな移行が可能になります。ロールアップは、この契約を直接クエリすることで、この長い履歴ウィンドウから利益を得ることができます。さらに、このEIPは、HISTORY_SERVE_WINDOWの8192ブロック量に関連する証明の検証を現在の状態に対して容易にします。
提案後のフォークプロセスは通常のフォークプロセスとは異なります。このset()操作は一般的なシステム操作ですが、呼び出しはこれらの規則に従います。
ブロックハッシュ履歴契約には、get() と set() の2つの操作があります。set() 操作は、トランザクション内で契約の呼び出し元がEIP-4788で導入されたSYSTEM_ADDRESSと等しい場合にアクティブ化されます。呼び出し元とSYSTEM_ADDRESSが等しくないか、条件を満たさない場合は、get() 操作がアクティブ化されます。
get()操作は、EVM内でブロックハッシュを特定するために使用されます。呼び出し元がクエリを行うブロック番号を指定できるようにし、calldata入力が32バイトでない場合(つまり、有効なblock.parent.hashである場合)やリクエストが範囲外の場合([block.number-HISTORY_SERVE_WINDOW、block.number-1])、トランザクションをリバートします。
set()は、呼び出し元がトランザクションを使用してコントラクトを呼び出す際に、入力としてblock.parent.hashをcalldataとして受け取ります。また、block.number-1 % HISTORY_SERVE_WINDOWで、ストレージ値をcalldata[0:32]に設定します。
HISTORY_STORAGE_ADDRESSは、EIP-4788を介して展開されます。これは、コンセンサスレイヤーを通じてEVMでブロックハッシュに直接アクセスする方法として上記で言及されています。HISTORY_STORAGE_ADDRESSはnonce値が1であり、EIP-161のゼロnonceクリーンアップ標準の対象外となります。
ステートレスな実行を超えて、この提案はEthereumエコシステム全体にさらなる利益をもたらします。これにより、信頼できるオラクルの機能が向上し、軽量クライアントの利便性が拡張され、信頼性のある古いステートデータの検証が可能になることで、レイヤー1とレイヤー2のソリューション間の相互運用性が強化されます。その実装は、リングバッファストレージとシステムレベルの契約を使用し、EVMへのハードコーディングを回避することで、クリーンでガス効率の良い設計に依存しており、シンプルさと拡張性の両方を提供しています。
Ethereumはより分散化、スケーラビリティ、およびアクセシビリティに向けて進化を続ける中、EIP-2935は基盤となる改善策となっています。これは現在の状態保持アーキテクチャと将来の状態レスの間のギャップを埋め、ブロックチェーンエコシステム全体でより強固で効率的、かつ許可されていないインフラの基盤を築いています。





