今天在以太坊领一个免费 NFT,常见姿势是项目方发一个签名、你在领取页确认,一次交易领回一批。这套“签名认领”的模式在标准层面试水很早——ERC-875,一份 2018 年提出、如今挂在标准索引里、状态标注为 Withdrawn(已撤回)的早期 NFT 提案。它输掉了标准之争,但它的设计几乎预言了后来的交互习惯。
ERC-875 的自我定位是“更简单的 NFT 标准,带批量处理与原生原子交换”。它复用了 ERC-721 熟悉的函数名,却在接口签名上做了大胆改动:直接承认“一个人可以同时持有一批资产”,并把批量写进函数签名,整个接口还声明继承 ERC-165 的 supportsInterface 查询。最直观的是 balanceOf——ERC-721 里返回一个整数,ERC-875 的函数签名直接返回 uint256 数组,一次列出持有人全部资产的编号。配套的批量接口有 approve 一个数组、setApprovalForAll 整批、transfer 与 transferFrom 按 id 数组一次搬走多件,以及总供应量与按 id 查持有人。这套数组化的核心函数就是它区别于 721 的地方,也是“批量”一词的落点:非同质资产第一次在接口签名层面被当成可打包的对象。
真正有意思的是 trade 函数:trade 接受一个到期时间戳、一组资产 id 数组,外加 v、r、s 三个签名分量,并且是 payable 的。规范原文写明其意图:卖家在链下签一份存证,内容涵盖要卖出的资产数量与编号、合约地址、到期时间戳、价格,外加一个包含标准名与链 id 的前缀——后几项专为止重放与防“骗签”而设。买家把这份签名连同足额 ETH 提交给任何实现该接口的合约,一笔交易完成点对点换物,订单在下链前无需写进合约,到期时间戳保护卖家不被翻出旧单。签名不指向具体买家地址的设计,意味着这份“授权换物凭证”可以转手、可以在链下流转,任何人拿到都能执行——这正是后来各种免费 claim、白名单领取所依赖的结构:资产方签一份东西,领取方提交签名,兑换在合约里原子完成。
为什么它没有活到今天?文档本身没给出原因,只有元数据里一行 status: Withdrawn 说明作者已把它撤回。从生态走向看,答案是路线竞争:ERC-721 与后来的 ERC-1155 赢得了钱包、市场与索引器的默认支持,批量与离线签名的思想被各家实现分头吸收,唯独统一的 875 接口没有普及。它还有一个时代注脚:文档挂出的示例实现部署在 Rinkeby 测试网(地址 0xffab…0005),而 Rinkeby 本身早已退役——提案连同它的试验场一起留在了上一代测试网里。
把 875 和今天的领取实践并排,谱系就清楚了。它当年的 trade 签名绑定的是“一批资产编号、价格、到期时间,外加链 id 与合约地址”,今天的 claim 签名绑定的多是“白名单叶子编号加数量上限加过期区块”,骨架同源:链下签一张有限期的兑换凭证,链上一笔交易验证并完成移转,执行者可以是任何人。差异在约束粒度:2018 年的签名一次锁一整批,现代方案普遍用更细的粒度换取更强的防重放与配额控制。对读者的两条实用提醒:其一,Withdrawn 只说明标准层不再推进,不意味着链上不存在已部署的 875 实现——碰到老合约时,交互界面以那份合约实际暴露的函数为准,拿 ERC-721 的预期去调它可能直接报错,数组版 balanceOf 与单数版就不兼容。其二,签名认领类操作永远先读签名内容:绑定对象、有效期、数量,这三项在任何一代标准里都构成安全边界。
读它的价值在认知层。第一,今天被视为“默认”的 NFT 交互——一件一件 approve、一件一件 transfer——是路线竞争的结果,不是唯一可能;“一次签一签、批量领一堆”同样是有人在 2018 年就系统化提出过的方案。第二,看到 claim 页面索要签名时,可以借 875 的思路自问:签名绑定了什么(资产、数量、到期、接收地址),不绑定什么——签名内容决定授权边界,这一点在 875 与今天的领取标准里是同一条安全线。本文为机制史说明,不构成任何投资建议。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。