0%

defi | 1inch 量化简介

1inchdodo 一样,并且是先发于 dodo 的,在 api 方面 1inchdodo 更加完善,并且界面体验也更好。

这些信息已经过期

目前 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 试一试。

经过上述的步骤,我们得到了 dydxuniswap v3 的询价 api

https://api.1inch.exchange/v3.0/1/quote?fromTokenAddress=0x92d6c1e31e14520e676a687f0a93788b716beff5&toTokenAddress=0xdac17f958d2ee523a2206206994597c13d831ec7&amount=10000000000000000&protocols=UNISWAP_V3

更多的 api 请查看 1inch 的官网。

2022年5月16日 更新

目前,1inchapi 已经到了 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 换一个 token1inch 会聚合很多 dex ,来给你找到最佳的兑换路径。而上面的 protocols 就是兑换路径。

  • protocols[0]
    • 先在 SHELL 交易所,100% 兑换某一种币
  • protocols[1]
    • 以不同比例的那种币,分别在不同 dex 中兑换成 ETH
  • protocols[2]
    • 以全部的 ETHSUSHI 中兑换成 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,可以自己设置

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

请我喝杯咖啡吧~