- A+
以太坊最近经历了多次升级,其中以太坊虚拟机仍然是其架构的基础。在即将到来的 Pectra 升级中,以太坊的核心开发团队已宣布同意引入 EVM 对象格式(EOF)——对 EVM 的改进,以创新和提升用户体验、开发者体验以及在 Layer 1 和 Layer 2 上的性能。
在本文中,我们将了解:
- 什么是 EVM 对象格式(EOF)?
- 为什么我们需要 EOF?(更大的生态系统作用)
- EIPs 和 EOF 的实现。
- 它将如何创造更好的开发者和用户体验
什么是 EVM 对象格式(EOF)?
首先,让我们了解 EVM 和 EVM 字节码 的基础知识。以太坊使用 EVM 作为网络的核心组件;用高级语言(如 Solidity)编写的智能合约代码需要编译成 EVM 字节码才能在 EVM 上运行。
目前,链上部署的 EVM 字节码没有预定义结构。这意味着数据和代码在同一指令中。例如,在像 Uniswap 这样的合约中,重要的常量如费用被嵌入为字节码中的数据,与可执行代码一起。这需要在每次合约交互时进行运行时验证,导致执行过程中反复出现开销,使交易变得更慢且更昂贵。
总结一下,当前 EVM 的挑战如下:
- 运行时开销
- 灵活性和可升级性
- 有限的静态分析和形式验证
什么是 EOF 以及我们为什么需要它?
EVM 对象格式(EOF)是一种以太坊字节码的结构化格式,它将可执行代码与数据分开,提高效率并减少开销。
EOF 通过为 EVM 字节码引入一个结构良好的格式来解决上述挑战。它将代码与数据分开,使以太坊客户端(如 Geth 或 Besu)能够在部署期间进行一次性验证,而不是在每次执行时重复验证。这个过程,特别是 JUMPDEST 分析(用于确保字节码中的有效跳转目标),消耗时间和 gas,导致交易变慢和成本增加。
现在让我们看看 EOF v1 及其 EIPs。
EIP-3540 引入了 EOF 版本 1。 EOF 容器由 header
和 body
组成,header 包含 EOF 的版本和合约的元数据,而 body 包含实际的合约字节码。通过这些组件,以太坊客户端可以更有效地组织和执行合约,而无需重复验证。
以下是 EOF 容器的示例结构化格式:
container := header, body
header :=
magic, version,
kind_type, type_size,
kind_code, num_code_sections, code_size+,
[kind_container, num_container_sections, container_size+,]
kind_data, data_size,
terminator
body := types_section, code_section+, container_section*, data_section
types_section := (inputs, outputs, max_stack_height)+
EOFv1 的关键特性:
- 结构化字节码: EOF 将字节码分为定义的部分,包括头部、代码和数据——这使得管理和阅读更容易。
- 版本控制: 支持版本控制,确保与未来的升级和弃用兼容。
- 一次性验证: 字节码验证在部署期间进行,减少运行时开销,提高合约执行效率。
相关 EIPs 和实现
在即将到来的以太坊 Pectra 升级中,多个 EIPs 补充了 EOF 的实现,包括 EIP-7692 中的:
- EIP-3540:引入 EOF 版本 1,建立结构化字节码的初始结构。
- EIP-3670, EIP-4200, EIP-4750, EIP-5450, EIP-6206, EIP-7480, EIP-663, EIP-7069, EIP-7620, EIP-7698:增强 EOF 功能,提高以太坊生态系统的安全性、效率和可用性。
支持 EOF 的主要客户端
- evmone:EVM 的 C++ 实现已完全集成 EOF,支持结构化字节码和代码-数据分离。这里 是 evmone 演示 EOF 若干关键特性的示例。
- revm:EVM 的 Rust 实现支持 EOF 原语,定义如头部和主体部分的结构以高效处理字节码。有关详细信息,请参阅 revm 文档。
- besu:一个企业级以太坊客户端,完全集成 EOF 以支持 EOF 合规的部署和优化。
- Nethermind:该客户端提供对 EOF 的全面支持,以提高针对以太坊未来升级的智能合约开发者的性能和兼容性。这里 是与 EOF 相关的提交。
- Solidity POC:部分实现了与 EOF 相关的 EIPs 支持实验性 Solidity 的合约创建,但缺乏与特定提案相关的某些功能。
对 dApps 的好处
- 增强的安全性: 通过一次性验证和移除 JUMPDEST 分析,EOF 加强了合约的安全性。
- 更快的交易: 减少的运行时开销使智能合约执行更快,提供更好的整体用户体验。
- 提高的效率: 分离代码和数据简化了 gas 的使用,提高了合约执行速度,降低了用户的 gas 成本。
- 面向未来的升级: 版本控制确保与不断发展的以太坊兼容,并促进无缝升级。
EOF 的可测量收益示例
让我们快速分析 EOF 实现基于测试(在传统和 EOF 上)来衡量在字节码大小、gas 使用和执行时间方面对流行智能合约 UniswapV3 的收益。
EOF 显然在 gas 成本、执行速度和字节码大小方面为开发者提供了可衡量的改进,并显著提升了用户体验。要了解更多关于测试的信息,请访问完整的测试结果这里 。
注意:Solidity 编译器将很快完全支持 EOF,因此像 Hardhat 和 Foundry 这样的框架预计将通过集成 EOF 容器生成来跟进。开发者无需进行代码更改,但应保持更新以利用这些改进。
结论
以太坊虚拟机对象格式(EOF)是 EVM 的一项进步。凭借其结构化字节码和版本控制能力,EOF 承诺在以太坊生态系统中提供更高的安全性、效率和灵活性。随着以太坊的不断发展,EOF 为网络的未来升级和创新奠定了坚实的基础。
关于 BuildBear:
BuildBear是一个专为 DApp 开发和测试量身定制的平台。开发者可以在各种区块链网络上自由构建个性化的私有测试网沙盒。在 BuildBear 上,铸造无限的原生和 ERC20 代币的自由,加上快速的交易时间(不到 3 秒!),大大增强了 DApp 开发生命周期。该平台配备了用于实时测试和调试的工具和插件,确保开发者可以轻松监控复杂的区块链交易。
- 我的微信
- 这是我的微信扫一扫
- 我的电报
- 这是我的电报扫一扫