Auctioneer SDK售卖时seller_trade_state的ConstraintSeeds错误排查
解决Auctioneer SDK售卖时的ConstraintSeeds错误
出现ConstraintSeeds错误的核心原因是你生成seller_trade_state的PDA种子与Auctioneer程序预期的结构不匹配,具体问题和修复方式如下:
当前代码的问题
- 多余了
associatedAddress种子字段,程序定义的seller_trade_state种子中不包含该字段 - 种子顺序错误:NFT mint地址应在付款代币mint地址之前
修改后的PDA生成代码
const sellerTradeState = await anchor.web3.PublicKey.findProgramAddress( [ Buffer.from('auction_house'), publicKey.toBuffer(), // 卖家钱包地址(持有NFT的地址) aH.toBuffer(), // Auction House合约地址 mint.toBuffer(), // 待售NFT的mint地址 WRAPPED_SOL_MINT.toBuffer(), // 付款代币的mint地址(如WSOL) new BN(10000000).toBuffer('le', 8), // 售卖价格(单位为lamports,需匹配付款代币精度) new BN(Math.ceil(1)).toBuffer('le', 8), // 售卖NFT数量(标准NFT填1) ], AUCTION_HOUSE_PROGRAM_ID, );
额外注意事项
- 确认
publicKey是持有待售NFT的卖家地址,不能是其他地址 - 价格单位要对应付款代币的精度:比如WSOL的精度是9,1 SOL对应1e9 lamports,若你想卖0.01 SOL,填
10000000是正确的 - 若尝试使用
u64::MAX作为价格,需用正确的数值:new BN('18446744073709551615') - 首次售卖时,需确保
seller_trade_state账户已被初始化(可通过程序指令自动创建,或提前调用初始化方法)
内容的提问来源于stack exchange,提问作者Abhishek Faliya
相关产品推荐
相关产品推荐

