在钱包里签名消息是什么意思:交易与签名的区别

在钱包里签名消息是什么意思:签名与交易有何不同,permit、Permit2 和 setApprovalForAll 是什么,以及如何读懂签名窗口。

CoinDropster 编辑团队 · 更新于:

“在钱包里签名消息是什么意思”是参与空投的人最需要弄清的安全问题之一,因为许多确认窗口看起来无害、不需要 gas,后果却可能与转出资金相同。本文说明签名与交易有何区别、常见签名有哪几类,以及点击按钮之前应当检查什么。

本文仅供教育参考,不构成财务或法律建议,也不能保证避免损失:谨慎能降低风险,但不能消除风险。

交易与签名:区别在哪里

钱包能做两件本质不同的事,而且很容易混淆,因为两者都会弹出带“确认”按钮的窗口。

  • 交易是发送到网络、会改变区块链状态并需要手续费(gas)的操作。转账、兑换、授权、领取,都是交易。结果可以在钱包历史和区块浏览器中看到。
  • 消息签名是一种密码学证明,表明你控制某个地址,并同意某段具体文本或数据。它本身不会向网络发送任何东西,也不需要 gas。

没有 gas 会带来虚假的安全感。签名不是动作,而是同意,而这份同意可以事后被拿出来使用。如果被签名的数据含义是“允许这个地址花费我的代币”,任何持有该签名的人都可以自己把它提交到网络并支付 gas。代币会从你的地址转走,尽管你从未支付手续费,历史里也看不到任何一笔交易。

最常见的几类签名

  1. personal_sign。对纯文本的签名。用钱包登录网站就是这样:你会看到一段可读的消息,例如包含网站名称和一次性代码。只要文字清楚、不涉及权限、转移或让渡权利,通常是安全的。
  2. 结构化数据(EIP-712)。钱包显示的不是一行文字,而是一组字段:谁、什么、多少、到何时。这是在交易平台签订单和签署花费授权的标准方式。这类窗口更难读,但含义恰恰就在这些字段里。
  3. Permit。按 EIP-2612 标准的签名,可以在不单独发起授权交易的情况下,允许某个地址花费你的代币。并非所有代币都支持。需要检查的字段:spender(给谁)、value(多少)和 deadline(到何时)。
  4. Permit2。一些应用使用的通用授权合约。你先对它授权一次,之后具体额度由签名来设定。很方便,但意味着参数宽泛的签名等同于一次完整授权。
  5. setApprovalForAll。它不是签名而是交易,但常常出现在类似的窗口里。它让指定地址有权转移所选合集中的全部 NFT,而不是只有一个。在你自己撤销之前,它没有期限也没有上限。
  6. 盲签。钱包显示的不是解码后的字段,而是一长串十六进制字符或哈希。你无法读出含义,在不知道同意了什么的情况下就签了名。

如何读懂签名窗口

确认之前,对照一份简短清单。只需半分钟,就能避开大多数常见陷阱。

  1. 请求来自哪里。钱包会显示网站域名,它应当与你有意要去的网站一致。如果你是通过聊天或广告里的链接进来的,请先阅读如何识别虚假领取网站。
  2. 这是什么操作。登录、订单、代币授权,还是 NFT 授权?如果窗口没有用清楚的话说明操作,就应当停下来。
  3. 接收方是谁。spender、operator 或 to 字段。一个陌生地址又没有说明用途,是不好的信号。
  4. 额度多大。是具体数额还是“无限”?对代币来说,无限值意味着该地址现在和以后都可以取走这种代币的全部余额。对 NFT 来说,对应的是“合集中的所有代币”。
  5. 有效期多久。deadline 或 expiration 字段。没有期限或期限很远的授权,危险持续的时间更长。
  6. 能否读懂。如果显示的是一串字节而不是字段,就不要签。许多硬件钱包默认关闭这类签名,没有确实的必要不要打开该设置。

再补充一条:任何合法的签名都不会要求你输入或出示助记词。那不是签名,而是盗窃。如何保管助记词和密钥,见助记词保管一文。

已经签了怎么办,以及事先做什么

交易形式的授权在你撤销之前一直有效,可以在钱包的授权列表或专门的服务中查看。如何查看和撤销这些授权,见撤销代币授权一文。签名则更棘手:已签名的 permit 在被使用之前不会出现在区块链上,其有效期由 deadline 字段决定。所以最好的防御是不多签任何东西。

能降低风险的实用习惯:

  • 用一个余额很小的独立钱包去试新项目,做法见为空投配置钱包;
  • 不要点开私信、评论或广告里的领取链接,自己去项目官网;
  • 拿不准就拒绝请求:拒绝不花任何成本,需要时随时可以再签;
  • 定期检查有效授权列表,撤销不再使用的。

在 CoinDropster 的目录中,每个项目都有一个页面,列出状态和关键信息,状态变化(Potential、Confirmed、Snapshot、Verification、Reward available 或 Distributed)也会被跟踪。这有助于了解项目处于哪个阶段,以及是否真的可能出现领取请求:如果状态并不意味着发放,那么“紧急验证你的钱包”这类要求就值得怀疑。应用中的清单让截止日期一目了然,避免仓促行事。查看跟踪中的空投 →