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

Candy Machine mintV2调用失败:candy_guard账户未初始化求助

问题原因
  • 你的Candy Machine V3已配置Candy Guard,但前端调用mintV2时传入了candyGuard: undefined,导致mplCandyGuard程序无法找到对应Guard账户,触发错误码3012(账户未初始化)。
  • 虽然你通过safeFetchCandyGuard获取了Guard实例,但未在mint交易中正确传入Guard地址,同时缺少对start date Guard约束的验证逻辑。
解决方案
  1. 确保成功获取有效Candy Guard实例,并在mint交易中传入正确的Guard地址。
  2. 针对配置的start date Guard,在交易中添加对应的验证步骤(Umi的mplCandyMachine库可自动处理,但需正确传入参数)。
修改后的代码

更新getCandyMachineState(增加Guard存在性校验)

const getCandyMachineState = async () => {
  try {
    if (process.env.NEXT_PUBLIC_SOLANA_RPC_HOST && process.env.NEXT_PUBLIC_CANDY_MACHINE_ID) {
      const umi = createUmi(process.env.NEXT_PUBLIC_SOLANA_RPC_HOST)
        .use(walletAdapterIdentity(walletAddress))
        .use(nftStorageUploader())
        .use(mplTokenMetadata())
        .use(mplCandyMachine());
      const candyMachine = await fetchCandyMachine(
        umi,
        publicKey(process.env.NEXT_PUBLIC_CANDY_MACHINE_ID),
      );
      // Sugar创建的CMv3中,mintAuthority即为Candy Guard地址
      const candyGuard = await safeFetchCandyGuard(
        umi,
        candyMachine.mintAuthority,
      );
      if (!candyGuard) {
        throw new Error('当前Candy Machine未配置有效Candy Guard');
      }
      setUmi(umi);
      setCandyMachine(candyMachine);
      setCandyGuard(candyGuard);
    }
  } catch (error) {
    console.error(error);
  }
};

更新mintToken函数(传入正确Guard并处理验证)

const mintToken = async () => {
  try {
    if (umi === undefined) {
      throw new Error('Umi上下文未初始化');
    }
    if (candyMachine === undefined || candyGuard === undefined) {
      throw new Error('Candy Machine或Candy Guard未初始化');
    }
    const nftSigner = generateSigner(umi);
    await transactionBuilder()
      .add(setComputeUnitLimit(umi, { units: 600_000 }))
      .add(
        mintV2(umi, {
          candyMachine: candyMachine.publicKey,
          // 传入正确的Candy Guard地址
          candyGuard: candyGuard.publicKey,
          nftMint: nftSigner,
          collectionMint: candyMachine.collectionMint,
          collectionUpdateAuthority: candyMachine.authority,
          payer: umi.identity.publicKey,
        }),
      )
      // 手动添加start date Guard的验证指令(若mintV2未自动处理)
      .add(verifyGuard(umi, {
        candyGuard: candyGuard.publicKey,
        candyMachine: candyMachine.publicKey,
        guard: 'startDate',
        mintArgs: { payer: umi.identity.publicKey },
      }))
      .sendAndConfirm(umi);
  } catch (error) {
    console.error(error);
  }
};
额外注意事项
  • 确保Umi版本与sugar-cli v2.1.1兼容,版本不匹配可能导致调用逻辑异常。
  • 检查Phantom钱包连接的网络环境与RPC主机一致(主网/测试网),网络不匹配会直接导致模拟交易失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 23:02:47