1inch
和 dodo
一样,并且是先发于 dodo
的,在 api
方面 1inch
比 dodo
更加完善,并且界面体验也更好。
这些信息已经过期
目前 1inch
支持
eth
bsc
polygon
optimism
如果暂时没办法获取合约信息,可以通过这些 api
来作为暂存方案。我就是因为 uniswap v3
的合约过于难以理解,就用了 1inch
来获取价格。
经过询问客服, 1inch
的频率限制在单 IP
300
次每秒的调用。
下面我来说一下,api
怎么用,首先进入 api
测试界面,以 eth
为例。
在 1inch
要特别注意一下一个属性 protocols
,这个指的是,价格来源于哪个平台,平台可以是一个也可以是多个。
点击 try it out
,然后按照下图的方式,就会出现调用 url
。
可以看到,1inch
支持的平台有
1 | { |
下面我们再用询价 api
试一试。
经过上述的步骤,我们得到了 dydx
的 uniswap v3
的询价 api
https://api.1inch.exchange/v3.0/1/quote?fromTokenAddress=0x92d6c1e31e14520e676a687f0a93788b716beff5&toTokenAddress=0xdac17f958d2ee523a2206206994597c13d831ec7&amount=10000000000000000&protocols=UNISWAP_V3
更多的 api
请查看 1inch
的官网。
2022年5月16日 更新
目前,1inch
的 api
已经到了 4
的版本,这里以 ETH
获取为案例。这里的 api
接口是 /quote
是查询最佳报价的接口。
参数如下
参数 | 类型 |
---|---|
fromTokenAddress* | string |
toTokenAddress* | string |
amount* | integer |
fee | number |
protocols | string |
gasPrice | string |
complexityLevel | string |
connectorTokens | string |
gasLimit | integer |
mainRouteParts | integer |
parts | integer |
我们以 USDT
兑换 ALCX
为案例。
- USDT
- 0xdac17f958d2ee523a2206206994597c13d831ec7
- ALCX
- 0xdbdb4d16eda451d0503b854cf79d55697f90c8df
只填写必要参数
data = {
"fromTokenAddress": coin.from_contract,
"toTokenAddress": coin.to_contract,
"amount": int(coin.from_amount),
}
返回的参数如下图表示
这里主要说一下 protocols
,再说这个之前,先说一下 1inch
的询价逻辑。
1inch
是返回最佳价格。即,你使用 1000U
换一个 token
,1inch
会聚合很多 dex
,来给你找到最佳的兑换路径。而上面的 protocols
就是兑换路径。
- protocols[0]
- 先在
SHELL
交易所,100%
兑换某一种币
- 先在
- protocols[1]
- 以不同比例的那种币,分别在不同
dex
中兑换成ETH
- 以不同比例的那种币,分别在不同
- protocols[2]
- 以全部的
ETH
在SUSHI
中兑换成ALCX
- 以全部的
这里面涉及了多个中间币,也涉及了多个兑换路径,多个兑换比例,所以,最终所需的 gas
费是海量的。
固定兑换 dex
这里想只在某些 dex
中兑换。
data = {
"fromTokenAddress": coin.from_contract,
"toTokenAddress": coin.to_contract,
"amount": int(coin.from_amount),
"protocols": "SUSHI,UNISWAP_V1,UNISWAP_V2,UNISWAP_V3,ETH_BANCOR_V3,BANCOR"
}
返回的参数如下图表示
其他
connectorTokens
- 指的是中间
token
,可以自己设置
- 指的是中间
其他参数我实验了很久,没有得出结论,以后再说吧。