作者:Rui

一文读懂账户抽象ERC4337如何带来以太坊账户的进化?

正如许多人所说,账户抽象 (AA) 技术,尤其是 ERC-4337,有望彻底改变自我托管钱包的用户体验,并使其能够扩展以供大规模采用。然而,2023年5月越来越近了,我们必须认识到该标准还处于早期阶段,机遇与风险并存。

*请注意,随着升级的快速发展,本文内容可能很快就会过时,并且本文仅基于我个人观点。

一文读懂账户抽象ERC4337如何带来以太坊账户的进化?

TL;DR

ERC4337:

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 钱包更简单,并用于管理个人加密货币持有量,但合约钱包可以有更复杂的规则,并可用于特定目的。

一文读懂账户抽象ERC4337如何带来以太坊账户的进化?

FromBitcoin Insider痛点

EOA钱包用户需要注意保护私钥。在私钥上所犯下的任何错误或疏忽都可能招致资金损失,因此EOA钱包的使用成本比较高,风险也高。即便是经验丰富的加密货币用户也可能会因为一次错误或粗心的举动而失去对其账户的控制。操作复杂、无法略过gas费或无法进行gas费代付以及钱包功能有限,这些都是困扰用户的问题。

智能合约钱包为部分问题提供了解决方案,但以太坊目前要求将所有操作打包在来自受 ECDSA保护的EOA的交易中。这会产生额外的交易费,还要多消耗21000 gas费,随之而来的还有潜在的中心化风险和复杂的操作:用户需要管理两个账户并在单独的EOA中存入ETH 来支付gas费,或者依靠中心化中继系统支付。

这些痛点催生了AA新标准——ERC-4337。

ERC4337提案: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抽象逻辑,包括使用ERC20同质化代币支付以太坊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费交易,并使用任意ERC20代币支付gas费。该逻辑可在Paymaster合同中或通过中继器执行。对AA而言,许多智能合约钱包本身可以实现EIP 4337兼容的Paymaster合约,并在入口点合约上质押代币,帮助用户支付gas费。

社交恢复:

在私钥丢失或泄露的情况下,用户可以将新密钥授权为合法的钱包所有者。社交登录和社交恢复的逻辑一般在钱包的主合约中定义。可采用多种方式,如电子邮件、多重签名、MPC或SWIE(用以太坊登录)等。

交易批处理:

交易批处理是智能合约钱包独有的功能,允许钱包用户在单个链上交易中执行多个交易。

跨链桥接和连接桥整合:

目前,许多钱包都与第三方供应商合作,将法币充提通道和跨链桥接集成到钱包中。这些充提通道和跨链桥接可以进一步与gas抽象中的支付合约(Paymaster)进行整合。

模块化设计:

AA最大的优势之一可能是其模块化服务,Bundler、Paymaster和其他部分可以灵活地组合在一起。

AA的缺陷

一文读懂账户抽象ERC4337如何带来以太坊账户的进化?

来自 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等。外部支持:来自以太坊基金会或其他知名风投机构