Candy Machine v2如何配置多白名单实现分时段差异化定价铸造
Candy Machine v2 多阶梯白名单分时段铸造实现方案
原生单实例Candy Machine v2 无法直接实现你描述的3组差异化定价白名单分阶段开放、前序白名单权限保留的需求。
你提到的endSettings参数仅支持配置全局铸造截止规则,要么按时间截止、要么按总铸造量截止,不支持分时段触发不同权限/定价规则;同时CMv2原生的whitelistMintSettings仅能绑定单个SPL代币作为白名单凭证,也只能设置一个白名单优惠价,没法同时适配3组不同价格、不同生效时间的白名单逻辑。
可落地实现方案
方案1:多CMv2实例路由(无合约修改,稳定性最高,项目最常用)
不需要修改CMv2原生合约,通过部署多个独立CM实例+前端路由即可完全匹配需求:
- 共部署4个独立CMv2实例,所有实例共享同一份NFT元数据、合集创作者配置,保证铸造出的NFT属于同一合集无差异,每个实例单独配置规则、分配对应额度:
- CM1(WL1专属通道):绑定WL1对应的SPL白名单代币,铸造价格0.7SOL,上线时间设为10:00对应时间戳,关闭公铸权限,仅白名单地址可铸造,分配WL1总配额对应的NFT数量,不设置铸造截止时间,只要用户持有WL1凭证、CM1还有剩余额度,就能一直以0.7SOL价格铸造
- CM2(WL2专属通道):绑定WL2对应的SPL白名单代币,铸造价格0.8SOL,上线时间设为11:00对应时间戳,关闭公铸权限,仅白名单地址可铸造,分配WL2总配额对应的NFT数量,同样不设置提前截止,额度耗尽前WL2用户随时可铸
- CM3(WL3专属通道):绑定WL3对应的SPL白名单代币,铸造价格0.9SOL,上线时间设为12:00对应时间戳,关闭公铸权限,仅白名单地址可铸造,分配WL3总配额对应的NFT数量,不提前截止
- CM4(公铸通道):不配置任何白名单规则,公铸价格1SOL,上线时间设为13:00对应时间戳,分配剩余所有NFT额度
- 前端逻辑:用户连接钱包后,前端自动扫描用户钱包内持有的白名单SPL凭证,按照价格从低到高的优先级展示可用铸造入口:持有WL1就优先展示0.7SOL铸造按钮,持有WL2则展示0.8SOL入口,持有WL3展示0.9SOL入口,13:00后所有连接钱包的用户都能看到1SOL公铸入口。
方案2:单CMv2实例+自定义校验代理合约(适合有合约开发能力的团队)
如果不想部署多实例,可以通过一层代理合约包装原生CMv2逻辑实现:
- 原生CMv2仅配置公铸规则:公铸价格1SOL,上线时间13:00,不配置原生白名单
- 额外部署一个轻量代理合约,提前把WL1/WL2/WL3的地址列表、对应价格、生效时间硬编码或通过后台可控配置,用户铸造时优先调用代理合约:
- 10:00-11:00,代理合约仅校验到调用地址属于WL1列表时,才允许用户传入0.7SOL的支付值调用CMv2铸造接口
- 11:00-12:00,代理合约新增WL2地址校验,WL1地址仍可走0.7SOL支付逻辑,WL2地址可走0.8SOL支付逻辑
- 12:00-13:00,代理合约新增WL3地址校验,WL1、WL2原有权限不变,WL3地址可走0.9SOL支付逻辑
- 13:00后,代理合约关闭白名单校验,所有地址都可直接传入1SOL支付值调用铸造接口
- 该方案需要自行开发代理合约,做好权限校验防漏洞,整体开发测试成本高于多实例方案。
核心配置参考(多实例方案)
以WL1对应的CM1实例为例,config.json中白名单相关核心配置如下:
{ "whitelistMintSettings": { "mint": "WL1_SPL代币的铸币地址", "presale": true, "discountPrice": 0.7, "mode": { "burnEveryTime": true }, "maxSupply": WL1阶段分配的NFT总数量, "whitelistMintTimeStart": 10点对应的Unix时间戳 }, "goLiveDate": "10点对应的Unix时间戳", "endSettings": null }
WL2、WL3对应的CM实例仅需要替换对应SPL代币地址、价格、上线时间、配额参数即可,公铸CM实例直接删除whitelistMintSettings配置,将价格改为1、上线时间设为13点对应时间戳即可。
注意:不要给前三个白名单CM配置
endSettings的时间截止规则,留空即可,只要CM还有剩余额度,对应白名单用户随时可以铸造,自然满足前序白名单权限持续保留的需求。
内容的提问来源于stack exchange,提问作者bschmitty
相关产品推荐
相关产品推荐

