EOF 详解:开发者需要了解的内容

  • BuildBear
  • 更新于 2024-10-23 16:48
  • 阅读 340

EVM 对象格式(EOF)详解:开发者需要了解的内容

以太坊最近经历了多次升级,其中以太坊虚拟机仍然是其架构的基础。在即将到来的 Pectra 升级中,以太坊的核心开发团队已宣布同意引入 EVM 对象格式(EOF)——对 EVM 的改进,以创新和提升用户体验、开发者体验以及在 Layer 1 和 Layer 2 上的性能。

在本文中,我们将了解:

  1. 什么是 EVM 对象格式(EOF)?
  2. 为什么我们需要 EOF?(更大的生态系统作用)
  3. EIPs 和 EOF 的实现。
  4. 它将如何创造更好的开发者和用户体验

什么是 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 容器由 headerbody 组成,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 的关键特性:

  1. 结构化字节码: EOF 将字节码分为定义的部分,包括头部、代码和数据——这使得管理和阅读更容易。
  2. 版本控制: 支持版本控制,确保与未来的升级和弃用兼容。
  3. 一次性验证: 字节码验证在部署期间进行,减少运行时开销,提高合约执行效率。

相关 EIPs 和实现

在即将到来的以太坊 Pectra 升级中,多个 EIPs 补充了 EOF 的实现,包括 EIP-7692 中的:

支持 EOF 的主要客户端

  1. evmone:EVM 的 C++ 实现已完全集成 EOF,支持结构化字节码和代码-数据分离。这里 是 evmone 演示 EOF 若干关键特性的示例。
  2. revm:EVM 的 Rust 实现支持 EOF 原语,定义如头部和主体部分的结构以高效处理字节码。有关详细信息,请参阅 revm 文档。
  3. besu:一个企业级以太坊客户端,完全集成 EOF 以支持 EOF 合规的部署和优化。
  4. Nethermind:该客户端提供对 EOF 的全面支持,以提高针对以太坊未来升级的智能合约开发者的性能和兼容性。这里 是与 EOF 相关的提交。
  5. Solidity POC:部分实现了与 EOF 相关的 EIPs 支持实验性 Solidity 的合约创建,但缺乏与特定提案相关的某些功能。

对 dApps 的好处

  1. 增强的安全性: 通过一次性验证移除 JUMPDEST 分析,EOF 加强了合约的安全性。
  2. 更快的交易: 减少的运行时开销使智能合约执行更快,提供更好的整体用户体验。
  3. 提高的效率: 分离代码和数据简化了 gas 的使用,提高了合约执行速度,降低了用户的 gas 成本。
  4. 面向未来的升级: 版本控制确保与不断发展的以太坊兼容,并促进无缝升级。

EOF 的可测量收益示例

让我们快速分析 EOF 实现基于测试(在传统和 EOF 上)来衡量在字节码大小、gas 使用和执行时间方面对流行智能合约 UniswapV3 的收益。

EOF 显然在 gas 成本、执行速度和字节码大小方面为开发者提供了可衡量的改进,并显著提升了用户体验。要了解更多关于测试的信息,请访问完整的测试结果这里

注意Solidity 编译器将很快完全支持 EOF,因此像 Hardhat 和 Foundry 这样的框架预计将通过集成 EOF 容器生成来跟进。开发者无需进行代码更改,但应保持更新以利用这些改进。

结论

以太坊虚拟机对象格式(EOF)是 EVM 的一项进步。凭借其结构化字节码和版本控制能力,EOF 承诺在以太坊生态系统中提供更高的安全性、效率和灵活性。随着以太坊的不断发展,EOF 为网络的未来升级和创新奠定了坚实的基础。

关于 BuildBear:

BuildBear是一个专为 DApp 开发和测试量身定制的平台。开发者可以在各种区块链网络上自由构建个性化的私有测试网沙盒。在 BuildBear 上,铸造无限的原生和 ERC20 代币的自由,加上快速的交易时间(不到 3 秒!),大大增强了 DApp 开发生命周期。该平台配备了用于实时测试和调试的工具和插件,确保开发者可以轻松监控复杂的区块链交易。

与我们联系 Twitter | LinkedIn | Telegram | GitHub

贡献者:Emmanuel Antony, Dipesh Sukhani & Sana M Ummer

我是 AI 翻译官,为大家转译优秀英文文章,如有翻译不通的地方,在这里修改,还请包涵~

点赞 1
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
BuildBear
BuildBear
江湖只有他的大名,没有他的介绍。