@1delta/margin-fetcher 0.0.8 → 0.0.10

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 (146) hide show
  1. package/dist/abis/aave/AaveOracle.d.ts +10 -0
  2. package/dist/abis/aave/AaveOracle.d.ts.map +1 -1
  3. package/dist/abis/aave/AaveOracle.js +13 -0
  4. package/dist/abis/morpho/blue.d.ts +76 -0
  5. package/dist/abis/morpho/blue.d.ts.map +1 -0
  6. package/dist/abis/morpho/blue.js +99 -0
  7. package/dist/abis/morpho/lens.d.ts +16 -0
  8. package/dist/abis/morpho/lens.d.ts.map +1 -0
  9. package/dist/abis/morpho/lens.js +31 -0
  10. package/dist/abis/oracle/AaveOracle.d.ts +10 -0
  11. package/dist/abis/oracle/AaveOracle.d.ts.map +1 -1
  12. package/dist/abis/oracle/AaveOracle.js +13 -0
  13. package/dist/assets/index.d.ts +4 -4
  14. package/dist/assets/index.d.ts.map +1 -1
  15. package/dist/assets/index.js +7 -7
  16. package/dist/assets/liquidityThresholds.d.ts +29 -0
  17. package/dist/assets/liquidityThresholds.d.ts.map +1 -0
  18. package/dist/assets/liquidityThresholds.js +51 -0
  19. package/dist/flash-liquidity/index.d.ts +1 -0
  20. package/dist/flash-liquidity/index.d.ts.map +1 -1
  21. package/dist/flash-liquidity/index.js +1 -0
  22. package/dist/flash-liquidity/utils.d.ts +11 -0
  23. package/dist/flash-liquidity/utils.d.ts.map +1 -0
  24. package/dist/flash-liquidity/utils.js +17 -0
  25. package/dist/lending/aave-v2-type/publicCallParse.d.ts +2 -1
  26. package/dist/lending/aave-v2-type/publicCallParse.d.ts.map +1 -1
  27. package/dist/lending/aave-v2-type/publicCallParse.js +10 -7
  28. package/dist/lending/aave-v3-type/publicCallParse.d.ts +3 -2
  29. package/dist/lending/aave-v3-type/publicCallParse.d.ts.map +1 -1
  30. package/dist/lending/aave-v3-type/publicCallParse.js +11 -8
  31. package/dist/lending/aave-v3-type/types.d.ts +2 -0
  32. package/dist/lending/aave-v3-type/types.d.ts.map +1 -1
  33. package/dist/lending/addresses/compoundV3.d.ts +1 -1
  34. package/dist/lending/addresses/compoundV3.d.ts.map +1 -1
  35. package/dist/lending/addresses/compoundV3.js +8 -7
  36. package/dist/lending/compound-v3/publicCallParse.d.ts +2 -1
  37. package/dist/lending/compound-v3/publicCallParse.d.ts.map +1 -1
  38. package/dist/lending/compound-v3/publicCallParse.js +3 -2
  39. package/dist/lending/compound-v3/types.d.ts +2 -0
  40. package/dist/lending/compound-v3/types.d.ts.map +1 -1
  41. package/dist/lending/fetchLender.d.ts +2 -1
  42. package/dist/lending/fetchLender.d.ts.map +1 -1
  43. package/dist/lending/fetchLender.js +12 -8
  44. package/dist/lending/fetchLenderAll.d.ts +8 -0
  45. package/dist/lending/fetchLenderAll.d.ts.map +1 -0
  46. package/dist/lending/fetchLenderAll.js +12 -0
  47. package/dist/lending/fetchLenderExt.d.ts +8 -0
  48. package/dist/lending/fetchLenderExt.d.ts.map +1 -0
  49. package/dist/lending/fetchLenderExt.js +28 -0
  50. package/dist/lending/index.d.ts +1 -0
  51. package/dist/lending/index.d.ts.map +1 -1
  52. package/dist/lending/index.js +1 -0
  53. package/dist/lending/init/publicCallParse.d.ts +2 -1
  54. package/dist/lending/init/publicCallParse.d.ts.map +1 -1
  55. package/dist/lending/init/publicCallParse.js +3 -2
  56. package/dist/lending/init/types.d.ts +2 -0
  57. package/dist/lending/init/types.d.ts.map +1 -1
  58. package/dist/lending/morpho/convertPublic.d.ts +9 -0
  59. package/dist/lending/morpho/convertPublic.d.ts.map +1 -0
  60. package/dist/lending/morpho/convertPublic.js +115 -0
  61. package/dist/lending/morpho/fetchPublic.d.ts +3 -0
  62. package/dist/lending/morpho/fetchPublic.d.ts.map +1 -0
  63. package/dist/lending/morpho/fetchPublic.js +72 -0
  64. package/dist/lending/morpho/publicCallBuild.d.ts +8 -0
  65. package/dist/lending/morpho/publicCallBuild.d.ts.map +1 -0
  66. package/dist/lending/morpho/publicCallBuild.js +6 -0
  67. package/dist/lending/morpho/types.d.ts +106 -0
  68. package/dist/lending/morpho/types.d.ts.map +1 -0
  69. package/dist/lending/morpho/types.js +1 -0
  70. package/dist/lending/types/index.d.ts +18 -0
  71. package/dist/lending/types/index.d.ts.map +1 -0
  72. package/dist/lending/types/index.js +1 -0
  73. package/dist/lending/user-data/aave-v2-type/userCallBuild.d.ts.map +1 -1
  74. package/dist/lending/user-data/aave-v2-type/userCallBuild.js +4 -23
  75. package/dist/lending/user-data/aave-v2-type/userCallParse.d.ts.map +1 -1
  76. package/dist/lending/user-data/aave-v2-type/userCallParse.js +24 -11
  77. package/dist/lending/user-data/aave-v3-type/userCallBuild.d.ts.map +1 -1
  78. package/dist/lending/user-data/aave-v3-type/userCallBuild.js +1 -16
  79. package/dist/lending/user-data/aave-v3-type/userCallParse.d.ts.map +1 -1
  80. package/dist/lending/user-data/aave-v3-type/userCallParse.js +13 -6
  81. package/dist/lending/user-data/aave-v3-type/userCallParseYldr.d.ts.map +1 -1
  82. package/dist/lending/user-data/aave-v3-type/userCallParseYldr.js +12 -6
  83. package/dist/lending/user-data/compound-v3/addresses.d.ts.map +1 -1
  84. package/dist/lending/user-data/compound-v3/addresses.js +8 -7
  85. package/dist/lending/user-data/compound-v3/userCallParse.d.ts.map +1 -1
  86. package/dist/lending/user-data/compound-v3/userCallParse.js +2 -0
  87. package/dist/lending/user-data/morpho/decoder.d.ts +21 -0
  88. package/dist/lending/user-data/morpho/decoder.d.ts.map +1 -0
  89. package/dist/lending/user-data/morpho/decoder.js +52 -0
  90. package/dist/lending/user-data/morpho/morphoLib.d.ts +5 -0
  91. package/dist/lending/user-data/morpho/morphoLib.d.ts.map +1 -0
  92. package/dist/lending/user-data/morpho/morphoLib.js +21 -0
  93. package/dist/lending/user-data/morpho/types.d.ts +12 -0
  94. package/dist/lending/user-data/morpho/types.d.ts.map +1 -0
  95. package/dist/lending/user-data/morpho/types.js +13 -0
  96. package/dist/lending/user-data/morpho/userCallBuild.d.ts +6 -0
  97. package/dist/lending/user-data/morpho/userCallBuild.d.ts.map +1 -0
  98. package/dist/lending/user-data/morpho/userCallBuild.js +36 -0
  99. package/dist/lending/user-data/morpho/userCallParse.d.ts +11 -0
  100. package/dist/lending/user-data/morpho/userCallParse.d.ts.map +1 -0
  101. package/dist/lending/user-data/morpho/userCallParse.js +99 -0
  102. package/dist/lending/user-data/morpho/userCallParseNoDeploy.d.ts +11 -0
  103. package/dist/lending/user-data/morpho/userCallParseNoDeploy.d.ts.map +1 -0
  104. package/dist/lending/user-data/morpho/userCallParseNoDeploy.js +112 -0
  105. package/dist/lending-pairs/computeLendingPairs.d.ts +13 -0
  106. package/dist/lending-pairs/computeLendingPairs.d.ts.map +1 -1
  107. package/dist/lending-pairs/computeLendingPairs.js +129 -23
  108. package/dist/prices/main-prices/fetchOracleData.d.ts +1 -2
  109. package/dist/prices/main-prices/fetchOracleData.d.ts.map +1 -1
  110. package/dist/prices/main-prices/fetchOracleData.js +95 -55
  111. package/dist/utils/index.d.ts +2 -0
  112. package/dist/utils/index.d.ts.map +1 -1
  113. package/dist/utils/index.js +41 -16
  114. package/dist/utils/parsing.d.ts.map +1 -1
  115. package/dist/utils/parsing.js +4 -2
  116. package/package.json +2 -2
  117. package/src/abis/aave/AaveOracle.ts +13 -0
  118. package/src/abis/oracle/AaveOracle.ts +13 -0
  119. package/src/assets/index.ts +70 -51
  120. package/src/assets/liquidityThresholds.ts +83 -0
  121. package/src/flash-liquidity/index.ts +2 -1
  122. package/src/flash-liquidity/utils.ts +22 -0
  123. package/src/lending/aave-v2-type/publicCallParse.ts +12 -7
  124. package/src/lending/aave-v3-type/publicCallParse.ts +13 -8
  125. package/src/lending/aave-v3-type/types.ts +2 -0
  126. package/src/lending/addresses/compoundV3.ts +29 -15
  127. package/src/lending/compound-v3/publicCallParse.ts +5 -2
  128. package/src/lending/compound-v3/types.ts +2 -0
  129. package/src/lending/fetchLender.ts +23 -17
  130. package/src/lending/index.ts +2 -1
  131. package/src/lending/init/publicCallParse.ts +5 -2
  132. package/src/lending/init/types.ts +3 -0
  133. package/src/lending/types/index.ts +16 -0
  134. package/src/lending/user-data/aave-v2-type/userCallBuild.ts +1 -25
  135. package/src/lending/user-data/aave-v2-type/userCallParse.ts +24 -11
  136. package/src/lending/user-data/aave-v3-type/userCallBuild.ts +1 -16
  137. package/src/lending/user-data/aave-v3-type/userCallParse.ts +15 -6
  138. package/src/lending/user-data/aave-v3-type/userCallParseYldr.ts +14 -6
  139. package/src/lending/user-data/compound-v3/addresses.ts +58 -39
  140. package/src/lending/user-data/compound-v3/userCallParse.ts +2 -2
  141. package/src/lending-pairs/computeLendingPairs.ts +421 -189
  142. package/src/prices/main-prices/fetchOracleData.ts +197 -107
  143. package/src/utils/index.ts +90 -58
  144. package/src/utils/parsing.ts +51 -51
  145. package/test/index.test.ts +15 -7
  146. package/test/userdata.test.ts +5 -5
@@ -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'
17
-
18
- export const formatAavePrice = (price: string, chainId: 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
- }
21
+ import { parseRawAmount } from '../../utils/parsing'
22
+
23
+ export const formatAavePrice = (price: string, isV2 = false): number => {
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
  }
@@ -242,6 +288,15 @@ const parseUniswapV2results = (data: any[], chainId: string) => {
242
288
  }
243
289
  }
244
290
 
291
+ function lowDecimalOracle(chainId: string, fork: string) {
292
+ // some chains only have high decimal oracles
293
+ if (chainId === Chain.AVALANCHE_C_CHAIN || chainId === Chain.MODE) {
294
+ return false
295
+ }
296
+ // otherwise, it depends on whether it is aave V3
297
+ return AAVE_V2_LENDERS.includes(fork as any)
298
+ }
299
+
245
300
  /**
246
301
  * Parser for aave results in ulticall slice
247
302
  * @param chainId network
@@ -249,24 +304,30 @@ const parseUniswapV2results = (data: any[], chainId: string) => {
249
304
  * @param assetName asset names (aligned with the originall addresses called)
250
305
  * @returns price mapping asset->number
251
306
  */
252
- const parseAaveResults = (chainId: string, data: any[], queries: QueryAave[]) => {
253
-
307
+ const parseAaveResults = (
308
+ chainId: string,
309
+ data: any[],
310
+ queries: QueryAave[],
311
+ ) => {
254
312
  let prices: any = {}
255
313
 
256
314
  data.forEach((d, i) => {
257
315
  const details = queries[i]
258
316
  details.assets.forEach((a, j) => {
259
- const oracleId = ASSET_META[chainId][a]?.assetGroup ?? ASSET_META[chainId]?.[a]?.symbol ?? chainId + "-" + a
260
- prices[oracleId] = formatAavePrice(d[j].toString(), chainId, AAVE_V2_LENDERS.includes(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
+ )
261
325
  })
262
326
  })
263
327
 
264
328
  return prices
265
-
266
-
267
329
  }
268
330
 
269
-
270
331
  /**
271
332
  * Parser for aave results in ulticall slice
272
333
  * @param chainId network
@@ -274,38 +335,48 @@ const parseAaveResults = (chainId: string, data: any[], queries: QueryAave[]) =>
274
335
  * @param assetName asset names (aligned with the originall addresses called)
275
336
  * @returns price mapping asset->number
276
337
  */
277
- const parseChainLinkResults = (chainId: string, data: any[], assetName: string[]) => {
338
+ const parseChainLinkResults = (
339
+ chainId: string,
340
+ data: any[],
341
+ assetName: string[],
342
+ ) => {
278
343
  switch (chainId) {
279
344
  default: {
280
345
  return Object.assign(
281
346
  {},
282
347
  ...data.map((entry, index) => {
283
348
  return {
284
- [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
+ ),
285
355
  }
286
- })
356
+ }),
287
357
  )
288
358
  }
289
359
  }
290
360
  }
291
361
 
292
-
293
362
  /**
294
363
  * Create calldata for api3 oracles
295
364
  * @param chainId network
296
365
  * @returns call data
297
366
  */
298
- const getApi3Calls = (chainId: string): [
367
+ const getApi3Calls = (
368
+ chainId: string,
369
+ ): [
299
370
  {
300
- address: string,
371
+ address: string
301
372
  name: string
302
- params: any[],
373
+ params: any[]
303
374
  }[],
304
- string[]
375
+ string[],
305
376
  ] => {
306
377
  switch (chainId) {
307
378
  case Chain.MANTLE: {
308
- const keys = ["WETH", "METH", "FBTC", "CMETH"]
379
+ const keys = ['WETH', 'METH', 'FBTC', 'CMETH']
309
380
  const addresses = keys.map((k) => api3OracleAddresses[chainId][k])
310
381
  return [
311
382
  addresses.map((tk) => {
@@ -315,7 +386,7 @@ const getApi3Calls = (chainId: string): [
315
386
  params: [],
316
387
  }
317
388
  }),
318
- keys
389
+ keys,
319
390
  ]
320
391
  }
321
392
  default:
@@ -330,20 +401,26 @@ const getApi3Calls = (chainId: string): [
330
401
  * @param assetName asset names (aligned with the originall addresses called)
331
402
  * @returns price mapping asset->number
332
403
  */
333
- const parseApi3Results = (chainId: string, data: any[], assetName: string[]) => {
404
+ const parseApi3Results = (
405
+ chainId: string,
406
+ data: any[],
407
+ assetName: string[],
408
+ ) => {
334
409
  switch (chainId) {
335
410
  case Chain.MANTLE: {
336
411
  let prices = Object.assign(
337
412
  {},
338
413
  ...data.map((entry, index) => {
339
414
  return {
340
- [assetName[index]]: parseRawAmount(entry?.[0]?.toString() ?? '0', 18)
415
+ [assetName[index]]: Number(
416
+ parseRawAmount(entry?.[0]?.toString() ?? '0', 18),
417
+ ),
341
418
  }
342
- })
419
+ }),
343
420
  )
344
- // METH is given in mETH/WETH
345
- prices["METH"] = prices["METH"] * prices["WETH"]
346
- 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']
347
424
  return prices
348
425
  }
349
426
  default: {
@@ -357,22 +434,29 @@ const parseApi3Results = (chainId: string, data: any[], assetName: string[]) =>
357
434
  * @param chainId network
358
435
  * @returns call data
359
436
  */
360
- const getRWADynamicOracleCalls = (chainId: string): [
437
+ const getRWADynamicOracleCalls = (
438
+ chainId: string,
439
+ ): [
361
440
  {
362
- address: string,
441
+ address: string
363
442
  name: string
364
- params: any[],
443
+ params: any[]
365
444
  }[],
366
- string[]
445
+ string[],
367
446
  ] => {
368
447
  switch (chainId) {
369
448
  case Chain.MANTLE: {
370
- const keys = ["USDY_MUSD"]
371
- return [[{
372
- address: RWA_DYNAMIC_ORACLE,
373
- name: 'getPrice',
374
- params: [],
375
- }], 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
+ ]
376
460
  }
377
461
  default:
378
462
  return [[], []]
@@ -386,16 +470,22 @@ const getRWADynamicOracleCalls = (chainId: string): [
386
470
  * @param assetName asset names (aligned with the originall addresses called)
387
471
  * @returns price mapping asset->number
388
472
  */
389
- const parseRWADynamicOracleResults = (chainId: string, data: any[], assetName: string[]) => {
473
+ const parseRWADynamicOracleResults = (
474
+ chainId: string,
475
+ data: any[],
476
+ assetName: string[],
477
+ ) => {
390
478
  switch (chainId) {
391
479
  case Chain.MANTLE: {
392
480
  let prices = Object.assign(
393
481
  {},
394
482
  ...data.map((entry, index) => {
395
483
  return {
396
- [assetName[index]]: parseRawAmount(entry?.toString() ?? '0', 18)
484
+ [assetName[index]]: Number(
485
+ parseRawAmount(entry?.toString() ?? '0', 18),
486
+ ),
397
487
  }
398
- })
488
+ }),
399
489
  )
400
490
  return prices
401
491
  }
@@ -403,4 +493,4 @@ const parseRWADynamicOracleResults = (chainId: string, data: any[], assetName: s
403
493
  return {}
404
494
  }
405
495
  }
406
- }
496
+ }