MultiversX 的原生 NFT:角色、nonce 与一行数据字段里的转账 图 1
MultiversX 的原生 NFT:角色、nonce 与一行数据字段里的转账 · 图 1

MultiversX 的原生 NFT:角色、nonce 与一行数据字段里的转账

不发合约也能有 NFT

MultiversX 的 token 标准叫 ESDT,规范文档强调它是协议原生支持:同质化、半同质化(SFT)和非同质化(NFT)三种形态都能在不需要虚拟机跑合约代码的情况下完成发行与转账,速度和处理能力对齐链上的原生 EGLD。NFT 与 SFT 的做法是在已有同质化 token 的基础上加元数据、属性和可赋值的 URI。

官方给出的流程是四步:注册(发行)token、给某个地址授予角色、创建 NFT、然后转移数量。这里的关键是“角色”:权限不是写死在一份合约里,而是由 token 管理者通过交易赋给某个地址,可以逐个添加或移除。

MultiversX 的原生 NFT:角色、nonce 与一行数据字段里的转账 图 2
MultiversX 的原生 NFT:角色、nonce 与一行数据字段里的转账 · 图 2

权限是一串角色名,不是 owner 一把梭

针对 NFT,文档列出的角色包括 ESDTRoleNFTCreate(创建)、ESDTRoleNFTBurn(销毁)、ESDTRoleNFTUpdateAttributes(改属性)、ESDTRoleNFTAddURI(追加 URI)、ESDTTransferRole(限制可转账目标)、ESDTRoleNFTUpdateESDTRoleModifyRoyalties(改版税)、ESDTRoleSetNewURIESDTRoleModifyCreatorESDTRoleNFTRecreate 等。

这份清单对买家很有信息量:一枚藏品的可变性,取决于发行方被赋予了哪些角色、这些角色现在还在谁手上。比如“改属性”与“改创建者”是两个不同的角色,前者意味着元数据字段可能被改,后者意味着链上记录的作者字段可能被重写。这些都不是靠“项目方口头承诺”判断的,而是账本上可查的角色配置。文档还说明,只有创建时被设为可升级的 ESDT,管理者才能改它的属性。

另外有个硬约束值得记住:ESDTRoleNFTAddQuantity 只对 SFT 有效,NFT 的数量不能大于 1。想做“同一款发行多份”,正确工具是 SFT 而不是 NFT。

转账写在一个数据字段里

ESDT 的 NFT 转账形如 ESDTNFTTransfer,后面依次用十六进制编码带上集合标识、这枚 NFT 的 nonce、要转的数量和收款地址;如果要给合约传数据,还可以继续追加方法名和参数。每枚 NFT 在一个集合内靠递增的 nonce 区分,token 标识则要从创建交易的结果中获取。因为 NFT 数量恒为 1,看到“数量为 1”不是提示,而是这个模型的固有事实。

如果担心合规处置,协议还提供了对某个地址上单枚 NFT 的冻结与解冻(freezeSingleNFT),文档说明这类操作是为了帮助 token 管理者满足监管要求。换句话说,在原生资产模型里,“某人的某枚被冻住了”是协议层状态,而不是合约里的一个黑名单映射。

三个常见误区

第一,把“不需要合约”误解为“没有管理方”。恰恰相反,角色体系意味着存在管理者地址和被赋权地址,安全评估要看的是这些地址的私钥与治理安排。第二,把 SFT 当成 NFT:SFT 的一个批次内是可互换的,稀缺叙事完全不同。第三,忽略 ESDTTransferRole:如果发行方设置了转账角色限制,你的藏品可能只能转给指定地址(比如官方市场合约),这会影响你自主移仓的自由度。

顺带说明文档里的 Meta ESDT:它是 SFT 的特例,像同质化 token 一样带数量,又能挂属性,常用于锁仓释放日程这类场景,不属于 NFT 范畴。

把角色表读成风险表

如果允许把这份权限清单翻译成人话:ESDTRoleNFTCreate 回答“还能不能再发”,ESDTRoleNFTUpdateAttributesESDTRoleSetNewURI 回答“描述会不会变”,ESDTRoleModifyCreator 回答“作者栏会不会被改”,ESDTTransferRole 回答“我能不能随意搬走它”。一枚 MultiversX 藏品的自由度与风险,几乎逐项写在这几张角色牌的去向里。评估任何一款 MultiversX NFT 项目时,把这五问列成清单逐项查链上,比读十篇项目介绍更接近事实。

风险提示:本文只解释技术机制与操作边界,不构成投资建议,也不推荐任何项目或平台。链上规则可能随版本升级变化,判断以官方规范文本与链上实际代码为准。