普通钱包能不能一次签三步:EIP-5806 的委托交易 图 1
普通钱包能不能一次签三步:EIP-5806 的委托交易 · 图 1

问题从一笔两步操作说起

用普通钱包在去中心化交易所完成”授权加兑换”,链上是两笔交易:先签一个代币授权,再签兑换调用。这两笔之间的时间窗里,你的授权是公开的、有效的,任何人构造兑换路径都可能先于你使用它——批量本可以消掉这个窗口,但普通账户没有批量原语。智能账户能做,代价是先迁移、改变地址、接受新的权限模型。EIP-5806 提出第三条路:保持账户是普通外部账户,只新增一种交易类型,让这种账户能像合约一样,通过类委托调用机制执行目标合约的代码。

机制拆开看

按草案规范,这是一种带类型前缀的新交易(继承 2718 交易信封和 2930 访问列表的内在计价),字段里除了常规的接收地址和燃料参数,关键是一次指向目标合约的委托调用描述。执行语义类似合约之间的 DELEGATECALL:被调用合约的代码在你自己的账户上下文里运行——存储槽读的是你的(对普通账户而言存储通常是空的,这反而是个特性)、msg.sender 是你、你的余额作为可用资产。于是一个多步操作(授权、锁仓、领取)被一个打包合约串行执行,全程只花一笔基础燃料的账、只签一次名。

规范特意加了操作码限制来封堵危险面:委托交易里禁止创建合约等会产生歧义状态的路径,并强调这不是账户抽象原语,也不与 ERC-4337 的意图替代。它的定位更接近”给现有账户补一个批量通道”。

安全模型的关键差别

和 4337、7702 放一起对照更清楚。ERC-4337 把你的执行搬进一个由打包合约代理执行的合约钱包体系,签名交给验证器而不是交易本身;EIP-7702 则是给外部账户临时挂上一段委托代码,让它能像智能账户一样被批量调用——两者都把”谁替你执行”这层引入了协议。5806 相反:你签名的对象始终是一笔交易,有 nonce 防重放,可以被更高费用的替代交易取消;执行发生在你的账户内、一次性、没有持久委托状态。草案的安全考量部分把这点当卖点:签名可以被钱包完整模拟、展示完整意图,用户确认的就是链上最终发生的事。

风险面也要照直说:委托进你的上下文执行意味着那段代码拥有你此刻授权范围内的全部权力——它能看到并花掉你先前批给任何合约的额度吗?不会越过原有授权,但它可以在一个交易里把多个授权的组合后果一次落地,这恰恰是批量效率的来源。签名前完整模拟、审查打包合约源码,仍然不可替代。

状态与落地边界

这条提案创建于二零二二年十月,作者 Hadrien Croubois,依赖 2718 与 2930,在规范仓库里的状态截至本文核验时为停滞(Stagnant),未进入任何主网升级清单;同类批量体验目前主要由 7702 和 4337 路线提供。读到它时,最省心的用法是把它当概念地图:为什么普通账户不能批量、为什么签名对象是交易还是授权是钱包安全的分水岭、账户抽象为什么分好几条路走。

一个两笔变一笔的账

算一笔具体的账最能把机制钉死。普通路径做”授权加兑换”,两笔交易各付至少两万一千的基础燃料,再叠各自的调用与存储成本;若第二笔在窗口期被人用你的授权截胡,损失就不止燃料。按批量通道走,一笔交易覆盖两个动作,基础燃料只付一份,窗口直接消失,失败时整体回滚、不留半成品授权。省下的也许只值几毛钱燃料,多出来的那层”要么全做要么全不做”的原子性,才是批量原语真正的产品价值——这也解释了为什么各家方案都把它当刚需,只是落地路径不同。

风险提示:本文仅作技术科普,提及提案均未上线主网,不构成投资建议。