SevenX Ventures: 一文读懂账户抽象,ERC4337如何带来以太坊账户的进化?
原文作者: Rui
正如许多人所说,账户抽象 (AA) 技术,尤其是 ERC-4337 ,有望彻底改变自我托管钱包的用户体验,并使其能够扩展以供大规模采用。然而, 2023 年 5 月越来越近了,我们必须认识到该标准还处于早期阶段,机遇与风险并存。
*请注意,随着升级的快速发展,本文内容可能很快就会过时,并且本文仅基于我个人观点。
TL;DR
ERC 4337 :
AA 标准仍处于早期阶段,不过许多创新构建者正努力对其进行进一步开发。在生态系统的支持和 MetaMask 等大型产品的普及这一大背景下,我们可以预见 AA 将加快发展进程,并产生令人兴奋的成果。
L2:
对 AA 的采用在 L2 解决方案中有所不同。较大的 L2(例如 Optimism 和 Arbitrum )本身并不支持 AA,而 ZKSync 和 Starknet 则支持。
Bundler 服务:
-
如果我们看好 AA,并且所有与以太坊一致的 EVM 等效L2不支持原生 AA,那么 Bundler 服务就是网络中支持 AA 的必要条件。
-
开源特性使得 Bundler 服务具有非排他性,这就令变现之路困难重重。为了保证网络安全稳定,就要用到不同的 Bundler 服务。
-
私人 Bundler 可通过为特定需求定制隐私、安全和其他功能来实现盈利。
Paymaster 服务:
-
Paymaster 服务相对集中(与 Bundler 服务相比),合约开源,但后端封闭。
-
Paymaster 服务具有盈利模式,可与法币存款、兑换、桥接、自动支付、会话、赞助费等功能相结合来增强支付场景,从而提高 dApp 可用性。
AA 钱包和 SDK:
-
AA 钱包可以从产品角度进行评估,包括密钥管理系统、社交恢复、gas 费赞助、多链账户同步以及支持的区块链等。
-
AA 的优势不光是提供流畅的登录体验(Web3 Auth 可通过托管方式实现)。在复杂且定制的链上交互中,AA 还可以为 dApp 提供诸多好处。
-
BD 是这场战局的关键。大多数钱包都瞄准 Defi、GameFi,并致力于获得生态系统支持、说服大型 dApp、找到突破点。
-
变现模式有待深入探索。To Business(To B)模式可能赚不了多少钱,也不会积累自己的用户,而 To Customer(To C)模式则需要找到高价值的场景,基于体量来盈利。集成交换和桥接功能可以盈利,但关键在于找到可持续的模式。
了解加密钱包
分类
以太坊网络中存在两种类型的帐户:外部账户 (Externally Owned Account, EOA) 钱包,如 MetaMask,以及合约账户 (Contract Account, CA) ,比如 Safe 。
EOA 钱包和合约钱包之间的主要区别在于其控制方式。EOA 钱包由个人用户通过私钥控制,而合约钱包则由智能合约控制。虽然 EOA 钱包更简单,并用于管理个人加密货币持有量,但合约钱包可以有更复杂的规则,并可用于特定目的。
From Bitcoin Insider
痛点
EOA 钱包用户需要注意保护私钥。在私钥上所犯下的任何错误或疏忽都可能招致资金损失,因此 EOA 钱包的使用成本比较高,风险也高。即便是经验丰富的加密货币用户也可能会因为一次错误或粗心的举动而失去对其账户的控制。操作复杂、无法略过 gas 费或无法进行 gas 费代付以及钱包功能有限,这些都是困扰用户的问题。
智能合约钱包为部分问题提供了解决方案,但以太坊目前要求将所有操作打包在来自受 ECDSA 保护的 EOA 的交易中。这会产生额外的交易费,还要多消耗 21000 gas 费,随之而来的还有潜在的中心化风险和复杂的操作:用户需要管理两个账户并在单独的 EOA 中存入 ETH 来支付 gas 费,或者依靠中心化中继系统支付。
这些痛点催生了 AA 新标准——ERC-4337 。
ERC 4337 提案:
CA 的问题
如今,这些事情都可以用合约钱包解决,但以太坊本身要求将所有内容打包在源自 ECDSA 保护的 EOA 的交易中,这将导致:
-
额外交易费用: 每个用户操作都必须由 EOA 发起,就需要额外消耗 21000 gas 费。
-
复杂性和中心化: 用户需要在单独的 EOA 中存入 ETH 来支付 gas 费,并管理两个账户中的余额,或者依靠中继系统支付,这些中继系统通常是中心化的。
多年来,人们多次尝试在基于以太坊的区块链上实现账户抽象,例如 EIP-86 和 EIP-2938 。然而,这些方法都行不通,因为它们都需要修改共识层,而这是很难实现的。
4337 机制
ERC-4337 通过引入名为 UserOperation 的更高层伪交易对象来实现账户抽象,这在捆绑概念方面类似于 rollups。幸运的是,这个标准让我们可在不改变共识层的情况下构建账户抽象。
EIP 4337 的模块化设计将智能合约钱包的账户抽象功能划分为多个端口:
Bundler:
-
Bundler 就是一个 EOA。由于所有交易都必须由 EOA 发起,有了 Bundler 之后,用户无需创建和记住 EOA 私钥也可触发智能合约钱包交易。
-
Bundler 的作用:验证 UserOperation、将一组 UserOperation 对象打包成单个“捆绑事务”。将已验证的 UserOperation 内容广播到公共或私人内存池。
-
Bundler 还可以通过以下方式获得经济利益:执行 UserOperation 后,将最高优先费用与实际 gas 费之间的差额收入囊中。与普通交易的中继器类似,Bundler 可通过对捆绑事务中的 UserOperation 进行排序来获取 MEV。
入口点:
-
入口点是一个全局合约,所有 Bundler 都需要调用它来执行 UserOperation。入口点充当 Bundler 和智能合约钱包之间的中介。
-
用 handleOp 验证和执行: handleOp 函数用 UserOperation 作为输入参数,首先在链上验证 UserOperation,检查是否由指定的智能合约钱包地址签名,并且钱包有足够的 gas 费来补偿 Bundler。如果验证成功,则根据函数签名执行输入参数。
需要存入智能合约钱包的代币向 Bundler 支付 gas 费:当 Bundler 使用 EOA 触发 handleOp 时,会产生 gas 费。智能合约钱包可以用自己的余额支付 gas 费,或者请求 Pymaster 支付。可能失败:gas 费不足,验证步骤失败;即使有足够的 gas 费, UserOperation 执行步骤也可能会失败,例如运行时错误。无论执行是否成功,入口点合约都会向 Bundler 支付 gas 费来触发该 handleOp 功能。入口点合约为智能合约钱包提供添加或提取代币作为抵押品的功能。
智能钱包:
智能合约钱包主合约将 UserOperation 的验证和执行步骤分开。通过将其分离,Bundler 可以在链下验证 UserOperation ,从而过滤掉恶意交易,而无需支付 gas 费。
validateOp 函数中定义了验证步骤:第一次调用 validateOp ,Bundler 模拟链下验证,验证 UserOperation 中的签名,并确保智能合约钱包有足够的 gas 余额;第二次调用 validateOp 的是入口点合约,在执行 UserOperation 之前执行链上验证。
Paymaster:
-
Paymaster 定义了智能合约钱包的 gas 抽象逻辑,包括使用 ERC 20 同质化代币支付以太坊 gas 费以及无需 gas 费的交易。
-
Paymaster 是由 dApp 部署的智能合约,可以触发 Paymaster 的 validatePaymasterOp.
Wallet Factory:
-
Wallet Factory 是创建智能合约钱包的公共合约。当 initCode 中植入了钱包工厂地址和新智能合约钱包的参数后,Bundler 将触发相应的 Wallet Factory 创建具有指定参数的智能合约。热门的 Wallet Factory 代码经全面审核,因此,用 Wallet Factory 创建钱包更安全。
-
Wallet Factory 需要在入口点上质押 ETH,并持续为 UserOperations 提供良好服务,才能从 Bundler 获取更多流量。
-
用户可提交填充了 initCode 的 UserOperation ,请求 Bundler 创建 CA 钱包。
-
用户可选择带特定定制参数的 Wallet Factory 来定制他们的 CA 钱包。
签名聚合器:
-
签名聚合器用于将多个交易的签名聚合为字节,以便更快地进行验证和执行交易。不同的智能合约钱包使用不同的签名算法,需要先使用相同的签名算法聚合 UserOperations 。
-
节省 gas 费:由于链上加密计算需要消耗大量 gas 费,聚合签名方案(如 BLS)可以在链上验证时节省 gas 费。
-
Bundler 使用多个签名聚合器合约来生成多个聚合签名,而不是一次验证一个 UserOperations 。
-
Bundler 将 UserOperation 数组、聚合签名和聚合器地址传递给入口点,每个 UserOperation 组会议调用其对应的签名聚合器的 validateSignature 函数。
-
验证通过后,Bundler 会在智能合约钱包上执行这一套 UserOperation 。
-
聚合商还需要在入口点合约上质押以太坊,并保持良好的 UserOperation 服务记录。
AA 的优点
-
Gas 抽象:
Gas 抽象包含无 gas 费交易,并使用任意 ERC 20 代币支付 gas 费。该逻辑可在 Paymaster 合同中或通过中继器执行。对 AA 而言,许多智能合约钱包本身可以实现 EIP 4337 兼容的 Paymaster 合约,并在入口点合约上质押代币,帮助用户支付 gas 费。
-
社交恢复:
在私钥丢失或泄露的情况下,用户可以将新密钥授权为合法的钱包所有者。社交登录和社交恢复的逻辑一般在钱包的主合约中定义。可采用多种方式,如电子邮件、多重签名、MPC 或 SWIE(用以太坊登录)等。
-
交易批处理:
交易批处理是智能合约钱包独有的功能,允许钱包用户在单个链上交易中执行多个交易。
-
跨链桥接和连接桥整合:
目前,许多钱包都与第三方供应商合作,将法币充提通道和跨链桥接集成到钱包中。这些充提通道和跨链桥接可以进一步与 gas 抽象中的支付合约(Paymaster)进行整合。
-
模块化设计:
AA 最大的优势之一可能是其模块化服务,Bundler、Paymaster 和其他部分可以灵活地组合在一起。
AA 的缺陷
来自 stackup
-
手续费(也许)相对较高:
使用 ERC-4337 进行简单转账的成本要比使用传统钱包(通常称为 EOA)高得多,因为前者需要调用合约。
然而,在 Rollup 网络上,使用 ERC-4337 进行简单转账可能比 EOA 更便宜 ,因为它可以将签名聚合在一起,以减少主网上的数据量。
-
目前尚未最终确定的标准:
扩展的交易可扩展性导致攻击向量增加、迁移到新标准时可能出现未知错误或安全风险、需要强大而安全的全局入口点合约来确保所有交易经适当签署及验证,诸如此类的挑战。
Layer 2
✅ 和 ❌ 表示是否支持原生 AA。
Optimism: ❌
Optimism 版本 1 有三个 OVM 操作码,以实现智能合约钱包的账户抽象。然而,出于一致性和安全考虑,版本 2 移除了这些操作码,并且没有关于支持账户抽象的官方声明。
Arbitrum: ❌
虽然目前有一些智能合约钱包在 Arbitrum 上构建,但没有关于支持账户抽象的官方声明。
Starknet: ✅
Starknet 只有具有验证和执行功能的智能合约账户,所有账户必须实现这些功能以验证签名并确保 gas 费。Starknet 禁止验证功能调用外部合约状态,以防止出现未执行的交易。然而,Starknet 与以太坊还是有些不同,比如缺少 UserOperations、类似 Paymaster 的交易费抽象协议,以及需要具有代币余额的账户来创建新合约。另外,如果已验证的交易失败,Starknet 的排序器就无法收取 gas 费,而以太坊却可以。
zkSync: ✅
zkSync 不区分 EOA 和合约账户。它的账户模型类似于 EIP 4337 ,并包括独立的 validateTransactiom 和 executeTransaction 函数。Paymaster 接口还包括 validateAndPayForPaymasterTransaction 和 postOp 函数。然而,二者还是有不同之处,比如在验证过程中调用已部署的外部合约和外部存储的能力。Paymaster 在交易验证期间也可以调用外部存储。
AA 基础设施:
目前,一些优秀的项目如 Stackup、Etherspot、Candide、Infinistism、 Pimlico 都在尝试构建基础设施。
Bundler 服务:
构建者:
-
Stackup 的 Golang 实现
-
Candide 的 Python 实现
-
Infinitism 的 TypeScript 实现
-
Etherspot 的 Skandha — TypeScript 实现
一些共识:
-
公益服务
绝大多数 Bundler 的开源性质使其具有非排他性和非竞争性。任何 RPC 端点都可以通过复制开源代码来运行 Bundler。
-
难以变现
即使运行 Bundler 的 RPC 端点通过 API 密钥收取服务使用费,Bundler 服务也比其他基础设施(如支付合约 Paymaster)更难变现,因为 Paymaster 可以通过与第三方充提供应商或 DeFi 协议聚合器提供商合作,轻松赚取费用差额。
-
重要的基础设施
验证和执行 UserOperation 需要尽可能多的 Bundler,以便更好地实现去中心化。因为目前第三方 Bundler 服务提供商只有 Stackup 和 eth-infinitism,我们确实需要更多这样的 Bundler 服务提供商。
-
机制
Bundler 自己传递消息并传播用户动作,类似于共享内存池,无需就具体事项达成一致。Bundler 有过滤垃圾信息的重要功能,并且出于自身的经济原因,Bundler 希望尽可能地进行监控,以确保内存池的安全。
Bundler 服务的区别:
-
Bundler 服务可以是通用基础设施,也可以专门为钱包而构建。钱包项目可能会优先构建最基本的 Bundler,而第三方提供商则必须为各种场景构建模块化的 Bundler。
-
和以太坊节点类似,Bundler 服务采用不同的编程语言实现,以防止单点故障,并造福生态系统。
-
Bundler 服务支持私有内存池和公共内存池,并为私有内存池提供定制选项。
Paymaster 服务
-
相对于 Bundler 服务来说,Paymaster 服务比较中心化,合约是开源的,但后端是封闭的。
-
Paymaster 服务有盈利模式,可以通过与法币存款、兑换、桥接、自动支付、会话、赞助费用和其他功能的结合来改善 dApp 的可用性。
AA 钱包和 SDK:
产品评估
-
密钥管理系统:
-
多重签名逻辑(安全):只能实现 2/3 和 3/5 等多重签名逻辑;
-
简单权限管理(顺序):可以为密钥设置权重,然后为操作账户设置阈值。
-
基于角色的权限管理(Unipass):可以为密钥设置权重和角色。不同的角色可以执行不同的操作。每个角色也有相应的阈值。如果超过此阈值,可以执行相应角色的权限。
-
社交恢复方法
-
gas 费赞助:自建中继器,或设置 Bundler + Paymaster
-
多链账户同步
-
多链地址统一
-
支持的区块链
业务
-
业务模式:To b/ To B+To C / ToC
-
与 dApps 合作:与各链上的稳定币或 DeFi 等巨头基础设施型 dApp 合作
-
实用性:整合 NFT 市场、launchpad 等。
-
外部支持:来自以太坊基金会或其他知名风投机构
原版英文报告 于 2023 年 5 月 首发。更多中文投研内容,请关注公众号【SevenXVentures】。
本文为 SevenX 研究团队原创,仅供交流学习,不构成任何投资参考。如需引用,请注明来源。