@1delta/margin-fetcher 0.0.18 → 0.0.20
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/abis/aave-v2/YLDR.d.ts.map +1 -1
- package/dist/abis/aave-v2/YLDR.js +176 -148
- package/dist/abis/aave-v3/YLDR.js +29 -29
- package/dist/abis/compound-v3/Comet.d.ts +0 -20
- package/dist/abis/compound-v3/Comet.d.ts.map +1 -1
- package/dist/abis/compound-v3/Comet.js +0 -25
- 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 +3 -3
- package/dist/lending/morpho/convertPublic.js +1 -1
- package/dist/lending/user-data/abis.d.ts +20 -20
- package/dist/lending/user-data/compound-v3/userCallBuild.d.ts.map +1 -1
- package/dist/lending/user-data/compound-v3/userCallBuild.js +1 -7
- package/dist/lending/user-data/compound-v3/userCallParse.d.ts +2 -2
- package/dist/lending/user-data/compound-v3/userCallParse.d.ts.map +1 -1
- package/dist/lending/user-data/compound-v3/userCallParse.js +19 -20
- package/dist/lending/user-data/morpho/userCallBuild.d.ts.map +1 -1
- package/dist/lending/user-data/morpho/userCallBuild.js +6 -4
- 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 +305 -0
- package/dist/prices/main-prices/fetchOracleData.d.ts.map +1 -1
- package/dist/prices/main-prices/fetchOracleData.js +25 -11
- 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 +58 -33
- package/package.json +3 -6
- package/src/abis/aave-v2/YLDR.ts +177 -149
- package/src/abis/aave-v3/YLDR.ts +45 -45
- package/src/abis/compound-v3/Comet.ts +0 -25
- 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 +3 -3
- package/src/lending/morpho/convertPublic.ts +1 -1
- package/src/lending/user-data/compound-v3/userCallBuild.ts +1 -8
- package/src/lending/user-data/compound-v3/userCallParse.ts +39 -29
- package/src/lending/user-data/morpho/userCallBuild.ts +6 -4
- 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 +305 -0
- package/src/prices/main-prices/fetchOracleData.ts +33 -24
- 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 +219 -178
- package/test/flashLiquidity.test.ts +40 -0
- package/test/index.test.ts +101 -97
- package/test/lenderData.test.ts +18 -13254
- package/test/mainPriceMB.test.ts +1 -1
- package/test/mainPrices.test.ts +24 -19
- package/test/morpho.test.ts +1 -1
- package/test/morphoPrice.test.ts +1 -1
- package/test/userDataAave.test.ts +73 -0
- package/test/yields.test.ts +27 -0
- package/tsconfig.json +2 -1
- package/dist/abis/aave/AToken.d.ts +0 -526
- package/dist/abis/aave/AToken.d.ts.map +0 -1
- package/dist/abis/aave/AToken.js +0 -686
- package/dist/abis/aave/AavePoolV3.d.ts +0 -819
- package/dist/abis/aave/AavePoolV3.d.ts.map +0 -1
- package/dist/abis/aave/AavePoolV3.js +0 -1060
- package/dist/abis/init/Core.d.ts +0 -523
- package/dist/abis/init/Core.d.ts.map +0 -1
- package/dist/abis/init/Core.js +0 -681
- package/dist/abis/init/InitFlashAggregator.d.ts +0 -624
- package/dist/abis/init/InitFlashAggregator.d.ts.map +0 -1
- package/dist/abis/init/InitFlashAggregator.js +0 -795
- package/dist/abis/init/PosManager.d.ts +0 -802
- package/dist/abis/init/PosManager.d.ts.map +0 -1
- package/dist/abis/init/PosManager.js +0 -1055
- package/dist/abis/uniswap/FeeOnTransferDetector.d.ts +0 -102
- package/dist/abis/uniswap/FeeOnTransferDetector.d.ts.map +0 -1
- package/dist/abis/uniswap/FeeOnTransferDetector.js +0 -133
- package/dist/abis/uniswap/UniswapV2Pair.d.ts +0 -513
- package/dist/abis/uniswap/UniswapV2Pair.d.ts.map +0 -1
- package/dist/abis/uniswap/UniswapV2Pair.js +0 -659
- package/src/abis/aave/AToken.ts +0 -686
- package/src/abis/aave/AavePoolV3.ts +0 -1060
- package/src/abis/init/Core.ts +0 -681
- package/src/abis/init/InitFlashAggregator.ts +0 -795
- package/src/abis/init/PosManager.ts +0 -1055
- package/src/abis/uniswap/FeeOnTransferDetector.ts +0 -133
- package/src/abis/uniswap/UniswapV2Pair.ts +0 -659
- /package/test/{userdata.test.ts → userData.test.ts} +0 -0
|
@@ -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
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { ProtocolDataProviderAbi } from '../abis/aave-v2/ProtocolDataProvider'
|
|
3
3
|
import { IncentivesControllerAbi } from '../abis/lendle/IncentivesController'
|
|
4
4
|
import { RewarderAbi } from '../abis/aurelius/Rewarder'
|
|
5
|
-
import { UniswapV2PairAbi } from '../abis/
|
|
5
|
+
import { UniswapV2PairAbi } from '../abis/oracle/UniswapV2Pair'
|
|
6
6
|
|
|
7
7
|
// aave v3 style
|
|
8
8
|
import { AavePoolV3UpgradedAbi } from '../abis/aave/AavePoolV3Upgraded'
|
|
@@ -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,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Lender } from "@1delta/asset-registry"
|
|
2
2
|
import { Call } from "../../../utils/multicall"
|
|
3
|
-
import {
|
|
3
|
+
import { getLenderAssets } from "../../../utils"
|
|
4
4
|
import { getCompoundV3BaseAsset, getCompoundV3CometAddress, getCompoundV3CometRewardsAddress } from "./addresses"
|
|
5
5
|
|
|
6
6
|
export const buildCompoundV3UserCall = (chainId: string, lender: Lender, account: string): Call[] => {
|
|
@@ -10,12 +10,6 @@ export const buildCompoundV3UserCall = (chainId: string, lender: Lender, account
|
|
|
10
10
|
const assets = getLenderAssets(chainId, lender)
|
|
11
11
|
const assetsNoBase = assets.filter(a => a !== baseAsset)
|
|
12
12
|
|
|
13
|
-
const allowedCall = {
|
|
14
|
-
address: cometContractAddress,
|
|
15
|
-
name: 'isAllowed',
|
|
16
|
-
params: [account, getComposerAddress(chainId)],
|
|
17
|
-
}
|
|
18
|
-
|
|
19
13
|
const baseCalls = [
|
|
20
14
|
{
|
|
21
15
|
address: cometContractAddress,
|
|
@@ -45,7 +39,6 @@ export const buildCompoundV3UserCall = (chainId: string, lender: Lender, account
|
|
|
45
39
|
const calls = [
|
|
46
40
|
...callsNonBase,
|
|
47
41
|
...baseCalls,
|
|
48
|
-
allowedCall,
|
|
49
42
|
callEarnedBalances
|
|
50
43
|
]
|
|
51
44
|
return calls
|
|
@@ -1,10 +1,15 @@
|
|
|
1
|
-
import { Lender } from
|
|
2
|
-
import { CompoundV3UserReserveResponse } from
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import { Lender } from '@1delta/asset-registry'
|
|
2
|
+
import { CompoundV3UserReserveResponse } from '../types'
|
|
3
|
+
import {
|
|
4
|
+
getAssetMeta,
|
|
5
|
+
getCompoundV3Assets,
|
|
6
|
+
toGenericPriceKey,
|
|
7
|
+
toOracleKey,
|
|
8
|
+
} from '../../../assets'
|
|
9
|
+
import { getCompoundV3BaseAsset } from './addresses'
|
|
10
|
+
import { parseRawAmount } from '../../../utils/parsing'
|
|
11
|
+
import { Asset as SupportedAssets } from '@1delta/asset-registry'
|
|
12
|
+
import { createBaseTypeUserState } from '../utils'
|
|
8
13
|
|
|
9
14
|
export const getCompoundV3UserDataConverter = (
|
|
10
15
|
lender: Lender,
|
|
@@ -12,21 +17,18 @@ export const getCompoundV3UserDataConverter = (
|
|
|
12
17
|
account: string,
|
|
13
18
|
prices: { [asset: string]: number },
|
|
14
19
|
pricesHist: { [asset: string]: number },
|
|
15
|
-
lenderData: any
|
|
20
|
+
lenderData: any,
|
|
16
21
|
): [(data: any[]) => CompoundV3UserReserveResponse | undefined, number] => {
|
|
17
|
-
|
|
18
22
|
const assetAddresses = getCompoundV3Assets(chainId, lender)
|
|
19
23
|
const baseAsset = getCompoundV3BaseAsset(lender, chainId).baseAsset
|
|
20
|
-
const assetsNoBase = assetAddresses.filter(a => a !== baseAsset)
|
|
21
|
-
const expectedNumberOfCalls = assetsNoBase.length + 2 + 1
|
|
24
|
+
const assetsNoBase = assetAddresses.filter((a) => a !== baseAsset)
|
|
25
|
+
const expectedNumberOfCalls = assetsNoBase.length + 2 + 1
|
|
22
26
|
return [
|
|
23
27
|
(data: any[]) => {
|
|
24
28
|
if (data.length !== expectedNumberOfCalls) {
|
|
25
29
|
return undefined
|
|
26
30
|
}
|
|
27
31
|
|
|
28
|
-
const isAllowed = Boolean(data[expectedNumberOfCalls - 2])
|
|
29
|
-
|
|
30
32
|
let totalDebt24h = 0
|
|
31
33
|
let totalDeposits24h = 0
|
|
32
34
|
|
|
@@ -36,9 +38,11 @@ export const getCompoundV3UserDataConverter = (
|
|
|
36
38
|
const assetMeta = getAssetMeta(chainId, asset)
|
|
37
39
|
const decimals = assetMeta?.decimals ?? 18
|
|
38
40
|
const depositsRaw = data[i][0]?.toString()
|
|
39
|
-
if(depositsRaw ===
|
|
41
|
+
if (depositsRaw === '0') continue
|
|
40
42
|
const deposits = parseRawAmount(depositsRaw, decimals)
|
|
41
|
-
const key =
|
|
43
|
+
const key =
|
|
44
|
+
toOracleKey(assetMeta?.assetGroup) ??
|
|
45
|
+
toGenericPriceKey(asset, chainId)
|
|
42
46
|
const price = prices[key] ?? 1
|
|
43
47
|
|
|
44
48
|
const priceHist = pricesHist?.[key] ?? price
|
|
@@ -52,14 +56,13 @@ export const getCompoundV3UserDataConverter = (
|
|
|
52
56
|
deposits,
|
|
53
57
|
depositsUSD: Number(deposits) * price,
|
|
54
58
|
debtStableUSD: 0,
|
|
55
|
-
debt:
|
|
56
|
-
debtStable:
|
|
59
|
+
debt: '0',
|
|
60
|
+
debtStable: '0',
|
|
57
61
|
debtUSD: 0,
|
|
58
62
|
collateralActive: true,
|
|
59
63
|
// user depos raw
|
|
60
64
|
depositsRaw,
|
|
61
65
|
// flag for allowance
|
|
62
|
-
isAllowed,
|
|
63
66
|
}
|
|
64
67
|
}
|
|
65
68
|
|
|
@@ -69,7 +72,9 @@ export const getCompoundV3UserDataConverter = (
|
|
|
69
72
|
const baseDecimals = baseMeta.decimals ?? 18
|
|
70
73
|
const deposits = parseRawAmount(depositsRaw, baseDecimals)
|
|
71
74
|
const debt = parseRawAmount(debtRaw, baseDecimals)
|
|
72
|
-
const oracleKeyBase =
|
|
75
|
+
const oracleKeyBase =
|
|
76
|
+
toOracleKey(baseMeta?.assetGroup) ??
|
|
77
|
+
toGenericPriceKey(baseMeta.baseAsset, chainId)
|
|
73
78
|
const priceBase = prices[oracleKeyBase]
|
|
74
79
|
const priceBaseHist = pricesHist?.[oracleKeyBase] ?? priceBase
|
|
75
80
|
|
|
@@ -86,22 +91,22 @@ export const getCompoundV3UserDataConverter = (
|
|
|
86
91
|
depositsUSD: Number(deposits) * priceBase,
|
|
87
92
|
debtUSD: Number(debt) * priceBase,
|
|
88
93
|
// populate values for totals
|
|
89
|
-
debtStable:
|
|
94
|
+
debtStable: '0',
|
|
90
95
|
debtStableUSD: 0,
|
|
91
96
|
collateralActive: true,
|
|
92
97
|
// user depos raw
|
|
93
98
|
depositsRaw,
|
|
94
99
|
// flag for allowance
|
|
95
|
-
isAllowed,
|
|
96
100
|
},
|
|
97
101
|
}
|
|
98
102
|
|
|
99
|
-
|
|
100
103
|
// the result is an array: [tokenAddress, owedAmount] (tokenAddress should be always COMP)
|
|
101
104
|
// so we take [1] to get the owedAmount
|
|
102
105
|
const earnedBalances = data[expectedNumberOfCalls - 1]
|
|
103
106
|
|
|
104
|
-
const compRewards = Number(
|
|
107
|
+
const compRewards = Number(
|
|
108
|
+
parseRawAmount(earnedBalances?.owed?.toString(), 18),
|
|
109
|
+
)
|
|
105
110
|
const payload = {
|
|
106
111
|
lendingPositions: { [0]: { ...result, ...resultBase } },
|
|
107
112
|
chainId,
|
|
@@ -109,18 +114,23 @@ export const getCompoundV3UserDataConverter = (
|
|
|
109
114
|
rewards: {
|
|
110
115
|
[SupportedAssets.COMP]: {
|
|
111
116
|
totalRewards: compRewards,
|
|
112
|
-
claimableRewards: compRewards
|
|
113
|
-
}
|
|
117
|
+
claimableRewards: compRewards,
|
|
118
|
+
},
|
|
114
119
|
},
|
|
115
|
-
account
|
|
120
|
+
account,
|
|
116
121
|
}
|
|
117
122
|
|
|
118
|
-
const userData = createBaseTypeUserState(
|
|
123
|
+
const userData = createBaseTypeUserState(
|
|
124
|
+
payload,
|
|
125
|
+
lenderData,
|
|
126
|
+
totalDeposits24h,
|
|
127
|
+
totalDebt24h,
|
|
128
|
+
)
|
|
119
129
|
return {
|
|
120
130
|
...payload,
|
|
121
|
-
...userData
|
|
131
|
+
...userData,
|
|
122
132
|
}
|
|
123
133
|
},
|
|
124
134
|
expectedNumberOfCalls,
|
|
125
135
|
]
|
|
126
|
-
}
|
|
136
|
+
}
|
|
@@ -7,6 +7,8 @@ const MORPHO_LENS: { [c: string]: string } = {
|
|
|
7
7
|
[Chain.POLYGON_MAINNET]: '0x105eb87D2b3127f43B1b4C0F125dbEb0EDF3d6C6',
|
|
8
8
|
[Chain.OP_MAINNET]: '0xd184c5315B728c1C990f59dDD275c8155f8e255c',
|
|
9
9
|
[Chain.ARBITRUM_ONE]: '0xF64F862Fb7D687411585e06C08711B612e156530',
|
|
10
|
+
[Chain.KATANA]: '0xcB6Eb8df68153cebF60E1872273Ef52075a5C297',
|
|
11
|
+
[Chain.HYPEREVM]: '0xCe434378adacC51d54312c872113D687Ac19B516',
|
|
10
12
|
}
|
|
11
13
|
|
|
12
14
|
const getBaseMorphoCalls = (
|
|
@@ -15,18 +17,18 @@ const getBaseMorphoCalls = (
|
|
|
15
17
|
account: string,
|
|
16
18
|
marketsToQuery: string[],
|
|
17
19
|
) => {
|
|
18
|
-
return marketsToQuery.flatMap(id => [
|
|
20
|
+
return marketsToQuery.flatMap((id) => [
|
|
19
21
|
{
|
|
20
22
|
// @ts-ignore
|
|
21
23
|
address: MORPHO_BLUE_POOL_DATA[lender][chainId],
|
|
22
24
|
name: 'position',
|
|
23
|
-
params: [
|
|
25
|
+
params: ['0x' + id.split('_')[1], account],
|
|
24
26
|
},
|
|
25
27
|
{
|
|
26
28
|
// @ts-ignore
|
|
27
29
|
address: MORPHO_BLUE_POOL_DATA[lender][chainId],
|
|
28
30
|
name: 'market',
|
|
29
|
-
params: [
|
|
31
|
+
params: ['0x' + id.split('_')[1]],
|
|
30
32
|
},
|
|
31
33
|
])
|
|
32
34
|
}
|
|
@@ -54,7 +56,7 @@ export const buildMorphoUserCallWithLens = (
|
|
|
54
56
|
address: MORPHO_LENS[chainId],
|
|
55
57
|
name: 'getUserDataCompact',
|
|
56
58
|
params: [
|
|
57
|
-
marketsInChunk.map(a=> a.replace(
|
|
59
|
+
marketsInChunk.map((a) => a.replace('MORPHO_BLUE_', '0x')),
|
|
58
60
|
account,
|
|
59
61
|
// @ts-ignore
|
|
60
62
|
MORPHO_BLUE_POOL_DATA[lender][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,
|