@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.
- package/dist/assets/liquidityThresholds.d.ts +10 -0
- package/dist/assets/liquidityThresholds.d.ts.map +1 -1
- package/dist/assets/liquidityThresholds.js +9 -2
- package/dist/flash-liquidity/fetchLiquidity.d.ts +2 -2
- package/dist/flash-liquidity/fetchLiquidity.d.ts.map +1 -1
- package/dist/flash-liquidity/fetchLiquidity.js +85 -54
- package/dist/flash-liquidity/types.d.ts +1 -0
- package/dist/flash-liquidity/types.d.ts.map +1 -1
- package/dist/lending/aave-v3-type/publicCallBuild.d.ts +1 -1
- package/dist/lending/aave-v3-type/publicCallBuild.d.ts.map +1 -1
- package/dist/lending/aave-v3-type/publicCallBuild.js +46 -48
- package/dist/lending/aave-v3-type/publicCallParse.d.ts.map +1 -1
- package/dist/lending/aave-v3-type/publicCallParse.js +8 -2
- package/dist/lending/compound-v3/publicCallParse.d.ts.map +1 -1
- package/dist/lending/compound-v3/publicCallParse.js +8 -3
- package/dist/lending/fetchLender.js +2 -2
- package/dist/lending/morpho/convertPublic.js +1 -1
- package/dist/lending/user-data/aave-v3-type/userCallParse.d.ts.map +1 -1
- package/dist/lending/user-data/fetchUserData.d.ts.map +1 -1
- package/dist/lending/user-data/fetchUserData.js +1 -3
- package/dist/lending/user-data/morpho/userCallParse.d.ts.map +1 -1
- package/dist/lending/user-data/morpho/userCallParse.js +2 -1
- package/dist/lending/user-data/types.js +2 -2
- package/dist/lending-pairs/computeLendingPairs.d.ts +10 -1
- package/dist/lending-pairs/computeLendingPairs.d.ts.map +1 -1
- package/dist/lending-pairs/computeLendingPairs.js +26 -22
- package/dist/prices/defillama/index.d.ts.map +1 -1
- package/dist/prices/defillama/index.js +162 -151
- package/dist/prices/index.d.ts +3 -2
- package/dist/prices/index.d.ts.map +1 -1
- package/dist/prices/index.js +3 -2
- package/dist/prices/main-prices/addresses/aaveOracles.d.ts +159 -143
- package/dist/prices/main-prices/addresses/aaveOracles.d.ts.map +1 -1
- package/dist/prices/main-prices/addresses/aaveOracles.js +276 -260
- package/dist/prices/main-prices/addresses/morpho.d.ts.map +1 -1
- package/dist/prices/main-prices/addresses/morpho.js +114 -0
- package/dist/prices/main-prices/fetchOracleData.d.ts.map +1 -1
- package/dist/prices/main-prices/fetchOracleData.js +21 -9
- package/dist/prices/pendle/fetchPendlePrices.d.ts +7 -0
- package/dist/prices/pendle/fetchPendlePrices.d.ts.map +1 -0
- package/dist/prices/pendle/fetchPendlePrices.js +148 -0
- package/dist/prices/pendle/index.d.ts +2 -0
- package/dist/prices/pendle/index.d.ts.map +1 -0
- package/dist/prices/pendle/index.js +1 -0
- package/dist/types/apiReturnType.d.ts +2 -0
- package/dist/types/apiReturnType.d.ts.map +1 -1
- package/dist/utils/index.d.ts +1 -3
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +10 -16
- package/dist/yields/index.d.ts.map +1 -1
- package/dist/yields/index.js +46 -33
- package/package.json +3 -6
- package/src/assets/liquidityThresholds.ts +22 -3
- package/src/flash-liquidity/fetchLiquidity.ts +298 -261
- package/src/flash-liquidity/types.ts +1 -0
- package/src/lending/aave-v3-type/publicCallBuild.ts +74 -68
- package/src/lending/aave-v3-type/publicCallParse.ts +8 -2
- package/src/lending/compound-v3/publicCallParse.ts +10 -3
- package/src/lending/fetchLender.ts +2 -2
- package/src/lending/morpho/convertPublic.ts +1 -1
- package/src/lending/user-data/aave-v3-type/userCallParse.ts +2 -0
- package/src/lending/user-data/fetchUserData.ts +1 -4
- package/src/lending/user-data/morpho/userCallParse.ts +2 -1
- package/src/lending/user-data/types.ts +2 -2
- package/src/lending-pairs/computeLendingPairs.ts +423 -410
- package/src/prices/defillama/index.ts +233 -227
- package/src/prices/index.ts +3 -2
- package/src/prices/main-prices/addresses/aaveOracles.ts +292 -277
- package/src/prices/main-prices/addresses/morpho.ts +114 -0
- package/src/prices/main-prices/fetchOracleData.ts +29 -22
- package/src/prices/pendle/fetchPendlePrices.ts +208 -0
- package/src/prices/pendle/index.ts +1 -0
- package/src/types/apiReturnType.ts +42 -39
- package/src/utils/index.ts +11 -18
- package/src/yields/index.ts +205 -179
- package/test/data.ts +47979 -0
- package/test/flashLiquidity.test.ts +40 -0
- package/test/lenderData.test.ts +18 -13254
- package/test/mainPrices.test.ts +24 -19
- package/test/morphoPrice.test.ts +1 -1
- package/test/userDataAave.test.ts +73 -0
- package/test/userDataAll.test.ts +32 -41
|
@@ -1,13 +1,16 @@
|
|
|
1
|
-
import { Lender } from
|
|
2
|
-
import { Call } from
|
|
3
|
-
import {
|
|
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
|
-
|
|
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
|
-
|
|
67
|
-
|
|
68
|
-
|
|
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 = (
|
|
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
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
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
|
-
|
|
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
|
-
|
|
136
|
-
|
|
137
|
-
|
|
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
|
|
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
|
-
|
|
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:
|
|
91
|
-
totalLiquidityUSD:
|
|
93
|
+
totalLiquidity: totals,
|
|
94
|
+
totalLiquidityUSD: totalUsd,
|
|
92
95
|
// deposits are different outputs for base asset and others
|
|
93
96
|
totalDeposits: totals,
|
|
94
|
-
totalDepositsUSD:
|
|
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
|
-
|
|
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 (
|
|
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:
|
|
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
|
|
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
|
|
20
|
-
const nonMorphos = queries.filter((q) => !q.lender
|
|
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,
|