@1delta/margin-fetcher 0.0.14 → 0.0.16
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/lending/aave-v3-type/publicCallParse.d.ts +4 -4
- package/dist/lending/aave-v3-type/publicCallParse.d.ts.map +1 -1
- package/dist/lending/aave-v3-type/publicCallParse.js +68 -44
- package/dist/lending/fetchLender.d.ts.map +1 -1
- package/dist/lending/user-data/morpho/userCallParse.d.ts +2 -2
- package/dist/lending/user-data/morpho/userCallParse.d.ts.map +1 -1
- package/dist/lending/user-data/morpho/userCallParse.js +92 -26
- package/dist/prices/main-prices/fetchOracleData.d.ts.map +1 -1
- package/dist/prices/main-prices/fetchOracleData.js +8 -3
- package/dist/types/providers.d.ts +1 -1
- package/dist/types/providers.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/lending/aave-v3-type/publicCallParse.ts +312 -110
- package/src/lending/fetchLender.ts +1 -0
- package/src/lending/user-data/morpho/userCallParse.ts +138 -55
- package/src/prices/main-prices/fetchOracleData.ts +11 -7
- package/src/types/providers.ts +4 -3
- package/test/userDataMorpho.test.ts +1 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { AaveV3GeneralPublicResponse } from
|
|
2
|
-
import { AdditionalYields } from
|
|
3
|
-
import { Lender } from
|
|
4
|
-
import { GenericTokenList } from
|
|
1
|
+
import { AaveV3GeneralPublicResponse } from './types';
|
|
2
|
+
import { AdditionalYields } from '../../types';
|
|
3
|
+
import { Lender } from '@1delta/asset-registry';
|
|
4
|
+
import { GenericTokenList } from '../types';
|
|
5
5
|
export declare const getAaveV3ReservesDataConverter: (lender: Lender, chainId: string, prices: {
|
|
6
6
|
[asset: string]: number;
|
|
7
7
|
}, additionalYields: AdditionalYields, tokenList?: GenericTokenList) => [(data: any[]) => AaveV3GeneralPublicResponse | undefined, number];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publicCallParse.d.ts","sourceRoot":"","sources":["../../../src/lending/aave-v3-type/publicCallParse.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"publicCallParse.d.ts","sourceRoot":"","sources":["../../../src/lending/aave-v3-type/publicCallParse.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,2BAA2B,EAK5B,MAAM,SAAS,CAAA;AAEhB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE9C,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAQ/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAE3C,eAAO,MAAM,8BAA8B,GACzC,QAAQ,MAAM,EACd,SAAS,MAAM,EACf,QAAQ;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,EACnC,kBAAkB,gBAAgB,EAClC,YAAW,gBAAqB,KAC/B,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,2BAA2B,GAAG,SAAS,EAAE,MAAM,CA2MnE,CAAA;AA0BD,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,GAAG,EACrB,MAAM,EAAE,GAAG,EACX,SAAS,EAAE,GAAG,GACb,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GAAG,SAAS,EAAE,MAAM,CAAC,CA0H5C"}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
import { AaveV3GetreserveConfigDataIndexes, AaveV3GetReservesIndexes, YLDRTypeGetReserveConfigurationData, YLDRTypeGetReserveDataIndexes } from
|
|
2
|
-
import { AAVE_V3_EMODES } from
|
|
3
|
-
import { BPS, formatAaveRawApyToApr, parseRawAmount } from
|
|
4
|
-
import { Lender } from
|
|
5
|
-
import { getAaveAssets, getAssetMeta, LENDER_MODE_NO_MODE, toGenericPriceKey, toOracleKey } from
|
|
1
|
+
import { AaveV3GetreserveConfigDataIndexes, AaveV3GetReservesIndexes, YLDRTypeGetReserveConfigurationData, YLDRTypeGetReserveDataIndexes, } from './types';
|
|
2
|
+
import { AAVE_V3_EMODES } from './publicCallBuild';
|
|
3
|
+
import { BPS, formatAaveRawApyToApr, parseRawAmount } from '../../utils/parsing';
|
|
4
|
+
import { Lender } from '@1delta/asset-registry';
|
|
5
|
+
import { getAaveAssets, getAssetMeta, LENDER_MODE_NO_MODE, toGenericPriceKey, toOracleKey, } from '../../assets';
|
|
6
6
|
export const getAaveV3ReservesDataConverter = (lender, chainId, prices, additionalYields, tokenList = {}) => {
|
|
7
|
-
if (lender.
|
|
7
|
+
if (lender.startsWith('AAVE_V3'))
|
|
8
8
|
return parseAave32(chainId, lender, prices, additionalYields, tokenList);
|
|
9
9
|
switch (lender) {
|
|
10
10
|
/** AAVE V3 style with rewards from state */
|
|
11
|
-
case Lender.YLDR:
|
|
11
|
+
case Lender.YLDR:
|
|
12
|
+
return parseYLDRCall(chainId, lender, additionalYields, prices, tokenList);
|
|
12
13
|
default: {
|
|
13
14
|
const assetsToQuery = getAaveAssets(chainId, lender);
|
|
14
15
|
const expectedNumberOfCalls = assetsToQuery.length * 6 + AAVE_V3_EMODES.length + 1;
|
|
@@ -29,7 +30,7 @@ export const getAaveV3ReservesDataConverter = (lender, chainId, prices, addition
|
|
|
29
30
|
label: rawCfg.label,
|
|
30
31
|
borrowCollateralFactor: rawCfg.ltv / BPS,
|
|
31
32
|
collateralFactor: rawCfg.liquidationThreshold / BPS,
|
|
32
|
-
borrowFactor: 1
|
|
33
|
+
borrowFactor: 1,
|
|
33
34
|
};
|
|
34
35
|
});
|
|
35
36
|
for (let i = 0; i < assetsToQuery.length; i++) {
|
|
@@ -41,13 +42,19 @@ export const getAaveV3ReservesDataConverter = (lender, chainId, prices, addition
|
|
|
41
42
|
const reserveCaps = data[i * 6 + 3];
|
|
42
43
|
const debtCeiling = data[i * 6 + 4];
|
|
43
44
|
const reserveEMode = data[i * 6 + 5];
|
|
44
|
-
const assetMeta = tokenList[asset] ?? {
|
|
45
|
+
const assetMeta = tokenList[asset] ?? {
|
|
46
|
+
...getAssetMeta(chainId, asset),
|
|
47
|
+
address: asset,
|
|
48
|
+
};
|
|
45
49
|
const decimals = assetMeta?.decimals ?? 18;
|
|
46
50
|
const totalDeposits = parseRawAmount(reserveData?.[AaveV3GetReservesIndexes.totalAToken]?.toString(), decimals);
|
|
47
51
|
const totalDebtStable = parseRawAmount(reserveData?.[AaveV3GetReservesIndexes.totalStableDebt]?.toString(), decimals);
|
|
48
52
|
const totalDebt = parseRawAmount(reserveData?.[AaveV3GetReservesIndexes.totalVariableDebt]?.toString(), decimals);
|
|
49
|
-
const liquidity = Number(totalDeposits) -
|
|
50
|
-
|
|
53
|
+
const liquidity = Number(totalDeposits) -
|
|
54
|
+
Number(totalDebt) -
|
|
55
|
+
Number(totalDebtStable);
|
|
56
|
+
const price = prices[toOracleKey(assetMeta?.assetGroup) ??
|
|
57
|
+
toGenericPriceKey(asset, chainId)];
|
|
51
58
|
resultReserves[asset] = {
|
|
52
59
|
poolId: asset,
|
|
53
60
|
underlying: asset,
|
|
@@ -75,16 +82,20 @@ export const getAaveV3ReservesDataConverter = (lender, chainId, prices, addition
|
|
|
75
82
|
...resultReserves[asset],
|
|
76
83
|
decimals: Number(configData?.[AaveV3GetreserveConfigDataIndexes.decimals]),
|
|
77
84
|
config: {
|
|
78
|
-
...populateEModes(Number(configData?.[AaveV3GetreserveConfigDataIndexes.ltv]) /
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
85
|
+
...populateEModes(Number(configData?.[AaveV3GetreserveConfigDataIndexes.ltv]) /
|
|
86
|
+
BPS, Number(configData?.[AaveV3GetreserveConfigDataIndexes.liquidationThreshold]) / BPS),
|
|
87
|
+
...(eModeCategory !== 0
|
|
88
|
+
? {
|
|
89
|
+
[eModeCategory]: {
|
|
90
|
+
category: eModeCategory,
|
|
91
|
+
label: eModeConfigs[eModeCategory]?.label ?? 'Default',
|
|
92
|
+
borrowCollateralFactor: eModeConfigs[eModeCategory]?.borrowCollateralFactor ??
|
|
93
|
+
0,
|
|
94
|
+
collateralFactor: eModeConfigs[eModeCategory]?.collateralFactor ?? 0,
|
|
95
|
+
borrowFactor: 1,
|
|
96
|
+
},
|
|
86
97
|
}
|
|
87
|
-
|
|
98
|
+
: {}),
|
|
88
99
|
},
|
|
89
100
|
// flags
|
|
90
101
|
collateralActive: configData?.[AaveV3GetreserveConfigDataIndexes.usageAsCollateralEnabled],
|
|
@@ -97,13 +108,13 @@ export const getAaveV3ReservesDataConverter = (lender, chainId, prices, addition
|
|
|
97
108
|
// caps
|
|
98
109
|
borrowCap: Number(reserveCaps[0]?.toString()),
|
|
99
110
|
supplyCap: Number(reserveCaps[1]?.toString()),
|
|
100
|
-
debtCeiling: parseRawAmount(debtCeiling[i]?.toString(), Number(decimalsCeiling?.toString()))
|
|
111
|
+
debtCeiling: parseRawAmount(debtCeiling[i]?.toString(), Number(decimalsCeiling?.toString())),
|
|
101
112
|
};
|
|
102
113
|
}
|
|
103
114
|
return {
|
|
104
115
|
data: resultReserves,
|
|
105
116
|
chainId,
|
|
106
|
-
eModes: eModeConfigs
|
|
117
|
+
eModes: eModeConfigs,
|
|
107
118
|
};
|
|
108
119
|
},
|
|
109
120
|
expectedNumberOfCalls,
|
|
@@ -113,12 +124,12 @@ export const getAaveV3ReservesDataConverter = (lender, chainId, prices, addition
|
|
|
113
124
|
};
|
|
114
125
|
const populateEModes = (borrowCollateralFactor, collateralFactor) => {
|
|
115
126
|
let data = {};
|
|
116
|
-
AAVE_V3_EMODES.forEach(e => {
|
|
127
|
+
AAVE_V3_EMODES.forEach((e) => {
|
|
117
128
|
data[e] = {
|
|
118
129
|
category: e,
|
|
119
130
|
borrowCollateralFactor,
|
|
120
131
|
collateralFactor,
|
|
121
|
-
borrowFactor: 1
|
|
132
|
+
borrowFactor: 1,
|
|
122
133
|
};
|
|
123
134
|
});
|
|
124
135
|
return data;
|
|
@@ -140,12 +151,16 @@ export function parseYLDRCall(chainId, lender, additionalYields, prices, tokenLi
|
|
|
140
151
|
const asset = assetsToQuery[i];
|
|
141
152
|
const reserveData = data[i * 2];
|
|
142
153
|
const configData = data[i * 2 + 1];
|
|
143
|
-
const assetMeta = tokenList[asset] ?? {
|
|
154
|
+
const assetMeta = tokenList[asset] ?? {
|
|
155
|
+
...getAssetMeta(chainId, asset),
|
|
156
|
+
address: asset,
|
|
157
|
+
};
|
|
144
158
|
const decimals = assetMeta?.decimals ?? 18;
|
|
145
159
|
const totalVariableDebt = parseRawAmount(reserveData?.[YLDRTypeGetReserveDataIndexes.totalVariableDebt]?.toString(), decimals);
|
|
146
160
|
const totalAToken = parseRawAmount(reserveData?.[YLDRTypeGetReserveDataIndexes.totalYToken]?.toString(), decimals);
|
|
147
161
|
const liquidity = Number(totalAToken) - Number(totalVariableDebt);
|
|
148
|
-
const oracleKey = toOracleKey(assetMeta?.assetGroup) ??
|
|
162
|
+
const oracleKey = toOracleKey(assetMeta?.assetGroup) ??
|
|
163
|
+
toGenericPriceKey(asset, chainId);
|
|
149
164
|
const price = prices[oracleKey] ?? 1;
|
|
150
165
|
const totalDepositsUSD = Number(totalAToken) * price;
|
|
151
166
|
const totalDebtUSD = Number(totalVariableDebt) * price;
|
|
@@ -177,8 +192,8 @@ export function parseYLDRCall(chainId, lender, additionalYields, prices, tokenLi
|
|
|
177
192
|
// collateral factors
|
|
178
193
|
borrowCollateralFactor: Number(configData?.[YLDRTypeGetReserveConfigurationData.ltv]?.toString()) / BPS,
|
|
179
194
|
collateralFactor: Number(configData?.[YLDRTypeGetReserveConfigurationData.liquidationThreshold]?.toString()) / BPS,
|
|
180
|
-
borrowFactor: 1
|
|
181
|
-
}
|
|
195
|
+
borrowFactor: 1,
|
|
196
|
+
},
|
|
182
197
|
},
|
|
183
198
|
liquidationBonus: Number(configData?.[YLDRTypeGetReserveConfigurationData.liquidationBonus]?.toString()) / BPS,
|
|
184
199
|
// flags
|
|
@@ -192,7 +207,7 @@ export function parseYLDRCall(chainId, lender, additionalYields, prices, tokenLi
|
|
|
192
207
|
return {
|
|
193
208
|
data: resultReserves,
|
|
194
209
|
chainId,
|
|
195
|
-
eModes: {}
|
|
210
|
+
eModes: {},
|
|
196
211
|
};
|
|
197
212
|
},
|
|
198
213
|
expectedNumberOfCalls,
|
|
@@ -221,13 +236,13 @@ function parseAave32(chainId, lender, prices, additionalYields, tokenList) {
|
|
|
221
236
|
label: rawCfg.label,
|
|
222
237
|
borrowCollateralFactor: rawCfg.ltv / BPS,
|
|
223
238
|
collateralFactor: rawCfg.liquidationThreshold / BPS,
|
|
224
|
-
borrowFactor: 1
|
|
239
|
+
borrowFactor: 1,
|
|
225
240
|
};
|
|
226
241
|
debtBitmap[mode] = emodeDataResult[3 * index + 1];
|
|
227
242
|
collateralBitmap[mode] = emodeDataResult[3 * index + 2];
|
|
228
243
|
});
|
|
229
244
|
// we get the reserves list to obtain the index per reserve
|
|
230
|
-
const lowerReservesList = reservesList
|
|
245
|
+
const lowerReservesList = reservesList?.map((a) => a.toLowerCase());
|
|
231
246
|
for (let i = 0; i < assetsToQuery.length; i++) {
|
|
232
247
|
const asset = assetsToQuery[i];
|
|
233
248
|
const reserveData = data[i * 5];
|
|
@@ -236,13 +251,17 @@ function parseAave32(chainId, lender, prices, additionalYields, tokenList) {
|
|
|
236
251
|
// const siloedBorrowing = data[i * 5 + 2]
|
|
237
252
|
const reserveCaps = data[i * 5 + 3];
|
|
238
253
|
const debtCeiling = data[i * 5 + 4];
|
|
239
|
-
const assetMeta = tokenList[asset] ?? {
|
|
254
|
+
const assetMeta = tokenList[asset] ?? {
|
|
255
|
+
...getAssetMeta(chainId, asset),
|
|
256
|
+
address: asset,
|
|
257
|
+
};
|
|
240
258
|
const decimals = assetMeta?.decimals ?? 18;
|
|
241
259
|
const totalDeposits = parseRawAmount(reserveData?.[AaveV3GetReservesIndexes.totalAToken]?.toString(), decimals);
|
|
242
260
|
const totalDebtStable = parseRawAmount(reserveData?.[AaveV3GetReservesIndexes.totalStableDebt]?.toString(), decimals);
|
|
243
261
|
const totalDebt = parseRawAmount(reserveData?.[AaveV3GetReservesIndexes.totalVariableDebt]?.toString(), decimals);
|
|
244
262
|
const liquidity = Number(totalDeposits) - Number(totalDebt) - Number(totalDebtStable);
|
|
245
|
-
const price = prices[toOracleKey(assetMeta?.assetGroup)] ??
|
|
263
|
+
const price = prices[toOracleKey(assetMeta?.assetGroup)] ??
|
|
264
|
+
toGenericPriceKey(asset, chainId);
|
|
246
265
|
resultReserves[asset] = {
|
|
247
266
|
poolId: asset,
|
|
248
267
|
underlying: asset,
|
|
@@ -265,22 +284,27 @@ function parseAave32(chainId, lender, prices, additionalYields, tokenList) {
|
|
|
265
284
|
// rewards
|
|
266
285
|
rewards: {},
|
|
267
286
|
};
|
|
268
|
-
const activeEmodes = AAVE_V3_EMODES.map(mode => isReserveEnabledOnBitmap(debtBitmap[mode], lowerReservesList.indexOf(asset)) ||
|
|
287
|
+
const activeEmodes = AAVE_V3_EMODES.map((mode) => isReserveEnabledOnBitmap(debtBitmap[mode], lowerReservesList.indexOf(asset)) ||
|
|
288
|
+
isReserveEnabledOnBitmap(collateralBitmap[mode], lowerReservesList.indexOf(asset))
|
|
289
|
+
? mode
|
|
290
|
+
: -1).filter((m) => m !== undefined && m > 0);
|
|
269
291
|
const eModeCategory = activeEmodes.length === 0 ? 0 : activeEmodes[0]; // Number(emodeResult[index].toString())
|
|
270
292
|
resultReserves[asset] = {
|
|
271
293
|
...resultReserves[asset],
|
|
272
294
|
decimals: Number(configData?.[AaveV3GetreserveConfigDataIndexes.decimals]),
|
|
273
295
|
config: {
|
|
274
296
|
...populateEModes(Number(configData?.[AaveV3GetreserveConfigDataIndexes.ltv]) / BPS, Number(configData?.[AaveV3GetreserveConfigDataIndexes.liquidationThreshold]) / BPS),
|
|
275
|
-
...(eModeCategory !== 0
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
297
|
+
...(eModeCategory !== 0
|
|
298
|
+
? {
|
|
299
|
+
[eModeCategory]: {
|
|
300
|
+
category: eModeCategory,
|
|
301
|
+
label: eModeConfigs[eModeCategory]?.label ?? 'Default',
|
|
302
|
+
borrowCollateralFactor: eModeConfigs[eModeCategory]?.borrowCollateralFactor ?? 0,
|
|
303
|
+
collateralFactor: eModeConfigs[eModeCategory]?.collateralFactor ?? 0,
|
|
304
|
+
borrowFactor: 1,
|
|
305
|
+
},
|
|
282
306
|
}
|
|
283
|
-
|
|
307
|
+
: {}),
|
|
284
308
|
},
|
|
285
309
|
// flags
|
|
286
310
|
collateralActive: configData?.[AaveV3GetreserveConfigDataIndexes.usageAsCollateralEnabled],
|
|
@@ -293,13 +317,13 @@ function parseAave32(chainId, lender, prices, additionalYields, tokenList) {
|
|
|
293
317
|
// caps
|
|
294
318
|
borrowCap: Number(reserveCaps[0]?.toString()),
|
|
295
319
|
supplyCap: Number(reserveCaps[1]?.toString()),
|
|
296
|
-
debtCeiling: parseRawAmount(debtCeiling[i]?.toString(), Number(decimalsCeiling?.toString()))
|
|
320
|
+
debtCeiling: parseRawAmount(debtCeiling[i]?.toString(), Number(decimalsCeiling?.toString())),
|
|
297
321
|
};
|
|
298
322
|
}
|
|
299
323
|
return {
|
|
300
324
|
data: resultReserves,
|
|
301
325
|
chainId,
|
|
302
|
-
eModes: eModeConfigs
|
|
326
|
+
eModes: eModeConfigs,
|
|
303
327
|
};
|
|
304
328
|
},
|
|
305
329
|
expectedNumberOfCalls,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetchLender.d.ts","sourceRoot":"","sources":["../../src/lending/fetchLender.ts"],"names":[],"mappings":"AAyBA,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAA;AAWnE,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAG/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AA+E1C,eAAO,MAAM,mBAAmB,GAC9B,SAAS,MAAM,EACf,SAAS,MAAM,EAAE,EACjB,QAAQ;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,EACnC,kBAAkB,gBAAgB,EAClC,gBAAgB,sBAAsB,EACtC,YAAW,MAAM,OAAO,CAAC,gBAAgB,CAExC,KACA,OAAO,CAAC;IAAE,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"fetchLender.d.ts","sourceRoot":"","sources":["../../src/lending/fetchLender.ts"],"names":[],"mappings":"AAyBA,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAA;AAWnE,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAG/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AA+E1C,eAAO,MAAM,mBAAmB,GAC9B,SAAS,MAAM,EACf,SAAS,MAAM,EAAE,EACjB,QAAQ;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,EACnC,kBAAkB,gBAAgB,EAClC,gBAAgB,sBAAsB,EACtC,YAAW,MAAM,OAAO,CAAC,gBAAgB,CAExC,KACA,OAAO,CAAC;IAAE,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,CAsDnC,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Lender } from
|
|
2
|
-
import { MorphoUserReserveResponse } from
|
|
1
|
+
import { Lender } from '@1delta/asset-registry';
|
|
2
|
+
import { MorphoUserReserveResponse } from '../types';
|
|
3
3
|
export declare const getMorphoUserDataConverterWithlens: (lender: Lender, chainId: string, account: string, markets: string[], prices: {
|
|
4
4
|
[asset: string]: number;
|
|
5
5
|
}, pricesHist: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"userCallParse.d.ts","sourceRoot":"","sources":["../../../../src/lending/user-data/morpho/userCallParse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAE/C,OAAO,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"userCallParse.d.ts","sourceRoot":"","sources":["../../../../src/lending/user-data/morpho/userCallParse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAE/C,OAAO,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAA;AA+CpD,eAAO,MAAM,kCAAkC,GAC7C,QAAQ,MAAM,EACd,SAAS,MAAM,EACf,SAAS,MAAM,EACf,SAAS,MAAM,EAAE,EACjB,QAAQ;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,EACnC,YAAY;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,EACvC,YAAY,GAAG,KACd,CACD,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK;IAAE,CAAC,MAAM,EAAE,MAAM,GAAG,yBAAyB,CAAA;CAAE,GAAG,SAAS,EAC5E,MAAM,CA8EP,CAAA"}
|
|
@@ -1,34 +1,72 @@
|
|
|
1
|
-
import { getAssetMeta, toGenericPriceKey, toOracleKey } from
|
|
2
|
-
import { createBaseTypeUserState } from
|
|
3
|
-
import { parseRawAmount } from
|
|
4
|
-
import { decodePackedDataset } from
|
|
1
|
+
import { getAssetMeta, toGenericPriceKey, toOracleKey } from '../../../assets';
|
|
2
|
+
import { createBaseTypeUserState } from '../utils';
|
|
3
|
+
import { parseRawAmount } from '../../../utils/parsing';
|
|
4
|
+
import { decodePackedDataset } from './decoder';
|
|
5
|
+
const balanceData = {
|
|
6
|
+
'0': {
|
|
7
|
+
borrowDiscountedCollateral: 0,
|
|
8
|
+
collateral: 0,
|
|
9
|
+
deposits: 0,
|
|
10
|
+
debt: 0,
|
|
11
|
+
adjustedDebt: 0,
|
|
12
|
+
nav: 0,
|
|
13
|
+
deposits24h: 0,
|
|
14
|
+
debt24h: 0,
|
|
15
|
+
nav24h: 0,
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
// aggregated apr data
|
|
19
|
+
const aprData = {
|
|
20
|
+
'0': {
|
|
21
|
+
apr: 0,
|
|
22
|
+
borrowApr: 0,
|
|
23
|
+
depositApr: 0,
|
|
24
|
+
rewards: 0,
|
|
25
|
+
rewardApr: 0,
|
|
26
|
+
rewardDepositApr: 0,
|
|
27
|
+
rewardBorrowApr: 0,
|
|
28
|
+
stakingApr: 0,
|
|
29
|
+
stakingDepositApr: 0,
|
|
30
|
+
stakingBorrowApr: 0,
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
const userDataEmpty = (account, chainId) => {
|
|
34
|
+
return {
|
|
35
|
+
account,
|
|
36
|
+
chainId,
|
|
37
|
+
balanceData,
|
|
38
|
+
aprData,
|
|
39
|
+
userConfigs: {
|
|
40
|
+
'0': { selectedMode: 0, id: account },
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
};
|
|
5
44
|
export const getMorphoUserDataConverterWithlens = (lender, chainId, account, markets, prices, pricesHist, lenderData) => {
|
|
6
|
-
const expectedNumberOfCalls = markets.length
|
|
45
|
+
const expectedNumberOfCalls = Math.ceil(markets.length / 100);
|
|
7
46
|
return [
|
|
8
47
|
(data) => {
|
|
9
48
|
// chunksizes depend on markets
|
|
10
|
-
|
|
11
|
-
if (data.length !== slices) {
|
|
49
|
+
if (data.length !== expectedNumberOfCalls) {
|
|
12
50
|
return undefined;
|
|
13
51
|
}
|
|
52
|
+
let marketsHandled = [];
|
|
14
53
|
// de-chunk the calldata
|
|
15
|
-
const returnDatas = data.flatMap(d => decodePackedDataset(d));
|
|
54
|
+
const returnDatas = data.flatMap((d) => decodePackedDataset(d));
|
|
16
55
|
let datas = {};
|
|
17
56
|
for (let i = 0; i < returnDatas.length; i++) {
|
|
18
57
|
let totalDebt24h = 0;
|
|
19
58
|
let totalDeposits24h = 0;
|
|
20
59
|
const balanceData = returnDatas[i];
|
|
21
60
|
const markeId = markets[balanceData.index];
|
|
61
|
+
marketsHandled.push(markeId);
|
|
22
62
|
const market = lenderData[markeId]?.params?.market;
|
|
23
|
-
const { dataForMarket, addedDebt, addedDeposits } = createMorphoEntryFromMarketWithLens(
|
|
24
|
-
if (!dataForMarket)
|
|
25
|
-
continue;
|
|
63
|
+
const { dataForMarket, addedDebt, addedDeposits } = createMorphoEntryFromMarketWithLens(balanceData, chainId, market, prices, pricesHist);
|
|
26
64
|
totalDebt24h += addedDebt;
|
|
27
65
|
totalDeposits24h += addedDeposits;
|
|
28
66
|
const payload = {
|
|
29
67
|
chainId,
|
|
30
68
|
account,
|
|
31
|
-
lendingPositions: {
|
|
69
|
+
lendingPositions: { '0': dataForMarket },
|
|
32
70
|
rewards: {},
|
|
33
71
|
userEMode: 0,
|
|
34
72
|
};
|
|
@@ -36,7 +74,26 @@ export const getMorphoUserDataConverterWithlens = (lender, chainId, account, mar
|
|
|
36
74
|
datas[market.lender] = {
|
|
37
75
|
...payload,
|
|
38
76
|
...userData,
|
|
39
|
-
id: market.id
|
|
77
|
+
id: market.id,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
for (const [marketId, pubData] of Object.entries(lenderData ?? {})) {
|
|
81
|
+
if (marketsHandled.includes(marketId))
|
|
82
|
+
continue;
|
|
83
|
+
const payload = {
|
|
84
|
+
chainId,
|
|
85
|
+
account,
|
|
86
|
+
lendingPositions: { '0': {} },
|
|
87
|
+
rewards: {},
|
|
88
|
+
userEMode: 0,
|
|
89
|
+
};
|
|
90
|
+
const userData = userDataEmpty(account, chainId);
|
|
91
|
+
// @ts-ignore
|
|
92
|
+
datas[marketId] = {
|
|
93
|
+
...payload,
|
|
94
|
+
...userData,
|
|
95
|
+
// @ts-ignore
|
|
96
|
+
id: pubData?.params?.market.id,
|
|
40
97
|
};
|
|
41
98
|
}
|
|
42
99
|
return datas;
|
|
@@ -44,7 +101,7 @@ export const getMorphoUserDataConverterWithlens = (lender, chainId, account, mar
|
|
|
44
101
|
expectedNumberOfCalls,
|
|
45
102
|
];
|
|
46
103
|
};
|
|
47
|
-
function createMorphoEntryFromMarketWithLens(
|
|
104
|
+
function createMorphoEntryFromMarketWithLens(balanceInfo, chainId, market, prices, pricesHist) {
|
|
48
105
|
const loanAddress = market.loanAddress.toLowerCase();
|
|
49
106
|
const loanMeta = getAssetMeta(chainId, loanAddress);
|
|
50
107
|
const loanKey = toOracleKey(loanMeta?.assetGroup) ?? toGenericPriceKey(loanAddress, chainId);
|
|
@@ -53,27 +110,36 @@ function createMorphoEntryFromMarketWithLens(i, balanceInfo, chainId, market, pr
|
|
|
53
110
|
const priceHistLoan = pricesHist?.[loanKey] ?? priceLoan;
|
|
54
111
|
const deposits = balanceInfo.supplyAssets;
|
|
55
112
|
const borrow = balanceInfo.borrowAssets;
|
|
113
|
+
const collateral = balanceInfo.collateral;
|
|
114
|
+
// return early if there are zeros
|
|
115
|
+
if (deposits === 0n && borrow === 0n && collateral === 0n)
|
|
116
|
+
return {
|
|
117
|
+
dataForMarket: {},
|
|
118
|
+
addedDeposits: 0,
|
|
119
|
+
addedDebt: 0,
|
|
120
|
+
};
|
|
121
|
+
const collateralAddress = market.collateralAddress.toLowerCase();
|
|
122
|
+
const assetMeta = getAssetMeta(chainId, collateralAddress);
|
|
123
|
+
const decimals = market.collateralDecimals ?? assetMeta?.decimals ?? 18;
|
|
56
124
|
const depositDec = parseRawAmount(deposits.toString(), market.loanDecimals ?? loanMeta?.decimals ?? 18);
|
|
125
|
+
const collateralDec = parseRawAmount(collateral.toString(), decimals);
|
|
57
126
|
const borrowDec = parseRawAmount(borrow.toString(), market.loanDecimals ?? loanMeta?.decimals ?? 18);
|
|
58
127
|
const dataForLoanAsset = {
|
|
59
128
|
poolId: loanAddress,
|
|
60
129
|
underlying: loanAddress,
|
|
61
130
|
deposits: parseRawAmount(deposits.toString(), market.loanDecimals ?? loanMeta?.decimals ?? 18),
|
|
62
131
|
depositsRaw: deposits.toString(),
|
|
63
|
-
debtStable:
|
|
132
|
+
debtStable: '0',
|
|
64
133
|
debt: borrowDec,
|
|
65
134
|
depositsUSD: Number(depositDec) * priceLoan,
|
|
66
135
|
debtStableUSD: 0,
|
|
67
136
|
debtUSD: Number(borrowDec) * priceLoan,
|
|
68
|
-
stableBorrowRate:
|
|
137
|
+
stableBorrowRate: '0',
|
|
69
138
|
collateralActive: true,
|
|
70
139
|
claimableRewards: 0,
|
|
71
140
|
};
|
|
72
|
-
const
|
|
73
|
-
|
|
74
|
-
const decimals = market.collateralDecimals ?? assetMeta?.decimals ?? 18;
|
|
75
|
-
const collateralDec = parseRawAmount(balanceInfo.collateral.toString(), decimals);
|
|
76
|
-
const key = toOracleKey(assetMeta?.assetGroup) ?? toGenericPriceKey(collateralAddress, chainId);
|
|
141
|
+
const key = toOracleKey(assetMeta?.assetGroup) ??
|
|
142
|
+
toGenericPriceKey(collateralAddress, chainId);
|
|
77
143
|
// prices
|
|
78
144
|
const price = prices[key] ?? 1;
|
|
79
145
|
const priceHist = pricesHist?.[key] ?? price;
|
|
@@ -82,21 +148,21 @@ function createMorphoEntryFromMarketWithLens(i, balanceInfo, chainId, market, pr
|
|
|
82
148
|
underlying: collateralAddress,
|
|
83
149
|
deposits: collateralDec,
|
|
84
150
|
depositsRaw: balanceInfo.collateral.toString(),
|
|
85
|
-
debtStable:
|
|
86
|
-
debt:
|
|
151
|
+
debtStable: '0',
|
|
152
|
+
debt: '0',
|
|
87
153
|
depositsUSD: Number(collateralDec) * price,
|
|
88
154
|
debtStableUSD: 0,
|
|
89
155
|
debtUSD: 0,
|
|
90
|
-
stableBorrowRate:
|
|
156
|
+
stableBorrowRate: '0',
|
|
91
157
|
collateralActive: true,
|
|
92
158
|
claimableRewards: 0,
|
|
93
159
|
};
|
|
94
160
|
return {
|
|
95
161
|
dataForMarket: {
|
|
96
162
|
[loanAddress]: dataForLoanAsset,
|
|
97
|
-
[collateralAddress]: dataForCollateralAsset
|
|
163
|
+
[collateralAddress]: dataForCollateralAsset,
|
|
98
164
|
},
|
|
99
165
|
addedDeposits: Number(depositDec) * priceHistLoan + Number(collateralDec) * priceHist,
|
|
100
|
-
addedDebt: Number(borrowDec) * priceHistLoan
|
|
166
|
+
addedDebt: Number(borrowDec) * priceHistLoan,
|
|
101
167
|
};
|
|
102
168
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetchOracleData.d.ts","sourceRoot":"","sources":["../../../src/prices/main-prices/fetchOracleData.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAGlD,eAAO,MAAM,eAAe,GAAI,OAAO,MAAM,EAAE,cAAY,KAAG,
|
|
1
|
+
{"version":3,"file":"fetchOracleData.d.ts","sourceRoot":"","sources":["../../../src/prices/main-prices/fetchOracleData.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAGlD,eAAO,MAAM,eAAe,GAAI,OAAO,MAAM,EAAE,cAAY,KAAG,MAY7D,CAAA;AAOD,UAAU,UAAU;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CACtB;AAID;;GAEG;AACH,eAAO,MAAM,eAAe,GAC1B,UAAU,MAAM,EAAE,EAClB,cAAc,oBAAoB,KACjC,OAAO,CAAC,UAAU,CA8GpB,CAAA"}
|
|
@@ -14,9 +14,14 @@ import { AAVE_STYLE_ORACLES } from './addresses/aaveOracles';
|
|
|
14
14
|
import { AAVES_PER_CHAIN } from '../../utils';
|
|
15
15
|
import { parseRawAmount } from '../../utils/parsing';
|
|
16
16
|
export const formatAavePrice = (price, isV2 = false) => {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
try {
|
|
18
|
+
return Number(formatEther(BigInt(price ?? '0') *
|
|
19
|
+
// 10^(18 - decimals)
|
|
20
|
+
10n ** (isV2 ? 0n : 10n)));
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return NaN;
|
|
24
|
+
}
|
|
20
25
|
};
|
|
21
26
|
const LENDLE_PAIR_MANTLE = '0x4c57BE599d0e0414785943569E9B6A66dA79Aa6b';
|
|
22
27
|
const AU_PAIR_MANTLE = '0x709503fbb50b10f921e812c48fbd5c5522a0b20c';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { PublicClient } from 'viem';
|
|
2
|
-
export type MulticallRetryFunction = (chain: string, calls: any[], abi: any, batchSize?: number, maxRetries?: number, providerId?: number, allowFailure?: boolean) => Promise<any[]>;
|
|
2
|
+
export type MulticallRetryFunction = (chain: string, calls: any[], abi: any, batchSize?: number, maxRetries?: number, providerId?: number, allowFailure?: boolean, orverrides?: any) => Promise<any[]>;
|
|
3
3
|
export type GetEvmClientFunction = (chain: string, rpcId?: number) => PublicClient;
|
|
4
4
|
export interface ProviderDependencies {
|
|
5
5
|
multicallRetry: MulticallRetryFunction;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/types/providers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAEnC,MAAM,MAAM,sBAAsB,GAAG,CACnC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,GAAG,EAAE,EACZ,GAAG,EAAE,GAAG,EACR,SAAS,CAAC,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/types/providers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAEnC,MAAM,MAAM,sBAAsB,GAAG,CACnC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,GAAG,EAAE,EACZ,GAAG,EAAE,GAAG,EACR,SAAS,CAAC,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,OAAO,EACtB,UAAU,CAAC,EAAE,GAAG,KACb,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;AAEnB,MAAM,MAAM,oBAAoB,GAAG,CACjC,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,MAAM,KACX,YAAY,CAAA;AAEjB,MAAM,WAAW,oBAAoB;IACnC,cAAc,EAAE,sBAAsB,CAAA;IACtC,YAAY,EAAE,oBAAoB,CAAA;CACnC;AAED,MAAM,WAAW,4BAA4B;IAC3C,cAAc,CAAC,EAAE,sBAAsB,CAAA;IACvC,YAAY,CAAC,EAAE,oBAAoB,CAAA;CACpC"}
|