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

求助:为Metaplex Candy Machine UI添加剩余NFT计数器与已铸NFT展示

解决Candy Machine UI剩余NFT计数器与铸造区块展示问题

一、获取剩余/已铸造NFT数量的核心方法

Metaplex的Candy Machine合约本身存储了关键铸造数据,可通过官方SDK直接从链上读取:

  • 使用@metaplex-foundation/js SDK获取Candy Machine状态:
    import { Metaplex, keypairIdentity } from "@metaplex-foundation/js";
    import { Connection, clusterApiUrl } from "@solana/web3.js";
    
    // 初始化链连接与Metaplex实例
    const connection = new Connection(clusterApiUrl("mainnet-beta"));
    const metaplex = Metaplex.make(connection).use(keypairIdentity(yourKeypair));
    
    // 通过Candy Machine地址拉取数据
    const candyMachine = await metaplex.candyMachines().findByAddress({
      address: candyMachineAddress,
    });
    
    // 提取并计算核心数值
    const totalSupply = candyMachine.data.itemsAvailable.toNumber();
    const mintedCount = candyMachine.itemsRedeemed.toNumber();
    const remainingCount = totalSupply - mintedCount;
    
    这段代码直接读取合约的itemsAvailable(总供应量)和itemsRedeemed(已铸造数量),计算后即可在UI中渲染剩余NFT计数。Candy Machine v2/v3字段命名一致,SDK会自动兼容版本差异。

二、获取已铸造NFT的区块信息

每个NFT的铸造交易都关联区块数据,可通过两种方式获取:

1. 通过NFT地址回溯铸造交易区块

拿到NFT的mint地址后,查询其metadata地址的创建交易:

// 假设已获取目标NFT的mint地址
const nft = await metaplex.nfts().findByMint({ mintAddress: nftMintAddress });
const metadataAddress = nft.metadataAddress;

// 查询该metadata地址的首个交易(即铸造交易)
const transactions = await connection.getSignaturesForAddress(metadataAddress, {
  limit: 1,
  order: "desc",
});

if (transactions.length > 0) {
  const txSignature = transactions[0].signature;
  const txDetails = await connection.getTransaction(txSignature);
  const blockNumber = txDetails?.slot; // 区块号
  const blockTime = txDetails?.blockTime; // 区块时间戳
}

2. 监听铸造事件实时获取区块

若需实时展示最新铸造的NFT区块,可订阅Candy Machine的Mint事件:

// 订阅Candy Machine的铸造事件
metaplex.candyMachines().subscribeToMintEvents({
  candyMachineAddress,
  onEvent: (event) => {
    const { mintAddress, slot } = event; // slot即为区块号
    // 在此更新UI展示区块信息与新铸造NFT
  },
});

三、UI集成注意事项

  • 数据缓存:链上读取存在延迟,建议对totalSupply、mintedCount做10秒左右的短缓存,减少节点请求频率。
  • 错误处理:交易未确认时getTransaction可能返回null,需添加加载状态判断。
  • 环境适配:测试网(devnet/testnet)与主网需切换对应节点URL,可使用clusterApiUrl或自定义节点地址。

四、官方参考依据

Metaplex官方SDK的candyMachines与nfts模块,详细定义了状态获取与交易查询的方法。此外,Candy Machine合约的核心结构体也明确了关键字段:

// Candy Machine v3合约核心结构体示例
pub struct CandyMachine {
    pub authority: Pubkey,
    pub wallet: Pubkey,
    pub token_mint: Option<Pubkey>,
    pub items_available: u64,
    pub items_redeemed: u64,
    // 其他字段...
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 21:03:18