Metaplex Auction House CLI sell命令token-size无法大于1问题
问题根因
你使用的2022年5月27日提交、commit哈希为472973f2437ecd9cd0e730254ecdbd1e8fbbd953的Metaplex Auction House CLI(ah-cli),其sell指令对接的合约逻辑默认针对NonFungible类资产(含Master Edition、普通NFT)做了硬校验:要求传入的--token-size参数值必须为1,即便你持有多份Master Edition副本,只要资产被识别为NonFungible标准,传入大于1的参数就会抛出InvalidTokenAmount(错误码6015)报错。
可行解决方案
- 修改合约层校验逻辑(最稳定,适合自定义部署场景)
找到Auction House合约sell指令中assert_token_amount_valid对应的校验段,原逻辑强制要求token_size等于1,将其修改为校验「传入的token_size小于等于签名者关联代币账户内该 mint 对应的实际持有余额」即可。修改后重新部署合约,同步更新CLI目录下对应的IDL接口定义文件,后续就可以正常传入大于1的--token-size参数执行sell操作。 - 调整售卖资产的元数据标准(适合不想改合约的场景)
现有版本CLI的强制为1的校验仅针对NonFungible标准资产生效,你可以把待售卖资产的Token标准修改为FungibleAsset或Fungible,同时移除元数据里的Master Edition标签,只要签名钱包内持有足额的对应资产,无需修改合约和CLI代码即可传入大于1的--token-size值完成挂单。 - 本地修改CLI逻辑临时适配(不推荐主网使用,有资产风险)
找到本地CLI源码中src/auction-house-cli.ts330行附近构造sell交易的代码段,注释掉CLI侧对--token-size的非1值拦截逻辑。注意这种方式只能绕开CLI层校验,如果你用的是官方部署的公开Auction House实例,合约层的强制1校验依然存在,提交交易还是会报错,仅适合本地测试自定义修改过的合约实例时使用。
注意:无论使用哪种方案,执行sell指令前必须确认签名钱包对应mint地址的关联代币账户余额 ≥ 你设置的
--token-size数值,否则会因为余额不足导致交易失败。
内容的提问来源于stack exchange,提问作者Nayib
相关产品推荐
相关产品推荐

