Candy Machine mintV2调用失败:candy_guard账户未初始化求助
问题原因
- 你的Candy Machine V3已配置Candy Guard,但前端调用
mintV2时传入了candyGuard: undefined,导致mplCandyGuard程序无法找到对应Guard账户,触发错误码3012(账户未初始化)。 - 虽然你通过
safeFetchCandyGuard获取了Guard实例,但未在mint交易中正确传入Guard地址,同时缺少对start date Guard约束的验证逻辑。
解决方案
- 确保成功获取有效Candy Guard实例,并在mint交易中传入正确的Guard地址。
- 针对配置的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
相关产品推荐
相关产品推荐

