薇塔利克·布特林最新提出了EIP-7702提案,这可能是以太坊历史上影响最大的变化之一。本文将介绍该新提案的工作原理以及实现所需的一切。
首先,EIP-7702提案非常简短,这让一些人感到困惑,不知道它如何运作。为了理解7702,我们首先要了解其中提到的另外三个提案:EIP-4337、EIP-3074和EIP-5003。这些提案的共同目标是“账户抽象”,即解决以太坊上普通账户(EOA)的风险和功能有限的问题,通过允许用户使用智能合约作为账户来添加更多功能和安全性。
EIP-4337于2023年3月在主网上线,它允许像账户一样编写智能合约,以便它们可以验证和执行交易,从而改进了用户体验。自从发布以来,EIP-4337得到了广泛的采用,主要由Polygon主导,而Base在过去几个月中的相关活动也在增多。最新的创新来自Coinbase生态和Coinbase智能钱包,它基于生物识别技术,用户体验非常棒。EIP-4337存在的问题是大多数智能合约账户由单个EOA签署者控制,因为无法将EOA转换为智能合约账户,所以需要一个中间步骤解决方案。
接下来是EIP-3074提案,它试图赋予EOA更多权力,允许他们将其EOA的控制权委托给智能合约。该提案添加了两个新的操作码:AUTH和AUTHCALL。这实现了与EIP-4337许多相同的用例,而无需每个用户部署新的智能合约。一个关键的区别在于交易来自用户的EOA,而不是一个没有用户任何账户历史记录、ETH、NFT、代币等的新合约。
EIP-5003提案添加了另一个操作码“AUTHUSURP”,它将代码部署在EIP-3074授权地址。EIP-3074和EIP-5003的区别在于,EIP-3074是对智能合约的临时委托,可撤销,而EIP-5003是从EOA永久迁移并从EOA转换到智能合约账户。EIP-7702是Vitalik Buterin提出的一项改进,旨在使EIP-3074更精简并与EIP-4337更兼容,以避免创建两个独立的账户抽象生态系统,将EIP-5003视为永久迁移的下一步。
EIP-7702提出了一种同时接受contract_code和签名字段的新交易类型。它将签名者账户的合约代码设置为contract_code,并在交易结束时将代码重新设置为空。这与EIP-3074一样,实现了EOA对智能合约的临时委托功能。EIP-7702并没有引入新的操作码,而是定义了要调用的函数:AUTH调用“verify”(验证),AUTHCALL调用“execute”(执行)。具体来说,它会检查账户合约代码是否为空,如果为空,则设置为提供的合约代码,根据提供的智能合约处理交易的方式执行交易,然后将账户合约代码设置恢复为空。
EIP-7702与EIP-4337的当前账户抽象方案高度兼容,用户需要签名的合约代码实际上可以是现有的EIP-4337钱包代码。一旦这个改动生效,用户现有的EOA就可以执行任何智能合约代码,而且EOA还可以永久升级以运行特定的代码。这可能会彻底改变我们所有人与Web3应用的交互方式。