ERC-1948 数据代币:writeData 往 NFT 里塞 32 字节
一枚 NFT 除了编号和一张图,还能不能携带一块可以反复改写的随身数据?ERC-1948(ethereum/ERCs 仓库,状态 Stagnant,2019 年 4 月创建)在 ERC-721 之上给出了最省的答案:每个代币配一个 bytes32 抽屉,一个函数读,一个函数写,外加一条事件记账。
一对函数,一条事件
接口总共三样东西:readData(uint256 tokenId) 返回当前存的 bytes32;writeData(uint256 tokenId, bytes32 newData) 覆盖写入,权限由具体合约判定;两者之间靠 DataUpdated 事件连接,旧值与新值一起入日志,谁改的、从什么改成什么,链上可回放。标准文本特意提示:新旧值都可能是空字节,事件不代表内容“有意义”,只记录状态更替。

32 字节能装什么,装不了什么
bytes32 是 256 位,32 个字节——够装一个 32 位地址的哈希前缀、一组权限位标志、一个内容哈希截断、一条计数器的当前值。装不下图像、长文本、JSON。它的设计意图从来不是“代币带文件”,而是把必须被链上合约实时读取的最小状态钉在代币身上,让任何合约转账前顺手查一眼,比如某枚身份徽章此刻是否有效、某个许可此刻开没开某个开关。
读它当历史标本,也读它的警世部分
从 writeData 到今天的状态设计
把 ERC-1948 当作刻度尺,能丈量“可写 NFT”这十年的路线演化。它选择的方案——固定 bytes32 槽位、覆盖式写入、事件留痕——是链上状态最诚实的形态:改一次付一次 gas,旧值永久躺在 DataUpdated 事件里,任何人都能重建状态时间线。后来的方案各自绕开了它贵的一面:变体属性走事件日志(如 ERC-7496 的动态属性,读侧靠索引器重建当前值),装备走槽位绑定(ERC-6220 一类),稀有度与状态走索引器加展示层缓存。省 gas 的代价往往是审计性的稀释——日志可以被不同索引器读歪,缓存会与链上脱钩。1948 式方案则一直保留着反脆弱的对照价值:状态在 storage 里的东西,不需要信任任何中间层就能读到唯一真相。所以今天评估任何“状态型 NFT”,值得先问一句有没有类似 readData 的单一存储真相源;答案若是“状态在事件里,请查某某 API”,不等于它错了,但意味着你把对索引器的信任加进了风险清单。这一格信任如何定价,正是这份 Stagnant 提案留给后人的真问题。
32 字节的替代方案速查
给需要“代币带状态”的读者一张路线参考。状态只有一两个标志位:自定 storage 字段加事件,1948 式思路仍成立。状态是可展示属性:走动态属性事件类标准,交给索引器重建。状态是大对象:留链下哈希,链上存哈希前缀即可。状态需要被其他合约高频读取:优先放在独立注册表合约,让批量查询便宜。四种方案没有优劣,只有信任与成本的再分配。1948 的价值在于它把这个光谱第一次摊开在 ERC-721 旁边,告诉后来者:给代币加状态不是写不写得出的问题,而是每一格状态你愿意付多少钱、给谁看的问题。
顺带划一条线:writeData 的权限判定完全留给实现合约,标准本身不规定谁能写。评估一份 1948 式代币时,把“写入者名单”当作第一问,比讨论 32 字节的容量更有实际意义。
这份提案年份早、作者来自托管协议项目,最终停在 Stagnant。回看它的价值在两处。其一,它示范了“可写代币”的成本结构:每次 writeData 都是一笔交易,改一次状态付一次 Gas,频繁改写的玩法在以太坊主网从来划不来,这也是同思路后来被压缩 NFT、事件索引替代的原因之一。其二,它提醒一个至今有效的核对习惯:任何声称“状态在链上”的 NFT,先问状态存在哪——是这段 bytes32,还是合约内某映射,还是其实躺在网页数据库。查不到 DataUpdated 历史的项目,等于把状态可审计性放弃了。它说明代币可以附带可审计的最小状态,不说明状态由谁背书。本文不构成投资建议。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。