
如果你在过去几年里关注过 Ethereum,可能听过"account abstraction(账户抽象)"这个词——通常会和代号 ERC-4337 一起出现。听起来很学术,但它背后的想法其实非常实用:你的 Ethereum 钱包应该像一小段可以自定义的软件那样运作,而不是只能用一把私钥配上一个"要么用要么不用"的固定界面。
本文将讲解 ERC-4337 实际改变了什么,它引入的四个新术语(UserOperation、EntryPoint、bundler、paymaster),它在实践中能带来什么,以及它与 SSP 自身的多重签名方案有何关联。无需任何智能合约的基础——只要你对加密钱包底层如何运作感到好奇即可。
ERC-4337 想要解决的问题
在账户抽象之前,每一个 Ethereum 钱包都是所谓的 externally-owned account——也就是 EOA。EOA 极其简单:一把私钥控制一个地址,该地址进行的每个操作都必须由这把唯一的私钥签名。
这种简单也带来了棱角分明的问题:
- 无法恢复。 丢了私钥,就丢了资金。没有"忘记密码"链接,没有可以为你担保的可信联系人,也没有时间锁解锁。私钥就是账户本身。
- 无法批处理。 想要授权一个代币然后再去兑换它?那就是两笔独立的交易、两个独立的签名、两次独立的 gas 支付。没有办法说"要么一起执行,要么都不执行"。
- 没有原生多重签名。 如果你想要多签人,就必须部署一个合约(比如 Safe,前身为 Gnosis Safe),然后由一个 EOA 把交易发送到那个合约。合约本身是多签的,但与外界交互的账户底层仍然是单私钥 EOA。用户体验始终比常规钱包差一截。
- gas 总是用 ETH 支付,总是由发送方支付。 任何 dApp 都无法替你支付 gas。无法用 USDC 支付 gas。没有例外。
开发者们多年来一直在用复杂的合约模式绕开这些限制。ERC-4337 终于给了他们一条标准化的出路——而且无需对 Ethereum 的底层协议做任何改动。
ERC-4337 引入了什么
ERC-4337 并没有改变 Ethereum 在协议层面本身的运作方式——这正是它巧妙之处。相反,它定义了四个新角色,它们组合起来,完全在用户空间里模拟了"将智能合约钱包作为一等公民"。一旦你掌握了这四个词,整个标准就豁然开朗了。
UserOperation。 这是新的"已签名意图"对象,对于 AA 钱包来说,它取代了原始的交易。EOA 产生一笔由其唯一私钥签名的交易,而 AA 钱包产生一个 UserOperation——一个结构化请求,表示"此账户想做 X,这是授权信息,这是付款方式"。一个 UserOperation 可能是"向 Alice 转账 100 USDC,由这两台设备的签名授权,gas 由 dApp 承担"。
EntryPoint 合约。 部署在 Ethereum 上的一个唯一、规范、经过审计的智能合约,它知道如何接收 UserOperations、根据它们所属 AA 钱包的规则进行验证,并执行相应的操作。每一个 AA 钱包都与同一个 EntryPoint 对话,这正是让这个标准成为一个标准的关键。
Bundler。 一个链下参与者(可以把它想象成一种专门的中继者),它在公共 mempool 中监听 UserOperations,把多个打包在一起,作为一笔 Ethereum 交易提交给 EntryPoint。Bundler 向网络支付实际的 gas,并由它打包的 UserOperations 偿付。
Paymaster。 一个可选合约,它可以自愿代用户支付 gas。Paymaster 让"由 dApp 帮你支付 gas"或"用 USDC 而不是 ETH 支付 gas"成为可能。没有 paymaster 时,用户的 AA 钱包自己支付 gas;有了它,paymaster 来承担。
整个词汇就这么多。其他一切都只是装饰。
账户抽象在实践中带来了什么
上面四个部分听起来抽象,但当你看到它们解锁了什么之后就不抽象了:
- Gas 赞助。 一个 dApp 可以为新用户支付 gas,这样他们在做任何事之前都不必先获得 ETH。这对引导新用户来说意义重大——新用户可以注册、铸造 NFT 或进行首笔交易,而无需先经过法币到 ETH 的入金通道。Argent、Safe 和 ZeroDev 如今都支持赞助流程。
- 社交恢复。 你可以配置你的钱包,当你丢失主私钥时,由一组"守护人"(朋友、家人、放在保险箱里的硬件设备)达到法定人数后,可以代你轮换私钥。恢复逻辑就存在于你的钱包合约里——没有任何中心化托管方持有你的资金,但当某一台设备失效时,你的资金也不会永久丢失。
- Session keys。 一个 dApp 可以向你的钱包请求一把权限受限的密钥,仅限于一个应用、一组操作,并在几小时内有效。你用主私钥签一次名授予会话,之后 dApp 就可以在它的沙箱内行事,无需每次点击都向你弹窗。游戏工作室非常喜欢这种模式。
- 批量操作。 "授权这个代币并兑换它"变成一个签名、一个 UserOperation、一次执行。如果任意一步失败,整个批次都会回滚——再也不会出现半途而废、卡在不一致状态下的交易。
- 自定义签名方案。 想要一个使用 passkeys 的钱包,或者一个硬件安全飞地,或者一个 2-of-3 阈值方案?验证逻辑存在于钱包合约里,所以你可以使用任何你喜欢的加密方式,而不限于 EOA 标准的 secp256k1 ECDSA。
它与 SSP 的多重签名模型有何关联
SSP Wallet 走了一条不同的路径来达成许多相同的目标。SSP 使用 2-of-2 BIP48 多重签名——两把独立的私钥,分布在两台独立的设备上,签署任何交易都需要两把同时签名。ERC-4337 和 BIP48 多重签名是两种不同的机制,攻击同一个共享问题:任何单一设备都不应成为单点故障。
几个诚实的对比:
- 它们的共同点。 两者都消除了经典单签名钱包"一把钥匙、一次机会"的失效模式。丢失一个因子,你可以用另一个恢复。任一因子被攻陷(笔记本电脑上的恶意软件、丢失的手机),攻击者仍然无法单独转移资金。
- 它们的不同。 BIP48 是一个根植于 Bitcoin 的多重签名标准,可在 SSP 所支持的多条链上工作——Bitcoin、Ethereum、Litecoin 以及更多——使用每条链自身原生的多签原语。ERC-4337 仅限于 Ethereum,存在于智能合约层,因此自带了 BIP48 原生没有的能力(gas 赞助、session keys),但代价是仅限 Ethereum 的范围以及合约执行的开销。
- SSP 现在的立场。 SSP 是围绕 BIP48 模型构建的。ERC-4337 钱包和 SSP 风格的多重签名并非敌人——它们是互补工具——原则上 BIP48 多重签名的某把私钥可以作为 AA 钱包内的一个签名者。但目前这不是 SSP 的主要路径,我们宁愿对今天的产品保持清晰,也不愿承诺尚未交付的集成。
如果你一直在权衡"我应该用 AA 钱包还是硬件多重签名?",诚实的回答是它们用不同的取舍解决重叠的问题——而正确答案取决于你关心的是哪些链。
诚实的取舍
账户抽象确实是真正的进步,但它并非免费,凡是告诉你免费的人都在向你兜售什么。
- Gas 成本更高。 每个 UserOperation 都会在 EntryPoint 和你的钱包合约中执行合约代码。这严格上比 EOA 签名的交易需要更多计算,也就意味着更多 gas。打包能摊销一部分成本,但按每个操作来看,你通常会比一个 EOA 支付更多。
- 恢复的安全性取决于恢复合约本身。 社交恢复和守护人方案都是强大的特性——同时也是新的攻击面。恢复逻辑中的一个 bug,或者守护人集合被设置得过小,可能与丢失 EOA 私钥同样灾难性。坚持使用经过审计的钱包实现。
- Paymaster 引入了信任关系。 "dApp 替你付 gas"听起来很棒,但这意味着 paymaster 能看到你的 UserOperations,并且原则上可以拒绝为特定交易提供赞助。这是一种不同于"你自己付 gas,没人能拦住你"的信任模型。
- 大规模实战检验较少。 EOAs 在十多年里守护过数万亿美元的价值。ERC-4337 于 2023 年 3 月上线,仍在成熟中。对于高价值的冷存储,保守的答案(硬件钱包、多重签名、经过审计的合约)仍然有着更长的实战记录。
深入了解
从 SSP 的角度看多密钥安全在没有智能合约的情况下如何运作,请阅读什么是 2-of-2 多重签名?。
关于规范性的技术规范——包括精确的 UserOperation 结构、EntryPoint 接口以及每个设计决策背后的原因——EIP 本身就是第一手来源:https://eips.ethereum.org/EIPS/eip-4337。