Metaplex Candy Machine铸造失败:custom program error: 0x3f问题求助
核心结论
Candy Machine(主流v2/v3版本)并未取消自动为铸造NFT创建元数据账户的功能,你遇到的0x3f(DataTypeMismatch)错误,根源是待铸造NFT的元数据账户未被正确初始化(字节数为0),导致set_and_verify_collection指令尝试反序列化空数据时失败。
可能的原因与修复方向
预分配账户参数不符合要求
Metaplex元数据账户需要至少679字节的空间,且账户所有权必须设置为Token Metadata程序地址(metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s)。检查你的预分配交易:- 确认账户预留空间≥679字节;
- 确认账户owner已正确设置为上述Token Metadata程序地址。
Candy Machine版本更新的适配问题
若你使用的是托管版Candy Machine(如官方托管服务),近期版本更新可能调整了铸造流程的账户处理逻辑,对预分配账户的要求更严格。对比你最初搭建时的版本与当前版本的差异,重点关注铸造指令中关于元数据账户初始化的逻辑变更。SetCollectionDuringMint指令的执行顺序问题
该指令依赖已初始化完成的NFT元数据账户(需包含合法元数据结构)。如果铸造流程中,元数据账户初始化步骤被延迟到set_and_verify_collection之后,就会触发DataTypeMismatch错误。解决方式:- 要么在调用铸造接口前,显式初始化元数据账户并填充基础元数据;
- 要么调整交易指令顺序,确保元数据账户初始化完成后再执行
set_and_verify_collection。
账户预分配的原子性问题
若预分配账户的交易与铸造交易未原子执行,可能出现账户未完全创建就被调用的情况,导致账户空间为0。确保预分配交易已确认(区块高度稳定)后再执行铸造,或把预分配与铸造放在同一个原子交易中。
内容的提问来源于stack exchange,提问作者Ahkilleux

