挂单时弹出来的 EIP-712 签名:那一屏十六进制到底签了什么
在 NFT 市场创建挂单、接受 offer 或批量下架时,钱包经常弹出”签名请求”而不是交易,窗口里是一堆看不懂的字段和哈希。这类弹窗大多属于 EIP-712 类型化结构化数据签名。它不花 gas,但签错内容可能等于把 NFT 白送,所以值得看懂。
它和普通交易签名有什么区别
签一笔交易意味着授权网络执行状态变更;EIP-712 签名的是一段离链数据——你承认”我愿意以某价格、在某期限前、把某 token 卖给任何提交此签名的人”。签名本身不上链,市场把它存进自己的撮合系统,等有买家凑齐条件时代为提交链上 fulfill 交易。这就是为什么挂单免费、成交才收费,也是为什么取消挂单往往也只是”让平台废弃签名”或在合约里调 cancel。
弹窗里应该核对的几层
EIP-712 把数据组织成结构体,钱包会展示 domain(哪个合约、哪条链)和 message(具体订单)。最该看三处:一是 verifyingContract 和 chainId,确认签的对象是你认识的市场合约、主网参数而不是仿冒域名对应的合约;二是 payload 里的 tokenId 或 collection,确认订单指向你准备挂的那件,而不是你钱包里更值钱的其他资产;三是 salt、nonce、起始价、结束价、截止时间这些价格参数,以及 fees 字段列出的费用接收方。很多钱包提供”原始数据”开关,展开后能看到字段原名,建议至少在第一次挂某类单时展开核对。
危险模式
如果一个”免费领取""验证持有者身份”的页面弹出的不是登录签名而是含 orders、fulfill 字段的 EIP-712 数据,且里面出现你的资产 id 和某个平台合约地址,那本质是在让你签一张可被任何人执行的销售单——同意即等于把该 NFT 以签名中写定的最低价开放出售。同理,“cancel all”类按钮签的可能是批量取消,会把你在某平台的全部挂单作废,操作前看清 method 名称。
一个稳妥习惯
签名请求与交易不同,没有链上回滚,签错的”止损”取决于订单是否设了截止时间、能否调用合约取消。因此养成两个习惯:给挂单永远设置合理截止时间;高价值 NFT 挂单前先在一个小额测试环境或低价单上把同一流程走一遍,确认钱包展示与平台文档描述一致,再用于主资产。
为什么市场不直接把订单写进合约
一种直觉是:既然最终要上链,为什么挂单时不直接登记到链上?原因是经济性和隐私。链上登记每单都要交 gas,冷门集合挂单可能几周到无人问津,期间还占用着修改与取消的手续;订单簿放在链下数据库里,改价、撤价、匹配都是免费操作,只有成交那一笔必须上链。代价就是我们看到的这一整套密码学安排——EIP-712 的结构化签名、哈希链、截止时间和 nonce,全部是为了让”链下挂单”具备”链上可执行”的效力。理解了这一点,你就能预判各功能的真实成本:挂单免费、成交上链、“取消”若是平台政策则零成本、若是链上 cancel 则要付一次 gas。任何平台功能说明书,本质上都在描述这套链上链下分工,而不是某个按钮背后的魔法。
签名安全的底线习惯
EIP-712 弹窗不是”看一眼差不多就点”的东西。建议给自己立三条底线:陌生域名一律不签订单类数据;高价值资产永远设置近期截止时间(比如 7 天),宁可到期重挂也不签无限期订单;同一浏览器环境里不并存”钓鱼实验”和主钱包。这三条针对的不是某类特定骗局,而是所有利用信息不对称的签名诱导。签名是 NFT 操作里唯一”零成本却可致命”的动作,给它匹配和转账同等的警惕,是市场老手的共识。
风险提示:本文仅解释签名机制,不构成投资建议。任何签名请求都应逐项核对内容,谨防以授权为名的钓鱼。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。