Appearance
非同质化代币
作者 崔棉大师 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]);