把 NFT 写进交易记录:RMRK 规范为什么主张不部署合约 图 1
把 NFT 写进交易记录:RMRK 规范为什么主张不部署合约 · 图 1

另一种”NFT 存在”的定义

绝大多数 NFT 的存在形式是”某份合约账本里的一行”,而 Kusama 生态的 RMRK 规范给了另一种答案:NFT 是链上交易记录里的标准化声明。规范仓库把整个体系拆成两类概念:实体(entities)——收藏和 NFT 在铸造时如何声明自己,让工具能识别;交互(interactions)——链下世界与协议之间、NFT 与 NFT 之间、用户与 NFT 之间发生什么。两份 README 合起来读,RMRK 的世界观很清楚:没有每项目一份的智能合约,只有所有人都遵守的一套记录格式。

交互清单值得逐条看:MINT 创建收藏,MINTNFT 在已有收藏里铸出 NFT,CONSUME 烧毁一枚,CHANGEISSUER 更换收藏的所有者,SEND 与 BUY 完成转账交易,LIST 把 NFT 以链上事件的形式挂出卖单,MIGRATE 让一个收藏连同其子 NFT 迁移到新标准版本。这份清单覆盖了一个市场的基本面:发行、销毁、转让、挂单、治理交接——全部由记录动作而非合约函数完成。

LIST 这个动作暴露的取舍

用交易记录挂单和用合约挂单,差别不是效率而是依赖。链上挂单的好处是即时公开、任何索引器都能先于任何平台看到全部卖单,买卖双方不需要信任某个订单数据库;代价是每一笔改价和撤单都是一笔真实交易,冷门收藏的挂单簿会既昂贵又嘈杂,而且挂出的价格对所有市场参与者同时可见,没有自营订单簿那种”先囤一池子挂单再排序”的操作空间。RMRK 在规范里对这类选择的态度是坦率的:标准只保留”与 NFT 交互所需的最少功能”,更多逻辑留给项目自行扩展,并且诚实给出了扩展的样子——README 用一个链上养猫游戏举例:繁殖出的后代 NFT 依然按标准铸造、天然兼容通用工具,但 BREED、HATCH 这类过程是开发者在标准之上自己加的新交互,只有理解了这套自定义规则的应用才看得懂。

一份规范,三条实现

规范文档把实现分成三层:Kusama 链上的交易级实现(把声明塞进普通交易的备注字段)、Substrate 的 pallet 级实现、以及 EVM 实现,并声明抽象规范适用于任何实现。这种”规范与实现分离”的写法比多数 EVM 侧标准走得更远:同一份 JSON 声明在不同链上换载体不换语义。仓库同时按版本保留历史——0.1、1.0.0、2.0.0 各成文件夹,发行说明写明每个新版本都会收录之前的全部标准,实现方可以自选支持的版本组合;工具在解析一条链上声明时,先识别它声明的标准版本号,再套用对应的字段表。

这套模式的适用与不适用

适合的场景:把”链上留痕的收藏与挂单”当作核心诉求、又想让所有工具共享同一套解析器的生态;以及希望 NFT 语义独立于任何单一合约升级路径的长期项目。边界也一并交给你:闭环之外的逻辑要靠项目自行加交互,通用工具看得懂标准代币,却未必看得懂自定义过程。仓库同时把规范切成抽象层与实现层——Kusama 的交易字段实现、Substrate 的 pallet 实现、EVM 实现各自成册,版本按 0.1、1.0.0、2.0.0 分段维护,抽象规范声明适用于任何实现。规范写得克制,没有路线承诺也没有代币叙事;把 README 读完,你对”协议即 NFT”这句话的想象力和边界就都有了;它更像一份写给索引器开发者的建筑图纸,而不是给收藏者的商场导览。具体实现与版本细节以仓库当前内容为准,本文仅作协议科普。