当我们刚开始投身去中心化金融交易,首先需要的是一个钱包。而在操作链上钱包工具的过程中,大多数人可以感知到与我们习惯的用户体验并不相同——链上钱包可以实现完全托管数字资产,但缺乏账户安全保障(如以太坊系统的外部账户 EOA「Externally Owned Accounts」 和合约账户 CA「Contract Account」)。
EOA 和 CA 账户执行时,外部账户的每笔链上交易都需要一个 EOA 来签署发起,用户通过一对密钥拥有一个 EOA 钱包,这个密钥被称作 signer。由于钱包地址的公钥属性,使得 EOA 钱包既是账户又是 signer,这将带来严重的资产安全问题。也就是说 signer 对账户有着完全控制权,我们可以试想有一天自己丢失了账户,而碰巧有人找到了自己的 signer,那这个人就拥有了自己的账户以及名下的所有数字资产。
对此,诸多开发者探索了不同基于 EOA 和 CA 账户的技术优化方案。增加资产转移、合约私密控制、用户操控等组件,为防止用户资产丢失绞尽脑汁,但仍存在不少纰漏之处引来各方质疑。知名 NFT 项目 Bored Ape Yacht Club 就曾曝出数百个 NFT 被盗事件,给以太坊用户本就不好的钱包体验感“雪上加霜”。为此,我们将探寻把两种账户优势合二为一,又克服各自弊端的账户抽象方案,看其如何为 Web3 时代的钱包工具打造成功范式。
现有账户体系要求用户必须安全存储、保护私钥/助记词,否则就会产生丢失数字资产的风险。同时,安全缺失问题也让很多想投身加密数字交易的用户望而却步,甚至阻止链上应用的使用功能。那么解决账户钱包安全问题的方案是什么?是账户抽象(Accout Abstraction),一种探索自动化可编程支付,支持自动提取资金的自托管钱包编写智能合约。
帐户抽象可以为用户提供简化使用帐户的能力。就像我们开启一个网站邮箱账户,只需学会操作办法,而无需通晓工作原理。拥有账户抽象,我们可以摆脱助记词/私钥等束缚,还可以启用不同的签名选项,Gas 费用由 DApp 赞助或通过 Token 支付等方式实现。
账户抽象的最大目标就是解耦 signer 和账户之间绑定的关系,防止 signer 对钱包资产的绝对控制权。简言之,账户抽象实现了交易验证、执行的一体化过程,转变为根据用户需求进行调整的模块化组件,将 EOA 和 CA 合二为一。
明确了发展目标后,Vitalik 和以太坊的核心开发成员不断起草“账户抽象”的解决方案。从最初的 EIP 86 到如今的 EIP 4337 ,交易权利进一步释放到用户手中,安全风险被高度削弱优化,下一代钱包工具呼之欲出。
EIP-86 ,引入智能合约作为“转发合约”,任何人都可以从入口地址发送交易。
EIP-1014 ,预测部署合约地址,发挥智能合约钱包作用,确保合约地址在所有 EVM 链上相同。
EIP-2938 ,创建全新的操作密码进行“账户抽象”交易,协议变更过大后续被放弃。
EIP-3074 ,创建两个全新的操作码,一起使用时允许智能合约代表 EOA 发送交易,但面临安全风险未被实施。
在以太坊合并路线完成后,更多开发者投身账户抽象解决方案的修改制定。2021 年 9 月,Nethermind、Opengsn 研究人员在 Vitalik 的帮助下,提出了 EIP 4337 。这一版本的最大特点是:无需更改任何共识层协议,为以太坊带来“账户抽象”。
EIP 4337 不修改共识层本身的逻辑,将当前交易存储池(tx mempool)的功能复制进更高 level 的系统中,这一提案创新地引入了“User Operations”的概念,允许将自定义功能编码到智能合约钱包,用户操作可以把意图、签名、其他数据打包起来进行验证。EIP 4337 的运作流程包含以下三个步骤:
User Operations:发起“用户操作”,通过自定义 Mempool 发送。
Bundler 打包:Bundler 根据费用优先级选择包含 UserOperation 的对象,利用捆绑器调用 EntryPoint 合约进行验证
运行交易:在上述过程行进中如果没有遇到任何错误,交易将包含在网络的下一个区块中实现。
在 EIP 4337 提案的设计思路中,EntryPoint 发挥了验证账户的功能,确保遵循预先指定的规则并执行;Bundler 作为 EOA 地址将所有交易提交到链上;还可以添加 Paymaste 扩展智能合约,实现辅助支持。相较之前几个版本的解决方案来说,EIP 4337 能够在进一步减少安全风险的同时,保障交易运行的有序性、稳定性,并不修改共识层相应内容,为开发者和用户都带来了操作上的便利和高效。
EIP 4337 应用的首要保障就是过硬的安全性能。用户使用自定义签名方案的操作机制,允许在以太坊上为多个签名者提供原生支持,两个及以上用户就可以批准一笔交易,提高安全性。如若用户不知何故丢失了私人密钥/账户,只需联系自己的朋友、家人帮助恢复账户即可,这让 EIP 4337 的安全性能相比之前几版草案有了质的飞跃。
EIP 4337 的验证和交易过程虽被分离成两个智能合约,但如果钱包合约成功验证了一笔交易,入口点合约就会自动执行下一个步骤并提交到相应的区块,开发者和用户也可以自由地将想要的内容通过自定义功能编入钱包合约(包括多重签名、社会恢复、抗量子签名方案等),克服了 EOA 仅限于 ECDSA 加密方案的局限性。
自由实现自定义功能编入的同时,需要多线程架构的兼容支撑才能达到额外的运行要求。对此,EIP 4337 引入了专门针对抽象账户的 User Operations(上文提及的“用户操作”),无论是用于 User Operations 的 Mempool,还是传递 Entry Point 智能合约的 Bundler,都能够实现同时并举,而不会产生高能耗、高费用等额外浪费。如果产生了共识层面改变和网络硬分叉挤兑现象,增加全新的 Mempool 也只需要更新以太坊节点客户端即可。
捆绑器不仅作为重要节点入驻 EIP 4337 的工作流程,还成了“省钱好帮手”。将多个交易、操作捆绑在一起后,批准 Token 的支出、交易可作为单一执行节点,摈弃多线程交易的重复成本。此外,Paymaster 功能允许第三方支付某些 User Operations 的交易成本,为用户支付 Gas 费用补贴协议使用。无论是用户还是付款人的账户余额都将伴随执行循环不断更新,真正让“一次交费,多程运作”成为现实。
抓住以太坊路线合并的红利,EIP 4337 成了释放账户抽象可能性的“潜力股”。我们可以看到,EIP 4337 改变了旧有链上账户体验的不适,成为众多 Web3 应用给予用户自行保管资产的主要方式,并有更多机会推动项目方大规模采用这一解决方案。这不仅是智能合约钱包热潮中的关注焦点,也是区块链技术在互联网时代的重大革新。
然而,EIP 4337 拥有众多优势的同时,也需不断克服自身不足,焕发新的生命力。比如,在执行过程中增加的 DoS 漏洞带来了比单个 ECDSA 验证更为复杂的逻辑;账户不能排队将多个交易发送到 Mempool,而只能一次进行一项交易;补贴 Gas 费用之余,本身运行的 Gas 费用却并不低廉……这些亟待优化的关键,值得更多开发人员深思并寻找解决路径,唯有不断优化草案细节、精进技术方案,才能让 EIP 4337 成为实现账户抽象的不二之选。
期待 2023 以太坊开发者社区能够为 EIP 4337 带来更多创新,打造下一代钱包,为用户呈上更为便捷、安全的支付工具。
参考文献
简析以太坊 EIP-4337 提案机制设计与优缺点
EIP-4337 标准智能钱包实践研究报告:全景式呈现 4337 标准实例实现过程及机遇探讨
简析账户抽象和 EIP-4337 :未来智能合约钱包落地情况如何?
解析:EIP-4337 如何用账户抽象来改善以太坊复杂的用户体验问题
3 分钟了解 EIP 4337 (账户抽象)如何改善以太坊 UX
EIP-4337 标准智能钱包实践研究报告:全景式呈现 4337 标准实例实现过程及机遇探讨