@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.
@@ -1,7 +1,7 @@
1
- import { AaveV3GeneralPublicResponse } from "./types";
2
- import { AdditionalYields } from "../../types";
3
- import { Lender } from "@1delta/asset-registry";
4
- import { GenericTokenList } from "../types";
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":"AACA,OAAO,EACL,2BAA2B,EAK5B,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAEhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C,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,CAwHnE,CAAA;AA0BD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GAAG,SAAS,EAAE,MAAM,CAAC,CAgF7J"}
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 "./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";
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.includes("AAVE_V3"))
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: return parseYLDRCall(chainId, lender, additionalYields, prices, tokenList);
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] ?? { ...getAssetMeta(chainId, asset), address: 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) - Number(totalDebt) - Number(totalDebtStable);
50
- const price = prices[toOracleKey(assetMeta?.assetGroup) ?? toGenericPriceKey(asset, chainId)];
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]) / BPS, Number(configData?.[AaveV3GetreserveConfigDataIndexes.liquidationThreshold]) / BPS),
79
- ...(eModeCategory !== 0 ? {
80
- [eModeCategory]: {
81
- category: eModeCategory,
82
- label: eModeConfigs[eModeCategory]?.label ?? "Default",
83
- borrowCollateralFactor: eModeConfigs[eModeCategory]?.borrowCollateralFactor ?? 0,
84
- collateralFactor: eModeConfigs[eModeCategory]?.collateralFactor ?? 0,
85
- borrowFactor: 1
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] ?? { ...getAssetMeta(chainId, asset), address: 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) ?? toGenericPriceKey(asset, chainId);
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.map(a => a.toLowerCase());
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] ?? { ...getAssetMeta(chainId, asset), address: 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)] ?? toGenericPriceKey(asset, chainId);
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)) || isReserveEnabledOnBitmap(collateralBitmap[mode], lowerReservesList.indexOf(asset)) ? mode : -1).filter(m => m !== undefined && m > 0);
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
- [eModeCategory]: {
277
- category: eModeCategory,
278
- label: eModeConfigs[eModeCategory]?.label ?? "Default",
279
- borrowCollateralFactor: eModeConfigs[eModeCategory]?.borrowCollateralFactor ?? 0,
280
- collateralFactor: eModeConfigs[eModeCategory]?.collateralFactor ?? 0,
281
- borrowFactor: 1
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,CAqDnC,CAAA"}
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 "@1delta/asset-registry";
2
- import { MorphoUserReserveResponse } from "../types";
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;AAMpD,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,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK;IAAE,CAAC,MAAM,EAAE,MAAM,GAAG,yBAAyB,CAAA;CAAE,GAAG,SAAS,EAAE,MAAM,CA2DvF,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 "../../../assets";
2
- import { createBaseTypeUserState } from "../utils";
3
- import { parseRawAmount } from "../../../utils/parsing";
4
- import { decodePackedDataset } from "./decoder";
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 * 2;
45
+ const expectedNumberOfCalls = Math.ceil(markets.length / 100);
7
46
  return [
8
47
  (data) => {
9
48
  // chunksizes depend on markets
10
- const slices = Math.ceil(markets.length / 100);
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(i, balanceData, chainId, market, prices, pricesHist);
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: { "0": dataForMarket },
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(i, balanceInfo, chainId, market, prices, pricesHist) {
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: "0",
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: "0",
137
+ stableBorrowRate: '0',
69
138
  collateralActive: true,
70
139
  claimableRewards: 0,
71
140
  };
72
- const collateralAddress = market.collateralAddress.toLowerCase();
73
- const assetMeta = getAssetMeta(chainId, collateralAddress);
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: "0",
86
- debt: "0",
151
+ debtStable: '0',
152
+ debt: '0',
87
153
  depositsUSD: Number(collateralDec) * price,
88
154
  debtStableUSD: 0,
89
155
  debtUSD: 0,
90
- stableBorrowRate: "0",
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,MAQ7D,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"}
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
- return Number(formatEther(BigInt(price ?? '0') *
18
- // 10^(18 - decimals)
19
- 10n ** (isV2 ? 0n : 10n)));
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,KACnB,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"}
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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@1delta/margin-fetcher",
3
- "version": "0.0.14",
3
+ "version": "0.0.16",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",