钱包弹出的两种请求,价格完全不同:一种是链上交易,要烧 Gas;另一种是签名消息,点了不花一分钱。正因为”不花钱”,很多用户对签名弹窗放松警惕——而这恰恰是链下签名最容易被误读的地方:它不移动资产,却可能授权别人替你移动资产。
两种”签名”的分界
链上交易是把你签好名的指令广播进网络,节点执行、记入区块,你为执行付出费用;链下签名只生成一串密码学凭证,交给发起请求的对方,链上什么都不会发生。EIP-1193 语境里的 personal_sign、以及配合结构化数据的 EIP-712 签名,都属于后者。规范的签名类操作不会替你转移资产,但它可以表达意图:比如 ERC-2612 的 permit 签名,让你在不上链的情况下授权某个合约动用你的代币——对方拿到这个签名,随时可以自己上链执行,费用是对方付或按协议约定,而资产风险已经签出去了。登录场景同理,SIWE 类签名消息只是向网站证明”这个地址归我”,本身不授权任何链上动作,读法可参考 怎么证明地址是你的?消息签名验证工具的使用与边界。
免费的那一半:为什么签名不收 Gas
签名只在本地用私钥对一个摘要做数学运算,验证才花算力,且验证可以在任何地方进行。EIP-2612 这类标准的动机正是把”我先花 Gas 调 approve、再花 Gas 交易”的两笔账合并成”我免费签一次、由执行方上链”。这对体验是进步:一次签名可以同时表达代币、数量、过期时间和接收方。对你而言的变化是——省钱的那一步,恰恰是把审核责任全部压回你眼睛的那一步,链上交易至少还有模拟和回执兜底,签完的字符串发出去就收不回。
弹窗上必须核对的四件事
第一行看类型:这是交易还是消息?钱包通常会明确标注签名请求,看到”签名”字样就意味着不会即时扣资产,但也意味着没有链上回滚。第二行看对象:授权给哪个合约地址(spender),金额上限是多少,无限额授权直接拒绝。第三行看有效期:permit 类签名带 deadline 字段,过期即作废,不设有效期的签名等于永久有效的提单。第四行看域名:EIP-712 的结构化数据带校验契约(verifyingContract),核对它是不是你要交互的那个合约,仿冒站点最常在这一行露馅。拿不准时拒绝签名没有任何损失,这正是链下签名的安全红利——你可以无限次地”再想想”。
事后能做什么
链下签名的可逆性取决于标准设计:permit 额度可以在链上用一次归零 approve 覆盖,但覆盖本身是一笔要花 Gas 的交易;登录签名不授权资产,无需善后。这决定了处置顺序:先区分签的是哪种,再决定要不要紧急上链撤销。定期检查地址的授权记录,把不认识的 spender 归零,是把这类”免费签名”风险兜住的常规动作,排查方法可读 怎么查一个地址的完整历史?区块浏览器地址页全解。签名不花钱,但每一枚省下的 Gas 背后,都对应一笔别人替你付钱、却动你资产的潜在交易——把这句记住,弹窗时就不会大意。
一次完整的推演:permit 从签出到被花掉
用一个具体流程把风险钉牢。假设你在某个借贷页面点击”用签名代替授权”:钱包弹出 EIP-712 结构化消息,字段写着代币合约、 spender(借贷协议合约)、金额上限和 deadline。你签名后什么都没发生——余额不变、链上无记录,页面却显示”授权完成”。此刻真实状态是:协议手里捏着一张你签好名的提单,它想什么时候上链就什么时候上链,Gas 通常计入你之后的正常交易或由协议代付。若这张单子上的 spender 写的是仿冒合约,或者协议自身被攻破,签名在 deadline 之前一直是有效弹药。对比传统流程:approve 上链后你能立刻在浏览器里查到授权记录并撤销;permit 签出后链上暂时”查无此据”,直到对方执行才浮出水面——这段真空期就是免费签名的真实成本,它花掉的是你的可见性,而不是钱包余额。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。