Pectra 对智能合约安全性的影响

本文分析了以太坊 Pectra 升级对智能合约开发和安全性的潜在影响,重点关注 EIP-7702、EIP-7251、EIP-2537、EIP-2935、EIP-7002 和 EIP-7623 等关键提案,并讨论了它们对智能合约的安全性考虑和开发实践的影响,以便开发者能够构建更强大和安全的应用程序。

继我们之前对以太坊升级的分析,从 The Merge 到 Dencun,Pectra 升级代表了以太坊在持续的网络改进传统中的下一个重大硬分叉。虽然许多这些更改都集中在共识层,但有几个更改直接影响智能合约的安全性和功能。由于开发人员构建的是不可变的智能合约,因此了解这些更改对于维护安全假设和防止意外行为至关重要。

在这篇文章中,我们将探讨 Pectra 升级的关键组件及其对智能合约开发和安全的潜在影响。

EIP-7702:EOA 的账户抽象

EIP-7702可能是智能合约开发人员最重要的改变,因为它允许外部拥有的账户(EOA)在交易期间执行智能合约代码。

注意事项:

  • 仅 EOA 检查: tx.origin == msg.sender 检查不再可靠地区分 EOA 和合约调用者。通过 EIP-7702,EOA 可以执行代码,从而很容易绕过此检查。因此,任何依赖于仅由 EOA 调用并通过此检查控制的功能都容易受到攻击。 通过将检查更新为 msg.sender.code.length == 0 && tx.origin == msg.sender,仍然可以识别 EOA 账户并拒绝合约和启用 7702 的账户。这是因为 7702 账户的代码设置为 0xef0100 || address,因此具有非零的 codesize。

EIP-7251:增加 MAX_EFFECTIVE_BALANCE

EIP-7251将验证者的最大有效余额增加到 2048 ETH,允许他们质押超过传统的 32 ETH 上限。

注意事项:

  • 验证者余额假设: 在链上处理验证者余额的智能合约应考虑到有效余额现在可能明显大于 32 ETH。
  • 新的系统合约: 此升级引入了一个新的系统合约,允许你将两个验证者合并为一个。此合约没有你可能从智能合约中期望的典型 ABI 接口。因此,与它交互时需要特别小心:
    • 通过在没有 calldata 的情况下调用合约,将激活费用获取器函数并返回当前的合并费用。
    • 通过使用正好 96 字节的 calldata 调用合约,将创建一个合并请求。calldata 的前 48 个字节表示源验证者的公钥,剩余的 48 个字节表示目标验证者的公钥。此调用还必须附加一个大于当前合并费用的值。请注意,任何大于当前费用的附加值都不会退还,因此,建议在创建请求之前调用费用获取器。

EIP-2537:BLS12-381 曲线操作

EIP-2537为 BLS12-381 曲线操作添加了预编译,从而可以进行更高效的加密操作。

注意事项:

  • L2 兼容性: 与往常一样,当添加新的操作码或预编译时,大多数 layer 2 网络不会立即 支持它们。因此,如果你想在 L2 上使用这些预编译,请确保 L2 支持它。调用不受支持的预编译会导致调用一个空合约,这可能会导致意外行为,例如静默失败。
  • Solidity 支持: Solidity 目前没有内置支持 BLS 预编译体。这意味着需要对预编译地址进行低级调用。预编译地址、输入和输出可以在 EIP 中找到。

EIP-2935:状态中的历史区块哈希

EIP-2935通过在状态中存储最新的 8191 个哈希,使历史区块哈希更易于访问。

注意事项:

  • 新的系统合约: 当前的 BLOCKHASH 操作码和相应的 Solidity block.hash 内置函数保持不变,从而确保向后兼容性。智能合约可以通过使用正好 32 字节的 calldata 调用新的系统合约来访问更大范围的历史区块哈希,这些 calldata 表示所请求区块的编号。如果请求的编号不在最新的 8191 个区块的范围内,则系统合约将恢复。
  • L2 注意事项: Layer 2 网络可能以不同方式实现此系统合约,或者根本不实现,因此跨链应用应验证支持。

EIP-7002:执行层可触发的提款

EIP-7002允许从执行层触发提款请求,从而为验证者操作提供更大的灵活性。

注意事项:

  • 新的系统合约: 与 EIP-7251 和 EIP-2935 类似,引入了一个新的系统合约。
    • 通过在没有 calldata 的情况下调用合约,将返回当前的提款请求费用。
    • 通过使用正好 56 字节的 calldata 调用合约,将创建一个提款请求。前 48 个字节表示验证者的公钥,剩余的 8 个字节是表示要提取金额的 uint64。此调用还必须附加一个大于或等于当前提款请求费用的值。与 EIP-7251 类似,任何大于当前费用的附加值都不会退还,因此,建议在创建请求之前调用费用获取器。

EIP-7623:增加 Calldata 定价

EIP-7623提高了 calldata 的 gas 定价,以减少最大区块大小。

注意事项:

  • 定价更改: calldata 的价格上涨,尤其是对于发布大量数据但执行很少操作的交易。请注意,这仅影响顶级调用。因此,这主要与运行基础设施的项目相关,例如必须考虑 gas 成本的中继和钱包。对于非顶级调用,例如由 CALL 操作码发起的调用,gas 定价保持不变,因此对智能合约系统的影响有限。

其他更改

Pectra 中引入了其他几个 EIP,但对智能合约安全性的直接影响很小:


Pectra 升级继续推动以太坊朝着更加灵活和强大的平台发展。虽然大多数更改都保持了向后兼容性,但一些更改打破了以前的假设,需要智能合约开发人员仔细考虑。通过了解这些更改并相应地调整安全假设,开发人员可以继续在以太坊不断发展的基础上构建强大而安全的应用程序。

  • 原文链接: blog.sigmaprime.io/pectr...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

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