调用异常缺少回滚数据:OpenSea购NFT时fulfillOrder报错求助
问题:OpenSea Seaport fulfillOrder 抛出'missing revert data in call exception'错误
我在OpenSea平台通过Seaport协议购买NFT时,调用createOrder()能正常唤起MetaMask完成签名,但执行fulfillOrder()时抛出无理由字符串的回滚错误,具体信息如下:
相关代码
const { executeAllActions } = await seaport.createOrder( { offer: [ { amount: parseEther(ethAmount).toString(), // WETH on goerli token: "0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6", }, ], consideration: [ { itemType: ItemType.ERC721, token: contractAddress, identifier: tokenId, recipient: walletAddress, }, ], }, walletAddress ); const order = await executeAllActions(); const { executeAllActions: executeAllFulfillActions } = await seaport.fulfillOrder({ order, accountAddress: walletAddress, });
错误信息
Error: missing revert data in call exception; Transaction reverted without a reason string [ See: https://links.ethers.org/v5-errors-CALL_EXCEPTION ] (data="0x", transaction={"to":"0xe2De2249Cf1C9d76EAF24257B85BBE83Bd218a0B","data":"0x6352211e0000000000000000000000000000000000000000000000000000000000000019","accessList":null}, error={"rawMessage":"Error forwarded from node: execution reverted","code":-32603,"message":"Magic RPC Error: [-32603] Error forwarded from node: execution reverted"}, code=CALL_EXCEPTION, version=providers/5.7.2)
解决思路
修正订单结构逻辑
你当前的订单是创建「买单」(用WETH换NFT),但自己调用fulfillOrder相当于尝试给自己转NFT,而你钱包里并没有该NFT,这必然导致交易回滚。正确的购买逻辑是:要么找到卖方发布的「卖单」(offer为NFT,consideration为WETH),调用fulfillOrder承接该订单;要么创建买单后等待卖方触发成交。检查WETH余额与授权
- 确认钱包在Goerli测试网有足够的WETH余额
- 调用WETH合约的
allowance方法,验证是否已授权Seaport合约(地址0xe2De2249Cf1C9d76EAF24257B85BBE83Bd218a0B)花费你指定额度的WETH
模拟交易获取详细错误
使用callStatic模拟执行交易,能捕获更具体的回滚原因:try { const { executeAllActions } = await seaport.fulfillOrder({ order, accountAddress: walletAddress }); await executeAllActions.callStatic(); } catch (e) { console.error("模拟执行错误详情:", e); }验证NFT状态与参数
- 确认目标NFT的合约地址、tokenId有效,且该NFT当前属于订单的maker(如果是承接卖单)
- 检查NFT是否被冻结、转移或锁定在其他协议中,导致无法转移
核对Seaport配置
- 确保Seaport SDK版本与合约版本匹配,初始化时使用的provider是Goerli测试网,未与主网混淆
内容的提问来源于stack exchange,提问作者toekneema
相关产品推荐
相关产品推荐

