@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.
Files changed (110) hide show
  1. package/dist/abis/morpho/blue.d.ts +76 -0
  2. package/dist/abis/morpho/blue.d.ts.map +1 -0
  3. package/dist/abis/morpho/blue.js +99 -0
  4. package/dist/abis/morpho/lens.d.ts +16 -0
  5. package/dist/abis/morpho/lens.d.ts.map +1 -0
  6. package/dist/abis/morpho/lens.js +31 -0
  7. package/dist/flash-liquidity/index.d.ts +1 -0
  8. package/dist/flash-liquidity/index.d.ts.map +1 -1
  9. package/dist/flash-liquidity/index.js +1 -0
  10. package/dist/flash-liquidity/utils.d.ts +11 -0
  11. package/dist/flash-liquidity/utils.d.ts.map +1 -0
  12. package/dist/flash-liquidity/utils.js +17 -0
  13. package/dist/lending/aave-v2-type/publicCallParse.d.ts +2 -1
  14. package/dist/lending/aave-v2-type/publicCallParse.d.ts.map +1 -1
  15. package/dist/lending/aave-v2-type/publicCallParse.js +7 -4
  16. package/dist/lending/aave-v3-type/publicCallParse.d.ts +3 -2
  17. package/dist/lending/aave-v3-type/publicCallParse.d.ts.map +1 -1
  18. package/dist/lending/aave-v3-type/publicCallParse.js +11 -8
  19. package/dist/lending/aave-v3-type/types.d.ts +2 -0
  20. package/dist/lending/aave-v3-type/types.d.ts.map +1 -1
  21. package/dist/lending/compound-v3/publicCallParse.d.ts +5 -4
  22. package/dist/lending/compound-v3/publicCallParse.d.ts.map +1 -1
  23. package/dist/lending/compound-v3/publicCallParse.js +39 -23
  24. package/dist/lending/compound-v3/types.d.ts +2 -0
  25. package/dist/lending/compound-v3/types.d.ts.map +1 -1
  26. package/dist/lending/fetchLender.d.ts +2 -1
  27. package/dist/lending/fetchLender.d.ts.map +1 -1
  28. package/dist/lending/fetchLender.js +12 -8
  29. package/dist/lending/fetchLenderAll.d.ts +8 -0
  30. package/dist/lending/fetchLenderAll.d.ts.map +1 -0
  31. package/dist/lending/fetchLenderAll.js +12 -0
  32. package/dist/lending/fetchLenderExt.d.ts +8 -0
  33. package/dist/lending/fetchLenderExt.d.ts.map +1 -0
  34. package/dist/lending/fetchLenderExt.js +28 -0
  35. package/dist/lending/index.d.ts +1 -0
  36. package/dist/lending/index.d.ts.map +1 -1
  37. package/dist/lending/index.js +1 -0
  38. package/dist/lending/init/publicCallParse.d.ts +2 -1
  39. package/dist/lending/init/publicCallParse.d.ts.map +1 -1
  40. package/dist/lending/init/publicCallParse.js +3 -2
  41. package/dist/lending/init/types.d.ts +2 -0
  42. package/dist/lending/init/types.d.ts.map +1 -1
  43. package/dist/lending/morpho/convertPublic.d.ts +9 -0
  44. package/dist/lending/morpho/convertPublic.d.ts.map +1 -0
  45. package/dist/lending/morpho/convertPublic.js +115 -0
  46. package/dist/lending/morpho/fetchPublic.d.ts +3 -0
  47. package/dist/lending/morpho/fetchPublic.d.ts.map +1 -0
  48. package/dist/lending/morpho/fetchPublic.js +72 -0
  49. package/dist/lending/morpho/publicCallBuild.d.ts +8 -0
  50. package/dist/lending/morpho/publicCallBuild.d.ts.map +1 -0
  51. package/dist/lending/morpho/publicCallBuild.js +6 -0
  52. package/dist/lending/morpho/types.d.ts +106 -0
  53. package/dist/lending/morpho/types.d.ts.map +1 -0
  54. package/dist/lending/morpho/types.js +1 -0
  55. package/dist/lending/types/index.d.ts +18 -0
  56. package/dist/lending/types/index.d.ts.map +1 -0
  57. package/dist/lending/types/index.js +1 -0
  58. package/dist/lending/user-data/aave-v2-type/userCallParse.js +1 -1
  59. package/dist/lending/user-data/compound-v3/userCallParse.js +2 -2
  60. package/dist/lending/user-data/init/userCallParse.js +1 -1
  61. package/dist/lending/user-data/morpho/decoder.d.ts +21 -0
  62. package/dist/lending/user-data/morpho/decoder.d.ts.map +1 -0
  63. package/dist/lending/user-data/morpho/decoder.js +52 -0
  64. package/dist/lending/user-data/morpho/morphoLib.d.ts +5 -0
  65. package/dist/lending/user-data/morpho/morphoLib.d.ts.map +1 -0
  66. package/dist/lending/user-data/morpho/morphoLib.js +21 -0
  67. package/dist/lending/user-data/morpho/types.d.ts +12 -0
  68. package/dist/lending/user-data/morpho/types.d.ts.map +1 -0
  69. package/dist/lending/user-data/morpho/types.js +13 -0
  70. package/dist/lending/user-data/morpho/userCallBuild.d.ts +6 -0
  71. package/dist/lending/user-data/morpho/userCallBuild.d.ts.map +1 -0
  72. package/dist/lending/user-data/morpho/userCallBuild.js +36 -0
  73. package/dist/lending/user-data/morpho/userCallParse.d.ts +11 -0
  74. package/dist/lending/user-data/morpho/userCallParse.d.ts.map +1 -0
  75. package/dist/lending/user-data/morpho/userCallParse.js +99 -0
  76. package/dist/lending/user-data/morpho/userCallParseNoDeploy.d.ts +11 -0
  77. package/dist/lending/user-data/morpho/userCallParseNoDeploy.d.ts.map +1 -0
  78. package/dist/lending/user-data/morpho/userCallParseNoDeploy.js +112 -0
  79. package/dist/lending/user-data/types.d.ts +1 -1
  80. package/dist/lending/user-data/types.d.ts.map +1 -1
  81. package/dist/lending-pairs/computeLendingPairs.d.ts +2 -0
  82. package/dist/lending-pairs/computeLendingPairs.d.ts.map +1 -1
  83. package/dist/lending-pairs/computeLendingPairs.js +57 -30
  84. package/dist/prices/main-prices/fetchOracleData.d.ts +0 -1
  85. package/dist/prices/main-prices/fetchOracleData.d.ts.map +1 -1
  86. package/dist/prices/main-prices/fetchOracleData.js +86 -55
  87. package/dist/utils/index.d.ts +2 -0
  88. package/dist/utils/index.d.ts.map +1 -1
  89. package/dist/utils/index.js +41 -16
  90. package/package.json +1 -1
  91. package/src/flash-liquidity/index.ts +2 -1
  92. package/src/flash-liquidity/utils.ts +22 -0
  93. package/src/lending/aave-v2-type/publicCallParse.ts +9 -4
  94. package/src/lending/aave-v3-type/publicCallParse.ts +13 -8
  95. package/src/lending/aave-v3-type/types.ts +2 -0
  96. package/src/lending/compound-v3/publicCallParse.ts +95 -36
  97. package/src/lending/compound-v3/types.ts +2 -0
  98. package/src/lending/fetchLender.ts +23 -17
  99. package/src/lending/index.ts +2 -1
  100. package/src/lending/init/publicCallParse.ts +5 -2
  101. package/src/lending/init/types.ts +3 -0
  102. package/src/lending/types/index.ts +16 -0
  103. package/src/lending/user-data/aave-v2-type/userCallParse.ts +1 -1
  104. package/src/lending/user-data/compound-v3/userCallParse.ts +2 -2
  105. package/src/lending/user-data/init/userCallParse.ts +1 -1
  106. package/src/lending/user-data/types.ts +1 -1
  107. package/src/lending-pairs/computeLendingPairs.ts +417 -315
  108. package/src/prices/main-prices/fetchOracleData.ts +187 -109
  109. package/src/utils/index.ts +90 -58
  110. 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, formatUnits, zeroAddress } from 'viem'
9
+ import { formatEther } from 'viem'
10
10
  import { getAaveAssets } from '../../assets'
11
- import { chainlinkOracles, getChainLinkKeys, ChainlinkAggregatorIndexes } from './addresses/chainlink'
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(formatEther(BigInt(price ?? '0') * (
20
- // 10^(18 - decimals)
21
- 10n ** (isV2 ? 0n : 10n)
22
- )))
23
- }
24
-
25
- export const parseRawAmount = (answer?: string, decimals = 18): number => {
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, assets: string[], fork: 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 (chainIds: string[], getEvmClient: GetEvmClientFunction): Promise<OracleData> => {
49
-
50
- let promises = chainIds.map(chainId => {
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, assets: string[] }[] = aaveForks.map(a => ({ fork: a, assets: getAaveAssets(chainId, a) }))
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
- // @ts-ignore
60
- queries.push({ assets: newOnes, oracle: AAVE_STYLE_ORACLES[e.fork][chainId], fork: e.fork })
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
- [...ChainLinkAggregatorAbi, ...UniswapV2PairAbi, ...AaveOracleAbi, ...Api3OracleAbi, ...RWADynamicOracleAbi],
77
- [...callsChainLink, ...callAave, ...uniswapV2Calls, ...api3Calls, ...rwaCalls], getEvmClient
78
- ).then(multicallResult => {
79
-
80
- const chainLinkResults = multicallResult.slice(
81
- 0,
82
- callsChainLink.length
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(chainId, chainLinkResults, chainLinkNames)
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 + callAave.length + uniswapV2Calls.length + api3Calls.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 + callAave.length + uniswapV2Calls.length + api3Calls.length,
111
- callsChainLink.length + callAave.length + uniswapV2Calls.length + api3Calls.length + rwaCalls.length
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 { ...uniswapData, ...aaveData, ...chainLinkData, ...api3Data, ...rwaData, }
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.map(({ oracle, assets }) => ({
167
- address: oracle,
168
- name: 'getAssetsPrices',
169
- params: [assets],
170
-
171
- })).flat()
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 = (chainId: string): [
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(k => k.split('-')[1] === 'USD')
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 = parseRawAmount(auReserves[0].toString(), 18)
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 = parseRawAmount(reservesWmntUsdt[0].toString(), 6)
232
- const wmnt2Reserve = parseRawAmount(reservesWmntUsdt[1].toString(), 18)
233
- const lendPrice = wmntReserve / lendleReserve / wmnt2Reserve * usdtReserve
234
- const auPrice = wmntReserve_au / auReserve / wmnt2Reserve * usdtReserve
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 = (chainId: string, data: any[], queries: QueryAave[]) => {
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 = ASSET_META[chainId][a]?.assetGroup ?? ASSET_META[chainId]?.[a]?.symbol ?? chainId + "-" + a
272
- prices[oracleId] = formatAavePrice(d[j].toString(), lowDecimalOracle(chainId, details.fork as any))
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 = (chainId: string, data: any[], assetName: string[]) => {
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]]: parseRawAmount(entry?.[ChainlinkAggregatorIndexes.answer]?.toString() ?? '0', 8)
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 = (chainId: string): [
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 = ["WETH", "METH", "FBTC", "CMETH"]
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 = (chainId: string, data: any[], assetName: string[]) => {
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]]: parseRawAmount(entry?.[0]?.toString() ?? '0', 18)
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["METH"] = prices["METH"] * prices["WETH"]
358
- prices["CMETH"] = prices["CMETH"] * prices["METH"]
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 = (chainId: string): [
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 = ["USDY_MUSD"]
383
- return [[{
384
- address: RWA_DYNAMIC_ORACLE,
385
- name: 'getPrice',
386
- params: [],
387
- }], keys]
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 = (chainId: string, data: any[], assetName: string[]) => {
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]]: parseRawAmount(entry?.toString() ?? '0', 18)
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
+ }