Alert Source Discuss
🚧 Stagnant Standards Track: Core

EIP-7645: 将 ORIGIN 别名设为 SENDER

消除 ORIGIN 的技术债务,为账户抽象奠定基础并堵塞安全漏洞

Authors Cyrus Adkisson (@cyrusadkisson), Eirik Ulversøy (@EirikUlversoy)
Created 2024-03-03
Discussion Link https://ethereum-magicians.org/t/eip-7645-alias-origin-to-sender/19047

摘要

本 EIP 提议在以太坊虚拟机 (EVM) 中将 ORIGIN 操作码别名设为 SENDER 操作码。此更改的目的是通过统一外部拥有账户 (EOA) 和智能合约的处理方式,使以太坊更接近于实现账户抽象,并解决与使用 ORIGIN 相关的安全问题,这些问题已经并将继续在所有或大多数账户抽象提案中浮出水面。

动机

以太坊中的 ORIGIN 操作码返回启动交易链的账户地址,这与返回直接调用者地址的 SENDER(或 CALLER)操作码不同。自从 2016 年中期以来,由于其引入的安全问题,例如容易受到网络钓鱼攻击和其他漏洞(其中原始发送者和直接发送者之间的区别可能被利用),ORIGIN 的使用一直不被鼓励并且被认为是已弃用的。

例如,如果 ERC-4337 bundler 在一个由 ORIGIN 确定的智能合约中拥有 tokens 或其他权限,那么它捆绑的任何交易都可能劫持此权限,因为在每个子交易中,ORIGIN 始终是 bundler 的地址。

更恰当地说,在当前 EVM 演进的背景下,ORIGIN 和 SENDER 操作码之间的差异对所有账户抽象工作(例如 EIP-7377EIP-3074 中概述的那些)提出了挑战,因为任何迈向账户抽象的举措都必须解决 ORIGIN 操作码的角色,无论是通过修改还是完全绕过它。如果不解决这个问题,ORIGIN 操作码将成为以太坊账户模型朝着更大的灵活性和功能性发展的障碍。

规范

本文档中的关键词“必须”、“禁止”、“需要”、“应该”、“不应该”、“推荐”、“不推荐”、“可以”和“可选”应按照 RFC 2119 和 RFC 8174 中的描述进行解释。

本 EIP 提议更改以太坊虚拟机 (EVM) 中 ORIGIN 操作码的行为。目前,ORIGIN 操作码返回原始交易发起者的地址。根据本 EIP,ORIGIN 操作码将改为返回与 SENDER 操作码相同的值,即消息或交易的直接发送者的地址。

定义变更:在所有执行上下文中,ORIGIN 操作码 (0x32) 必须返回与 SENDER(也称为 CALLER)操作码 (0x33) 返回的值相同的值。

EVM 实现:所有以太坊客户端必须实现以下对 EVM 的更改:每当调用 ORIGIN 操作码时,要推送到堆栈上的值是当前调用的发送者地址,就像执行了 SENDER 操作码一样。

交易验证:交易必须像以前一样进行验证,除了上面指定的 EVM 操作码行为之外,交易结构或处理逻辑没有任何更改。

兼容性:依赖 ORIGIN 操作码获取交易发起者地址的智能合约必须进行审查,以确保它们在新定义下能够正常运行,并且如果此 EIP 引入了重大更改,则应进行规避或避免。

鼓励实施者提供有关此规范的反馈,并报告在实施或测试阶段遇到的任何潜在问题。

理由

将 ORIGIN 别名设为 SENDER 的理由是:

促进账户抽象:优雅地消除账户抽象的普遍障碍,从而在以太坊中实现更灵活和强大的账户模型。

增强安全性:消除与区分原始交易发起者和直接调用者相关的安全漏洞。

清理技术债务并简化 EVM 模型:通过删除过时且已弃用的功能来降低 EVM 的交易和执行模型的复杂性,从而使未来的更改更容易和更安全。

向后兼容性

此更改并非完全向后兼容。依赖 ORIGIN 和 SENDER 之间的区别来进行逻辑或安全性的合约将受到影响。然而,鉴于长期以来不鼓励使用 ORIGIN,此更改的影响极小,人们普遍希望未来在 EVM 中实现账户抽象解决方案,并且任何 AA 解决方案最终都必须以某种方式处理 ORIGIN,因此这种不兼容性被认为是 以太坊发展的必要一步。

未发现向后兼容性问题。

测试用例

对于每个 CALL、STATICCALL、DELEGATECALL、CALLCODE:

Direct - 确保在目标智能合约中,ORIGIN 和 SENDER 产生相同的值。(对于简单的无跳 EOA-to-EOA/SCA 交易,今天已经如此。)

Multi-hop - 确保在多跳交易的每个帧中,ORIGIN 和 SENDER 产生相同的值。

安全考虑

通过将 ORIGIN 别名设为 SENDER,与 ORIGIN 操作码相关的特定安全漏洞得以解决和消除。在本 EIP 的范围之外,明智的做法是禁止所有对 ORIGIN 的使用,以消除进一步的误解或误用。这可以通过 EVM 之外的工具更改来完成,或者在 EVM 内部,可以恢复使用 ORIGIN 的智能合约部署。

对于因将 ORIGIN 别名设为 SENDER 而受到负面影响的现有 ORIGIN 误用(尚未发现明确的例子),可能有必要教育用户避免这种有问题的遗留代码。

版权

版权及相关权利通过 CC0 放弃。

Citation

Please cite this document as:

Cyrus Adkisson (@cyrusadkisson), Eirik Ulversøy (@EirikUlversoy), "EIP-7645: 将 ORIGIN 别名设为 SENDER [DRAFT]," Ethereum Improvement Proposals, no. 7645, March 2024. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-7645.