如何更新Solana NFT的freezeAuthority?能否用指定工具库操作?
Solana NFT本质是供应量为1的SPL Token,其freezeAuthority是mint账户的核心权限,用于控制是否能冻结对应的代币账户。更新该权限必须由当前持有freezeAuthority的密钥对签名发起交易,以下是使用指定工具库的实现方案:
一、使用@solana/spl-token库实现
spl-token是Solana官方的SPL Token操作库,可以直接对mint账户的权限进行修改,步骤如下:
- 导入依赖模块
import { Connection, Keypair, PublicKey, sendAndConfirmTransaction } from '@solana/web3.js'; import { updateFreezeAuthority } from '@solana/spl-token';
- 配置核心参数
// Solana网络连接(根据需求切换主网/测试网RPC) const connection = new Connection('https://api.devnet.solana.com'); // 当前持有freezeAuthority的密钥对(需妥善保管) const currentFreezeAuthority = Keypair.fromSecretKey(new Uint8Array([/* 你的私钥数组 */])); // 目标NFT的mint地址 const mintAddress = new PublicKey('NFT_MINT_ADDRESS_HERE'); // 新的freezeAuthority公钥(设为null则移除该权限) const newFreezeAuthority = new PublicKey('NEW_AUTHORITY_ADDRESS_HERE'); // 或 null
- 构建并发送交易
async function updateNftFreezeAuthority() { const transaction = await updateFreezeAuthority( connection, currentFreezeAuthority, mintAddress, newFreezeAuthority, [] // 额外签名者(如果需要) ); const signature = await sendAndConfirmTransaction(connection, transaction, [currentFreezeAuthority]); console.log(`交易完成,签名:${signature}`); } updateNftFreezeAuthority();
二、使用@metaplex-foundation库实现
Metaplex的生态库(如@metaplex-foundation/js)封装了NFT的高级操作,同时也支持底层SPL Token权限的修改,以下是实现方式:
- 导入依赖模块
import { Connection, Keypair, PublicKey } from '@solana/web3.js'; import { Metaplex, keypairIdentity } from '@metaplex-foundation/js';
- 初始化Metaplex实例并获取NFT信息
const connection = new Connection('https://api.devnet.solana.com'); const currentFreezeAuthority = Keypair.fromSecretKey(new Uint8Array([/* 你的私钥数组 */])); const mintAddress = new PublicKey('NFT_MINT_ADDRESS_HERE'); const newFreezeAuthority = new PublicKey('NEW_AUTHORITY_ADDRESS_HERE'); // 或 null // 创建Metaplex实例并设置身份 const metaplex = Metaplex.make(connection) .use(keypairIdentity(currentFreezeAuthority));
- 更新Freeze Authority
Metaplex的Token模块可直接调用底层SPL Token方法,或者通过NFT对象关联操作:
async function updateNftFreezeAuthority() { // 通过mint地址获取TokenMint对象 const mint = await metaplex.tokens().findMintByAddress({ address: mintAddress }); // 更新freezeAuthority const result = await metaplex.tokens().updateFreezeAuthority({ mintAddress: mint.address, newFreezeAuthority, authority: currentFreezeAuthority, }); console.log(`交易完成,签名:${result.response.signature}`); } updateNftFreezeAuthority();
注意事项
- 只有当前的
freezeAuthority持有者才能发起更新交易,否则会报错。 - 将
newFreezeAuthority设为null会彻底移除该权限,后续无法再冻结代币账户。 - 确保使用的RPC节点稳定,测试环境建议使用Devnet,主网操作前请做好测试。
内容的提问来源于stack exchange,提问作者DoHan_Kim
相关产品推荐
相关产品推荐

