
著者:ドラガン・ラキタ、パラダイム翻訳:Good Ouba、Bitt Chain Vision World
EOF(EVMオブジェクト形式)
EOF(EVMオブジェクト形式)は、EVMを改善するために設計された小さなEIPSのセットです。EVMの将来に備えるための新しいバイトコード形式を導入します。
EOFの利点
EOFの価値は、それが単一のものではなく、フォークや長年の開発と研究で遅れており、異なるバージョンの進化が遅れているため、説明がより複雑になります。
この記事の目的は、これらの利点を要約し、1つの文で説明することです。
利点:
-
EOFを使用すると、動作コードガスの価格設定の変更が可能になります
-
ガスの価格設定が変更された場合、従来のバイトコードが異なる場合があります。
-
ガス観察を削除します
-
これは、ガス動作コードと、コール/DelegateCall/StaticCallのガス制限を削除することを意味します。
-
そのユースケースに従ってL2がガスを交換できるようにする
-
たとえば、ZK L2でのハッシュ操作の高コスト。
-
EIP-7667:ハッシュ機能のガスコストを増やします。
-
バイトコードのサイズを縮小し、ガスの使用を減らす
-
初期のデータは、コード/初期化コードのサイズとガス使用量が減少することを示しています。
-
UNISWAP-V3の展開は6.5%減少し、展開コードが減少しました。
-
uniswapv3factoryを展開して、ガスの少ない約14%を使用して、ランテストを呼び出して約9%少ないガスを使用します。
-
ENS DNSREGISTRAR展開は、展開コードの約6%の初期化コードと約1.5%減少します。
-
ENSはPROVENDCLAIMを呼び出します:ガスを約10%少なく使用します。
-
バイトコード変換とアップグレード可能を許可します
-
削除コードの観察とは、PC、Create/Create2、ExtCodeHash、ExtCodesize、ExtCodeCopy、Codesize、およびCodeCopy操作コードの削除を意味します。
-
コードが変更された場合、従来の契約は実行できません。
-
これにより、Verkleを将来導入するときにEOFバイトコードを変更できます。
-
EOFは、すぐに操作コードを有効にします
-
SWAPN、DUPN、Exchangeを開く可能性を開きます。
-
これにより、スタックサイズの堅実さの自由度が高まり、スタックの深さを堅牢性で解決します。
-
高価なジャンプターゲット分析を削除します
-
RETHでは、分析結果はByteCodeで保存されていますが、他のクライアントは異なります。契約の実行が速度を改善する前に、ジャンプターゲット分析を削除します。
-
分析が削除されると、将来的に最大バイトコードサイズを増やすことができます。
-
静的分析が簡単になります
-
強制的およびより構造的な制御フローのサブプログラムにより、ファジーテストがより効果的になり、線形時間の静的分析を実現できます。
-
データとコードの分離は、推論が簡単です。
-
EOF BYTECODEは、より高速なBYTECODEにコンパイルできます
-
EOF ByteCodeはマシンコードにコンパイルできます。
-
将来の証明evm
-
バイトコードのバージョンと構造により、スケーラビリティが可能になります。これは、L2と標準化に特に役立ちます。
-
例はEIP-7701です。EOFを使用したローカルアカウントの抽象化により、新しいヘッドパーツが追加されました。
-
住所スペース拡張
-
新しいext*コールオペレーティングコードは、アドレスフィールドに将来のアドレス拡張の準備を要求することにより、ゼロで満たされています。Ethereumがアドレス空間を拡張することを決定したとき、EOFはこれらの変更に備えて準備されています。
-
extcall(0xf8)、extdelegatecall(0xf9)、extstaticCall(0xfb)
-
放棄された呼び出しと同じ青写真がありますが、Gas_limitとメモリ出力フィールドを削除します。
-
Returnataload(非常に早い段階で)が導入される前に、コールオペレーティングコードを実行する前に、コールオペレーティングコードのメモリ出力を設定する必要があります。これにより、動的な出力は許可されません。
-
eofcreate and ReturnContract
-
EOFの新しい内容であり、特別な治療が必要です。
-
Exchange(0xe8)、Swapn(0xe7)、dupn(0xe6)、DataCopy(0xd3)、Datasize(0xd2)、Dataloadn(0xd1)、dataload(0xd0)、rjumpi(0xe1)、rjump)v(0xe2)
-
ロジックはシンプルで、そのほとんどは10〜20行で実装する必要があります。カバーする必要があるエッジはあまりありません。
-
callf(0xe3)、retf(0xe4)、およびjumpf(0xe5)
-
サブルーチンスタックとスタック検証が必要であり、複雑さには約20〜30行が必要です。
-
約2〜3か月間開発者が必要です。テスト作業が始まりました。現在、約2,000の手書き検証テストがあり、ステータステストも進行中です。
現在のEVMと統合されています
開発者にとって、重要な問題は、変更に必要なこれらの運用コードを維持するための努力、テストコスト、およびコストです。
新しい操作コードは、従来の操作コードと競合することはなく、EOFの検証は放棄された操作コードに触れません。
EOFのエンコードとデコードはぼやけている可能性があります。確認は新しいものです。Revmには約500行のコードがありますが、カバーする必要がある多くのエッジ条件があり、各実装では集中エネルギーが必要です。
EOFCreateと同様に、EOF Bytecodeのトランザクションを作成しますが、実行前に確認が必要です。
ほとんどの操作コードは非常に簡単です:
変更はEVMに集中しているため、クライアントの残りの部分の統合は、クライアントのアーキテクチャとバイトコードの場所に依存します。
extcodesizeとextcodehashは、アカウントがEOFであるかどうかを知り、事前定義値(0XEF00サイズとハッシュ)を返す必要があります。これにより、クライアントの統合方法がわずかに変更される場合があります。1つのアイデアは、IS_EOFロゴを通常のアカウントフォームに保存して、バイトコードをジャンプして、ExtCodeタイプの操作コードを呼び出すときにバイトコードをロードすることです。
L2への影響
最大の問題は、L2がこれらの変更を実装しない理由です。Ethereum L1のEVM改善を停止する必要がありますか?
現実には、L2は準備ができていません。それだけでなく、これらのイノベーションを統合するのに役立つプラットフォームはありません。BYTEコードバージョンコントロールは、L2で使用できるプラットフォームを構築するのに役立ちます。 )。
さらに重要なことは、EOFは形式であるだけでなく、言語のサポート(Solidity/Vyper/Huff)も必要であり、使用するためにツールチェーンのサポートが必要です。エコシステムを使用するには、この形式がL2を革新するためにより多くの安定性を提供します。
短所:従来のバイトコードはまだ存在します
これは一般的な問題です。伝統的なバイテシは永遠に存在します。代替形式のバイトコードを使用すると、将来的には、状態が期限切れになったときに従来のバイトコードを遷移および削除できます。
要約します
EOFは、次のまばゆいばかりではありません。EVMのさらなる開発と将来の証拠には必要です。