You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用TypeScript实现元数据Uses标签并解决NFT铸造报错

问题根因

Uses doesn’t have schema schema.uses.uses报错由TS端传参结构错误触发:传入createMetadata指令的uses字段多嵌套了一层对象,Borsh序列化时会按照传入的嵌套结构去找不存在的schema.uses.uses序列化规则,直接抛出异常,和链上逻辑无关。

正确配置步骤(TS)
  • 排查现有传参,删除多余的uses嵌套层级。绝大多数触发该报错的写法都是错误嵌套了结构,参考如下错误示例:
// 错误写法:多嵌套一层uses,直接触发目标报错
const wrongUsesConfig = {
  uses: {
    useMethod: "burning",
    remaining: 10,
    total: 10
  }
}
  • 导入官方SDK的类型和枚举,避免硬传字符串、数值导致的不匹配,平铺配置uses字段,参考正确示例:
import { 
  CreateMetadataAccountArgsV3, 
  UseMethod 
} from "@metaplex-foundation/mpl-token-metadata";

const nftMetadataArgs: CreateMetadataAccountArgsV3 = {
  data: {
    name: "NFT名称",
    symbol: "NFT符号",
    uri: "元数据JSON存储地址",
    sellerFeeBasisPoints: 500, // 对应5%版税
    creators: [/* 你的创作者地址配置数组 */],
    collection: null,
    // uses字段直接平铺在data下,不要额外嵌套
    uses: {
      useMethod: UseMethod.Burn, // 对应burn销毁模式,不要传字符串"burning"
      remaining: 5n, // u64类型必须传bigint,传普通number会序列化失败
      total: 5n, // 规则要求total值必须大于等于remaining值
    }
  },
  isMutable: true,
  collectionDetails: null
}
  • 版本适配注意:如果使用v2.x+版本基于Umi的mpl-token-metadata,枚举导入路径不变,字段结构同样要求平铺,禁止额外嵌套;如果是v1.2及以下旧版本SDK,手动构造指令时要确认序列化schema引用的是MetadataSchema.DataV2.uses,不要自定义层级。
其他避坑点
  • remaining和total字段是链上定义的u64类型,必须传bigint值,传普通数字即使不抛schema错误,链上反序列化也会失败
  • 不要给useMethod传自定义字符串,SDK内部枚举值UseMethod.Burn对应数值0、UseMethod.Multiple对应1、UseMethod.Single对应2,直接导入枚举传参是最稳妥的方式
  • 如果手动实现序列化逻辑,注意Uses结构体的序列化顺序固定为:1字节useMethod枚举值 → 8字节remaining(小端u64) → 8字节total(小端u64),顺序错乱也会触发schema匹配错误

内容的提问来源于stack exchange,提问作者Nayib

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 11:36:19