铸造和销毁也该有个标准动作:ERC-5679 给 mint、burn 定了统一签名 图 1
铸造和销毁也该有个标准动作:ERC-5679 给 mint、burn 定了统一签名 · 图 1

铸造和销毁也该有个标准动作:ERC-5679 给 mint、burn 定了统一签名

如果你在不同 NFT 项目之间跳转过,大概率见识过“发行方自由发挥”的现场:有的项目叫 mint,有的叫 _mint 留内部用,有的把铸造藏在 transferFrom(0x0, ...) 里,销毁则常见“转进黑洞地址”的土办法。功能上好像都实现了,工具侧却是灾难——钱包、索引器、数据分析面板要为每个项目写一套识别逻辑,供应量的加加减减也随时记错账。ERC-5679(2022 年 9 月 17 日创建,提案状态 Final 定稿)的目标就是把“铸”和“毁”这两个改变供应量的动作收进统一签名。

三条线各一张接口表

标准给三条主流代币轨道各开了一份必答题。给 ERC-20 扩展时,合约要有 mint(_to, _amount, _data)burn(_from, _amount, _data) 两个函数,接口标识 0xd0017968。给 ERC-721 扩展时,铸造侧是 safeMint(_to, _id, _data)——注意 safe 前缀,意味着铸造同样要执行接收方检查;销毁侧是 burn(_from, _id, _data),标识 0xcce39764。给 ERC-1155 扩展时则多了批量版本:safeMintsafeMintBatchburnburnBatch,标识 0xf4cedd5a。三条线共享同一条事件纪律:铸造时要像代币从 0x0 发出一样发 Transfer 类事件,销毁时像转给 0x0 一样发事件。那个统一的 _data 尾参数值得多说一句:它把“铸造时附带什么上下文”(比如引用信息、白名单证明)留成了自由字段,标准不做规定,只保证函数入口形状一致。

铸造和销毁也该有个标准动作:ERC-5679 给 mint、burn 定了统一签名 图 2
铸造和销毁也该有个标准动作:ERC-5679 给 mint、burn 定了统一签名 · 图 2

为什么不直接借用转账函数

标准正文给出的理由有两层。第一层是账本:转账不改变供应量,铸造和销毁改变,把它们混在同一批函数里,索引器就必须靠“对手地址是不是零地址”这种启发式规则猜业务性质,容易出错。第二层是权限:转账遵循的是“持有人授权”逻辑,而铸造和销毁的准入规则通常完全不同——可能只有管理员角色、可能只有持有控制权的地址(这正是 ERC-7303 用控制代币做权限的思路来源之一)、也可能按公开名单核验。把两类权限塞进同一个函数,最容易长出“用户转账路径上混进管理特权”的安全事故。统一成 safeMint/burn 后,审计和自动化工具至少能一眼定位改变供应量的代码入口。

已经定稿,不等于你面对的合约就支持

Final 的身份让 5679 有资格被称为“规范”,但规范管不住存量世界:绝大多数已上线的 NFT 合约并不实现这些函数。核验方法与其他扩展一致——用 ERC-165 探测对应的接口标识,或者直接在区块浏览器对着合约试着调用。同时要破除一个误解:某个合约实现了 5679,绝不意味着任何人都能调用 mint;恰恰相反,一个设计正常的实现会把访问控制收紧到少数地址,普通用户看到的公开铸造入口往往另有其人(比如带价格与限额的 publicMint)。数据消费者可以把这条标准当成一份“最小说明书”:实现它就等于承诺“铸造销毁都留了标准形状的脚印”,读账的人不必再考古每个项目的私有习惯。对只想安心持仓的读者,这次核验的价值在于知道有这份 Final 标准的存在,以及去哪里查自己手里的合约是否遵守。本文只解释协议机制,不构成任何铸造、销毁或买卖建议。

供应量审计为什么因此变简单

数据团队核对“这个项目到底铸过多少”的老流程是考古:扫全部 Transfer 事件,把从 0x0 流出的记加、流向 0x0 的记减,再祈祷没有项目用私有函数铸造。5679 的事件纪律使这条流水线的命中率接近百分之百——只要合约实现标准,供应量的每次增减都伴随形状统一的事件,跨项目的统计脚本可以复用同一段解析代码。更进一步的是函数入口的审计价值:自动化扫描器只要检查合约是否存在名为 safeMintburn 的外部函数、其访问修饰符是什么,就能对“谁能凭空造币、谁能销毁别人的币”给出结构化答案;反之,一个把铸造藏在转账函数特判里、把销毁做成黑洞转账的合约,任何自动审计都只能标记为“需人工确认”。这也解释了为什么标准对 _data 参数保持沉默:接口统一的是形状与事件,权限模型仍是各项目的设计自由,5679 只是让自由的选择变得可扫描。对普通读者,这个视角的用处是看懂审计报告里“mint 权限已移交多签”之类的结论从何而来——往往就是从这几个入口函数读出的。