@1delta/margin-fetcher 0.0.18 → 0.0.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/liquidityThresholds.d.ts +10 -0
- package/dist/assets/liquidityThresholds.d.ts.map +1 -1
- package/dist/assets/liquidityThresholds.js +9 -2
- package/dist/flash-liquidity/fetchLiquidity.d.ts +2 -2
- package/dist/flash-liquidity/fetchLiquidity.d.ts.map +1 -1
- package/dist/flash-liquidity/fetchLiquidity.js +85 -54
- package/dist/flash-liquidity/types.d.ts +1 -0
- package/dist/flash-liquidity/types.d.ts.map +1 -1
- package/dist/lending/aave-v3-type/publicCallBuild.d.ts +1 -1
- package/dist/lending/aave-v3-type/publicCallBuild.d.ts.map +1 -1
- package/dist/lending/aave-v3-type/publicCallBuild.js +46 -48
- package/dist/lending/aave-v3-type/publicCallParse.d.ts.map +1 -1
- package/dist/lending/aave-v3-type/publicCallParse.js +8 -2
- package/dist/lending/compound-v3/publicCallParse.d.ts.map +1 -1
- package/dist/lending/compound-v3/publicCallParse.js +8 -3
- package/dist/lending/fetchLender.js +2 -2
- package/dist/lending/morpho/convertPublic.js +1 -1
- package/dist/lending/user-data/types.js +2 -2
- package/dist/lending-pairs/computeLendingPairs.d.ts +10 -1
- package/dist/lending-pairs/computeLendingPairs.d.ts.map +1 -1
- package/dist/lending-pairs/computeLendingPairs.js +26 -22
- package/dist/prices/defillama/index.d.ts.map +1 -1
- package/dist/prices/defillama/index.js +162 -151
- package/dist/prices/index.d.ts +3 -2
- package/dist/prices/index.d.ts.map +1 -1
- package/dist/prices/index.js +3 -2
- package/dist/prices/main-prices/addresses/aaveOracles.d.ts +159 -143
- package/dist/prices/main-prices/addresses/aaveOracles.d.ts.map +1 -1
- package/dist/prices/main-prices/addresses/aaveOracles.js +276 -260
- package/dist/prices/main-prices/addresses/morpho.d.ts.map +1 -1
- package/dist/prices/main-prices/addresses/morpho.js +114 -0
- package/dist/prices/main-prices/fetchOracleData.d.ts.map +1 -1
- package/dist/prices/main-prices/fetchOracleData.js +21 -9
- package/dist/prices/pendle/fetchPendlePrices.d.ts +7 -0
- package/dist/prices/pendle/fetchPendlePrices.d.ts.map +1 -0
- package/dist/prices/pendle/fetchPendlePrices.js +148 -0
- package/dist/prices/pendle/index.d.ts +2 -0
- package/dist/prices/pendle/index.d.ts.map +1 -0
- package/dist/prices/pendle/index.js +1 -0
- package/dist/types/apiReturnType.d.ts +2 -0
- package/dist/types/apiReturnType.d.ts.map +1 -1
- package/dist/utils/index.d.ts +1 -3
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +10 -16
- package/dist/yields/index.d.ts.map +1 -1
- package/dist/yields/index.js +46 -33
- package/package.json +3 -6
- package/src/assets/liquidityThresholds.ts +22 -3
- package/src/flash-liquidity/fetchLiquidity.ts +298 -261
- package/src/flash-liquidity/types.ts +1 -0
- package/src/lending/aave-v3-type/publicCallBuild.ts +74 -68
- package/src/lending/aave-v3-type/publicCallParse.ts +8 -2
- package/src/lending/compound-v3/publicCallParse.ts +10 -3
- package/src/lending/fetchLender.ts +2 -2
- package/src/lending/morpho/convertPublic.ts +1 -1
- package/src/lending/user-data/types.ts +2 -2
- package/src/lending-pairs/computeLendingPairs.ts +423 -410
- package/src/prices/defillama/index.ts +233 -227
- package/src/prices/index.ts +3 -2
- package/src/prices/main-prices/addresses/aaveOracles.ts +292 -277
- package/src/prices/main-prices/addresses/morpho.ts +114 -0
- package/src/prices/main-prices/fetchOracleData.ts +29 -22
- package/src/prices/pendle/fetchPendlePrices.ts +208 -0
- package/src/prices/pendle/index.ts +1 -0
- package/src/types/apiReturnType.ts +42 -39
- package/src/utils/index.ts +11 -18
- package/src/yields/index.ts +205 -179
- package/test/flashLiquidity.test.ts +40 -0
- package/test/lenderData.test.ts +18 -13254
- package/test/mainPrices.test.ts +24 -19
- package/test/morphoPrice.test.ts +1 -1
- package/test/userDataAave.test.ts +73 -0
package/src/yields/index.ts
CHANGED
|
@@ -1,207 +1,233 @@
|
|
|
1
|
-
import { apyToAprPercent, apyToApr } from
|
|
1
|
+
import { apyToAprPercent, apyToApr } from '../utils/parsing'
|
|
2
|
+
|
|
3
|
+
const hyUSD = 'High Yield USD Base::HYUSD'
|
|
4
|
+
const bsdETH = 'Based ETH::BSDETH'
|
|
2
5
|
|
|
3
6
|
const FeedData = {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
7
|
+
WSTETH: 'https://eth-api.lido.fi/v1/protocol/steth/apr/sma',
|
|
8
|
+
STMATIC: 'https://polygon.lido.fi/api/stats',
|
|
9
|
+
CBETH: 'https://api.exchange.coinbase.com/wrapped-assets/cbeth',
|
|
10
|
+
MATICX: 'https://universe.staderlabs.com/polygon/apy',
|
|
11
|
+
METH: 'https://meth.mantle.xyz/api/stats/apy',
|
|
12
|
+
SUSDE:
|
|
13
|
+
'https://yields.llama.fi/poolsEnriched?pool=66985a81-9c51-46ca-9977-42b4fe7bc6df',
|
|
14
|
+
EZETH: 'https://app.renzoprotocol.com/api/stats?chainId=1',
|
|
15
|
+
RETH: 'https://api.rocketpool.net/api/mainnet/payload',
|
|
16
|
+
WEETH: 'https://www.ether.fi/api/apr',
|
|
17
|
+
SAVAX: 'https://api.benqi.fi/liquidstaking/apr',
|
|
18
|
+
RSETH: 'https://universe.kelpdao.xyz/rseth/totalApy',
|
|
19
|
+
TRUMATIC: 'https://api.trufin.io/staker/apy?staker=MATIC',
|
|
20
|
+
RTOKENS: 'https://yields.reserve.org/pools',
|
|
16
21
|
}
|
|
17
22
|
|
|
18
23
|
const LenderAPIs = {
|
|
19
|
-
|
|
24
|
+
MERIDIAN:
|
|
25
|
+
'https://omnidex.bmaa3ajd1gjri.eu-west-2.cs.amazonlightsail.com/lending_yields',
|
|
20
26
|
}
|
|
21
27
|
|
|
22
28
|
enum MeridainNetwork {
|
|
23
|
-
|
|
29
|
+
TAIKO = 'taiko',
|
|
24
30
|
}
|
|
25
31
|
|
|
26
32
|
function formatMeridianKey(k: string) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
33
|
+
const _k = k.toUpperCase()
|
|
34
|
+
if (_k === 'USDT') return 'USDT.E'
|
|
35
|
+
if (_k === 'USDCE') return 'USDC.E'
|
|
36
|
+
return _k
|
|
31
37
|
}
|
|
32
38
|
|
|
33
39
|
// Converters from apy to apr and reversed
|
|
34
40
|
|
|
35
41
|
interface LenderAssetReward {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
42
|
+
deposit: number
|
|
43
|
+
borrow: number
|
|
44
|
+
additionalDepositData: any
|
|
45
|
+
additionalBorrowData: any
|
|
40
46
|
}
|
|
41
47
|
|
|
42
48
|
export interface YieldDataWithTimestamp {
|
|
43
|
-
|
|
44
|
-
|
|
49
|
+
intrinsicYields: { [asset: string]: number | undefined }
|
|
50
|
+
lenderRewards: {
|
|
51
|
+
[chainId: number]: {
|
|
52
|
+
[lender: string]: { [asset: string]: LenderAssetReward }
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const safeFetch = async <T>(
|
|
58
|
+
label: string,
|
|
59
|
+
fn: () => Promise<T>,
|
|
60
|
+
): Promise<T | undefined> => {
|
|
61
|
+
try {
|
|
62
|
+
return await fn()
|
|
63
|
+
} catch (e) {
|
|
64
|
+
console.error(`Error fetching ${label}:`, e)
|
|
65
|
+
return undefined
|
|
66
|
+
}
|
|
45
67
|
}
|
|
46
68
|
|
|
47
|
-
const
|
|
69
|
+
export const fetchGeneralYields = async () => {
|
|
70
|
+
const wstethPromise = safeFetch('WSTETH', async () => {
|
|
71
|
+
const res = await fetch(FeedData.WSTETH).then((r) => r.json())
|
|
72
|
+
return Number(res.data.aprs.at(-1).apr) * 0.9
|
|
73
|
+
})
|
|
74
|
+
|
|
75
|
+
const ezethPromise = safeFetch('EZETH', async () => {
|
|
76
|
+
const res = await fetch(FeedData.EZETH).then((r) => r.json())
|
|
77
|
+
return Number(res.data.apr.data.rate)
|
|
78
|
+
})
|
|
79
|
+
|
|
80
|
+
const rethPromise = safeFetch('RETH', async () => {
|
|
81
|
+
const res = await fetch(FeedData.RETH).then((r) => r.json())
|
|
82
|
+
return Number(res.rethAPR)
|
|
83
|
+
})
|
|
84
|
+
|
|
85
|
+
const weethPromise = safeFetch('WEETH', async () => {
|
|
86
|
+
const wstethRes = await fetch(FeedData.WSTETH).then((r) => r.json())
|
|
87
|
+
const wstethApr = Number(wstethRes.data.aprs.at(-1).apr) * 0.9
|
|
88
|
+
let aYield = 0
|
|
48
89
|
try {
|
|
49
|
-
|
|
90
|
+
const weethRes = await fetch(FeedData.WEETH).then((r) => r.json())
|
|
91
|
+
aYield = Number(weethRes.lrt2Apr)
|
|
50
92
|
} catch (e) {
|
|
51
|
-
|
|
52
|
-
return undefined
|
|
93
|
+
aYield = 0.5
|
|
53
94
|
}
|
|
54
|
-
|
|
55
|
-
|
|
95
|
+
return aYield + wstethApr
|
|
96
|
+
})
|
|
97
|
+
|
|
98
|
+
const stmaticPromise = safeFetch('STMATIC', async () => {
|
|
99
|
+
const res = await fetch(FeedData.STMATIC).then((r) => r.json())
|
|
100
|
+
return Number(res.apr) * 0.9
|
|
101
|
+
})
|
|
102
|
+
|
|
103
|
+
const savaxPromise = safeFetch('SAVAX', async () => {
|
|
104
|
+
const res = await fetch(FeedData.SAVAX).then((r) => r.json())
|
|
105
|
+
return Number(res.apr) * 100
|
|
106
|
+
})
|
|
107
|
+
|
|
108
|
+
const methPromise = safeFetch('METH', async () => {
|
|
109
|
+
const res = await fetch(FeedData.METH).then((r) => r.json())
|
|
110
|
+
return apyToApr(Number(res.data[0]?.OneDayAPY)) * 100
|
|
111
|
+
})
|
|
112
|
+
|
|
113
|
+
const maticxPromise = safeFetch('MATICX', async () => {
|
|
114
|
+
const res = await fetch(FeedData.MATICX).then((r) => r.json())
|
|
115
|
+
return Number(res.value) * 0.9
|
|
116
|
+
})
|
|
117
|
+
|
|
118
|
+
const susdePromise = safeFetch('SUSDE', async () => {
|
|
119
|
+
try {
|
|
120
|
+
const res = await fetch(FeedData.SUSDE).then((r) => r.json())
|
|
121
|
+
return apyToAprPercent(res?.data[0]?.apy ?? 0)
|
|
122
|
+
} catch (e) {
|
|
123
|
+
return 0
|
|
124
|
+
}
|
|
125
|
+
})
|
|
126
|
+
|
|
127
|
+
const rsethPromise = safeFetch('RSETH', async () => {
|
|
128
|
+
const res = await fetch(FeedData.RSETH).then((r) => r.json())
|
|
129
|
+
return apyToAprPercent(res.totalAPY)
|
|
130
|
+
})
|
|
131
|
+
|
|
132
|
+
const trumaticPromise = safeFetch('TRUMATIC', async () => {
|
|
133
|
+
const res = await fetch(FeedData.TRUMATIC).then((r) => r.json())
|
|
134
|
+
return apyToAprPercent(res.apy)
|
|
135
|
+
})
|
|
136
|
+
|
|
137
|
+
const rtokensPromise = safeFetch('RTOKENS', async () => {
|
|
138
|
+
const res = await fetch(FeedData.RTOKENS).then((r) => r.json())
|
|
139
|
+
const data = res.rtokens['8453']
|
|
140
|
+
return {
|
|
141
|
+
[bsdETH]: apyToAprPercent(data.bsdETH / 100) * 100,
|
|
142
|
+
[hyUSD]: apyToAprPercent(data.hyUSD / 100) * 100,
|
|
143
|
+
}
|
|
144
|
+
})
|
|
56
145
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
const ezethPromise = safeFetch('EZETH', async () => {
|
|
64
|
-
const res = await fetch(FeedData.EZETH).then(r => r.json())
|
|
65
|
-
return Number(res.data.apr.data.rate)
|
|
66
|
-
})
|
|
67
|
-
|
|
68
|
-
const rethPromise = safeFetch('RETH', async () => {
|
|
69
|
-
const res = await fetch(FeedData.RETH).then(r => r.json())
|
|
70
|
-
return Number(res.rethAPR)
|
|
71
|
-
})
|
|
72
|
-
|
|
73
|
-
const weethPromise = safeFetch('WEETH', async () => {
|
|
74
|
-
const wstethRes = await fetch(FeedData.WSTETH).then(r => r.json())
|
|
75
|
-
const wstethApr = Number(wstethRes.data.aprs.at(-1).apr) * 0.9
|
|
76
|
-
let aYield = 0
|
|
77
|
-
try {
|
|
78
|
-
const weethRes = await fetch(FeedData.WEETH).then(r => r.json())
|
|
79
|
-
aYield = Number(weethRes.lrt2Apr)
|
|
80
|
-
} catch (e) {
|
|
81
|
-
aYield = 0.5
|
|
82
|
-
}
|
|
83
|
-
return aYield + wstethApr
|
|
84
|
-
})
|
|
85
|
-
|
|
86
|
-
const stmaticPromise = safeFetch('STMATIC', async () => {
|
|
87
|
-
const res = await fetch(FeedData.STMATIC).then(r => r.json())
|
|
88
|
-
return Number(res.apr) * 0.9
|
|
89
|
-
})
|
|
90
|
-
|
|
91
|
-
const savaxPromise = safeFetch('SAVAX', async () => {
|
|
92
|
-
const res = await fetch(FeedData.SAVAX).then(r => r.json())
|
|
93
|
-
return Number(res.apr) * 100
|
|
94
|
-
})
|
|
95
|
-
|
|
96
|
-
const methPromise = safeFetch('METH', async () => {
|
|
97
|
-
const res = await fetch(FeedData.METH).then(r => r.json())
|
|
98
|
-
return apyToApr(Number(res.data[0]?.OneDayAPY)) * 100
|
|
99
|
-
})
|
|
100
|
-
|
|
101
|
-
const maticxPromise = safeFetch('MATICX', async () => {
|
|
102
|
-
const res = await fetch(FeedData.MATICX).then(r => r.json())
|
|
103
|
-
return Number(res.value) * 0.9
|
|
104
|
-
})
|
|
105
|
-
|
|
106
|
-
const susdePromise = safeFetch('SUSDE', async () => {
|
|
107
|
-
try {
|
|
108
|
-
const res = await fetch(FeedData.SUSDE).then(r => r.json())
|
|
109
|
-
return apyToAprPercent(res?.data[0]?.apy ?? 0)
|
|
110
|
-
} catch (e) {
|
|
111
|
-
return 0
|
|
112
|
-
}
|
|
113
|
-
})
|
|
114
|
-
|
|
115
|
-
const rsethPromise = safeFetch('RSETH', async () => {
|
|
116
|
-
const res = await fetch(FeedData.RSETH).then(r => r.json())
|
|
117
|
-
return apyToAprPercent(res.totalAPY)
|
|
118
|
-
})
|
|
119
|
-
|
|
120
|
-
const trumaticPromise = safeFetch('TRUMATIC', async () => {
|
|
121
|
-
const res = await fetch(FeedData.TRUMATIC).then(r => r.json())
|
|
122
|
-
return apyToAprPercent(res.apy)
|
|
123
|
-
})
|
|
124
|
-
|
|
125
|
-
const cbethPromise = safeFetch('CBETH', async () => {
|
|
126
|
-
try {
|
|
127
|
-
const res = await fetch(FeedData.CBETH, {
|
|
128
|
-
headers: {
|
|
129
|
-
"User-Agent": "1delta/yields",
|
|
130
|
-
"Content-Type": "application/json"
|
|
131
|
-
}
|
|
132
|
-
}).then(r => r.json())
|
|
133
|
-
return apyToAprPercent(res.apy) * 100
|
|
134
|
-
} catch (e) {
|
|
135
|
-
console.log("CBETH failed", e)
|
|
136
|
-
return 0
|
|
137
|
-
}
|
|
138
|
-
})
|
|
139
|
-
|
|
140
|
-
const meridianPromise = safeFetch('MERIDIAN', async () => {
|
|
141
|
-
const res = await fetch(LenderAPIs.MERIDIAN).then(r => r.json())
|
|
142
|
-
const taikoData = res[MeridainNetwork.TAIKO]
|
|
143
|
-
return Object.assign({}, ...Object.keys(taikoData).map(key => ({
|
|
144
|
-
[formatMeridianKey(key)]: {
|
|
145
|
-
deposit: taikoData[key].apy_reward,
|
|
146
|
-
borrow: taikoData[key].apy_reward_borrow
|
|
147
|
-
}
|
|
148
|
-
})))
|
|
149
|
-
})
|
|
150
|
-
|
|
151
|
-
const [
|
|
152
|
-
wstethData,
|
|
153
|
-
ezethData,
|
|
154
|
-
rethData,
|
|
155
|
-
weethData,
|
|
156
|
-
stmaticData,
|
|
157
|
-
methData,
|
|
158
|
-
maticXdata,
|
|
159
|
-
susdeData,
|
|
160
|
-
meridianData,
|
|
161
|
-
savaxData,
|
|
162
|
-
cbethData,
|
|
163
|
-
rsethData,
|
|
164
|
-
trumaticData
|
|
165
|
-
] = await Promise.all([
|
|
166
|
-
wstethPromise,
|
|
167
|
-
ezethPromise,
|
|
168
|
-
rethPromise,
|
|
169
|
-
weethPromise,
|
|
170
|
-
stmaticPromise,
|
|
171
|
-
methPromise,
|
|
172
|
-
maticxPromise,
|
|
173
|
-
susdePromise,
|
|
174
|
-
meridianPromise,
|
|
175
|
-
savaxPromise,
|
|
176
|
-
cbethPromise,
|
|
177
|
-
rsethPromise,
|
|
178
|
-
trumaticPromise,
|
|
179
|
-
])
|
|
180
|
-
|
|
181
|
-
const data: YieldDataWithTimestamp = {
|
|
182
|
-
intrinsicYields: {
|
|
183
|
-
MATICX: maticXdata,
|
|
184
|
-
METH: methData,
|
|
185
|
-
CMETH: methData,
|
|
186
|
-
WSTETH: wstethData,
|
|
187
|
-
EZETH: ezethData,
|
|
188
|
-
RETH: rethData,
|
|
189
|
-
WEETH: weethData,
|
|
190
|
-
STMATIC: stmaticData,
|
|
191
|
-
USDY: 4.35,
|
|
192
|
-
USDE: 0,
|
|
193
|
-
SUSDE: susdeData,
|
|
194
|
-
SAVAX: savaxData,
|
|
195
|
-
CBETH: cbethData,
|
|
196
|
-
RSETH: rsethData,
|
|
197
|
-
TRUMATIC: trumaticData,
|
|
146
|
+
const cbethPromise = safeFetch('CBETH', async () => {
|
|
147
|
+
try {
|
|
148
|
+
const res = await fetch(FeedData.CBETH, {
|
|
149
|
+
headers: {
|
|
150
|
+
'User-Agent': '1delta/yields',
|
|
151
|
+
'Content-Type': 'application/json',
|
|
198
152
|
},
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
153
|
+
}).then((r) => r.json())
|
|
154
|
+
return apyToAprPercent(res.apy) * 100
|
|
155
|
+
} catch (e) {
|
|
156
|
+
console.log('CBETH failed', e)
|
|
157
|
+
return 0
|
|
204
158
|
}
|
|
205
|
-
|
|
159
|
+
})
|
|
160
|
+
|
|
161
|
+
const meridianPromise = safeFetch('MERIDIAN', async () => {
|
|
162
|
+
const res = await fetch(LenderAPIs.MERIDIAN).then((r) => r.json())
|
|
163
|
+
const taikoData = res[MeridainNetwork.TAIKO]
|
|
164
|
+
return Object.assign(
|
|
165
|
+
{},
|
|
166
|
+
...Object.keys(taikoData).map((key) => ({
|
|
167
|
+
[formatMeridianKey(key)]: {
|
|
168
|
+
deposit: taikoData[key].apy_reward,
|
|
169
|
+
borrow: taikoData[key].apy_reward_borrow,
|
|
170
|
+
},
|
|
171
|
+
})),
|
|
172
|
+
)
|
|
173
|
+
})
|
|
174
|
+
|
|
175
|
+
const [
|
|
176
|
+
wstethData,
|
|
177
|
+
ezethData,
|
|
178
|
+
rethData,
|
|
179
|
+
weethData,
|
|
180
|
+
stmaticData,
|
|
181
|
+
methData,
|
|
182
|
+
maticXdata,
|
|
183
|
+
susdeData,
|
|
184
|
+
meridianData,
|
|
185
|
+
savaxData,
|
|
186
|
+
cbethData,
|
|
187
|
+
rsethData,
|
|
188
|
+
trumaticData,
|
|
189
|
+
rtokensData,
|
|
190
|
+
] = await Promise.all([
|
|
191
|
+
wstethPromise,
|
|
192
|
+
ezethPromise,
|
|
193
|
+
rethPromise,
|
|
194
|
+
weethPromise,
|
|
195
|
+
stmaticPromise,
|
|
196
|
+
methPromise,
|
|
197
|
+
maticxPromise,
|
|
198
|
+
susdePromise,
|
|
199
|
+
meridianPromise,
|
|
200
|
+
savaxPromise,
|
|
201
|
+
cbethPromise,
|
|
202
|
+
rsethPromise,
|
|
203
|
+
trumaticPromise,
|
|
204
|
+
rtokensPromise,
|
|
205
|
+
])
|
|
206
|
+
|
|
207
|
+
const data: YieldDataWithTimestamp = {
|
|
208
|
+
intrinsicYields: {
|
|
209
|
+
MATICX: maticXdata,
|
|
210
|
+
METH: methData,
|
|
211
|
+
CMETH: methData,
|
|
212
|
+
WSTETH: wstethData,
|
|
213
|
+
EZETH: ezethData,
|
|
214
|
+
RETH: rethData,
|
|
215
|
+
WEETH: weethData,
|
|
216
|
+
STMATIC: stmaticData,
|
|
217
|
+
USDY: 4.35,
|
|
218
|
+
USDE: 0,
|
|
219
|
+
SUSDE: susdeData,
|
|
220
|
+
SAVAX: savaxData,
|
|
221
|
+
CBETH: cbethData,
|
|
222
|
+
RSETH: rsethData,
|
|
223
|
+
TRUMATIC: trumaticData,
|
|
224
|
+
...rtokensData,
|
|
225
|
+
},
|
|
226
|
+
lenderRewards: {
|
|
227
|
+
'167000': {
|
|
228
|
+
MERIDIAN: meridianData,
|
|
229
|
+
},
|
|
230
|
+
},
|
|
231
|
+
}
|
|
232
|
+
return data
|
|
206
233
|
}
|
|
207
|
-
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { describe, it } from 'vitest'
|
|
2
|
+
import { attachPricesToFlashLiquidity, fetchFlashLiquidityForChain, fetchMainPrices } from "../src"
|
|
3
|
+
import { getEvmClient, multicallRetry } from "@1delta/providers"
|
|
4
|
+
import { Chain } from "@1delta/asset-registry"
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
describe('find flash liquidity', () => {
|
|
9
|
+
it('flash liquidity for chain', async () => {
|
|
10
|
+
|
|
11
|
+
const chain = Chain.HYPEREVM
|
|
12
|
+
|
|
13
|
+
const liquidity = await fetchFlashLiquidityForChain(chain, multicallRetry)
|
|
14
|
+
|
|
15
|
+
console.log("liquidity", liquidity)
|
|
16
|
+
|
|
17
|
+
const prices = await fetchMainPrices([chain], getEvmClient)
|
|
18
|
+
|
|
19
|
+
console.log("prices", prices)
|
|
20
|
+
|
|
21
|
+
const dataWithPrices = attachPricesToFlashLiquidity(chain, liquidity, prices)
|
|
22
|
+
|
|
23
|
+
console.log(dataWithPrices)
|
|
24
|
+
|
|
25
|
+
})
|
|
26
|
+
}, { timeout: 10000 })
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
function prettyPrint(obj: any) {
|
|
30
|
+
for (const key in obj) {
|
|
31
|
+
const value = obj[key]
|
|
32
|
+
const keyStr = `\x1b[1m\x1b[36m${key}:\x1b[0m` // bold cyan
|
|
33
|
+
if (typeof value === 'object' && value !== null) {
|
|
34
|
+
console.log(`${keyStr}`)
|
|
35
|
+
console.dir(value, { depth: null, colors: true })
|
|
36
|
+
} else {
|
|
37
|
+
console.log(`${keyStr} ${value}`)
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|