未能填写 0x 报价
Failing to fill 0x quote
我正在尝试填写从 0x API v1:
获得的合同中的报价
...但它会恢复,即使在成功获得报价后(接受者有卖出余额,授予津贴,费用价值为 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 传递给调用时。
我正在尝试填写从 0x API v1:
获得的合同中的报价...但它会恢复,即使在成功获得报价后(接受者有卖出余额,授予津贴,费用价值为 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 传递给调用时。