Sui JS SDK 打造 NFT 全教程:零基础也能十分钟上链

·

核心关键词:Sui NFT、Sui JS SDK、IPFS Pinata、铸造 NFT、Sui Devnet、Move 合约、动态元数据、链游开发、去中心化存储、Web3 JavaScript


为什么选择 Sui?

作为新一代高性能公链,Sui 不仅交易确认不到 1 秒,还把「动态元数据」和「对象模型」玩出了花。开发者只需要 JavaScript 基础即可上手。下文会以 Devnet 为例,手把手带你用 60 行代码完成 Sui NFT 铸造


准备工作

👉 想一步到位?这里有一份浓缩版的完整代码片段可以直接复制运行。

步骤 1:用 Pinata 上传媒体并生成元数据

Sui 支持动态元数据,但图片、视频依然需要去中心化存储。IPFS PIN 服务 Pinata 是首选,防篡改、免费额度充足。

  1. 注册 Pinata 并登录。
  2. Upload → File → 选择文件 → 命名 → Upload
  3. 复制生成的 CID(形如 QmZhnkim…),稍后在代码里使用 ipfs://CID 调用。

步骤 2:初始化项目与安装依赖

mkdir sui-nft && cd sui-nft
npm init -y
npm install @mysten/sui.js

修改 package.json,添加 type: "module" 以支持 ES Module:

{
 "name": "sui-nft",
 "type": "module",
 "dependencies": {
   "@mysten/sui.js": "^0.46.1"
 }
}

创建脚本文件:

touch mint-nft.js

步骤 3:生成钱包与地址

mint-nft.js 头部引入依赖并创建 Ed25519 密钥对:

import { Ed25519Keypair, JsonRpcProvider, Network, RawSigner } from '@mysten/sui.js';

const keypair = new Ed25519Keypair();
const address = keypair.getPublicKey().toSuiAddress();
console.log('地址:', address);

终端运行:

node mint-nft.js

出现 0x... 即为成功。


步骤 4:领取 Devnet 测试币

继续补充代码,连接到 Devnet 并请求空投:

const provider = new JsonRpcProvider(Network.DEVNET);
const fund = await provider.requestSuiFromFaucet(address);
console.log(fund);

空投返回 5 个独立对象,每个 0.01 SUI,后续可通过合并减少对象碎片。


合并测试币

对象的“奶牛模型”意味着必须先把 NFT Gas 统一到一个对象:

const wait = ms => new Promise(res => setTimeout(res, ms));
await wait(3000);               // 等待节点确认
const signer = new RawSigner(keypair, provider);
const mergeTxn = await signer.mergeCoins({
  primaryCoin: fund.transferred_gas_objects[0].id,
  coinToMerge: fund.transferred_gas_objects[1].id,
  gasBudget: 10000
});
console.log('合并交易:', mergeTxn);

正式铸造 NFT

调用官方示例模块 devnet_nft::mint,传入名称、描述与 IPFS 链接:

const mintTxn = await signer.executeMoveCall({
  packageObjectId: '0x2',
  module: 'devnet_nft',
  function: 'mint',
  arguments: [
    'GM Morning',
    '由 Pinata 上传,Sui 铸造的早安问候 NFT',
    'ipfs://QmZhnkimthxvL32vin2mrQvnhN8ZbWFMvKMxRqHEq7dPz3'
  ],
  gasBudget: 15000
});

const nftId = mintTxn.effects.created[0].reference.objectId;
console.log(`浏览器查看:https://explorer.sui.io/object/${nftId}?network=devnet`);

终端执行:

node mint-nft.js

出现绿色链接即铸造完成!可点开查看元数据与多媒体。


常见问题 FAQ

Q1:我要用到主网时如何切换?
A:把 Network.DEVNET 改为 Network.MAINNET 即可,注意邮箱在主网存证真正的 SUI 代币。

Q2:CID 填错或图片更新后怎么办?
A:重新上传 Pinata 获取新 CID,然后再次调用合约即可;IPFS 无中心化删改风险。

Q3:Gas 不足导致合并失败怎么办?
A:Devnet 可重复申请水龙头;正式网络需确保钱包里 0x2::sui::SUI 充足。

Q4:如何批量铸造?
A:把 mintTxn 封装进循环,或部署自定义 Move 合约调用 batch_mint

Q5:为何我在浏览器看不到 NFT?
A:多数时候是 CID 路径格式问题,请使用正规格式 ipfs://CID 而非 ipfs.io/ipfs/CID


扩展玩法

👉 想一站式体验链游资产跨链流转?点我一步直达。

至此,一张真正上链、可溯源、可转让的 Sui NFT 已诞生。下一步你可以尝试部署自己的 NFT 系列合约,或在市场挂单让全球玩家交易。祝你 Web3 之旅安全、顺滑!