
以太坊2.0:Pectra(Prague/Electra)硬分叉详解
以太坊2.0的权益证明(PoS)之路并非一帆风顺,经历了多次硬分叉的迭代升级。从最初的信标链启动,到激活PoS共识,再到允许提款,每一次升级都标志着以太坊向更成熟、更强大的方向迈进。而最近的Pectra硬分叉(Prague和Electra的结合),则为以太坊带来了更深层次的变革,尤其体现在共识机制和质押机制的优化上。
Pectra 硬分叉的核心改进
Pectra硬分叉对执行层和共识层都进行了重大升级。作为Lido项目的审计员,我们尤其关注与共识和质押相关的变化,但执行层的改进同样不容忽视,它们对整个以太坊网络和验证者都具有深远的影响。
Electra:共识层的升级
Electra硬分叉主要在共识层(信标链)进行了以下改进:
- 验证者有效余额调整: 验证者的有效余额不再固定为32 ETH,而是可以灵活调整在32 ETH到2048 ETH之间,这将直接影响其参与区块提议和同步委员会的概率以及受到的奖励和惩罚。
- 二级提款凭证: 验证者可以通过二级“提款”凭证发起退出,无需再依赖活跃验证者密钥,这极大地简化了质押者的操作流程。
- Eth1存款处理优化: 改变了信标链处理Eth1存款的方式,不再需要从存款合约解析事件,提高了效率和安全性。
- 通用请求框架: 添加了一个新的通用框架,用于处理来自常规Eth1合约的请求,统一了存款、取款等操作的处理方式。
Prague:执行层的升级
与此同时,Prague硬分叉在执行层带来了以下变化:
- BLS12-381曲线预编译: 添加了一个新的预编译合约,支持BLS12-381曲线,用于验证zkSNARK证明,提升了zkSNARK应用的效率。
- 历史区块哈希存储: 引入了一个新的系统合约,用于存储和访问多达8192个历史区块哈希,方便无状态客户端访问历史数据。
- calldata gas成本增加: 提高了calldata gas成本,鼓励项目将calldata密集型操作迁移到Dencun中引入的blobs,优化区块大小和资源利用。
- blob吞吐量增加: 每个Eth1区块允许的blobs数量增加,并提供API读取这些数量,进一步提升了数据处理能力。
- EOA账户代码支持: 允许外部拥有账户(EOA)拥有自己的账户代码,扩展了EOA的功能,例如执行multicalls或委托执行。
EIP详解及影响分析
Pectra硬分叉涉及多个以太坊改进提案(EIP),这些EIP有的主要针对共识层,有的针对执行层,有的则同时影响两层。由于它们之间的相互依赖性,我们将逐一分析每个EIP及其影响。
以下是对关键EIP的简要分析,由于篇幅限制,这里省略了对每个EIP的详细技术细节,仅关注其核心内容和影响:
- EIP-7251 (增加MAX_EFFECTIVE_BALANCE): 允许验证者有效余额在32 ETH到2048 ETH之间灵活调整,改变了质押策略和风险回报评估。
- EIP-7002 (可触发的执行层退出): 允许质押者通过常规智能合约调用触发取款和退出,简化了质押操作流程,提升了安全性。
- EIP-6110 (链上供应验证者存款): 优化了存款处理流程,减少了存款与验证者激活之间的延迟。
- EIP-7685 (通用执行层请求): 建立了一个通用框架,用于处理存款、取款和合并等请求,提高了效率和一致性。
- EIP-2537 (BLS12-381曲线操作的预编译): 支持BLS12-381曲线操作,降低了zkSNARK证明验证成本,扩展了其应用场景。
- EIP-2935 (在状态中保存历史区块哈希): 扩展了可访问的历史区块哈希数量,方便无状态客户端和智能合约访问历史数据。
- EIP-7623 (增加calldata成本): 提高了calldata gas成本,鼓励rollup使用blobs存储数据。
- EIP-7691 (blob吞吐量增加): 增加了每个区块允许的blobs数量,进一步提升了数据处理能力。
- EIP-7840 (将blob调度添加到EL配置文件): 将blob调度参数添加到执行层配置文件,方便客户端访问和配置。
- EIP-7702 (设置EOA账户代码): 允许EOA拥有自己的账户代码,极大地扩展了EOA的功能,但也带来了一些安全性和设计上的挑战。
总结
Pectra硬分叉是 以太坊2.0发展历程中的一个重要里程碑。它不仅优化了共识机制和质押机制,还提升了执行层的效率和功能。这些升级将为以太坊生态系统带来更强的可扩展性、安全性以及更丰富的应用场景,为其未来的发展奠定了坚实的基础。 然而,一些新功能也带来了新的挑战,需要持续的监控和改进。