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

如何通过candy machine铸造的NFT查询对应candy machine ID

回答

结论:完全可行,所有通过官方Candy Machine(以下简称CM)铸造的NFT,都可以通过其mint地址反查对应的CM ID,全程只需要查询Solana公开链上数据,不需要特殊权限。

实现方法

核心逻辑是:CM铸造NFT的过程会在链上留下不可篡改的交易痕迹,顺着mint地址的最早铸造交易溯源,就能100%定位到对应的CM地址,目前常用两种实现路径:

  • 交易溯源法(准确率100%,适配所有CM版本)
    1. 拿到NFT的mint地址后,查询该地址关联的所有链上交易,按时间戳排序找到最早的那笔交易——也就是NFT被铸造出来的那笔初始交易,排除后续转账、挂单、转赠类的后续交易。
    2. 解析这笔初始铸造交易的指令列表,找到调用官方CM程序(v1/v2/v3版本的CM程序ID为Solana主网公开固定值)的铸币指令,该指令传入的配置账户地址,就是你要找的CM ID。
  • PDA推导法(仅适配CMv3版本,速度更快)
    CMv3版本会为每个铸造出来的NFT生成一个关联PDA账户,该PDA的派生seeds里直接包含CM ID,可以直接通过mint地址按官方规则推导关联PDA地址,解析后直接拿到CM ID,不需要遍历历史交易。

代码实现参考(核心逻辑伪代码)

import { Connection, PublicKey } from '@solana/web3.js'
import { Metaplex } from '@metaplex-foundation/js'

// 初始化RPC连接
const conn = new Connection("你的Solana RPC节点地址")
const mx = Metaplex.make(conn)
const nftMintAddr = new PublicKey("你持有的NFT mint地址")

// 交易溯源法核心逻辑
async function getCandyMachineId(mintAddr) {
  // 获取该mint地址的所有交易签名
  const sigs = await conn.getSignaturesForAddress(mintAddr, { limit: 100 })
  // 取最早的一笔铸造交易
  const mintTx = await conn.getParsedTransaction(sigs.at(-1).signature, "finalized")
  // 遍历交易指令,匹配CM程序调用,提取对应CM账户地址即可
  // 不同CM版本的指令偏移量不同,匹配对应版本的指令结构就能直接读出CM ID
}

注意事项

  • 如果NFT铸造后被项目方更新过元数据、或者被第三方协议包装过,不要用当前NFT元数据里的创建者地址直接判断,一定要以最早一笔铸造交易的解析结果为准,这个信息是上链后无法篡改的。
  • 部分第三方魔改的非官方CM合约可能会抹掉指令里的CM地址,但这类不属于官方CM的范畴,正常发行项目用的官方CM都可以通过上述方法查到。

内容的提问来源于stack exchange,提问作者Hassan Sheikh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 07:30:52