1inch 和 dodo 一样,并且是先发于 dodo 的,在 api 方面 1inch 比 dodo 更加完善,并且界面体验也更好。
这些信息已经过期
目前 1inch 支持
ethbscpolygonoptimism
如果暂时没办法获取合约信息,可以通过这些 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,可以自己设置
- 指的是中间
其他参数我实验了很久,没有得出结论,以后再说吧。