@1delta/margin-fetcher 0.0.32 → 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 (207) 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 -7
  5. package/dist/assets/index.d.ts.map +1 -1
  6. package/dist/assets/index.js +12 -25
  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 -3
  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/main-prices/addresses/api3.js +1 -1
  108. package/dist/prices/main-prices/addresses/chainlink.js +1 -1
  109. package/dist/prices/main-prices/fetchOracleData.d.ts +6 -0
  110. package/dist/prices/main-prices/fetchOracleData.d.ts.map +1 -1
  111. package/dist/prices/main-prices/fetchOracleData.js +78 -20
  112. package/dist/types/index.d.ts +8 -2
  113. package/dist/types/index.d.ts.map +1 -1
  114. package/dist/types/index.js +2 -2
  115. package/dist/utils/constants.js +1 -1
  116. package/dist/utils/index.d.ts +2 -2
  117. package/dist/utils/index.d.ts.map +1 -1
  118. package/dist/utils/index.js +11 -13
  119. package/dist/utils/parsing.d.ts +1 -1
  120. package/dist/utils/parsing.d.ts.map +1 -1
  121. package/dist/utils/parsing.js +9 -8
  122. package/dist/yields/index.d.ts.map +1 -1
  123. package/dist/yields/index.js +3 -2
  124. package/package.json +2 -2
  125. package/src/abis/oracle/UniV3.ts +63 -0
  126. package/src/assets/index.ts +26 -56
  127. package/src/assets/liquidityThresholds.ts +55 -43
  128. package/src/flash-liquidity/assets.ts +68 -44
  129. package/src/flash-liquidity/fetchLiquidity.ts +13 -14
  130. package/src/flash-liquidity/utils.ts +22 -16
  131. package/src/lending/aave-v2-type/misc.ts +7 -3
  132. package/src/lending/aave-v2-type/publicCallBuild.ts +28 -17
  133. package/src/lending/aave-v2-type/publicCallParse.ts +5 -5
  134. package/src/lending/aave-v3-type/publicCallBuild.ts +1 -1
  135. package/src/lending/aave-v3-type/publicCallParse.ts +4 -14
  136. package/src/lending/addresses/aave.ts +1 -1
  137. package/src/lending/addresses/aaveV2.ts +1 -1
  138. package/src/lending/addresses/aurelius.ts +1 -1
  139. package/src/lending/addresses/compoundV3.ts +5 -8
  140. package/src/lending/addresses/contracts.ts +1 -1
  141. package/src/lending/addresses/hana.ts +1 -1
  142. package/src/lending/addresses/init.ts +1 -1
  143. package/src/lending/addresses/lendle.ts +1 -1
  144. package/src/lending/addresses/meridian.ts +1 -1
  145. package/src/lending/addresses/takotako.ts +1 -1
  146. package/src/lending/compound-v3/publicCallBuild.ts +1 -1
  147. package/src/lending/compound-v3/publicCallParse.ts +3 -10
  148. package/src/lending/fetchLender.ts +1 -1
  149. package/src/lending/fetchLenderAll.ts +1 -1
  150. package/src/lending/fetchLenderExt.ts +1 -1
  151. package/src/lending/index.ts +1 -0
  152. package/src/lending/init/publicCallBuild.ts +1 -1
  153. package/src/lending/init/publicCallParse.ts +64 -48
  154. package/src/lending/meta/index.ts +124 -0
  155. package/src/lending/morpho/publicCallBuild.ts +0 -1
  156. package/src/lending/user-data/aave-v2-type/userCallBuild.ts +1 -1
  157. package/src/lending/user-data/aave-v2-type/userCallParse.ts +181 -122
  158. package/src/lending/user-data/aave-v3-type/userCallBuild.ts +1 -1
  159. package/src/lending/user-data/aave-v3-type/userCallParse.ts +7 -8
  160. package/src/lending/user-data/aave-v3-type/userCallParseYldr.ts +37 -34
  161. package/src/lending/user-data/abis.ts +1 -1
  162. package/src/lending/user-data/compound-v3/userCallBuild.ts +1 -1
  163. package/src/lending/user-data/compound-v3/userCallParse.ts +4 -6
  164. package/src/lending/user-data/fetchUserData.ts +1 -1
  165. package/src/lending/user-data/init/userCallBuild.ts +11 -7
  166. package/src/lending/user-data/init/userCallParse.ts +5 -5
  167. package/src/lending/user-data/morpho/userCallBuild.ts +7 -4
  168. package/src/lending/user-data/morpho/userCallParse.ts +8 -5
  169. package/src/lending/user-data/types.ts +1 -1
  170. package/src/lending-pairs/computeLendingPairs.ts +6 -12
  171. package/src/prices/main-prices/addresses/api3.ts +1 -1
  172. package/src/prices/main-prices/addresses/chainlink.ts +1 -1
  173. package/src/prices/main-prices/fetchOracleData.ts +117 -20
  174. package/src/types/index.ts +10 -4
  175. package/src/utils/constants.ts +1 -1
  176. package/src/utils/index.ts +18 -21
  177. package/src/utils/parsing.ts +37 -35
  178. package/src/yields/index.ts +3 -2
  179. package/test/flashLiquidity.test.ts +6 -6
  180. package/test/index.test.ts +1 -1
  181. package/test/lenderData.test.ts +9 -10
  182. package/test/lenderDataBasic.test.ts +1 -1
  183. package/test/mainPriceMB.test.ts +1 -1
  184. package/test/mainPrices.test.ts +14 -14
  185. package/test/morpho.test.ts +1 -1
  186. package/test/morphoPrice.test.ts +1 -1
  187. package/test/userData.test.ts +2 -1
  188. package/test/userDataAave.test.ts +1 -1
  189. package/test/userDataAaveMainnet.test.ts +1 -1
  190. package/test/userDataAll.test.ts +2 -1
  191. package/test/userDataCompound.test.ts +2 -1
  192. package/test/userDataMorpho.test.ts +2 -1
  193. package/test/userDataMorphoEthereum.test.ts +2 -1
  194. package/test/userDataMorphoKatana.test.ts +2 -1
  195. package/test/utils.ts +11 -1
  196. package/dist/lending/user-data/morpho/userCallParseNoDeploy.d.ts +0 -11
  197. package/dist/lending/user-data/morpho/userCallParseNoDeploy.d.ts.map +0 -1
  198. package/dist/lending/user-data/morpho/userCallParseNoDeploy.js +0 -112
  199. package/dist/prices/main-prices/addresses/aaveOracles.d.ts +0 -303
  200. package/dist/prices/main-prices/addresses/aaveOracles.d.ts.map +0 -1
  201. package/dist/prices/main-prices/addresses/aaveOracles.js +0 -302
  202. package/dist/prices/main-prices/addresses/morpho.d.ts +0 -11
  203. package/dist/prices/main-prices/addresses/morpho.d.ts.map +0 -1
  204. package/dist/prices/main-prices/addresses/morpho.js +0 -2554
  205. package/src/lending/user-data/morpho/userCallParseNoDeploy.ts +0 -168
  206. package/src/prices/main-prices/addresses/aaveOracles.ts +0 -302
  207. 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,
@@ -400,6 +500,7 @@ const parseAaveResults = (
400
500
  chainId: string,
401
501
  data: any[],
402
502
  queries: QueryAave[],
503
+ list: TokenList = {},
403
504
  ) => {
404
505
  let prices: any = {}
405
506
 
@@ -407,10 +508,7 @@ const parseAaveResults = (
407
508
  if (d !== '0x') {
408
509
  const details = queries[i]
409
510
  details.assets.forEach((a, j) => {
410
- const oracleId =
411
- ASSET_META[chainId][a]?.assetGroup ??
412
- ASSET_META[chainId]?.[a]?.symbol ??
413
- chainId + '-' + a
511
+ const oracleId = list[a]?.assetGroup ?? chainId + '-' + a
414
512
  prices[oracleId] = formatAavePrice(
415
513
  d[j].toString(),
416
514
  lowDecimalOracle(chainId, details.fork as any),
@@ -425,8 +523,9 @@ const parseAaveResults = (
425
523
  const parseMorphoResults = (
426
524
  chainId: string,
427
525
  data: any[],
428
- queries: MrophoOracleInfo[],
526
+ queries: any[],
429
527
  donePrices: any = {},
528
+ list: TokenList = {},
430
529
  ) => {
431
530
  let prices: any = {}
432
531
  data.forEach((d, i) => {
@@ -438,13 +537,11 @@ const parseMorphoResults = (
438
537
  collateralAssetDecimals,
439
538
  } = details
440
539
 
441
- const oracleId =
442
- ASSET_META[chainId][loanAsset]?.assetGroup ?? chainId + '-' + loanAsset
540
+ const oracleId = list[loanAsset]?.assetGroup ?? chainId + '-' + loanAsset
443
541
  // get price from map or just computed ones
444
542
  const debtPrice = donePrices[oracleId] ?? prices[oracleId]
445
543
  const oracleIdCollateral =
446
- ASSET_META[chainId][collateralAsset]?.assetGroup ??
447
- chainId + '-' + collateralAsset
544
+ list[collateralAsset]?.assetGroup ?? chainId + '-' + collateralAsset
448
545
  // get price from map or just computed ones
449
546
  const collateralPrice =
450
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,19 +1,20 @@
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
- INIT_CONFIG_DATA,
11
- MORPHO_BLUE_POOL_DATA,
12
5
  AAVE_V32_LENDERS,
13
- } from '@1delta/asset-registry'
6
+ } from '@1delta/lender-registry'
14
7
  import { uniq } from 'lodash'
15
8
  import { COMPOSERS } from './constants'
16
9
  import { zeroAddress } from 'viem'
10
+ import {
11
+ aavePools,
12
+ aaveReserves,
13
+ compoundV3Pools,
14
+ compoundV3Reserves,
15
+ initConfig,
16
+ morphoPools,
17
+ } from '@1delta/data-sdk'
17
18
 
18
19
  const COMPOUND_V3_KEY = 'COMPOUND_V3'
19
20
 
@@ -62,25 +63,25 @@ export function isSwaylend(lender: string) {
62
63
  export const getLendersForChain = (c: string) => {
63
64
  let lenders: string[] = []
64
65
  // aaves
65
- Object.entries(AAVE_FORK_POOL_DATA).forEach(([l, data]) => {
66
+ Object.entries(aavePools() ?? {}).forEach(([l, data]) => {
66
67
  const chains = Object.keys(data)
67
68
  if (chains.includes(c)) lenders.push(l)
68
69
  })
69
70
 
70
71
  // compound V3s
71
- Object.entries(COMPOUND_BASE_TOKENS).forEach(([l, data]) => {
72
+ Object.entries(compoundV3Pools() ?? {}).forEach(([l, data]) => {
72
73
  const chains = Object.keys(data)
73
74
  if (chains.includes(c)) lenders.push(l)
74
75
  })
75
76
 
76
77
  // init
77
- Object.entries(INIT_CONFIG_DATA).forEach(([l, data]) => {
78
+ Object.entries(initConfig() ?? {}).forEach(([l, data]) => {
78
79
  const chains = Object.keys(data)
79
80
  if (chains.includes(c)) lenders.push(l)
80
81
  })
81
82
 
82
83
  // morpho
83
- Object.entries(MORPHO_BLUE_POOL_DATA).forEach(([l, data]) => {
84
+ Object.entries(morphoPools() ?? {}).forEach(([l, data]) => {
84
85
  const chains = Object.keys(data)
85
86
  if (chains.includes(c)) lenders.push(l)
86
87
  })
@@ -107,9 +108,10 @@ export const filterLendersByProtocol = (
107
108
  )
108
109
  }
109
110
 
110
- const getAavesForChain = () => {
111
+ /** All aave protocols per chain */
112
+ export const getAavesForChain = () => {
111
113
  let lenders: { [c: string]: string[] } = {}
112
- Object.entries(AAVE_FORK_POOL_DATA).forEach(([l, data]) => {
114
+ Object.entries(aavePools() ?? {}).forEach(([l, data]) => {
113
115
  Object.entries(data).forEach(([chain, data]) => {
114
116
  if (!lenders[chain]) lenders[chain] = []
115
117
  lenders[chain] = uniq([...lenders[chain], l])
@@ -118,9 +120,6 @@ const getAavesForChain = () => {
118
120
  return lenders
119
121
  }
120
122
 
121
- /** All aave protocols per chain */
122
- export const AAVES_PER_CHAIN = getAavesForChain()
123
-
124
123
  export const getComposerAddress = (chainId: string): string => {
125
124
  return COMPOSERS[chainId as keyof typeof COMPOSERS] ?? zeroAddress
126
125
  }
@@ -131,11 +130,9 @@ export const getLenderAssets = (
131
130
  ): string[] => {
132
131
  if (!chainId) return []
133
132
  if (isAaveType(lendingProtocol))
134
- return AAVE_STYLE_RESERVE_ASSETS[lendingProtocol]?.[chainId] ?? []
133
+ return aaveReserves()?.[lendingProtocol]?.[chainId] ?? []
135
134
  if (isCompoundV3(lendingProtocol))
136
- return COMPOUND_STYLE_RESERVE_ASSETS[lendingProtocol]?.[chainId] ?? []
137
- if (isInit(lendingProtocol))
138
- return INIT_STYLE_RESERVE_ASSETS[lendingProtocol]?.[chainId] ?? []
135
+ return compoundV3Reserves()?.[lendingProtocol]?.[chainId] ?? []
139
136
  return []
140
137
  }
141
138
 
@@ -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 () => {
@@ -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(
@@ -8,20 +8,21 @@ import {
8
8
  getLenderPublicDataAll,
9
9
  } from '../src'
10
10
  import { getEvmClient, multicallRetry } from '@1delta/providers'
11
- import { Chain, Lender } from '@1delta/asset-registry'
11
+ import { Chain } from '@1delta/chain-registry'
12
+ import { Lender } from '@1delta/lender-registry'
12
13
  import { getLendersForChain } from '../src/utils'
13
- import { prettyPrint } from './utils'
14
+ import { fetchLenderMetaFromDirAndInitialize } from '../src/lending/meta'
15
+ import { getDeltaTokenList, prettyPrint } from './utils'
14
16
 
15
17
  describe(
16
18
  'find lending data',
17
19
  () => {
18
20
  it.only('should return lender data', async () => {
21
+ await fetchLenderMetaFromDirAndInitialize()
22
+
19
23
  const chainId = Chain.BERACHAIN
20
24
 
21
- const ps = [
22
- fetchMainPrices([chainId]),
23
- fetchGeneralYields(),
24
- ]
25
+ const ps = [fetchMainPrices([chainId]), fetchGeneralYields()]
25
26
 
26
27
  const [prices, yields] = await Promise.all(ps)
27
28
 
@@ -36,6 +37,7 @@ describe(
36
37
  prices as any,
37
38
  yields as any,
38
39
  multicallRetry,
40
+ async () => await getDeltaTokenList(chainId),
39
41
  )
40
42
 
41
43
  prettyPrint(lendingData)
@@ -44,10 +46,7 @@ describe(
44
46
  it('should return pairs', async () => {
45
47
  const chainId = Chain.POLYGON_MAINNET
46
48
 
47
- const ps = [
48
- fetchMainPrices([chainId]),
49
- fetchGeneralYields(),
50
- ]
49
+ const ps = [fetchMainPrices([chainId]), fetchGeneralYields()]
51
50
 
52
51
  const [prices, yields] = await Promise.all(ps)
53
52
 
@@ -5,7 +5,7 @@ import {
5
5
  getLenderPublicData,
6
6
  } from '../src'
7
7
  import { getEvmClient, multicallRetry } from '@1delta/providers'
8
- import { Chain } from '@1delta/asset-registry'
8
+ import { Chain } from '@1delta/chain-registry'
9
9
  import { getLendersForChain } from '../src/utils'
10
10
  import { prettyPrint } from './utils'
11
11
 
@@ -1,5 +1,5 @@
1
1
  import { describe, it } from 'vitest'
2
- import { Chain } from '@1delta/asset-registry'
2
+ import { Chain } from '@1delta/chain-registry'
3
3
  import { fetchMainPrices } from '../src'
4
4
 
5
5
  const chainIds =