@1delta/margin-fetcher 0.0.31 → 0.0.33

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 (210) hide show
  1. package/dist/abis/oracle/UniV3.d.ts +50 -0
  2. package/dist/abis/oracle/UniV3.d.ts.map +1 -0
  3. package/dist/abis/oracle/UniV3.js +63 -0
  4. package/dist/assets/index.d.ts +3 -8
  5. package/dist/assets/index.d.ts.map +1 -1
  6. package/dist/assets/index.js +12 -30
  7. package/dist/assets/liquidityThresholds.d.ts.map +1 -1
  8. package/dist/assets/liquidityThresholds.js +3 -3
  9. package/dist/flash-liquidity/assets.d.ts.map +1 -1
  10. package/dist/flash-liquidity/assets.js +22 -13
  11. package/dist/flash-liquidity/fetchLiquidity.d.ts +2 -2
  12. package/dist/flash-liquidity/fetchLiquidity.d.ts.map +1 -1
  13. package/dist/flash-liquidity/fetchLiquidity.js +11 -10
  14. package/dist/flash-liquidity/utils.d.ts +3 -2
  15. package/dist/flash-liquidity/utils.d.ts.map +1 -1
  16. package/dist/flash-liquidity/utils.js +5 -5
  17. package/dist/lending/aave-v2-type/misc.d.ts +1 -1
  18. package/dist/lending/aave-v2-type/misc.d.ts.map +1 -1
  19. package/dist/lending/aave-v2-type/misc.js +7 -3
  20. package/dist/lending/aave-v2-type/publicCallBuild.d.ts +1 -1
  21. package/dist/lending/aave-v2-type/publicCallBuild.d.ts.map +1 -1
  22. package/dist/lending/aave-v2-type/publicCallBuild.js +11 -11
  23. package/dist/lending/aave-v2-type/publicCallParse.d.ts +1 -1
  24. package/dist/lending/aave-v2-type/publicCallParse.d.ts.map +1 -1
  25. package/dist/lending/aave-v2-type/publicCallParse.js +5 -5
  26. package/dist/lending/aave-v3-type/publicCallBuild.d.ts +1 -1
  27. package/dist/lending/aave-v3-type/publicCallBuild.d.ts.map +1 -1
  28. package/dist/lending/aave-v3-type/publicCallBuild.js +1 -1
  29. package/dist/lending/aave-v3-type/publicCallParse.d.ts +1 -1
  30. package/dist/lending/aave-v3-type/publicCallParse.d.ts.map +1 -1
  31. package/dist/lending/aave-v3-type/publicCallParse.js +5 -14
  32. package/dist/lending/addresses/aave.js +1 -1
  33. package/dist/lending/addresses/aaveV2.js +1 -1
  34. package/dist/lending/addresses/aurelius.js +1 -1
  35. package/dist/lending/addresses/compoundV3.d.ts +1 -1
  36. package/dist/lending/addresses/compoundV3.d.ts.map +1 -1
  37. package/dist/lending/addresses/compoundV3.js +5 -4
  38. package/dist/lending/addresses/contracts.d.ts +1 -1
  39. package/dist/lending/addresses/contracts.d.ts.map +1 -1
  40. package/dist/lending/addresses/contracts.js +1 -1
  41. package/dist/lending/addresses/hana.js +1 -1
  42. package/dist/lending/addresses/init.js +1 -1
  43. package/dist/lending/addresses/lendle.js +1 -1
  44. package/dist/lending/addresses/meridian.js +1 -1
  45. package/dist/lending/addresses/takotako.js +1 -1
  46. package/dist/lending/compound-v3/publicCallBuild.d.ts +1 -1
  47. package/dist/lending/compound-v3/publicCallBuild.d.ts.map +1 -1
  48. package/dist/lending/compound-v3/publicCallParse.d.ts +1 -1
  49. package/dist/lending/compound-v3/publicCallParse.d.ts.map +1 -1
  50. package/dist/lending/compound-v3/publicCallParse.js +3 -9
  51. package/dist/lending/fetchLender.d.ts +1 -1
  52. package/dist/lending/fetchLender.d.ts.map +1 -1
  53. package/dist/lending/fetchLender.js +1 -1
  54. package/dist/lending/fetchLenderAll.d.ts +1 -1
  55. package/dist/lending/fetchLenderAll.d.ts.map +1 -1
  56. package/dist/lending/fetchLenderAll.js +1 -1
  57. package/dist/lending/fetchLenderExt.d.ts +1 -1
  58. package/dist/lending/fetchLenderExt.d.ts.map +1 -1
  59. package/dist/lending/index.d.ts +1 -0
  60. package/dist/lending/index.d.ts.map +1 -1
  61. package/dist/lending/index.js +1 -0
  62. package/dist/lending/init/publicCallBuild.d.ts +1 -1
  63. package/dist/lending/init/publicCallBuild.d.ts.map +1 -1
  64. package/dist/lending/init/publicCallParse.d.ts +4 -4
  65. package/dist/lending/init/publicCallParse.d.ts.map +1 -1
  66. package/dist/lending/init/publicCallParse.js +7 -7
  67. package/dist/lending/meta/index.d.ts +19 -0
  68. package/dist/lending/meta/index.d.ts.map +1 -0
  69. package/dist/lending/meta/index.js +83 -0
  70. package/dist/lending/morpho/publicCallBuild.d.ts.map +1 -1
  71. package/dist/lending/user-data/aave-v2-type/userCallBuild.d.ts +1 -1
  72. package/dist/lending/user-data/aave-v2-type/userCallBuild.d.ts.map +1 -1
  73. package/dist/lending/user-data/aave-v2-type/userCallBuild.js +1 -1
  74. package/dist/lending/user-data/aave-v2-type/userCallParse.d.ts +2 -2
  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 +44 -38
  77. package/dist/lending/user-data/aave-v3-type/userCallBuild.d.ts +1 -1
  78. package/dist/lending/user-data/aave-v3-type/userCallBuild.d.ts.map +1 -1
  79. package/dist/lending/user-data/aave-v3-type/userCallParse.d.ts +1 -1
  80. package/dist/lending/user-data/aave-v3-type/userCallParse.d.ts.map +1 -1
  81. package/dist/lending/user-data/aave-v3-type/userCallParse.js +5 -5
  82. package/dist/lending/user-data/aave-v3-type/userCallParseYldr.d.ts +2 -2
  83. package/dist/lending/user-data/aave-v3-type/userCallParseYldr.d.ts.map +1 -1
  84. package/dist/lending/user-data/aave-v3-type/userCallParseYldr.js +15 -15
  85. package/dist/lending/user-data/abis.d.ts +1 -1
  86. package/dist/lending/user-data/abis.d.ts.map +1 -1
  87. package/dist/lending/user-data/compound-v3/userCallBuild.d.ts +1 -1
  88. package/dist/lending/user-data/compound-v3/userCallBuild.d.ts.map +1 -1
  89. package/dist/lending/user-data/compound-v3/userCallParse.d.ts +1 -1
  90. package/dist/lending/user-data/compound-v3/userCallParse.d.ts.map +1 -1
  91. package/dist/lending/user-data/compound-v3/userCallParse.js +4 -4
  92. package/dist/lending/user-data/init/userCallBuild.d.ts +2 -2
  93. package/dist/lending/user-data/init/userCallBuild.d.ts.map +1 -1
  94. package/dist/lending/user-data/init/userCallBuild.js +3 -3
  95. package/dist/lending/user-data/init/userCallParse.d.ts +1 -1
  96. package/dist/lending/user-data/init/userCallParse.d.ts.map +1 -1
  97. package/dist/lending/user-data/init/userCallParse.js +4 -4
  98. package/dist/lending/user-data/morpho/userCallBuild.d.ts +1 -1
  99. package/dist/lending/user-data/morpho/userCallBuild.d.ts.map +1 -1
  100. package/dist/lending/user-data/morpho/userCallBuild.js +6 -4
  101. package/dist/lending/user-data/morpho/userCallParse.d.ts +1 -1
  102. package/dist/lending/user-data/morpho/userCallParse.d.ts.map +1 -1
  103. package/dist/lending/user-data/morpho/userCallParse.js +5 -5
  104. package/dist/lending/user-data/types.js +1 -1
  105. package/dist/lending-pairs/computeLendingPairs.d.ts.map +1 -1
  106. package/dist/lending-pairs/computeLendingPairs.js +6 -6
  107. package/dist/prices/defillama/index.d.ts.map +1 -1
  108. package/dist/prices/defillama/index.js +21 -0
  109. package/dist/prices/main-prices/addresses/api3.js +1 -1
  110. package/dist/prices/main-prices/addresses/chainlink.js +1 -1
  111. package/dist/prices/main-prices/fetchOracleData.d.ts +6 -0
  112. package/dist/prices/main-prices/fetchOracleData.d.ts.map +1 -1
  113. package/dist/prices/main-prices/fetchOracleData.js +80 -20
  114. package/dist/types/index.d.ts +8 -2
  115. package/dist/types/index.d.ts.map +1 -1
  116. package/dist/types/index.js +2 -2
  117. package/dist/utils/constants.js +1 -1
  118. package/dist/utils/index.d.ts +2 -2
  119. package/dist/utils/index.d.ts.map +1 -1
  120. package/dist/utils/index.js +29 -26
  121. package/dist/utils/parsing.d.ts +1 -1
  122. package/dist/utils/parsing.d.ts.map +1 -1
  123. package/dist/utils/parsing.js +9 -8
  124. package/dist/yields/index.d.ts.map +1 -1
  125. package/dist/yields/index.js +7 -3
  126. package/package.json +2 -2
  127. package/src/abis/oracle/UniV3.ts +63 -0
  128. package/src/assets/index.ts +26 -66
  129. package/src/assets/liquidityThresholds.ts +55 -43
  130. package/src/flash-liquidity/assets.ts +68 -44
  131. package/src/flash-liquidity/fetchLiquidity.ts +13 -14
  132. package/src/flash-liquidity/utils.ts +22 -16
  133. package/src/lending/aave-v2-type/misc.ts +7 -3
  134. package/src/lending/aave-v2-type/publicCallBuild.ts +28 -17
  135. package/src/lending/aave-v2-type/publicCallParse.ts +5 -5
  136. package/src/lending/aave-v3-type/publicCallBuild.ts +1 -1
  137. package/src/lending/aave-v3-type/publicCallParse.ts +4 -14
  138. package/src/lending/addresses/aave.ts +1 -1
  139. package/src/lending/addresses/aaveV2.ts +1 -1
  140. package/src/lending/addresses/aurelius.ts +1 -1
  141. package/src/lending/addresses/compoundV3.ts +5 -12
  142. package/src/lending/addresses/contracts.ts +1 -1
  143. package/src/lending/addresses/hana.ts +1 -1
  144. package/src/lending/addresses/init.ts +1 -1
  145. package/src/lending/addresses/lendle.ts +1 -1
  146. package/src/lending/addresses/meridian.ts +1 -1
  147. package/src/lending/addresses/takotako.ts +1 -1
  148. package/src/lending/compound-v3/publicCallBuild.ts +1 -1
  149. package/src/lending/compound-v3/publicCallParse.ts +3 -10
  150. package/src/lending/fetchLender.ts +1 -1
  151. package/src/lending/fetchLenderAll.ts +1 -1
  152. package/src/lending/fetchLenderExt.ts +1 -1
  153. package/src/lending/index.ts +1 -0
  154. package/src/lending/init/publicCallBuild.ts +1 -1
  155. package/src/lending/init/publicCallParse.ts +64 -48
  156. package/src/lending/meta/index.ts +124 -0
  157. package/src/lending/morpho/publicCallBuild.ts +0 -1
  158. package/src/lending/user-data/aave-v2-type/userCallBuild.ts +1 -1
  159. package/src/lending/user-data/aave-v2-type/userCallParse.ts +181 -122
  160. package/src/lending/user-data/aave-v3-type/userCallBuild.ts +1 -1
  161. package/src/lending/user-data/aave-v3-type/userCallParse.ts +7 -8
  162. package/src/lending/user-data/aave-v3-type/userCallParseYldr.ts +37 -34
  163. package/src/lending/user-data/abis.ts +1 -1
  164. package/src/lending/user-data/compound-v3/userCallBuild.ts +1 -1
  165. package/src/lending/user-data/compound-v3/userCallParse.ts +4 -6
  166. package/src/lending/user-data/fetchUserData.ts +1 -1
  167. package/src/lending/user-data/init/userCallBuild.ts +11 -7
  168. package/src/lending/user-data/init/userCallParse.ts +5 -5
  169. package/src/lending/user-data/morpho/userCallBuild.ts +7 -4
  170. package/src/lending/user-data/morpho/userCallParse.ts +8 -5
  171. package/src/lending/user-data/types.ts +1 -1
  172. package/src/lending-pairs/computeLendingPairs.ts +6 -12
  173. package/src/prices/defillama/index.ts +24 -0
  174. package/src/prices/main-prices/addresses/api3.ts +1 -1
  175. package/src/prices/main-prices/addresses/chainlink.ts +1 -1
  176. package/src/prices/main-prices/fetchOracleData.ts +118 -20
  177. package/src/types/index.ts +10 -4
  178. package/src/utils/constants.ts +1 -1
  179. package/src/utils/index.ts +48 -39
  180. package/src/utils/parsing.ts +37 -35
  181. package/src/yields/index.ts +7 -3
  182. package/test/flashLiquidity.test.ts +6 -6
  183. package/test/index.test.ts +1 -1
  184. package/test/lenderData.test.ts +10 -11
  185. package/test/lenderDataBasic.test.ts +1 -1
  186. package/test/mainPriceMB.test.ts +1 -1
  187. package/test/mainPrices.test.ts +16 -15
  188. package/test/morpho.test.ts +1 -1
  189. package/test/morphoPrice.test.ts +1 -1
  190. package/test/userData.test.ts +2 -1
  191. package/test/userDataAave.test.ts +1 -1
  192. package/test/userDataAaveMainnet.test.ts +1 -1
  193. package/test/userDataAll.test.ts +2 -1
  194. package/test/userDataCompound.test.ts +2 -1
  195. package/test/userDataMorpho.test.ts +2 -1
  196. package/test/userDataMorphoEthereum.test.ts +2 -1
  197. package/test/userDataMorphoKatana.test.ts +2 -1
  198. package/test/utils.ts +11 -1
  199. package/dist/lending/user-data/morpho/userCallParseNoDeploy.d.ts +0 -11
  200. package/dist/lending/user-data/morpho/userCallParseNoDeploy.d.ts.map +0 -1
  201. package/dist/lending/user-data/morpho/userCallParseNoDeploy.js +0 -112
  202. package/dist/prices/main-prices/addresses/aaveOracles.d.ts +0 -300
  203. package/dist/prices/main-prices/addresses/aaveOracles.d.ts.map +0 -1
  204. package/dist/prices/main-prices/addresses/aaveOracles.js +0 -299
  205. package/dist/prices/main-prices/addresses/morpho.d.ts +0 -11
  206. package/dist/prices/main-prices/addresses/morpho.d.ts.map +0 -1
  207. package/dist/prices/main-prices/addresses/morpho.js +0 -2554
  208. package/src/lending/user-data/morpho/userCallParseNoDeploy.ts +0 -168
  209. package/src/prices/main-prices/addresses/aaveOracles.ts +0 -299
  210. package/src/prices/main-prices/addresses/morpho.ts +0 -2563
@@ -5,7 +5,8 @@ import { Api3OracleAbi } from '../../abis/oracle/Api3Oracle'
5
5
  import { RWADynamicOracleAbi } from '../../abis/oracle/RWADynamicOracle'
6
6
 
7
7
  import { api3OracleAddresses } from './addresses/api3'
8
- import { AAVE_V2_LENDERS, ASSET_META, Chain } from '@1delta/asset-registry'
8
+ import { AAVE_V2_LENDERS } from '@1delta/lender-registry'
9
+ import { Chain } from '@1delta/chain-registry'
9
10
  import { formatEther, formatUnits } from 'viem'
10
11
  import { getAaveAssets } from '../../assets'
11
12
  import {
@@ -15,12 +16,13 @@ import {
15
16
  } from './addresses/chainlink'
16
17
  import { fetchDefillamaData } from '../defillama'
17
18
  import { fetchPendlePrices } from '../pendle'
18
- import { AAVE_STYLE_ORACLES } from './addresses/aaveOracles'
19
- import { AAVES_PER_CHAIN } from '../../utils'
19
+ import { getAavesForChain } from '../../utils'
20
20
  import { parseRawAmount } from '../../utils/parsing'
21
21
  import { ProxyOracleAbi } from '../../abis/oracle/ProxyOracle'
22
- import { MrophoOracleInfo, MrophoOracles } from './addresses/morpho'
23
22
  import { multicallRetry } from '@1delta/providers'
23
+ import { TokenList } from '../../types'
24
+ import { UniswapV3Abi } from '../../abis/oracle/UniV3'
25
+ import { aaveOracles, morphoOracles } from '@1delta/data-sdk'
24
26
 
25
27
  export const formatAavePrice = (price: string, isV2 = false): number => {
26
28
  try {
@@ -71,9 +73,11 @@ type QueryAave = { oracle: string; assets: string[]; fork: string }
71
73
  export const fetchMainPrices = async (
72
74
  chainIds: string[],
73
75
  rpcOverrides?: { [chainId: string]: string },
76
+ lists: { [chainId: string]: { list: TokenList } } = {},
74
77
  ): Promise<OracleData> => {
78
+ const aaves = getAavesForChain()
75
79
  const multicallPromises = chainIds.map(async (chainId) => {
76
- const aaveForks = AAVES_PER_CHAIN[chainId]
80
+ const aaveForks = aaves?.[chainId]
77
81
  const reservesToQuery =
78
82
  aaveForks?.map((a) => ({
79
83
  fork: a,
@@ -89,14 +93,15 @@ export const fetchMainPrices = async (
89
93
  queries.push({
90
94
  assets: newAssets,
91
95
  // @ts-ignore
92
- oracle: AAVE_STYLE_ORACLES[e.fork][chainId],
96
+ oracle: aaveOracles()?.[e.fork]?.[chainId],
93
97
  fork: e.fork,
94
98
  })
95
99
  newAssets.forEach((a) => handled.add(a))
96
100
  }
97
101
  }
98
102
 
99
- const morphoQueries = (MrophoOracles[chainId] ?? []).filter(
103
+ const morphoOraclesObtained = morphoOracles()
104
+ const morphoQueries = (morphoOraclesObtained[chainId] ?? []).filter(
100
105
  (a) => !handled.has(a.collateralAsset) || !handled.has(a.loanAsset),
101
106
  )
102
107
 
@@ -104,6 +109,7 @@ export const fetchMainPrices = async (
104
109
  const aaveCalls = getAaveCalls(queries)
105
110
  const [chainlinkCalls, chainlinkNames] = getChainLinkCalls(chainId)
106
111
  const uniswapCalls = getUniswapV2Calls(chainId)
112
+ const uniswapV3Calls = getUniswapV3Calls(chainId)
107
113
  const [api3Calls, api3Names] = getApi3Calls(chainId)
108
114
  const [rwaCalls, rwaNames] = getRWADynamicOracleCalls(chainId)
109
115
 
@@ -111,6 +117,7 @@ export const fetchMainPrices = async (
111
117
  ...chainlinkCalls,
112
118
  ...aaveCalls,
113
119
  ...uniswapCalls,
120
+ ...uniswapV3Calls,
114
121
  ...api3Calls,
115
122
  ...rwaCalls,
116
123
  ...morphoCalls,
@@ -119,6 +126,7 @@ export const fetchMainPrices = async (
119
126
  const abis = [
120
127
  ...ChainLinkAggregatorAbi,
121
128
  ...UniswapV2PairAbi,
129
+ ...UniswapV3Abi,
122
130
  ...AaveOracleAbi,
123
131
  ...Api3OracleAbi,
124
132
  ...RWADynamicOracleAbi,
@@ -146,6 +154,7 @@ export const fetchMainPrices = async (
146
154
  rwa: { calls: rwaCalls, names: rwaNames },
147
155
  morpho: { queries: morphoQueries },
148
156
  uniswapCalls,
157
+ uniswapV3Calls,
149
158
  aaveCalls,
150
159
  },
151
160
  }
@@ -163,7 +172,15 @@ export const fetchMainPrices = async (
163
172
  for (const {
164
173
  chainId,
165
174
  result,
166
- meta: { queries, chainlink, api3, rwa, uniswapCalls, aaveCalls },
175
+ meta: {
176
+ queries,
177
+ chainlink,
178
+ api3,
179
+ rwa,
180
+ uniswapCalls,
181
+ uniswapV3Calls,
182
+ aaveCalls,
183
+ },
167
184
  } of chainResults) {
168
185
  let offset = 0
169
186
 
@@ -176,13 +193,22 @@ export const fetchMainPrices = async (
176
193
  offset += chainlink.calls.length
177
194
 
178
195
  const aaveSlice = result.slice(offset, offset + aaveCalls.length)
179
- const aaveData = parseAaveResults(chainId, aaveSlice, queries)
196
+ const aaveData = parseAaveResults(
197
+ chainId,
198
+ aaveSlice,
199
+ queries,
200
+ lists[chainId]?.list,
201
+ )
180
202
  offset += aaveCalls.length
181
203
 
182
204
  const uniswapSlice = result.slice(offset, offset + uniswapCalls.length)
183
205
  const uniswapData = parseUniswapV2results(uniswapSlice, chainId)
184
206
  offset += uniswapCalls.length
185
207
 
208
+ const uniswapV3Slice = result.slice(offset, offset + uniswapV3Calls.length)
209
+ const uniswapV3Data = parseUniswapV3results(uniswapV3Slice, chainId)
210
+ offset += uniswapV3Calls.length
211
+
186
212
  const api3Slice = result.slice(offset, offset + api3.calls.length)
187
213
  const api3Data = parseApi3Results(chainId, api3Slice, api3.names)
188
214
  offset += api3.calls.length
@@ -196,6 +222,7 @@ export const fetchMainPrices = async (
196
222
  ...chainlinkData,
197
223
  ...aaveData,
198
224
  ...uniswapData,
225
+ ...uniswapV3Data,
199
226
  ...api3Data,
200
227
  ...rwaData,
201
228
  }
@@ -205,20 +232,31 @@ export const fetchMainPrices = async (
205
232
  for (const {
206
233
  chainId,
207
234
  result,
208
- meta: { morpho, chainlink, aaveCalls, uniswapCalls, api3, rwa },
235
+ meta: {
236
+ morpho,
237
+ chainlink,
238
+ aaveCalls,
239
+ uniswapCalls,
240
+ uniswapV3Calls,
241
+ api3,
242
+ rwa,
243
+ },
209
244
  } of chainResults) {
210
245
  const morphoOffset =
211
246
  chainlink.calls.length +
212
247
  aaveCalls.length +
213
248
  uniswapCalls.length +
249
+ uniswapV3Calls.length +
214
250
  api3.calls.length +
215
251
  rwa.calls.length
216
252
  const morphoResult = result.slice(morphoOffset)
253
+
217
254
  const morphoData = parseMorphoResults(
218
255
  chainId,
219
256
  morphoResult,
220
257
  morpho.queries,
221
258
  allPrices,
259
+ lists[chainId]?.list,
222
260
  )
223
261
 
224
262
  allPrices = {
@@ -265,6 +303,68 @@ const getUniswapV2Calls = (chainId: string) => {
265
303
  }
266
304
  }
267
305
 
306
+ /**
307
+ * Gets the calls foir the uniswap pools
308
+ * @param chainId network id
309
+ * @returns array of calls
310
+ */
311
+ const getUniswapV3Calls = (chainId: string) => {
312
+ switch (chainId) {
313
+ case Chain.HEMI_NETWORK:
314
+ return [
315
+ {
316
+ // HMEU/USDC pool
317
+ address: '0xe2f1012fa5e8709ed38888c15615207fac278b57',
318
+ name: 'slot0',
319
+ params: [],
320
+ },
321
+ ]
322
+ default:
323
+ return []
324
+ }
325
+ }
326
+
327
+ const BASE_MULTI = 10n ** 18n
328
+
329
+ export function getV3PriceFromSqrt(
330
+ sqrtPrice: bigint,
331
+ t0d: number,
332
+ t1d: number,
333
+ ) {
334
+ const scalarNumerator = 10n ** BigInt(t0d)
335
+ const scalarDenominator = 10n ** BigInt(t1d)
336
+ const sqrtP = BigInt(sqrtPrice)
337
+ const inputNumerator = sqrtP * sqrtP
338
+ const inputDenominator = 2n ** 192n
339
+ const adjustedForDecimalsNumerator = scalarDenominator * inputDenominator
340
+ const adjustedForDecimalsDenominator = scalarNumerator * inputNumerator
341
+ const price0to1 = Number(
342
+ formatUnits(
343
+ (adjustedForDecimalsDenominator * BASE_MULTI) /
344
+ adjustedForDecimalsNumerator,
345
+ 18, // normalize amount to 18
346
+ ),
347
+ ) // in token1 / token0
348
+ return price0to1
349
+ }
350
+
351
+ const parseUniswapV3results = (data: any[], chainId: string) => {
352
+ switch (chainId) {
353
+ case Chain.HEMI_NETWORK: {
354
+ let uniswapData: any = {}
355
+ if (data.length > 0) {
356
+ const state = data[0]
357
+ const [sqrtPriceX96, , , , , ,] = state
358
+ const price = getV3PriceFromSqrt(sqrtPriceX96, 18, 6)
359
+ uniswapData['Hemi::HEMI'] = price
360
+ }
361
+ return uniswapData
362
+ }
363
+ default:
364
+ return {}
365
+ }
366
+ }
367
+
268
368
  /**
269
369
  * Create calldata for aave oracles
270
370
  * @param chainId network
@@ -288,7 +388,7 @@ const getAaveCalls = (query: QueryAave[]) => {
288
388
  * @param addressesAaveUnderlyings address array
289
389
  * @returns call data
290
390
  */
291
- const getMorphoCalls = (query: MrophoOracleInfo[] = []) => {
391
+ const getMorphoCalls = (query: any[] = []) => {
292
392
  if (query.length === 0) return []
293
393
  return query.map(({ oracle }) => ({
294
394
  address: oracle,
@@ -384,6 +484,7 @@ function lowDecimalOracle(chainId: string, fork: string) {
384
484
  if (chainId === Chain.AVALANCHE_C_CHAIN || chainId === Chain.MODE) {
385
485
  return false
386
486
  }
487
+ if (chainId === Chain.XDC_NETWORK) return true
387
488
  // otherwise, it depends on whether it is aave V3
388
489
  return AAVE_V2_LENDERS.includes(fork as any)
389
490
  }
@@ -399,6 +500,7 @@ const parseAaveResults = (
399
500
  chainId: string,
400
501
  data: any[],
401
502
  queries: QueryAave[],
503
+ list: TokenList = {},
402
504
  ) => {
403
505
  let prices: any = {}
404
506
 
@@ -406,10 +508,7 @@ const parseAaveResults = (
406
508
  if (d !== '0x') {
407
509
  const details = queries[i]
408
510
  details.assets.forEach((a, j) => {
409
- const oracleId =
410
- ASSET_META[chainId][a]?.assetGroup ??
411
- ASSET_META[chainId]?.[a]?.symbol ??
412
- chainId + '-' + a
511
+ const oracleId = list[a]?.assetGroup ?? chainId + '-' + a
413
512
  prices[oracleId] = formatAavePrice(
414
513
  d[j].toString(),
415
514
  lowDecimalOracle(chainId, details.fork as any),
@@ -424,8 +523,9 @@ const parseAaveResults = (
424
523
  const parseMorphoResults = (
425
524
  chainId: string,
426
525
  data: any[],
427
- queries: MrophoOracleInfo[],
526
+ queries: any[],
428
527
  donePrices: any = {},
528
+ list: TokenList = {},
429
529
  ) => {
430
530
  let prices: any = {}
431
531
  data.forEach((d, i) => {
@@ -437,13 +537,11 @@ const parseMorphoResults = (
437
537
  collateralAssetDecimals,
438
538
  } = details
439
539
 
440
- const oracleId =
441
- ASSET_META[chainId][loanAsset]?.assetGroup ?? chainId + '-' + loanAsset
540
+ const oracleId = list[loanAsset]?.assetGroup ?? chainId + '-' + loanAsset
442
541
  // get price from map or just computed ones
443
542
  const debtPrice = donePrices[oracleId] ?? prices[oracleId]
444
543
  const oracleIdCollateral =
445
- ASSET_META[chainId][collateralAsset]?.assetGroup ??
446
- chainId + '-' + collateralAsset
544
+ list[collateralAsset]?.assetGroup ?? chainId + '-' + collateralAsset
447
545
  // get price from map or just computed ones
448
546
  const collateralPrice =
449
547
  donePrices[oracleIdCollateral] ?? prices[oracleIdCollateral]
@@ -1,4 +1,4 @@
1
- export * from "./apiReturnType"
1
+ export * from './apiReturnType'
2
2
 
3
3
  export interface ParsedResponse {
4
4
  price: number
@@ -13,7 +13,7 @@ export enum ChainlinkAggregatorIndexes {
13
13
  answer,
14
14
  startedAt,
15
15
  updatedAt,
16
- answeredInRound
16
+ answeredInRound,
17
17
  }
18
18
 
19
19
  interface LenderRewardsEntry {
@@ -23,7 +23,9 @@ interface LenderRewardsEntry {
23
23
 
24
24
  export type LenderRewardsMap = { [key: string]: LenderRewardsEntry }
25
25
  export type NumberMap = { [key: string]: number }
26
- export type FullLenderRewardsMap = { [chainId: string]: { [lender: string]: LenderRewardsMap } }
26
+ export type FullLenderRewardsMap = {
27
+ [chainId: string]: { [lender: string]: LenderRewardsMap }
28
+ }
27
29
  export type AdditionalYields = {
28
30
  intrinsicYields: NumberMap
29
31
  lenderRewards: FullLenderRewardsMap
@@ -35,4 +37,8 @@ export declare interface GeneralCall {
35
37
  params?: any[] // Function params
36
38
  }
37
39
 
38
- export * from "./providers"
40
+ export type TokenList = {
41
+ [address: string]: { decimals: number; assetGroup?: string }
42
+ }
43
+
44
+ export * from './providers'
@@ -1,4 +1,4 @@
1
- import { Chain } from '@1delta/asset-registry'
1
+ import { Chain } from '@1delta/chain-registry'
2
2
 
3
3
  // Uniswap interface Multicalls
4
4
  const CELO_MULTICALL_ADDRESS = '0x633987602DE5C4F337e3DbF265303A1080324204'
@@ -1,34 +1,40 @@
1
1
  import {
2
- AAVE_FORK_POOL_DATA,
3
- AAVE_STYLE_RESERVE_ASSETS,
4
2
  AAVE_V2_LENDERS,
5
3
  AAVE_V3_LENDERS,
6
- COMPOUND_BASE_TOKENS,
7
- COMPOUND_STYLE_RESERVE_ASSETS,
8
- INIT_STYLE_RESERVE_ASSETS,
9
4
  Lender,
10
- SWAYLEND_RESERVE_ASSETS,
11
- INIT_CONFIG_DATA,
12
- MORPHO_BLUE_POOL_DATA,
13
5
  AAVE_V32_LENDERS,
14
- } from "@1delta/asset-registry"
15
- import { uniq } from "lodash"
16
- import { COMPOSERS } from "./constants"
17
- import { zeroAddress } from "viem"
18
-
19
- const COMPOUND_V3_KEY = "COMPOUND_V3"
20
-
21
- export function isCompoundV3(lender: string) { return lender?.startsWith(COMPOUND_V3_KEY) }
6
+ } from '@1delta/lender-registry'
7
+ import { uniq } from 'lodash'
8
+ import { COMPOSERS } from './constants'
9
+ import { zeroAddress } from 'viem'
10
+ import {
11
+ aavePools,
12
+ aaveReserves,
13
+ compoundV3Pools,
14
+ compoundV3Reserves,
15
+ initConfig,
16
+ morphoPools,
17
+ } from '@1delta/data-sdk'
18
+
19
+ const COMPOUND_V3_KEY = 'COMPOUND_V3'
20
+
21
+ export function isCompoundV3(lender: string) {
22
+ return lender?.startsWith(COMPOUND_V3_KEY)
23
+ }
22
24
 
23
- export function isCompoundV3Type(lender: string) { return lender?.startsWith(COMPOUND_V3_KEY) }
25
+ export function isCompoundV3Type(lender: string) {
26
+ return lender?.startsWith(COMPOUND_V3_KEY)
27
+ }
24
28
 
25
- export function isInit(lender: string) { return lender === Lender.INIT }
29
+ export function isInit(lender: string) {
30
+ return lender === Lender.INIT
31
+ }
26
32
 
27
33
  export function isMorphoType(lender: string) {
28
- return lender?.startsWith("MORPHO_BLUE")
34
+ return lender?.startsWith('MORPHO_BLUE')
29
35
  }
30
36
 
31
- const SWAYLEND_KEY = "SWAYLEND"
37
+ const SWAYLEND_KEY = 'SWAYLEND'
32
38
 
33
39
  export function isAaveV3Type(lender: string) {
34
40
  return AAVE_V3_LENDERS.includes(lender as any)
@@ -57,35 +63,37 @@ export function isSwaylend(lender: string) {
57
63
  export const getLendersForChain = (c: string) => {
58
64
  let lenders: string[] = []
59
65
  // aaves
60
- Object.entries(AAVE_FORK_POOL_DATA).forEach(([l, data]) => {
66
+ Object.entries(aavePools() ?? {}).forEach(([l, data]) => {
61
67
  const chains = Object.keys(data)
62
68
  if (chains.includes(c)) lenders.push(l)
63
69
  })
64
70
 
65
71
  // compound V3s
66
- Object.entries(COMPOUND_BASE_TOKENS).forEach(([l, data]) => {
72
+ Object.entries(compoundV3Pools() ?? {}).forEach(([l, data]) => {
67
73
  const chains = Object.keys(data)
68
74
  if (chains.includes(c)) lenders.push(l)
69
75
  })
70
76
 
71
77
  // init
72
- Object.entries(INIT_CONFIG_DATA).forEach(([l, data]) => {
78
+ Object.entries(initConfig() ?? {}).forEach(([l, data]) => {
73
79
  const chains = Object.keys(data)
74
80
  if (chains.includes(c)) lenders.push(l)
75
81
  })
76
82
 
77
83
  // morpho
78
- Object.entries(MORPHO_BLUE_POOL_DATA).forEach(([l, data]) => {
84
+ Object.entries(morphoPools() ?? {}).forEach(([l, data]) => {
79
85
  const chains = Object.keys(data)
80
86
  if (chains.includes(c)) lenders.push(l)
81
87
  })
82
88
 
83
-
84
89
  return lenders
85
90
  }
86
91
 
87
92
  /** Filter lenders by protocol list */
88
- export const filterLendersByProtocol = (allLenders: string[], protocolList?: string[]): string[] => {
93
+ export const filterLendersByProtocol = (
94
+ allLenders: string[],
95
+ protocolList?: string[],
96
+ ): string[] => {
89
97
  // return all lenders if no filter is provided
90
98
  if (!protocolList || protocolList.length === 0) {
91
99
  return allLenders
@@ -93,12 +101,17 @@ export const filterLendersByProtocol = (allLenders: string[], protocolList?: str
93
101
 
94
102
  const hasMorpho = protocolList.includes(Lender.MORPHO_BLUE)
95
103
  // Filter lenders based on protocol list
96
- return allLenders.filter((lender) => protocolList.includes(lender) || (hasMorpho && lender?.startsWith("MORPHO_BLUE")))
104
+ return allLenders.filter(
105
+ (lender) =>
106
+ protocolList.includes(lender) ||
107
+ (hasMorpho && lender?.startsWith('MORPHO_BLUE')),
108
+ )
97
109
  }
98
110
 
99
- const getAavesForChain = () => {
111
+ /** All aave protocols per chain */
112
+ export const getAavesForChain = () => {
100
113
  let lenders: { [c: string]: string[] } = {}
101
- Object.entries(AAVE_FORK_POOL_DATA).forEach(([l, data]) => {
114
+ Object.entries(aavePools() ?? {}).forEach(([l, data]) => {
102
115
  Object.entries(data).forEach(([chain, data]) => {
103
116
  if (!lenders[chain]) lenders[chain] = []
104
117
  lenders[chain] = uniq([...lenders[chain], l])
@@ -107,26 +120,22 @@ const getAavesForChain = () => {
107
120
  return lenders
108
121
  }
109
122
 
110
- /** All aave protocols per chain */
111
- export const AAVES_PER_CHAIN = getAavesForChain()
112
-
113
123
  export const getComposerAddress = (chainId: string): string => {
114
124
  return COMPOSERS[chainId as keyof typeof COMPOSERS] ?? zeroAddress
115
125
  }
116
126
 
117
127
  export const getLenderAssets = (
118
128
  chainId: string | number | undefined,
119
- lendingProtocol = Lender.AAVE_V3
129
+ lendingProtocol = Lender.AAVE_V3,
120
130
  ): string[] => {
121
131
  if (!chainId) return []
122
- if (isAaveType(lendingProtocol)) return AAVE_STYLE_RESERVE_ASSETS[lendingProtocol]?.[chainId] ?? []
123
- if (isCompoundV3(lendingProtocol)) return COMPOUND_STYLE_RESERVE_ASSETS[lendingProtocol]?.[chainId] ?? []
124
- if (isInit(lendingProtocol)) return INIT_STYLE_RESERVE_ASSETS[lendingProtocol]?.[chainId] ?? []
125
- if (isSwaylend(lendingProtocol)) return SWAYLEND_RESERVE_ASSETS[lendingProtocol]?.[chainId ?? 0] ?? []
132
+ if (isAaveType(lendingProtocol))
133
+ return aaveReserves()?.[lendingProtocol]?.[chainId] ?? []
134
+ if (isCompoundV3(lendingProtocol))
135
+ return compoundV3Reserves()?.[lendingProtocol]?.[chainId] ?? []
126
136
  return []
127
137
  }
128
138
 
129
-
130
139
  export function isMultiMarket(lender: string) {
131
- return lender?.startsWith("MORPHO_BLUE")
140
+ return lender?.startsWith('MORPHO_BLUE')
132
141
  }
@@ -1,17 +1,18 @@
1
- import { Chain, Lender } from "@1delta/asset-registry";
2
- import { formatEther, formatUnits } from "viem";
3
- import { isCompoundV3 } from ".";
1
+ import { Chain } from '@1delta/chain-registry'
2
+ import { Lender } from '@1delta/lender-registry'
3
+ import { formatEther, formatUnits } from 'viem'
4
+ import { isCompoundV3 } from '.'
4
5
 
5
- export const BPS = 10000;
6
+ export const BPS = 10000
6
7
 
7
8
  export const parseRawAmount = (answer?: string, decimals = 18): string => {
8
- if (!answer || answer === "0x") return "0";
9
+ if (!answer || answer === '0x') return '0'
9
10
  try {
10
- return formatUnits(BigInt(answer ?? "0"), decimals ?? 18);
11
+ return formatUnits(BigInt(answer ?? '0'), decimals ?? 18)
11
12
  } catch (e) {
12
- return "0";
13
+ return '0'
13
14
  }
14
- };
15
+ }
15
16
 
16
17
  export enum TimeScale {
17
18
  BLOCK,
@@ -22,59 +23,60 @@ const BLOCK_TIMES: { [chainId: string]: number } = {
22
23
  5: 12,
23
24
  1: 12,
24
25
  56: 3,
25
- };
26
+ }
26
27
 
27
28
  // Converters from apy to apr and reversed
28
29
 
29
- const SECONDS_PER_YEAR = 31536000;
30
+ const SECONDS_PER_YEAR = 31536000
30
31
 
31
32
  export const aprToApy = (apr: number) => {
32
- return (1 + apr / SECONDS_PER_YEAR) ** SECONDS_PER_YEAR - 1;
33
- };
33
+ return (1 + apr / SECONDS_PER_YEAR) ** SECONDS_PER_YEAR - 1
34
+ }
34
35
 
35
36
  export const apyToApr = (apy: number) => {
36
- return ((apy + 1) ** (1 / SECONDS_PER_YEAR) - 1) * SECONDS_PER_YEAR;
37
- };
37
+ return ((apy + 1) ** (1 / SECONDS_PER_YEAR) - 1) * SECONDS_PER_YEAR
38
+ }
38
39
 
39
40
  export const apyToAprPercent = (apy: number) => {
40
- return 100 * ((apy / 100 + 1) ** (1 / SECONDS_PER_YEAR) - 1) * SECONDS_PER_YEAR;
41
- };
42
-
41
+ return (
42
+ 100 * ((apy / 100 + 1) ** (1 / SECONDS_PER_YEAR) - 1) * SECONDS_PER_YEAR
43
+ )
44
+ }
43
45
 
44
46
  export const formatAaveYieldToNumber = (n?: string | bigint): number => {
45
- if (!n) return 0;
46
- return Number(formatEther(BigInt(n) / BigInt(1e7)));
47
- };
47
+ if (!n) return 0
48
+ return Number(formatEther(BigInt(n) / BigInt(1e7)))
49
+ }
48
50
 
49
51
  export const calculateRateForCompound = (
50
52
  n: string,
51
53
  chainId: string,
52
- lender = Lender.COMPOUND_V3_USDCE
54
+ lender = Lender.COMPOUND_V3_USDCE,
53
55
  ): number => {
54
- let scale = TimeScale.MS;
56
+ let scale = TimeScale.MS
55
57
  if (isCompoundV3(lender) || Lender.COMPOUND_V2) {
56
- scale = TimeScale.BLOCK;
58
+ scale = TimeScale.BLOCK
57
59
  } else if (chainId === Chain.BNB_SMART_CHAIN_MAINNET) {
58
- scale = TimeScale.BLOCK;
60
+ scale = TimeScale.BLOCK
59
61
  }
60
- const rate = Number(formatEther(BigInt(n)));
62
+ const rate = Number(formatEther(BigInt(n)))
61
63
  if (scale === TimeScale.BLOCK)
62
64
  return (
63
65
  (Math.pow((rate * 60 * 60 * 24) / (BLOCK_TIMES[chainId] ?? 1) + 1, 365) -
64
66
  1) *
65
67
  100
66
- );
68
+ )
67
69
 
68
- return (Math.pow(rate * 60 * 60 * 24 + 1, 365) - 1) * 100;
69
- };
70
+ return (Math.pow(rate * 60 * 60 * 24 + 1, 365) - 1) * 100
71
+ }
70
72
  export const formatAaveRawApyToApr = (raw: bigint | string | undefined) => {
71
- const apy = formatAaveYieldToNumber(raw);
72
- return apyToApr(apy / 100) * 100;
73
- };
73
+ const apy = formatAaveYieldToNumber(raw)
74
+ return apyToApr(apy / 100) * 100
75
+ }
74
76
 
75
77
  // converts rate per second to rate per year
76
78
  export const convertRateToApr = (ratePerSecond: number | string) => {
77
- const rps = Number(ratePerSecond);
78
- if (isNaN(rps)) return 0;
79
- return rps * 3600 * 24 * 365 * 100;
80
- };
79
+ const rps = Number(ratePerSecond)
80
+ if (isNaN(rps)) return 0
81
+ return rps * 3600 * 24 * 365 * 100
82
+ }
@@ -153,8 +153,9 @@ export const fetchGeneralYields = async () => {
153
153
  })
154
154
 
155
155
  const stmaticPromise = safeFetch('STMATIC', async () => {
156
- const res = await fetch(FeedData.STMATIC).then((r) => r.json())
157
- return Number(res.apr) * 0.9
156
+ // const res = await fetch(FeedData.STMATIC).then((r) => r.json())
157
+ // return Number(res.apr) * 0.9
158
+ return 0
158
159
  })
159
160
 
160
161
  const savaxPromise = safeFetch('SAVAX', async () => {
@@ -230,7 +231,10 @@ export const fetchGeneralYields = async () => {
230
231
  const key = addressToAssetYearn[addr.toLowerCase()]
231
232
  if (key) {
232
233
  const apr =
233
- ((data.apr.netAPR ?? 0) + (data.apr.extra.extrinsicYield ?? 0)) * 100
234
+ ((data.apr.netAPR ?? 0) +
235
+ (data.apr.extra.extrinsicYield ?? 0) +
236
+ (data.apr.extra.katanaNativeYield ?? 0)) *
237
+ 100
234
238
  map[key] = apr
235
239
  }
236
240
  })
@@ -1,26 +1,26 @@
1
1
  import { describe, it } from 'vitest'
2
2
  import { attachPricesToFlashLiquidity, fetchFlashLiquidityForChain, fetchMainPrices } from "../src"
3
3
  import { getEvmClient, multicallRetry } from "@1delta/providers"
4
- import { Chain } from "@1delta/asset-registry"
4
+ import { Chain } from "@1delta/chain-registry"
5
5
 
6
6
 
7
7
 
8
8
  describe('find flash liquidity', () => {
9
9
  it('flash liquidity for chain', async () => {
10
10
 
11
- const chain = Chain.HYPEREVM
11
+ const chain = Chain.XDC_NETWORK
12
12
 
13
13
  const liquidity = await fetchFlashLiquidityForChain(chain, multicallRetry)
14
14
 
15
15
  console.log("liquidity", liquidity)
16
16
 
17
- const prices = await fetchMainPrices([chain], getEvmClient)
17
+ // const prices = await fetchMainPrices([chain])
18
18
 
19
- console.log("prices", prices)
19
+ // console.log("prices", prices)
20
20
 
21
- const dataWithPrices = attachPricesToFlashLiquidity(chain, liquidity, prices)
21
+ // const dataWithPrices = attachPricesToFlashLiquidity(chain, liquidity, prices)
22
22
 
23
- console.log(dataWithPrices)
23
+ // console.log(dataWithPrices)
24
24
 
25
25
  })
26
26
  }, { timeout: 10000 })
@@ -8,7 +8,7 @@ import {
8
8
  getLenderPublicData,
9
9
  } from '../src'
10
10
  import { getEvmClient, multicallRetry } from '@1delta/providers'
11
- import { Chain } from '@1delta/asset-registry'
11
+ import { Chain } from '@1delta/chain-registry'
12
12
  import { getLendersForChain } from '../src/utils'
13
13
 
14
14
  describe(