API响应字段说明#
字段 | json类型 | 描述 |
---|---|---|
resAmount | number | 询价后收到的代币数量(浮点数,带有小数点) |
resPricePerToToken | number | 被卖出的代币数量与被购买的代币数量的比率 |
resPricePerFromToken | number | 被购买的代币数量与被卖出的代币数量的比率 |
priceImpact | number | 也称为价格偏移。将此数字乘以100转换为百分比。高价格偏离是由报价价格池中的流动性不足引起的。 |
useSource | string | 询价结果的来源识别 |
targetDecimals | number | 将要接收的代币的小数位数 |
targetApproveAddr | string | 用户需要授权DODOApprove合约访问他们的代币进行兑换。如果出售的代币是燃料代币(例如BNB或MATIC上的ETH),则此参数为空。 |
to | string | DODORouteProxy地址 |
data | string | ABI数据,可直接使用 |
routeData | string | 交易执行的路径细节 |
模拟响应#
{
"status": 200,
"data": {
"resAmount": 41.777131132002744,
"resPricePerToToken": 2.3936540707888985,
"resPricePerFromToken": 0.4177713113200274,
"priceImpact": 0.0032237773057670273,
"useSource": "dodoV1AndV2AndUni",
"targetDecimals": 18,
"targetApproveAddr": "0x6D310348d5c12009854DFCf72e0DF9027e8cb4f4",
"to": "0x39E3e49C99834C9573c9FC7Ff5A4B226cD7B0E63",
"data": "...",
"msgError": "",
"routeData": "{\"subRouteTotalPart\":100,\"subRoute\":[{\"midPathPart\":100,\"midPath\":[{\"fromToken\":\"0xe06bd4f5aac8d0aa337d13ec88db6defc6eaeefe\",\"toToken\":\"0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270\",\"oneSplitTotalPart\":100,\"poolDetails\":[{\"poolName\":\"SushiSwap V2\",\"pool\":\"0x014ac2a53aa6fba4dcd93fde6d3c787b79a1a6e6\",\"poolPart\":100}]}]}]}",
"value": "0",
"id": "252046ac3d000a61571aca9eee9f3509",
"rpcCounter": 6
}
}
开发者需要注意#
当priceImpact过大时,需要提示用户或限制用户交易。
Price Impact原理详解#
假设一定数量的token0(token0Amount)可以兑换为token1Amount的token1,每个token0(token0Price)的价格计算为token1Amount / token0Amount。
不同的路径具有不同的流动性深度;某些路径具有较好的深度,而其他路径则没有。
随着token0Amount的增加,对路径深度的要求也增加,从而导致token0Price的下降。这种价格下降的偏离被称为priceImpact。
当路径具有异常良好的深度时,token0Price的变化可以忽略不计,例如priceImpact为0.00001。相反,当路径深度较差时,token0Price的变化可以很大,例如priceImpact为0.9。
DODO前端最佳实践#
价格偏移警告#
价格偏移超过5%(0.05)触发对用户的警告,价格偏移超过15%(0.15)触发对用户的错误信息。
执行前处理#
在发送交易之前,使用eth_estimateGas
进行预执行,以提高交易成功加入区块链的概率,并显示任何错误消息。
如何获取交易结果#
通过RPC方法获取交易执行状态。
使用DODO的子图服务检索订单详细信息和历史订单。