@1delta/margin-fetcher 0.0.17 → 0.0.19

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 (82) hide show
  1. package/dist/assets/liquidityThresholds.d.ts +10 -0
  2. package/dist/assets/liquidityThresholds.d.ts.map +1 -1
  3. package/dist/assets/liquidityThresholds.js +9 -2
  4. package/dist/flash-liquidity/fetchLiquidity.d.ts +2 -2
  5. package/dist/flash-liquidity/fetchLiquidity.d.ts.map +1 -1
  6. package/dist/flash-liquidity/fetchLiquidity.js +85 -54
  7. package/dist/flash-liquidity/types.d.ts +1 -0
  8. package/dist/flash-liquidity/types.d.ts.map +1 -1
  9. package/dist/lending/aave-v3-type/publicCallBuild.d.ts +1 -1
  10. package/dist/lending/aave-v3-type/publicCallBuild.d.ts.map +1 -1
  11. package/dist/lending/aave-v3-type/publicCallBuild.js +46 -48
  12. package/dist/lending/aave-v3-type/publicCallParse.d.ts.map +1 -1
  13. package/dist/lending/aave-v3-type/publicCallParse.js +8 -2
  14. package/dist/lending/compound-v3/publicCallParse.d.ts.map +1 -1
  15. package/dist/lending/compound-v3/publicCallParse.js +8 -3
  16. package/dist/lending/fetchLender.js +2 -2
  17. package/dist/lending/morpho/convertPublic.js +1 -1
  18. package/dist/lending/user-data/aave-v3-type/userCallParse.d.ts.map +1 -1
  19. package/dist/lending/user-data/fetchUserData.d.ts.map +1 -1
  20. package/dist/lending/user-data/fetchUserData.js +1 -3
  21. package/dist/lending/user-data/morpho/userCallParse.d.ts.map +1 -1
  22. package/dist/lending/user-data/morpho/userCallParse.js +2 -1
  23. package/dist/lending/user-data/types.js +2 -2
  24. package/dist/lending-pairs/computeLendingPairs.d.ts +10 -1
  25. package/dist/lending-pairs/computeLendingPairs.d.ts.map +1 -1
  26. package/dist/lending-pairs/computeLendingPairs.js +26 -22
  27. package/dist/prices/defillama/index.d.ts.map +1 -1
  28. package/dist/prices/defillama/index.js +162 -151
  29. package/dist/prices/index.d.ts +3 -2
  30. package/dist/prices/index.d.ts.map +1 -1
  31. package/dist/prices/index.js +3 -2
  32. package/dist/prices/main-prices/addresses/aaveOracles.d.ts +159 -143
  33. package/dist/prices/main-prices/addresses/aaveOracles.d.ts.map +1 -1
  34. package/dist/prices/main-prices/addresses/aaveOracles.js +276 -260
  35. package/dist/prices/main-prices/addresses/morpho.d.ts.map +1 -1
  36. package/dist/prices/main-prices/addresses/morpho.js +114 -0
  37. package/dist/prices/main-prices/fetchOracleData.d.ts.map +1 -1
  38. package/dist/prices/main-prices/fetchOracleData.js +21 -9
  39. package/dist/prices/pendle/fetchPendlePrices.d.ts +7 -0
  40. package/dist/prices/pendle/fetchPendlePrices.d.ts.map +1 -0
  41. package/dist/prices/pendle/fetchPendlePrices.js +148 -0
  42. package/dist/prices/pendle/index.d.ts +2 -0
  43. package/dist/prices/pendle/index.d.ts.map +1 -0
  44. package/dist/prices/pendle/index.js +1 -0
  45. package/dist/types/apiReturnType.d.ts +2 -0
  46. package/dist/types/apiReturnType.d.ts.map +1 -1
  47. package/dist/utils/index.d.ts +1 -3
  48. package/dist/utils/index.d.ts.map +1 -1
  49. package/dist/utils/index.js +10 -16
  50. package/dist/yields/index.d.ts.map +1 -1
  51. package/dist/yields/index.js +46 -33
  52. package/package.json +3 -6
  53. package/src/assets/liquidityThresholds.ts +22 -3
  54. package/src/flash-liquidity/fetchLiquidity.ts +298 -261
  55. package/src/flash-liquidity/types.ts +1 -0
  56. package/src/lending/aave-v3-type/publicCallBuild.ts +74 -68
  57. package/src/lending/aave-v3-type/publicCallParse.ts +8 -2
  58. package/src/lending/compound-v3/publicCallParse.ts +10 -3
  59. package/src/lending/fetchLender.ts +2 -2
  60. package/src/lending/morpho/convertPublic.ts +1 -1
  61. package/src/lending/user-data/aave-v3-type/userCallParse.ts +2 -0
  62. package/src/lending/user-data/fetchUserData.ts +1 -4
  63. package/src/lending/user-data/morpho/userCallParse.ts +2 -1
  64. package/src/lending/user-data/types.ts +2 -2
  65. package/src/lending-pairs/computeLendingPairs.ts +423 -410
  66. package/src/prices/defillama/index.ts +233 -227
  67. package/src/prices/index.ts +3 -2
  68. package/src/prices/main-prices/addresses/aaveOracles.ts +292 -277
  69. package/src/prices/main-prices/addresses/morpho.ts +114 -0
  70. package/src/prices/main-prices/fetchOracleData.ts +29 -22
  71. package/src/prices/pendle/fetchPendlePrices.ts +208 -0
  72. package/src/prices/pendle/index.ts +1 -0
  73. package/src/types/apiReturnType.ts +42 -39
  74. package/src/utils/index.ts +11 -18
  75. package/src/yields/index.ts +205 -179
  76. package/test/data.ts +47979 -0
  77. package/test/flashLiquidity.test.ts +40 -0
  78. package/test/lenderData.test.ts +18 -13254
  79. package/test/mainPrices.test.ts +24 -19
  80. package/test/morphoPrice.test.ts +1 -1
  81. package/test/userDataAave.test.ts +73 -0
  82. package/test/userDataAll.test.ts +32 -41
@@ -1,13 +1,16 @@
1
- import { Lender } from "@1delta/asset-registry"
2
- import { Call } from "../../utils/multicall"
3
- import { getAaveAssets, getAaveTypePoolAddress, getAaveTypePoolDataProviderAddress } from "../../assets"
4
-
1
+ import { Lender } from '@1delta/asset-registry'
2
+ import { Call } from '../../utils/multicall'
3
+ import {
4
+ getAaveAssets,
5
+ getAaveTypePoolAddress,
6
+ getAaveTypePoolDataProviderAddress,
7
+ } from '../../assets'
8
+ import { isAaveV32Type } from '../../utils'
5
9
 
6
10
  export const AAVE_V3_EMODES = [0, 1, 2, 3, 4, 5, 6]
7
11
 
8
12
  function yldrBaseline(assetsToQuery: string[], providerAddress: string) {
9
-
10
- return assetsToQuery.flatMap(tk => [
13
+ return assetsToQuery.flatMap((tk) => [
11
14
  {
12
15
  address: providerAddress,
13
16
  name: 'getReserveData',
@@ -17,13 +20,16 @@ function yldrBaseline(assetsToQuery: string[], providerAddress: string) {
17
20
  address: providerAddress,
18
21
  name: 'getReserveConfigurationData',
19
22
  params: [tk],
20
- }
23
+ },
21
24
  ])
22
25
  }
23
26
 
24
-
25
-
26
- function aaveV3baseline(assetsToQuery: string[], providerAddress: string, poolAddress: string, legacy = false) {
27
+ function aaveV3baseline(
28
+ assetsToQuery: string[],
29
+ providerAddress: string,
30
+ poolAddress: string,
31
+ legacy = false,
32
+ ) {
27
33
  const callDecimals: Call = {
28
34
  address: providerAddress,
29
35
  name: 'getDebtCeilingDecimals',
@@ -36,7 +42,7 @@ function aaveV3baseline(assetsToQuery: string[], providerAddress: string, poolAd
36
42
  params: [],
37
43
  }
38
44
 
39
- const callsBase = assetsToQuery.flatMap(tk => [
45
+ const callsBase = assetsToQuery.flatMap((tk) => [
40
46
  {
41
47
  address: providerAddress,
42
48
  name: 'getReserveData',
@@ -62,64 +68,67 @@ function aaveV3baseline(assetsToQuery: string[], providerAddress: string, poolAd
62
68
  name: 'getDebtCeiling',
63
69
  params: [tk],
64
70
  },
65
- ...legacy ? [{
66
- address: providerAddress,
67
- name: 'getReserveEModeCategory',
68
- params: [tk],
69
- }
70
- ] : []
71
+ ...(legacy
72
+ ? [
73
+ {
74
+ address: providerAddress,
75
+ name: 'getReserveEModeCategory',
76
+ params: [tk],
77
+ },
78
+ ]
79
+ : []),
71
80
  ])
72
81
 
73
82
  return {
74
83
  callsBase,
75
84
  callReservesList,
76
- callDecimals
85
+ callDecimals,
77
86
  }
78
87
  }
79
88
 
80
- export const buildAaveV3StyleLenderReserveCall = (chainId: string, lender: Lender) => {
89
+ export const buildAaveV3StyleLenderReserveCall = (
90
+ chainId: string,
91
+ lender: Lender,
92
+ ) => {
81
93
  const providerAddress = getAaveTypePoolDataProviderAddress(chainId, lender)
82
94
  const assetsToQuery = getAaveAssets(chainId, lender)
83
95
  const poolAddress = getAaveTypePoolAddress(chainId, lender)
84
- switch (lender) {
85
- case Lender.AAVE_V3:
86
- case Lender.AAVE_V3_ETHER_FI:
87
- case Lender.AAVE_V3_PRIME: {
88
- const getEModeCategoryData: Call[] = AAVE_V3_EMODES.flatMap((eMode) => {
89
- return [
90
- {
91
- address: poolAddress,
92
- name: 'getEModeCategoryData',
93
- params: [eMode],
94
- },
95
- {
96
- address: poolAddress,
97
- name: 'getEModeCategoryBorrowableBitmap',
98
- params: [eMode],
99
- },
100
- {
101
- address: poolAddress,
102
- name: 'getEModeCategoryCollateralBitmap',
103
- params: [eMode],
104
- }
105
- ]
106
- })
107
-
108
- const {
109
- callDecimals,
110
- callReservesList,
111
- callsBase
112
- } = aaveV3baseline(assetsToQuery, providerAddress, poolAddress)
113
-
114
-
115
- const calls = [
116
- ...callsBase,
117
- ...getEModeCategoryData,
118
- callReservesList,
119
- callDecimals
96
+ if (isAaveV32Type(lender)) {
97
+ const getEModeCategoryData: Call[] = AAVE_V3_EMODES.flatMap((eMode) => {
98
+ return [
99
+ {
100
+ address: poolAddress,
101
+ name: 'getEModeCategoryData',
102
+ params: [eMode],
103
+ },
104
+ {
105
+ address: poolAddress,
106
+ name: 'getEModeCategoryBorrowableBitmap',
107
+ params: [eMode],
108
+ },
109
+ {
110
+ address: poolAddress,
111
+ name: 'getEModeCategoryCollateralBitmap',
112
+ params: [eMode],
113
+ },
120
114
  ]
121
- return calls
122
- }
115
+ })
116
+
117
+ const { callDecimals, callReservesList, callsBase } = aaveV3baseline(
118
+ assetsToQuery,
119
+ providerAddress,
120
+ poolAddress,
121
+ )
122
+
123
+ const calls = [
124
+ ...callsBase,
125
+ ...getEModeCategoryData,
126
+ callReservesList,
127
+ callDecimals,
128
+ ]
129
+ return calls
130
+ }
131
+ switch (lender) {
123
132
  case Lender.YLDR: {
124
133
  const calls = yldrBaseline(assetsToQuery, providerAddress)
125
134
  return calls
@@ -131,18 +140,15 @@ export const buildAaveV3StyleLenderReserveCall = (chainId: string, lender: Lende
131
140
  params: [eMode],
132
141
  }))
133
142
 
134
- const {
135
- callDecimals,
136
- callsBase
137
- } = aaveV3baseline(assetsToQuery, providerAddress, poolAddress, true)
143
+ const { callDecimals, callsBase } = aaveV3baseline(
144
+ assetsToQuery,
145
+ providerAddress,
146
+ poolAddress,
147
+ true,
148
+ )
138
149
 
139
-
140
- const calls = [
141
- ...callsBase,
142
- ...getEModeCategoryData,
143
- callDecimals
144
- ]
150
+ const calls = [...callsBase, ...getEModeCategoryData, callDecimals]
145
151
  return calls
146
152
  }
147
153
  }
148
- }
154
+ }
@@ -17,6 +17,7 @@ import {
17
17
  toOracleKey,
18
18
  } from '../../assets'
19
19
  import { GenericTokenList } from '../types'
20
+ import { isAaveV32Type } from '../../utils'
20
21
 
21
22
  export const getAaveV3ReservesDataConverter = (
22
23
  lender: Lender,
@@ -25,7 +26,7 @@ export const getAaveV3ReservesDataConverter = (
25
26
  additionalYields: AdditionalYields,
26
27
  tokenList: GenericTokenList = {},
27
28
  ): [(data: any[]) => AaveV3GeneralPublicResponse | undefined, number] => {
28
- if (lender.startsWith('AAVE_V3'))
29
+ if (isAaveV32Type(lender))
29
30
  return parseAave32(
30
31
  chainId,
31
32
  lender,
@@ -250,7 +251,11 @@ function isReserveEnabledOnBitmap(
250
251
  bitmap: bigint,
251
252
  reserveIndex: number,
252
253
  ): boolean {
253
- return ((bitmap >> BigInt(reserveIndex)) & 1n) !== 0n
254
+ try {
255
+ return ((bitmap >> BigInt(reserveIndex)) & 1n) !== 0n
256
+ } catch {
257
+ return false
258
+ }
254
259
  }
255
260
 
256
261
  export function parseYLDRCall(
@@ -399,6 +404,7 @@ function parseAave32(
399
404
  if (data.length !== expectedNumberOfCalls) {
400
405
  return undefined
401
406
  }
407
+
402
408
  const emodeDataResult = data.slice(
403
409
  assetsToQuery.length * 5,
404
410
  assetsToQuery.length * 5 + AAVE_V3_EMODES.length * 3,
@@ -53,6 +53,9 @@ export const getCompoundV3ReservesDataConverter = (
53
53
  const oracleKey =
54
54
  toOracleKey(assetMeta?.assetGroup) ??
55
55
  toGenericPriceKey(asset, chainId)
56
+
57
+ const totalUsd = Number(totals) * (prices[oracleKey] ?? 1)
58
+
56
59
  result[asset] = {
57
60
  poolId: asset,
58
61
  underlying: asset,
@@ -87,13 +90,15 @@ export const getCompoundV3ReservesDataConverter = (
87
90
  // debt and liquidity are zero
88
91
  totalDebt: 0,
89
92
  totalDebtUSD: 0,
90
- totalLiquidity: 0,
91
- totalLiquidityUSD: 0,
93
+ totalLiquidity: totals,
94
+ totalLiquidityUSD: totalUsd,
92
95
  // deposits are different outputs for base asset and others
93
96
  totalDeposits: totals,
94
- totalDepositsUSD: Number(totals) * (prices[oracleKey] ?? 1),
97
+ totalDepositsUSD: totalUsd,
95
98
  // rewards
96
99
  rewards: {},
100
+ isActive: true,
101
+ isFrozen: false,
97
102
  borrowingEnabled: false,
98
103
  }
99
104
  }
@@ -192,6 +197,8 @@ export const getCompoundV3ReservesDataConverter = (
192
197
  },
193
198
  },
194
199
  borrowingEnabled: true,
200
+ isActive: true,
201
+ isFrozen: false,
195
202
  stakingYield: additionalYields.intrinsicYields[oracleKeyBase] ?? 0,
196
203
  },
197
204
  }
@@ -18,7 +18,7 @@ import { IrgetterAbi } from '../abis/compound-v3/IrGetter'
18
18
 
19
19
  import {
20
20
  isAaveV2Type,
21
- isAaveV3Original,
21
+ isAaveV32Type,
22
22
  isAaveV3Type,
23
23
  isCompoundV3,
24
24
  isInit,
@@ -102,7 +102,7 @@ const getAbi = (lender: string) => {
102
102
  ...IncentivesControllerAbi,
103
103
  ]
104
104
 
105
- if (isAaveV3Original(lender))
105
+ if (isAaveV32Type(lender))
106
106
  return [...AavePoolV3UpgradedAbi, ...AaveV3ProtocolDataProviderAbi]
107
107
  if (lender === Lender.YLDR) return [...YLDRProtocolDataProviderAbi]
108
108
 
@@ -113,7 +113,7 @@ export function convertMarketsToMorphoResponse(
113
113
  totalDebtStable: 0,
114
114
  totalDebt: 0,
115
115
  totalLiquidity: 0,
116
- totalLiquidityUSD: 0,
116
+ totalLiquidityUSD: Number(state.collateralAssetsUsd),
117
117
  totalDepositsUSD: Number(state.collateralAssetsUsd),
118
118
  totalDebtStableUSD: 0,
119
119
  totalDebtUSD: 0,
@@ -16,11 +16,13 @@ export const getAaveV3UserDataConverter = (
16
16
 
17
17
  const assetsToQuery = getAaveAssets(chainId, lender)
18
18
  const expectedNumberOfCalls = assetsToQuery.length + 1
19
+
19
20
  return [
20
21
  (data: any[]) => {
21
22
  if (data.length !== expectedNumberOfCalls) {
22
23
  return undefined
23
24
  }
25
+
24
26
  const userEMode = Number(data[expectedNumberOfCalls - 1])
25
27
  const lendingPositions: { [asset: string]: any } = {}
26
28
 
@@ -195,11 +195,8 @@ export const convertLenderUserDataResult = (
195
195
  }
196
196
  }
197
197
  }
198
- } catch (e) {
199
- console.log('Error parsing for', query.lender, 'on', chainId, e)
200
- }
198
+ } catch (e) {}
201
199
  currentSlice += sliceLength
202
200
  }
203
-
204
201
  return lenderData
205
202
  }
@@ -112,7 +112,8 @@ export const getMorphoUserDataConverterWithlens = (
112
112
  }
113
113
  }
114
114
 
115
- for (const [marketId, pubData] of Object.entries(lenderData ?? {})) {
115
+ for (const marketId of markets) {
116
+ const pubData = lenderData[marketId]
116
117
  if (marketsHandled.includes(marketId)) continue;
117
118
  const payload = {
118
119
  chainId,
@@ -16,8 +16,8 @@ export interface LenderUserQuery {
16
16
 
17
17
  /** Filter all morphos into one for querying */
18
18
  export function organizeUserQueries(queries: LenderUserQuery[]) {
19
- const morphos = queries.filter((q) => q.lender.startsWith('MORPHO_BLUE'))
20
- const nonMorphos = queries.filter((q) => !q.lender.startsWith('MORPHO_BLUE'))
19
+ const morphos = queries.filter((q) => q.lender?.startsWith('MORPHO_BLUE'))
20
+ const nonMorphos = queries.filter((q) => !q.lender?.startsWith('MORPHO_BLUE'))
21
21
  const morphosCollapsed = {
22
22
  lender: Lender.MORPHO_BLUE,
23
23
  account: queries[0].account,