Solana Metaplex Candy Machine state.tokenMint为null的正确设置方法
问题根因
你创建Candy Machine时默认选用SOL作为支付币种,这种场景下链上tokenMint字段原生就是null值,不需要也无法后期手动设置该字段。你调用的mintOneToken方法仅适配使用SPL代币作为支付币种的Candy Machine,因此会触发非空校验报错。
解决方案
方案1:继续使用SOL支付(无需重建Candy Machine)
直接调整mint逻辑即可,无需修改链上Candy Machine数据:
- 当检测到
candyMachine.state.tokenMint === null时,跳过getAtaForMint逻辑,用户支付账户直接使用payer地址即可。 - 也可直接选用适配SOL支付场景的原生mint方法,避开针对SPL支付场景的非空校验。
方案2:切换为SPL代币支付(需重建Candy Machine)
tokenMint是Candy Machine的初始化固定参数,创建完成后不可修改,如果需要使用SPL代币支付,只能重新创建Candy Machine,创建时补充指定SPL代币相关参数:
ts-node candy-machine-cli.ts create_candy_machine --env devnet --keypair <你的密钥文件路径> --price <代币支付数量> --spl-token <你的SPL代币Mint地址> --spl-token-account <接收代币的ATA地址>
按上述命令创建的Candy Machine链上tokenMint字段会自动填充为你指定的SPL代币Mint地址,可正常调用你当前使用的mintOneToken方法。
内容的提问来源于stack exchange,提问作者Ozymandias
相关产品推荐
相关产品推荐

