最近由 Go Ethereum 开发者 Matt Garnett (lightclients)提出的 EIP-7377 又一次引起了市场对账户抽象叙事的讨论。EIP-7377 旨在探索实现账户抽象后 EOA 用户迁移问题,灵感来自 Vitalik 在 EthCC 上的演讲,他在演讲中指出,EOA 迁移仍然是账户抽象的一个突出挑战,需要一个 EIP 让现有的 EOA 升级到合约。
账户抽象
在 18 世纪末至 19 世纪初的法国大革命后,法国颁布了《人权和公民权宣言》,这个宣言强调了人人生而平等,拥有一定的自然权利和公民权利。然而,在实际运行中,仍然存在一些社会和法律上的不平等现象,一些人被认为享有更多的权利和地位,如富裕的资产阶级、地主等,更容易获得政治权力、教育机会和财富,从而成为所谓的「一等公民」。而另一些人则被限制了他们的权利和机会,如农民、工人、穷人等,因为社会地位低、缺乏教育和资源,而被限制权利和政治参与,成为「二等公民」。
在以太坊中,有两种类型的账户:外部拥有账户(EOA)和合约账户(CA)。EOA 是由私钥控制的普通数字货币钱包,而合约账户是由代码智能合约控制的账户,可以执行各种自定义的逻辑。例如,各种 DeFi 协议都由智能合约帐户控制。EOA 为以太坊账户中的「一等公民」,其特点是简单、易于使用,能满足大部分的数字货币交易需求。最重要的是它可以主动发起交易,目前,只有 EOA 可以做到这一点。但 EOA 功能是被硬编码到以太坊协议层中,没有定制空间,这便引发了一些问题,比如用户不能使用自定义签名方案,Gas 费用必须用原生加密货币支付,丢失私钥就意味着丢失帐户等。CA 为「二等公民」,即便其相比 EOA 更加灵活,可以实现自定义功能,自动执行复杂逻辑或与其他智能合约进行交互,但它不能主动发起交易,只能作为一笔交易的回应去发起交易,所以通常 CA 都是和 EOA 一起使用。
为了解决这个问题,Vitalik 等人提出了账户抽象(AA),简单来说账户抽象就是让 CA 具有 EOA 主动发起交易的特性,使得 CA 成为「一等公民」。相关的 EIP-2938、EIP-4337 等都在寻找实现账户抽象的解决方案。
EIP-7377:Migration Transaction
实现账户抽象并非易事,多年的探索未果使得用户依赖于 EOA。以太坊一直在探索账户抽象,在实现账户抽象后,怎么让现有的 EOA 用户迁移过来呢?EIP-7377 中引入「Migration Transaction」,允许 EOA 用户更轻松地将其账户迁移到智能合约,无需一笔一笔手动交易处理和承担高昂的 Gas 成本,有效地将现有 EOA 用户转换到智能合约钱包。从而加快智能合约钱包的采用,并推动智能合约钱包获得更好的支持和集成。
工作原理:
首先,用户创建一笔特殊的交易,即迁移交易「Migration Transaction」。交易类型为 EIP-2718 规定的类型 0x04,其 payload 包括一些特殊的字段,告诉以太坊网络用户要将其 EOA 转换成智能合约,并指定了智能合约的代码。
用户将这个迁移交易发送到以太坊网络。以太坊网络首先验证交易的有效性,并确保指定的智能合约代码符合规定,并且不为空。验证通过后,以太坊网络会将指定的智能合约代码部署到用户的 EOA 地址上,将其升级为一个智能合约账户。需要注意的是,迁移交易是一次性的,一旦完成,用户不能再将这个智能合约转回为普通的 EOA。转换是不可逆的。
简单来说 EIP-7377 就是在 EOA 的地址上部署智能合约,完成后,EOA 的资产将由已部署的智能合约控制,即用户将通过部署的智能合约而不是原始 EOA 与其资产进行交互。账户也不能再发起交易,因此私钥在以太坊上就没有用处了(其他链上仍然可以使用私钥签名交易)。
安全问题
盲签问题:如果可以说服用户签署任意消息,则该消息可能是由恶意行为者而非用户拥有的迁移交易。比如攻击者将迁移交易包装成代币兑换,并指定 EOA 升级后的智能合约拥有权归属自己而非用户。所以钱包必须非常谨慎地对待迁移交易,并在完成签名之前产生尽可能多的验证。
利用迁移交易:假设一个 DeFi 协议使用迁移交易部署合约,然后用该合约的私钥生成一个有效的 ERC-2612 签名,将资金从合约转到自己地址中。针对此类问题,作者建议通过钱包不允许用户与以这种方式部署的协议进行交互来避免。
*ERC-2612 是一个以太坊标准,定义了一种称为「permit」的交易签名机制,用于代币转移的授权。该标准允许代币持有者通过签名的方式授权在其他地址上执行特定的转移操作,而无需在区块链上实际发送交易。
目前,EIP-7377 的提案在以太坊 Magicians 论坛上引起了广泛的讨论。虽然账户抽象还没有完全统一标准的实现,看似此提案的想法还过于超前,但自作者发布以来引起的讨论热度也说明了大家对账户抽象的关注度。EIP-7377 的想法距离实际实施还有很长的路要走,不过正如历史上许多改进一样,从一个初步的提案开始,经过不断的讨论、改进和测试,最终来实现对整个系统积极的改变。