Skip to content

非同质化代币

作者 崔棉大师 X:@MasterCui Youtube: 崔棉大师

知识点

  • 非同质化代币 (NFT)在 Solana 上表示为 SPL 代币,具有关联的元数据帐户,精度为0,最大供应量为 1
  • 小数位为 0,因此无法分割
  • 供应量为 1,因此仅存在 1 个此类代币
  • 铸造1个代币后,销毁铸造权限确保供应量永远不会增发

课程

1. 创建 mint 账户

js
// 创建Token,精度为0
const mint = await createMint(
  connection, // 链接
  payer, // 支付账户
  mintAuthority, // 铸造账户地址
  freezeAuthority, // 冻结账户地址
  0 // 小数点精度
);

2. 创建 ATA 账户

js
// 创建ATA账户
const associatedTokenAccount = await getOrCreateAssociatedTokenAccount(
  connection, // 链接
  payer, // 支付账户Keypair
  mint, // mint账户公钥
  owner // ATA账户的所有者
);

3.铸造 1 个 Token

js
const mintSig = await mintTo(
  connection, // 网络链接
  payer, // 支付账户
  mint, // token地址
  destination, // Ata地址
  authority, // 铸造权限
  1 // 数量为1
);

4. 删除设置权限

完整代码

js
const ix = createSetAuthorityInstruction(
  tokenMint, // mint账户地址
  payer.publicKey, // 原权限地址
  AuthorityType.MintTokens, // 权限类型
  null // 新权限地址
);

5.完整过程

完整代码

js
// 创建Token,精度为0
const tokenMint = await CreateMint(
  connection, // 链接
  payer, // 支付账户
  payer.publicKey, // 铸造权限
  payer.publicKey, // 冻结权限
  0 // NFT的小数点精度为0
);
// 创建ATA账户
const associatedTokenAccount = await Ata(
  connection,
  payer,
  tokenMint,
  payer.publicKey
);
// 向ATA账户铸造1个Token
await MintTo(
  connection, // 链接
  payer, // 支付账户
  tokenMint, // mint账户
  associatedTokenAccount, // ATA账户
  payer, // 铸造权限
  1 // 数量为1
);
// 创建设置权限为空的指令交易
let tx = AddTransaction(
  CreateSetAuthorityIx(
    tokenMint,
    payer.publicKey,
    AuthorityType.MintTokens,
    null
  )
);
// 发送交易
await SendAndConfirmTx(connection, tx, [payer]);