Solana Metaplex Storefront拍卖创作者50-50分成未到账问题
问题根因
- 配置层级不匹配:Metaplex Storefront v1版本的拍卖合约分润逻辑独立于NFT元数据规则,你在NFT铸造阶段配置的50-50创作者分成,仅在NFT一级公售、二级交易版税拆分场景生效,拍卖场景的分润规则需要在创建拍卖时单独在拍卖配置模块填写,不会自动继承NFT元数据内的creators字段配置。如果未单独配置分润规则,合约默认将全部结算款划转至拍卖创建者地址,属于版本默认设计逻辑,不是链上执行bug。
- 分润接收账户状态异常:如果配置的第二个创作者钱包未在Devnet完成账户初始化(无任何链上交互记录、账户余额低于链上租金豁免阈值),结算合约为了避免整笔结算交易上链失败,会触发自动回退逻辑,将该地址对应的分润金额全部打给拍卖发起方,不执行拆分操作。
- 角色配置混淆:你在管理后台配置的2个白名单钱包仅被授予了拍卖参与权限,未绑定「收益接收方」角色,且其中一个白名单地址为初始化使用的管理员钱包(即拍卖发起方本身),等于合约层面根本未识别到第二个创作者的分润资格。
修复方案
- 代码层适配自动继承NFT分润规则:如果不想每次创建拍卖都手动重复填写分润配置,可以修改前端结算模块逻辑,在构造结算指令时自动拉取对应NFT的链上元数据,校验creators字段的分成总和为100后,自动将创作者地址填入分润参数列表,核心代码参考:
// 结算流程中加载NFT链上元数据 const nftMetadata = await Metadata.load(connection, nftMetadataAddress); const creatorList = nftMetadata.data.data.creators; if (creatorList && creatorList.reduce((totalShare, curCreator) => totalShare + curCreator.share, 0) !== 100) { throw new Error("NFT创作者分成配置总和不符合100%要求"); } // 将creatorList传入结算指令的收益分配参数位,替换默认仅打给拍卖发起方的配置
- 提前初始化所有分润接收账户:测试前给所有分润对应钱包转入至少0.002 Devnet SOL,使用对应钱包发起一笔任意链上交易(比如给自己转0 SOL)完成账户初始化,满足租金豁免要求,避免结算时触发回退逻辑。
- 修正后台配置逻辑:不要将拍卖参与白名单和分润配置混同,在拍卖创建/管理页的「收益分配」板块单独添加两个创作者钱包,分别设置50%的分润比例;配置保存后需要通过链上RPC确认拍卖配置账户已写入对应分润地址和比例,再发起拍卖测试。
验证修复效果时,可以在拍卖结束触发结算前,先查询拍卖配置账户的链上分润参数,确认接收地址、分成比例和预期一致后再执行结算,避免重复出现资金单边到账的问题。
内容的提问来源于stack exchange,提问作者koko91kon
相关产品推荐
相关产品推荐

