@1delta/margin-fetcher 0.0.9 → 0.0.11
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/abis/morpho/blue.d.ts +76 -0
- package/dist/abis/morpho/blue.d.ts.map +1 -0
- package/dist/abis/morpho/blue.js +99 -0
- package/dist/abis/morpho/lens.d.ts +16 -0
- package/dist/abis/morpho/lens.d.ts.map +1 -0
- package/dist/abis/morpho/lens.js +31 -0
- package/dist/flash-liquidity/index.d.ts +1 -0
- package/dist/flash-liquidity/index.d.ts.map +1 -1
- package/dist/flash-liquidity/index.js +1 -0
- package/dist/flash-liquidity/utils.d.ts +11 -0
- package/dist/flash-liquidity/utils.d.ts.map +1 -0
- package/dist/flash-liquidity/utils.js +17 -0
- package/dist/lending/aave-v2-type/publicCallParse.d.ts +2 -1
- package/dist/lending/aave-v2-type/publicCallParse.d.ts.map +1 -1
- package/dist/lending/aave-v2-type/publicCallParse.js +7 -4
- package/dist/lending/aave-v3-type/publicCallParse.d.ts +3 -2
- package/dist/lending/aave-v3-type/publicCallParse.d.ts.map +1 -1
- package/dist/lending/aave-v3-type/publicCallParse.js +11 -8
- package/dist/lending/aave-v3-type/types.d.ts +2 -0
- package/dist/lending/aave-v3-type/types.d.ts.map +1 -1
- package/dist/lending/compound-v3/publicCallParse.d.ts +5 -4
- package/dist/lending/compound-v3/publicCallParse.d.ts.map +1 -1
- package/dist/lending/compound-v3/publicCallParse.js +39 -23
- package/dist/lending/compound-v3/types.d.ts +2 -0
- package/dist/lending/compound-v3/types.d.ts.map +1 -1
- package/dist/lending/fetchLender.d.ts +2 -1
- package/dist/lending/fetchLender.d.ts.map +1 -1
- package/dist/lending/fetchLender.js +12 -8
- package/dist/lending/fetchLenderAll.d.ts +8 -0
- package/dist/lending/fetchLenderAll.d.ts.map +1 -0
- package/dist/lending/fetchLenderAll.js +12 -0
- package/dist/lending/fetchLenderExt.d.ts +8 -0
- package/dist/lending/fetchLenderExt.d.ts.map +1 -0
- package/dist/lending/fetchLenderExt.js +28 -0
- package/dist/lending/index.d.ts +1 -0
- package/dist/lending/index.d.ts.map +1 -1
- package/dist/lending/index.js +1 -0
- package/dist/lending/init/publicCallParse.d.ts +2 -1
- package/dist/lending/init/publicCallParse.d.ts.map +1 -1
- package/dist/lending/init/publicCallParse.js +3 -2
- package/dist/lending/init/types.d.ts +2 -0
- package/dist/lending/init/types.d.ts.map +1 -1
- package/dist/lending/morpho/convertPublic.d.ts +9 -0
- package/dist/lending/morpho/convertPublic.d.ts.map +1 -0
- package/dist/lending/morpho/convertPublic.js +115 -0
- package/dist/lending/morpho/fetchPublic.d.ts +3 -0
- package/dist/lending/morpho/fetchPublic.d.ts.map +1 -0
- package/dist/lending/morpho/fetchPublic.js +72 -0
- package/dist/lending/morpho/publicCallBuild.d.ts +8 -0
- package/dist/lending/morpho/publicCallBuild.d.ts.map +1 -0
- package/dist/lending/morpho/publicCallBuild.js +6 -0
- package/dist/lending/morpho/types.d.ts +106 -0
- package/dist/lending/morpho/types.d.ts.map +1 -0
- package/dist/lending/morpho/types.js +1 -0
- package/dist/lending/types/index.d.ts +18 -0
- package/dist/lending/types/index.d.ts.map +1 -0
- package/dist/lending/types/index.js +1 -0
- package/dist/lending/user-data/aave-v2-type/userCallParse.js +1 -1
- package/dist/lending/user-data/compound-v3/userCallParse.js +2 -2
- package/dist/lending/user-data/init/userCallParse.js +1 -1
- package/dist/lending/user-data/morpho/decoder.d.ts +21 -0
- package/dist/lending/user-data/morpho/decoder.d.ts.map +1 -0
- package/dist/lending/user-data/morpho/decoder.js +52 -0
- package/dist/lending/user-data/morpho/morphoLib.d.ts +5 -0
- package/dist/lending/user-data/morpho/morphoLib.d.ts.map +1 -0
- package/dist/lending/user-data/morpho/morphoLib.js +21 -0
- package/dist/lending/user-data/morpho/types.d.ts +12 -0
- package/dist/lending/user-data/morpho/types.d.ts.map +1 -0
- package/dist/lending/user-data/morpho/types.js +13 -0
- package/dist/lending/user-data/morpho/userCallBuild.d.ts +6 -0
- package/dist/lending/user-data/morpho/userCallBuild.d.ts.map +1 -0
- package/dist/lending/user-data/morpho/userCallBuild.js +36 -0
- package/dist/lending/user-data/morpho/userCallParse.d.ts +11 -0
- package/dist/lending/user-data/morpho/userCallParse.d.ts.map +1 -0
- package/dist/lending/user-data/morpho/userCallParse.js +99 -0
- package/dist/lending/user-data/morpho/userCallParseNoDeploy.d.ts +11 -0
- package/dist/lending/user-data/morpho/userCallParseNoDeploy.d.ts.map +1 -0
- package/dist/lending/user-data/morpho/userCallParseNoDeploy.js +112 -0
- package/dist/lending/user-data/types.d.ts +1 -1
- package/dist/lending/user-data/types.d.ts.map +1 -1
- package/dist/lending-pairs/computeLendingPairs.d.ts +2 -0
- package/dist/lending-pairs/computeLendingPairs.d.ts.map +1 -1
- package/dist/lending-pairs/computeLendingPairs.js +57 -30
- package/dist/prices/main-prices/fetchOracleData.d.ts +0 -1
- package/dist/prices/main-prices/fetchOracleData.d.ts.map +1 -1
- package/dist/prices/main-prices/fetchOracleData.js +86 -55
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +41 -16
- package/package.json +1 -1
- package/src/flash-liquidity/index.ts +2 -1
- package/src/flash-liquidity/utils.ts +22 -0
- package/src/lending/aave-v2-type/publicCallParse.ts +9 -4
- package/src/lending/aave-v3-type/publicCallParse.ts +13 -8
- package/src/lending/aave-v3-type/types.ts +2 -0
- package/src/lending/compound-v3/publicCallParse.ts +95 -36
- package/src/lending/compound-v3/types.ts +2 -0
- package/src/lending/fetchLender.ts +23 -17
- package/src/lending/index.ts +2 -1
- package/src/lending/init/publicCallParse.ts +5 -2
- package/src/lending/init/types.ts +3 -0
- package/src/lending/types/index.ts +16 -0
- package/src/lending/user-data/aave-v2-type/userCallParse.ts +1 -1
- package/src/lending/user-data/compound-v3/userCallParse.ts +2 -2
- package/src/lending/user-data/init/userCallParse.ts +1 -1
- package/src/lending/user-data/types.ts +1 -1
- package/src/lending-pairs/computeLendingPairs.ts +417 -315
- package/src/prices/main-prices/fetchOracleData.ts +187 -109
- package/src/utils/index.ts +90 -58
- package/test/index.test.ts +15 -7
|
@@ -6,29 +6,28 @@ import { RWADynamicOracleAbi } from '../../abis/oracle/RWADynamicOracle'
|
|
|
6
6
|
|
|
7
7
|
import { api3OracleAddresses } from './addresses/api3'
|
|
8
8
|
import { AAVE_V2_LENDERS, ASSET_META, Chain } from '@1delta/asset-registry'
|
|
9
|
-
import { formatEther
|
|
9
|
+
import { formatEther } from 'viem'
|
|
10
10
|
import { getAaveAssets } from '../../assets'
|
|
11
|
-
import {
|
|
11
|
+
import {
|
|
12
|
+
chainlinkOracles,
|
|
13
|
+
getChainLinkKeys,
|
|
14
|
+
ChainlinkAggregatorIndexes,
|
|
15
|
+
} from './addresses/chainlink'
|
|
12
16
|
import { fetchDefillamaData } from '../defillama'
|
|
13
17
|
import { multicallViemAbiArray } from '../../utils/multicall'
|
|
14
18
|
import { AAVE_STYLE_ORACLES } from './addresses/aaveOracles'
|
|
15
19
|
import { AAVES_PER_CHAIN } from '../../utils'
|
|
16
20
|
import { GetEvmClientFunction } from '../../types'
|
|
21
|
+
import { parseRawAmount } from '../../utils/parsing'
|
|
17
22
|
|
|
18
23
|
export const formatAavePrice = (price: string, isV2 = false): number => {
|
|
19
|
-
return Number(
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
if (!answer || answer === "0x") return 0
|
|
27
|
-
try {
|
|
28
|
-
return Number(formatUnits(BigInt(answer ?? '0'), decimals ?? 18))
|
|
29
|
-
} catch (e) {
|
|
30
|
-
return 0
|
|
31
|
-
}
|
|
24
|
+
return Number(
|
|
25
|
+
formatEther(
|
|
26
|
+
BigInt(price ?? '0') *
|
|
27
|
+
// 10^(18 - decimals)
|
|
28
|
+
10n ** (isV2 ? 0n : 10n),
|
|
29
|
+
),
|
|
30
|
+
)
|
|
32
31
|
}
|
|
33
32
|
|
|
34
33
|
const LENDLE_PAIR_MANTLE = '0x4c57BE599d0e0414785943569E9B6A66dA79Aa6b'
|
|
@@ -40,24 +39,31 @@ interface OracleData {
|
|
|
40
39
|
[key: string]: number
|
|
41
40
|
}
|
|
42
41
|
|
|
43
|
-
type QueryAave = { oracle: string
|
|
42
|
+
type QueryAave = { oracle: string; assets: string[]; fork: string }
|
|
44
43
|
|
|
45
44
|
/**
|
|
46
45
|
* Fetches Aave and uniswap V2 oracle data
|
|
47
46
|
*/
|
|
48
|
-
export const fetchMainPrices = async (
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
47
|
+
export const fetchMainPrices = async (
|
|
48
|
+
chainIds: string[],
|
|
49
|
+
getEvmClient: GetEvmClientFunction,
|
|
50
|
+
): Promise<OracleData> => {
|
|
51
|
+
let promises = chainIds.map((chainId) => {
|
|
52
52
|
const aaveForks = AAVES_PER_CHAIN[chainId]
|
|
53
|
-
let reservesToQuery: { fork: string
|
|
53
|
+
let reservesToQuery: { fork: string; assets: string[] }[] = aaveForks.map(
|
|
54
|
+
(a) => ({ fork: a, assets: getAaveAssets(chainId, a) }),
|
|
55
|
+
)
|
|
54
56
|
let handled: string[] = []
|
|
55
57
|
let queries: QueryAave[] = []
|
|
56
|
-
reservesToQuery.forEach(e => {
|
|
57
|
-
const newOnes = e.assets.filter(a => !handled.includes(a))
|
|
58
|
+
reservesToQuery.forEach((e) => {
|
|
59
|
+
const newOnes = e.assets.filter((a) => !handled.includes(a))
|
|
58
60
|
if (newOnes.length > 0) {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
+
queries.push({
|
|
62
|
+
assets: newOnes,
|
|
63
|
+
// @ts-ignore
|
|
64
|
+
oracle: AAVE_STYLE_ORACLES[e.fork][chainId],
|
|
65
|
+
fork: e.fork,
|
|
66
|
+
})
|
|
61
67
|
handled = [...handled, ...newOnes]
|
|
62
68
|
}
|
|
63
69
|
})
|
|
@@ -73,52 +79,80 @@ export const fetchMainPrices = async (chainIds: string[], getEvmClient: GetEvmCl
|
|
|
73
79
|
|
|
74
80
|
return multicallViemAbiArray(
|
|
75
81
|
chainId,
|
|
76
|
-
[
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
82
|
+
[
|
|
83
|
+
...ChainLinkAggregatorAbi,
|
|
84
|
+
...UniswapV2PairAbi,
|
|
85
|
+
...AaveOracleAbi,
|
|
86
|
+
...Api3OracleAbi,
|
|
87
|
+
...RWADynamicOracleAbi,
|
|
88
|
+
],
|
|
89
|
+
[
|
|
90
|
+
...callsChainLink,
|
|
91
|
+
...callAave,
|
|
92
|
+
...uniswapV2Calls,
|
|
93
|
+
...api3Calls,
|
|
94
|
+
...rwaCalls,
|
|
95
|
+
],
|
|
96
|
+
getEvmClient,
|
|
97
|
+
).then((multicallResult) => {
|
|
98
|
+
const chainLinkResults = multicallResult.slice(0, callsChainLink.length)
|
|
84
99
|
|
|
85
100
|
const aaveResult = multicallResult.slice(
|
|
86
101
|
callsChainLink.length,
|
|
87
|
-
callsChainLink.length + callAave.length
|
|
102
|
+
callsChainLink.length + callAave.length,
|
|
88
103
|
)
|
|
89
104
|
|
|
90
|
-
const chainLinkData = parseChainLinkResults(
|
|
105
|
+
const chainLinkData = parseChainLinkResults(
|
|
106
|
+
chainId,
|
|
107
|
+
chainLinkResults,
|
|
108
|
+
chainLinkNames,
|
|
109
|
+
)
|
|
91
110
|
// @ts-ignore
|
|
92
111
|
const aaveData = parseAaveResults(chainId, aaveResult, queries)
|
|
93
112
|
|
|
94
113
|
const uniswapResult = multicallResult.slice(
|
|
95
114
|
callsChainLink.length + callAave.length,
|
|
96
|
-
callsChainLink.length + callAave.length + uniswapV2Calls.length
|
|
115
|
+
callsChainLink.length + callAave.length + uniswapV2Calls.length,
|
|
97
116
|
)
|
|
98
117
|
|
|
99
118
|
const api3Result = multicallResult.slice(
|
|
100
119
|
callsChainLink.length + callAave.length + uniswapV2Calls.length,
|
|
101
|
-
callsChainLink.length +
|
|
120
|
+
callsChainLink.length +
|
|
121
|
+
callAave.length +
|
|
122
|
+
uniswapV2Calls.length +
|
|
123
|
+
api3Calls.length,
|
|
102
124
|
)
|
|
103
125
|
|
|
104
|
-
|
|
105
126
|
const uniswapData = parseUniswapV2results(uniswapResult, chainId)
|
|
106
127
|
|
|
107
128
|
const api3Data = parseApi3Results(chainId, api3Result, api3Names)
|
|
108
129
|
|
|
109
130
|
const rwaResult = multicallResult.slice(
|
|
110
|
-
callsChainLink.length +
|
|
111
|
-
|
|
131
|
+
callsChainLink.length +
|
|
132
|
+
callAave.length +
|
|
133
|
+
uniswapV2Calls.length +
|
|
134
|
+
api3Calls.length,
|
|
135
|
+
callsChainLink.length +
|
|
136
|
+
callAave.length +
|
|
137
|
+
uniswapV2Calls.length +
|
|
138
|
+
api3Calls.length +
|
|
139
|
+
rwaCalls.length,
|
|
112
140
|
)
|
|
113
141
|
|
|
114
142
|
const rwaData = parseRWADynamicOracleResults(chainId, rwaResult, rwaNames)
|
|
115
|
-
return {
|
|
143
|
+
return {
|
|
144
|
+
...uniswapData,
|
|
145
|
+
...aaveData,
|
|
146
|
+
...chainLinkData,
|
|
147
|
+
...api3Data,
|
|
148
|
+
...rwaData,
|
|
149
|
+
}
|
|
116
150
|
})
|
|
117
151
|
})
|
|
118
152
|
promises.push(fetchDefillamaData())
|
|
119
153
|
const result = await Promise.all(promises)
|
|
120
154
|
let data: any = {}
|
|
121
|
-
result.forEach(r => {
|
|
155
|
+
result.forEach((r) => {
|
|
122
156
|
data = { ...data, ...r }
|
|
123
157
|
})
|
|
124
158
|
|
|
@@ -137,17 +171,17 @@ const getUniswapV2Calls = (chainId: string) => {
|
|
|
137
171
|
{
|
|
138
172
|
address: WMNT_USDT_PAIR,
|
|
139
173
|
name: 'getReserves',
|
|
140
|
-
params: []
|
|
174
|
+
params: [],
|
|
141
175
|
},
|
|
142
176
|
{
|
|
143
177
|
address: LENDLE_PAIR_MANTLE,
|
|
144
178
|
name: 'getReserves',
|
|
145
|
-
params: []
|
|
179
|
+
params: [],
|
|
146
180
|
},
|
|
147
181
|
{
|
|
148
182
|
address: AU_PAIR_MANTLE,
|
|
149
183
|
name: 'getReserves',
|
|
150
|
-
params: []
|
|
184
|
+
params: [],
|
|
151
185
|
},
|
|
152
186
|
]
|
|
153
187
|
default:
|
|
@@ -158,38 +192,43 @@ const getUniswapV2Calls = (chainId: string) => {
|
|
|
158
192
|
/**
|
|
159
193
|
* Create calldata for aave oracles
|
|
160
194
|
* @param chainId network
|
|
161
|
-
* @param addressesAaveUnderlyings address array
|
|
195
|
+
* @param addressesAaveUnderlyings address array
|
|
162
196
|
* @returns call data
|
|
163
197
|
*/
|
|
164
198
|
const getAaveCalls = (query: QueryAave[]) => {
|
|
165
199
|
if (query.length === 0) return []
|
|
166
|
-
return query
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
200
|
+
return query
|
|
201
|
+
.map(({ oracle, assets }) => ({
|
|
202
|
+
address: oracle,
|
|
203
|
+
name: 'getAssetsPrices',
|
|
204
|
+
params: [assets],
|
|
205
|
+
}))
|
|
206
|
+
.flat()
|
|
172
207
|
}
|
|
173
208
|
|
|
174
209
|
/**
|
|
175
210
|
* Create calldata for chainLink oracles
|
|
176
211
|
* @param chainId network
|
|
177
|
-
* @param addressesAaveUnderlyings address array
|
|
212
|
+
* @param addressesAaveUnderlyings address array
|
|
178
213
|
* @returns call data
|
|
179
214
|
*/
|
|
180
|
-
const getChainLinkCalls = (
|
|
215
|
+
const getChainLinkCalls = (
|
|
216
|
+
chainId: string,
|
|
217
|
+
): [
|
|
181
218
|
{
|
|
182
|
-
address: string
|
|
219
|
+
address: string
|
|
183
220
|
name: string
|
|
184
|
-
params: any[]
|
|
221
|
+
params: any[]
|
|
185
222
|
}[],
|
|
186
|
-
string[]
|
|
223
|
+
string[],
|
|
187
224
|
] => {
|
|
188
225
|
switch (chainId) {
|
|
189
226
|
case Chain.MANTLE:
|
|
190
227
|
return [[], []]
|
|
191
228
|
default: {
|
|
192
|
-
const keys = getChainLinkKeys(chainId).filter(
|
|
229
|
+
const keys = getChainLinkKeys(chainId).filter(
|
|
230
|
+
(k) => k.split('-')[1] === 'USD',
|
|
231
|
+
)
|
|
193
232
|
// @ts-ignore
|
|
194
233
|
const addresses = keys.map((k) => chainlinkOracles[k][chainId])
|
|
195
234
|
return [
|
|
@@ -200,13 +239,12 @@ const getChainLinkCalls = (chainId: string): [
|
|
|
200
239
|
params: [],
|
|
201
240
|
}
|
|
202
241
|
}),
|
|
203
|
-
keys.map(k => k.split('-')[0])
|
|
242
|
+
keys.map((k) => k.split('-')[0]),
|
|
204
243
|
]
|
|
205
244
|
}
|
|
206
245
|
}
|
|
207
246
|
}
|
|
208
247
|
|
|
209
|
-
|
|
210
248
|
/**
|
|
211
249
|
* Processes data creeated from fetch through 'getUniswapV2Calls
|
|
212
250
|
* @param data the result data array slice from the multicall
|
|
@@ -220,18 +258,26 @@ const parseUniswapV2results = (data: any[], chainId: string) => {
|
|
|
220
258
|
if (data.length > 0) {
|
|
221
259
|
const reserves = data[1]
|
|
222
260
|
// lendle and wmnt are respective token0s
|
|
223
|
-
const lendleReserve = parseRawAmount(reserves[0].toString(), 18)
|
|
224
|
-
const wmntReserve = parseRawAmount(reserves[1].toString(), 18)
|
|
261
|
+
const lendleReserve = Number(parseRawAmount(reserves[0].toString(), 18))
|
|
262
|
+
const wmntReserve = Number(parseRawAmount(reserves[1].toString(), 18))
|
|
225
263
|
|
|
226
264
|
const auReserves = data[2]
|
|
227
|
-
const auReserve = parseRawAmount(auReserves[1].toString(), 18)
|
|
228
|
-
const wmntReserve_au =
|
|
265
|
+
const auReserve = Number(parseRawAmount(auReserves[1].toString(), 18))
|
|
266
|
+
const wmntReserve_au = Number(
|
|
267
|
+
parseRawAmount(auReserves[0].toString(), 18),
|
|
268
|
+
)
|
|
229
269
|
|
|
230
270
|
const reservesWmntUsdt = data[0]
|
|
231
|
-
const usdtReserve =
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
const
|
|
271
|
+
const usdtReserve = Number(
|
|
272
|
+
parseRawAmount(reservesWmntUsdt[0].toString(), 6),
|
|
273
|
+
)
|
|
274
|
+
const wmnt2Reserve = Number(
|
|
275
|
+
parseRawAmount(reservesWmntUsdt[1].toString(), 18),
|
|
276
|
+
)
|
|
277
|
+
const lendPrice =
|
|
278
|
+
(wmntReserve / lendleReserve / wmnt2Reserve) * usdtReserve
|
|
279
|
+
const auPrice =
|
|
280
|
+
(wmntReserve_au / auReserve / wmnt2Reserve) * usdtReserve
|
|
235
281
|
uniswapData['LEND'] = lendPrice
|
|
236
282
|
uniswapData['AU'] = auPrice
|
|
237
283
|
}
|
|
@@ -244,14 +290,11 @@ const parseUniswapV2results = (data: any[], chainId: string) => {
|
|
|
244
290
|
|
|
245
291
|
function lowDecimalOracle(chainId: string, fork: string) {
|
|
246
292
|
// some chains only have high decimal oracles
|
|
247
|
-
if (
|
|
248
|
-
chainId === Chain.AVALANCHE_C_CHAIN ||
|
|
249
|
-
chainId === Chain.MODE) {
|
|
293
|
+
if (chainId === Chain.AVALANCHE_C_CHAIN || chainId === Chain.MODE) {
|
|
250
294
|
return false
|
|
251
295
|
}
|
|
252
296
|
// otherwise, it depends on whether it is aave V3
|
|
253
297
|
return AAVE_V2_LENDERS.includes(fork as any)
|
|
254
|
-
|
|
255
298
|
}
|
|
256
299
|
|
|
257
300
|
/**
|
|
@@ -261,24 +304,30 @@ function lowDecimalOracle(chainId: string, fork: string) {
|
|
|
261
304
|
* @param assetName asset names (aligned with the originall addresses called)
|
|
262
305
|
* @returns price mapping asset->number
|
|
263
306
|
*/
|
|
264
|
-
const parseAaveResults = (
|
|
265
|
-
|
|
307
|
+
const parseAaveResults = (
|
|
308
|
+
chainId: string,
|
|
309
|
+
data: any[],
|
|
310
|
+
queries: QueryAave[],
|
|
311
|
+
) => {
|
|
266
312
|
let prices: any = {}
|
|
267
313
|
|
|
268
314
|
data.forEach((d, i) => {
|
|
269
315
|
const details = queries[i]
|
|
270
316
|
details.assets.forEach((a, j) => {
|
|
271
|
-
const oracleId =
|
|
272
|
-
|
|
317
|
+
const oracleId =
|
|
318
|
+
ASSET_META[chainId][a]?.assetGroup ??
|
|
319
|
+
ASSET_META[chainId]?.[a]?.symbol ??
|
|
320
|
+
chainId + '-' + a
|
|
321
|
+
prices[oracleId] = formatAavePrice(
|
|
322
|
+
d[j].toString(),
|
|
323
|
+
lowDecimalOracle(chainId, details.fork as any),
|
|
324
|
+
)
|
|
273
325
|
})
|
|
274
326
|
})
|
|
275
327
|
|
|
276
328
|
return prices
|
|
277
|
-
|
|
278
|
-
|
|
279
329
|
}
|
|
280
330
|
|
|
281
|
-
|
|
282
331
|
/**
|
|
283
332
|
* Parser for aave results in ulticall slice
|
|
284
333
|
* @param chainId network
|
|
@@ -286,38 +335,48 @@ const parseAaveResults = (chainId: string, data: any[], queries: QueryAave[]) =>
|
|
|
286
335
|
* @param assetName asset names (aligned with the originall addresses called)
|
|
287
336
|
* @returns price mapping asset->number
|
|
288
337
|
*/
|
|
289
|
-
const parseChainLinkResults = (
|
|
338
|
+
const parseChainLinkResults = (
|
|
339
|
+
chainId: string,
|
|
340
|
+
data: any[],
|
|
341
|
+
assetName: string[],
|
|
342
|
+
) => {
|
|
290
343
|
switch (chainId) {
|
|
291
344
|
default: {
|
|
292
345
|
return Object.assign(
|
|
293
346
|
{},
|
|
294
347
|
...data.map((entry, index) => {
|
|
295
348
|
return {
|
|
296
|
-
[assetName[index]]:
|
|
349
|
+
[assetName[index]]: Number(
|
|
350
|
+
parseRawAmount(
|
|
351
|
+
entry?.[ChainlinkAggregatorIndexes.answer]?.toString() ?? '0',
|
|
352
|
+
8,
|
|
353
|
+
),
|
|
354
|
+
),
|
|
297
355
|
}
|
|
298
|
-
})
|
|
356
|
+
}),
|
|
299
357
|
)
|
|
300
358
|
}
|
|
301
359
|
}
|
|
302
360
|
}
|
|
303
361
|
|
|
304
|
-
|
|
305
362
|
/**
|
|
306
363
|
* Create calldata for api3 oracles
|
|
307
364
|
* @param chainId network
|
|
308
365
|
* @returns call data
|
|
309
366
|
*/
|
|
310
|
-
const getApi3Calls = (
|
|
367
|
+
const getApi3Calls = (
|
|
368
|
+
chainId: string,
|
|
369
|
+
): [
|
|
311
370
|
{
|
|
312
|
-
address: string
|
|
371
|
+
address: string
|
|
313
372
|
name: string
|
|
314
|
-
params: any[]
|
|
373
|
+
params: any[]
|
|
315
374
|
}[],
|
|
316
|
-
string[]
|
|
375
|
+
string[],
|
|
317
376
|
] => {
|
|
318
377
|
switch (chainId) {
|
|
319
378
|
case Chain.MANTLE: {
|
|
320
|
-
const keys = [
|
|
379
|
+
const keys = ['WETH', 'METH', 'FBTC', 'CMETH']
|
|
321
380
|
const addresses = keys.map((k) => api3OracleAddresses[chainId][k])
|
|
322
381
|
return [
|
|
323
382
|
addresses.map((tk) => {
|
|
@@ -327,7 +386,7 @@ const getApi3Calls = (chainId: string): [
|
|
|
327
386
|
params: [],
|
|
328
387
|
}
|
|
329
388
|
}),
|
|
330
|
-
keys
|
|
389
|
+
keys,
|
|
331
390
|
]
|
|
332
391
|
}
|
|
333
392
|
default:
|
|
@@ -342,20 +401,26 @@ const getApi3Calls = (chainId: string): [
|
|
|
342
401
|
* @param assetName asset names (aligned with the originall addresses called)
|
|
343
402
|
* @returns price mapping asset->number
|
|
344
403
|
*/
|
|
345
|
-
const parseApi3Results = (
|
|
404
|
+
const parseApi3Results = (
|
|
405
|
+
chainId: string,
|
|
406
|
+
data: any[],
|
|
407
|
+
assetName: string[],
|
|
408
|
+
) => {
|
|
346
409
|
switch (chainId) {
|
|
347
410
|
case Chain.MANTLE: {
|
|
348
411
|
let prices = Object.assign(
|
|
349
412
|
{},
|
|
350
413
|
...data.map((entry, index) => {
|
|
351
414
|
return {
|
|
352
|
-
[assetName[index]]:
|
|
415
|
+
[assetName[index]]: Number(
|
|
416
|
+
parseRawAmount(entry?.[0]?.toString() ?? '0', 18),
|
|
417
|
+
),
|
|
353
418
|
}
|
|
354
|
-
})
|
|
419
|
+
}),
|
|
355
420
|
)
|
|
356
|
-
// METH is given in mETH/WETH
|
|
357
|
-
prices[
|
|
358
|
-
prices[
|
|
421
|
+
// METH is given in mETH/WETH
|
|
422
|
+
prices['METH'] = prices['METH'] * prices['WETH']
|
|
423
|
+
prices['CMETH'] = prices['CMETH'] * prices['METH']
|
|
359
424
|
return prices
|
|
360
425
|
}
|
|
361
426
|
default: {
|
|
@@ -369,22 +434,29 @@ const parseApi3Results = (chainId: string, data: any[], assetName: string[]) =>
|
|
|
369
434
|
* @param chainId network
|
|
370
435
|
* @returns call data
|
|
371
436
|
*/
|
|
372
|
-
const getRWADynamicOracleCalls = (
|
|
437
|
+
const getRWADynamicOracleCalls = (
|
|
438
|
+
chainId: string,
|
|
439
|
+
): [
|
|
373
440
|
{
|
|
374
|
-
address: string
|
|
441
|
+
address: string
|
|
375
442
|
name: string
|
|
376
|
-
params: any[]
|
|
443
|
+
params: any[]
|
|
377
444
|
}[],
|
|
378
|
-
string[]
|
|
445
|
+
string[],
|
|
379
446
|
] => {
|
|
380
447
|
switch (chainId) {
|
|
381
448
|
case Chain.MANTLE: {
|
|
382
|
-
const keys = [
|
|
383
|
-
return [
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
449
|
+
const keys = ['USDY_MUSD']
|
|
450
|
+
return [
|
|
451
|
+
[
|
|
452
|
+
{
|
|
453
|
+
address: RWA_DYNAMIC_ORACLE,
|
|
454
|
+
name: 'getPrice',
|
|
455
|
+
params: [],
|
|
456
|
+
},
|
|
457
|
+
],
|
|
458
|
+
keys,
|
|
459
|
+
]
|
|
388
460
|
}
|
|
389
461
|
default:
|
|
390
462
|
return [[], []]
|
|
@@ -398,16 +470,22 @@ const getRWADynamicOracleCalls = (chainId: string): [
|
|
|
398
470
|
* @param assetName asset names (aligned with the originall addresses called)
|
|
399
471
|
* @returns price mapping asset->number
|
|
400
472
|
*/
|
|
401
|
-
const parseRWADynamicOracleResults = (
|
|
473
|
+
const parseRWADynamicOracleResults = (
|
|
474
|
+
chainId: string,
|
|
475
|
+
data: any[],
|
|
476
|
+
assetName: string[],
|
|
477
|
+
) => {
|
|
402
478
|
switch (chainId) {
|
|
403
479
|
case Chain.MANTLE: {
|
|
404
480
|
let prices = Object.assign(
|
|
405
481
|
{},
|
|
406
482
|
...data.map((entry, index) => {
|
|
407
483
|
return {
|
|
408
|
-
[assetName[index]]:
|
|
484
|
+
[assetName[index]]: Number(
|
|
485
|
+
parseRawAmount(entry?.toString() ?? '0', 18),
|
|
486
|
+
),
|
|
409
487
|
}
|
|
410
|
-
})
|
|
488
|
+
}),
|
|
411
489
|
)
|
|
412
490
|
return prices
|
|
413
491
|
}
|
|
@@ -415,4 +493,4 @@ const parseRWADynamicOracleResults = (chainId: string, data: any[], assetName: s
|
|
|
415
493
|
return {}
|
|
416
494
|
}
|
|
417
495
|
}
|
|
418
|
-
}
|
|
496
|
+
}
|