我试图通过‘swap /v1/ estimatedGas’方法从0x获得交换的气体估计值,但是字段gas和D1在大多数情况下都是错误的。
有什么办法能更好地计算它吗?
例如:
请求:https://api.0x.org/swap/v1/quote?sellToken=0x6B3595068778DD592e39A122f4f5a5cF09C90fE2&buyToken=0xb9871cB10738eADA636432E86FC0Cb920Dc3De24&sellAmount=1000000000000000000
响应:
{
"chainId": 1,
"price": "3.356694278670382019",
"guaranteedPrice": "3.323127335883678198",
"to": "0xdef1c0ded9bec7f1a1670819833240f027b25eff",
"data": "0xd9627aa400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000002e1e1eb48ebca1f6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000006b3595068778dd592e39a122f4f5a5cf09c90fe2000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000b9871cb10738eada636432e86fc0cb920dc3de24869584cd000000000000000000000000100000000000000000000000000000000000001100000000000000000000000000000000000000000000005ed51c644c612f5b7e",
"value": "0",
"gas": "171000",
"estimatedGas": "171000",
"gasPrice": "76000000000",
"protocolFee": "0",
"minimumProtocolFee": "0",
"buyTokenAddress": "0xb9871cb10738eada636432e86fc0cb920dc3de24",
"sellTokenAddress": "0x6b3595068778dd592e39a122f4f5a5cf09c90fe2",
"buyAmount": "3356694278670382019",
"sellAmount": "1000000000000000000",
"sources": [
...
{
"name": "Uniswap_V2",
"proportion": "1"
},
...
],
"orders": [
{
"makerToken": "0xb9871cb10738eada636432e86fc0cb920dc3de24",
"takerToken": "0x6b3595068778dd592e39a122f4f5a5cf09c90fe2",
"makerAmount": "3356694278670382019",
"takerAmount": "1000000000000000000",
"fillData": {
"tokenAddressPath": [
"0x6b3595068778dd592e39a122f4f5a5cf09c90fe2",
"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
"0xb9871cb10738eada636432e86fc0cb920dc3de24"
],
"router": "0xf164fc0ec4e93095b804a4795bbe1e041497b92a"
},
"source": "Uniswap_V2",
"sourcePathId": "0xe30e17bcf3f2833e73f760a19a94f03dd79ca1f583c2893c5eb69673bad00ec9",
"type": 0
}
],
"allowanceTarget": "0xdef1c0ded9bec7f1a1670819833240f027b25eff",
"sellTokenToEthRate": "277.53194847477435333",
"buyTokenToEthRate": "940.66817609680155706"
}但是交易失败了,Out of Gas例外,即使有25万的天然气。(链接:https://etherscan.io/tx/0xe95a629944aba94ba4e32be41467506cbb9b9cca34de38426d8bd5c8d8a9e311)
如果为API调用提供了skipValidation=true和takerAddress=,也会发生同样的问题。
有什么办法能得到更准确的结果吗?
发布于 2021-09-01 12:09:11
不同的代币在转让时会花费不同的金额,即在互换期间。0xAPI并不知道存在的每个令牌的气体成本。
在以下情况下,0xAPI将为您执行更准确的气体估计:
takerAddress和skipValidation=false (默认)没有上述这些,我们就无法给出准确的气体估计,因为事务需要在估计过程中成功。当我们没有上述条件时,我们提供了一个大致的气体成本。
另外,您可以通过使用从0xAPI响应提供的数据对Ethereum节点执行一个eth_estimateGas来测量气体。
https://ethereum.stackexchange.com/questions/108171
复制相似问题