0%

defi | 1inch 量化简介

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
{
"protocols": [
"PMM5",
"PMMX",
"UNIFI",
"SHIBASWAP",
"CLIPPER",
"DXSWAP",
"FIXED_FEE_SWAP",
"DFX_FINANCE",
"ONE_INCH_LIMIT_ORDER",
"CONVERGENCE_X",
"SAKESWAP",
"CREAM_LENDING",
"DODO_V2",
"CURVE_V2",
"SETH_WRAPPER",
"WETH",
"MOONISWAP",
"SUSHI",
"COMPOUND",
"KYBER",
"CREAMSWAP",
"AAVE",
"CURVE",
"UNISWAP_V1",
"UNISWAP_V2",
"BALANCER",
"CHAI",
"OASIS",
"BANCOR",
"IEARN",
"SWERVE",
"VALUELIQUID",
"DODO",
"SHELL",
"BLACKHOLESWAP",
"PMM1",
"DEFISWAP",
"COFIX",
"ZRX",
"LUASWAP",
"MINISWAP",
"MSTABLE",
"AAVE_LIQUIDATOR",
"SYNTHETIX",
"AAVE_V2",
"ST_ETH",
"ONE_INCH_LP",
"LINKSWAP",
"S_FINANCE",
"ONE_INCH_LP_1_1",
"PSM",
"ONE_INCH_LP_MIGRATOR_V1_1",
"UNISWAP_V2_MIGRATOR",
"SUSHISWAP_MIGRATOR",
"ONE_INCH_LP_MIGRATOR",
"POWERINDEX",
"INDEXED_FINANCE",
"XSIGMA",
"SMOOTHY_FINANCE",
"PMM2",
"PMM3",
"SADDLE",
"PMM4",
"KYBER_DMM",
"BALANCER_V2",
"UNISWAP_V3"
]
}

下面我们再用询价 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,可以自己设置

其他参数我实验了很久,没有得出结论,以后再说吧。

请我喝杯咖啡吧~