未能填写 0x 报价

Failing to fill 0x quote

我正在尝试填写从 0x API v1:

获得的合同中的报价

URL: https://api.0x.org/swap/v1/quote?sellToken=TUSD&buyToken=WETH&sellAmount=882693000000000051118080&slippagePercentage=0.8

...但它会恢复,即使在成功获得报价后(接受者有卖出余额,授予津贴,费用价值为 0)。

当报价有一个 order 时,掉期运行,但当它有两个或更多 orders 时(就像我的报价),它会恢复:

一个order:

两个 orders(还原):

我的fillquote函数:

function fillQuote(
        address sellToken,
        address buyToken,
        address spender,
        address swapTarget,
        bytes calldata swapCallData
    ) public   
    {        
        require(MyIERC20(sellToken).approve(spender, type(uint).max));
        (bool success, bytes memory returnData) = swapTarget.call(swapCallData);
        if (!success) {
            console.log(Helpers._getRevertMsg(returnData));
        }
        require(success, 'SWAP_CALL_FAILED');
    }

解决方案:

我的合约是一个硬帽分叉,带有一个从主网到旧状态的固定块,0x API 向当前状态发出链下请求,因此出现在报价中的流动性是不一样的因为合同旨在填补。

可能并且很可能是 它失败的原因,因为当我在通话中加倍加油并检查 -使用 gasleft()- 执行时 gas 的数量,它大约是 90k - 失败后 - 当我在 gas 中将超过 1M 传递给调用时。