
适用范围与核心判断
本文适用于以太坊常见交易与 ERC-20 代币交互,不代表所有钱包和区块链都采用相同规则。Ethereum 交易文档说明了签名交易的字段及合约调用机制;OpenZeppelin ERC-20 文档则区分了转账、授权和代扣权限。风险检查的核心,是确认签名内容与本人意图一致,而不是仅看页面是否写着“转账”。
地址检查:接收对象可能是合约
签名能够证明相关密钥授权了交易,但不能证明接收对象可信。需要分清发送账户、交易目标地址与实际资产接收地址。普通 ETH 转账与代币转账的字段含义并不完全相同。

ERC-20 转账通常调用代币合约,外层 to 是合约地址,实际接收人位于调用参数中。因此,只检查外层地址,无法完整确认代币最终转给谁。

金额检查:区分原生币与代币数量
交易的 value 表示发送的 ETH 数量,不等于合约调用中的代币数量。value 为零,也不能据此判断没有资产转移或权限变化。
代币数量还涉及 decimals 所定义的显示精度。检查金额时,应将代币身份、原始数量和显示精度结合理解,不能把合约中的整数直接当作钱包展示的数量。
权限检查:转账不等于授权
transfer 表示转移代币,approve 则设置 spender 可以代为使用的额度;后续 transferFrom 可在权限范围内转移资产。若原本只是转账,签名内容却出现授权对象与额度,就需要重新辨认操作性质。
授权风险既取决于额度,也取决于权限交给谁。OpenZeppelin 所述实现中,最大整数额度具有无限授权语义。已有非零额度的变更还存在交易排序风险,不能简单理解为新额度会瞬间、安全地替换旧额度。
可读性与费用检查
只有十六进制数据、缺少明确动作和参数的签名提示,会增加盲签风险。可读摘要有助于理解,但函数名称本身不能替代对目标合约、接收人、金额和授权范围的核对。
费用应与转出金额分别理解。gasLimit 是计算资源上限,maxFeePerGas 是每单位 gas 的最高费用,并非最终扣费。合约调用的计算需求也不能直接套用简单转账的情况。
常见问题:免费签名与交易成功
没有立即支付 gas,是否就没有风险?不是。ERC-20 Permit 支持通过签名授予代币使用权限,因此是否当场付费不能作为签名安全的判断标准。
出现交易哈希,是否意味着完成?不是。签名、广播、区块收录与最终确认是不同阶段;已收录也不等于合约执行成功。结果判断还应区分执行状态与实际资产变化,不能只依据钱包弹窗或提交提示。