先交指纹后亮牌:ERC-5732 的 commit 接口为什么只有半个函数
公开内存池是透明的:你的交易在打包前就已经被所有人看见。做市机器人可以看见你的买单先塞自己的单,竞拍者可以看见别人的出价再决定要不要加价——这些剧本在 NFT 盲拍和优先铸造里都真实发生过。对付透明最好的武器叫“先承诺、后揭示”:第一轮只交一个谁也猜不出内容的指纹,所有人亮完指纹,第二轮再摊牌。ERC-5732(2022 年 9 月 29 日创建,提案状态 Final 定稿)给这个流程立了一个小得多的标准——小到它只定义了一半。
只有 commit,没有 reveal
接口设计是这份提案最有趣的地方。核心函数只有一个:commit(bytes32 _commitment),可带原生币值;配套的通用接口再补一个 commitFrom,供代付场景表明承诺人。承诺完成时广播 Commit(_timePoint, _from, _commitment, _extraData) 事件。标准正文写得毫不含糊:它只提供 commit 方法而没有 reveal 方法,目的就是让实现方把这个承诺环节嫁接到任意自己定义的揭示动作上——vote、transfer、claim 都可以充当摊牌那一刻。为什么不把 reveal 也标准化?因为揭示的语义太依赖业务:投票要亮出的是选项与随机数,盲拍要亮的是出价,NFT 铸造可能亮的是白名单证明——统一它们等于统一所有协议,标准作者选择了克制。接口识别走 ERC-165,核心标识 0xf14fcbc8,通用扩展标识 0x67b2ec2c。

指纹、时间戳与密码学的分工
_commitment 通常是“真实意图加一个只有你自己知道的随机数”做哈希的结果。密码学性质保证了三件事:你不能事后改口,因为揭示值必须对得上当初的指纹;别人不能提前偷看,因为反向破解哈希在计算上不可行;也不能伪造,因为没交过指纹的人到揭示环节拿不出匹配的材料。事件里的 _timePoint 承担另一半职责——给承诺定序,配合项目规则切出“截止前进入的指纹都算数”的时间线。对普通用户,它带来的体验变化很直白:一个正常运行的 commit-reveal 铸造里,机器人无法在第一批参与者的秘密出价曝光前插队,公平性来自结构而不是来自项目方的口头保证。
识别真假“防抢跑”
标准定稿了,但它的采用率远不如热门标准,多数项目要么写私有实现,要么只做了“看起来像”的两阶段。鉴别方法可以很操作化。看第一步:承诺交易是否真的上链,浏览器里找不到任何 Commit 类事件、只让你填个表单的“盲拍”,透明度和没有两阶段没有区别。看第二步:揭示校验是否强制核对 commitment 匹配——有的项目两阶段只是心理战术,指纹对不上照样接受,等于没防住任何事。还有一个常见误区要拆开:commit-reveal 与白名单的 Merkle 证明解决的是两个问题,前者对抗的是“看见彼此动作后的策略操控”,后者核验的是“资格”,两者可以同时出现在一个 mint 流程里,别把宣传混为一谈。参与任何需要签名的揭示交易前,照例确认域名与合约地址与官方公告一致。本文只解释机制,不预测任何拍卖结果,也不构成投资建议。
一次盲拍的完整走账
抽象机制放进具体流程最容易检验。设想一场三小时盲拍:第一阶段,参与者各自选出价金额并配一个只有本人知道的随机盐值,算哈希后调用 commit,链上出现 Commit 事件和一个 timePoint 编号,所有人的指纹在同一截止线前锁进同一批区块;第二阶段,参与者把原始出价与盐值一起提交给项目定义的揭示函数,合约重算哈希并对照当初的承诺,对不上的揭示作废,对得上的按出价排序成交。对没参与的人,这套流程的可验证性在于:任何人能拉出全部承诺记录,检查自己的指纹是否在截止前入链;能检查成交者的揭示是否与指纹严格一致;能发现任何“截止后追加的参与者”不可能存在——没有指纹的出价根本进不了第二阶段。风险点也各有归处:盐值强度决定第一阶段秘密性,用可猜测的数字等于公开出价;第二阶段揭示函数若有绕过哈希校验的后门,前面全白做,所以浏览器里对着合约看一次 reveal 路径的校验逻辑,比读十段白皮书可信。标准只保证第一段指纹有统一形状,第二段的诚实要靠合约实现接受过审计。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。