ERC-7597:让合约钱包也能用 permit 免 Gas 授权
一次为 NFT 授权,为什么要先买 Gas
给市场授权一件很拧巴的事:授权本身是链上操作,要付 Gas。ERC-2612 的 permit 提供了免 Gas 路线——用户对一个结构化消息签名,任何人拿着签名替用户提交,授权即在链上生效,Gas 由提交方结算。问题出在签名验证:2612 原文规定按 V、R、S 三个参数恢复签名者地址,再比对是否等于授权人。这是典型的外部账户逻辑。多签钱包、ERC-4337 智能账户这些”合约钱包”根本没有 VRS 私钥结构可恢复——它们的签名验证要走 ERC-1271 的链上校验函数。于是出现一个尴尬分工:个人钱包能享受 gasless 授权,DAO 金库和公司多签反而必须老老实实付 Gas 走普通 approve。
把签名变成不透明字节,把裁决交给 ERC-1271
ERC-7597 的做法是把 permit 签名里的”格式”拆掉。按规范,合规合约的 permit 函数签名为 permit(address owner, address spender, uint value, uint deadline, bytes memory signature),签名参数从定长三段变成一整块 bytes;同时保留 2612 原有的 nonces(address) 与 DOMAIN_SEPARATOR() 接口。验证顺序因此变成两步:签名者地址是普通账户时按原方式验签,地址是合约时调用它的 isValidSignature 做链上判定——这正是 ERC-1271 定义的”我认可这个签名”接口。提案写于 2024 年 1 月 15 日,依赖 ERC-1271 与 ERC-2612,状态是 Draft。
一句话总结:2612 问”这签名能恢复出谁”,7597 加了一条”问签名者自己的合约,它说算就算”。
便利性迁移,风险也跟着迁移
把裁决权交给 ERC-1271 意味着验签质量取决于合约钱包的实现。一个把所有签名都返回”有效”的糟糕合约实现,等于把该钱包名下资产的全部授权门槛拆掉——历史上确曾出现过这类实现缺陷被利用的案例。对 7597 的使用方(代币合约与市场)而言,它们信任的是”签名者合约会诚实验签”,这与原来”密码学直接证明”的信任结构不同;安全边界从密码层移到了实现层。反过来,对使用合约钱包的人,这条路线让你免 Gas 的同时也要求你确认自家钱包的 1271 实现经过审计、逻辑保守。
对 NFT 场景的实际影响,可以按角色分三层。个人钱包用户几乎感觉不到变化,2612 路线继续工作。多签与 AA 用户第一次可以在不预付 Gas 的情况下给市场做代币授权(在合规代币已支持 7597 的前提下)。项目方与市场方则需要重新评估集成:支持 7597 就多支持一条验签分支,每一分支都对应新的测试与审计成本。
使用清单
顺带理清几份 permit 家谱
ERC-2612 与 ERC-7597 都只面向 ERC-20 的代币授权;ERC-721 的免 Gas 授权另有 ERC-4494(NFT permit),其面向合约钱包的验签细节应以该提案文本为准,不要从 7597 的结论倒推。这份家谱对 NFT 用户的实际意义在于场景错位:在 NFT 交易里,你签的多数是市场订单的结构化消息(EIP-712),而不是代币 permit;permit 主要在涉及支付代币授权、流动性操作时登场。分清”我在签订单”还是”我在签授权”,比记住四份编号的接口差异更能降低风险——前者通常只在成交时触发转账,后者直接改变代币合约对操作员的长期许可记录。
免 Gas 签名的生命周期
一条 permit 签名的旅程值得单独看清:签名本身永远留在链下,只有当有人把它作为 calldata 的一部分提交,授权才写入代币合约——Gas 由提交方付,签名者无需预充值。这意味着同一份签名在有效期内可被任何人提交,也因此必须绑定 nonce 与 deadline 防重放与过期。若你提交后市场迟迟不上链,签名并不会”作废退款”,它在窗口内随时可能生效。评估任何 gasless 流程时,把”谁负责提交、失败了谁兜底”问清楚,比关注界面按钮更实际。
若你以合约钱包做授权:确认钱包实现与 ERC-1271 校验逻辑的出处与版本;授权仍按最小权限原则给出,能用单枚 approve 就不用整系列授权;期限与 nonce 机制不因免 Gas 而放松,deadline 尽量设短。若你是代币发行方或市场:明确标注支持 7597 的验签路径,避免同一份签名在两处路径被重放的构造——nonce 按 owner 维度记账仍是前提。本文为机制科普,涉及资产授权操作请以安全为先,不构成投资建议。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。