Solana网络Magic Eden API buy_now交易遇seller_trade_state ConstraintRaw错误求助
问题
调用Magic Eden API执行buy_now交易时,提交后触发AnchorError。错误由seller_trade_state账户引发,错误码ConstraintRaw(编号2003),错误信息为'A raw constraint was violated'。相关代码、请求参数及交易日志如下:
代码
async function buyToken(user, params){ try{ const res = await axios.get( 'https://api-mainnet.magiceden.dev/v2/instructions/buy_now', { params, headers }); let txSigned = res.data.txSigned; const txn = await web3.Transaction.from(Buffer.from(txSigned.data)); let buySignature = provider.wallet.signTransaction(txn); const latestBlockHash = await conn.getLatestBlockhash(); let stategy = { blockhash: latestBlockHash.blockhash, lastValidBlockHeight: latestBlockHash.lastValidBlockHeight, signature: buySignature, } web3.sendAndConfirmRawTransaction(conn, txn.serialize(), stategy); }catch(e){ console.error('buyToken', e); } }
请求参数
{ "buyer": "DizqnaiTLTkTqXG759whvyVisCfuUUcA4VeQnJKQLaaN", "seller": "GtXNVaeeRQ95SdE6rjePHJLpaRe94FrN7KQNUmNj7jke", "auctionHouseAddress": "E8cU1WiRWjanGxmn96ewBgk9vPTcL6AEZ1t6F6fkgUWe", "tokenMint": "8PHtyRngia1EQT99BA6ysbpdUjwXExRKkH3VUT3JeWcA", "tokenATA": "6tfMBkUAYzcKcHkKBDAF8xrAoqXoAzsyB2WyB5XRmkcr", "price": 0.019, "sellerReferral": "autMW8SgBkVYeBgqYiTuJZnkvDZMVU2MHJh9Jh7CSQ2" }
交易日志
{ "logs": [ "Program M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K invoke [1]", "Program log: Instruction: Deposit", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K success", "Program M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K invoke [1]", "Program log: Instruction: Buy", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program log: {\"price\":19000000,\"buyer_expiry\":0}", "Program M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K consumed 27892 of 590535 compute units", "Program M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K success", "Program M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K invoke [1]", "Program log: Instruction: ExecuteSale", "Program log: AnchorError caused by account: seller_trade_state. Error Code: ConstraintRaw. Error Number: 2003. Error Message: A raw constraint was violated.", "Program M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K consumed 23877 of 562643 compute units", "Program M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K failed: custom program error: 0x7d3" ] }
可能的解决方案
Anchor的ConstraintRaw错误(2003)表示账户的原始数据约束被违反,针对seller_trade_state账户,可从以下方向排查解决:
确认卖家挂单状态有效性:
seller_trade_state是卖家挂单时创建的状态账户,若卖家已取消挂单、NFT已被卖出,该账户会被销毁或状态失效。需先通过Magic Eden接口查询目标NFT的当前挂单状态,确认交易仍处于可执行状态。校验请求参数准确性:
- 核对
tokenATA是否为卖家对应tokenMint的正确关联代币账户,避免传入错误地址; - 确保
price与卖家挂单价格完全一致,交易日志中显示价格为19000000 lamports(0.019 SOL),需确认卖家未修改挂单价格; - 验证
auctionHouseAddress为Magic Eden主网官方拍卖屋地址,避免使用错误合约地址。
- 核对
修正交易构建逻辑:
代码中直接使用API返回的已签名交易,却重新设置了blockhash和签名,可能破坏交易结构。建议直接提交API返回的signedTx数据,或重新构建交易时保证所有字段一致性;同时修正代码拼写错误:stategy改为strategy。排查节点同步问题:
确保连接的Solana节点处于同步状态,获取的latestBlockHash是最新有效数据。可尝试更换节点提供商,或等待节点同步完成后重新提交交易。
内容的提问来源于stack exchange,提问作者Michael Foisy
相关产品推荐
相关产品推荐

