@1delta/margin-fetcher 5.0.78 → 5.0.80

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/index.js CHANGED
@@ -17091,6 +17091,7 @@ var parseMantissaWad = (raw) => {
17091
17091
  }
17092
17092
  };
17093
17093
  var getCompoundV2DataConverter = (lender, chainId, prices, additionalYields, tokenList = {}, unitSeconds) => {
17094
+ if (!getCompoundV2Lens(chainId, lender)) return [() => void 0, 0];
17094
17095
  if (lender === Lender.TAKARA) {
17095
17096
  return [
17096
17097
  (data) => {
@@ -18468,6 +18469,7 @@ function buildTokenConfig(vaultAddr, reverseLTV, borrowVaults, vaultData) {
18468
18469
  const config = {};
18469
18470
  const ownInfo = findInfo(vaultAddr, vaultData);
18470
18471
  const liquidationPenalty = ownInfo ? ltvToNumber(ownInfo.maxLiquidationDiscount) : 0;
18472
+ const ownDepositsOff = ownInfo ? isOperationDisabled(ownInfo, OP_DEPOSIT) : false;
18471
18473
  const reverseEntries = reverseLTV.get(vaultAddr) ?? [];
18472
18474
  for (const { borrowVault, ltv } of reverseEntries) {
18473
18475
  if (!borrowVaults.has(borrowVault)) continue;
@@ -18479,7 +18481,7 @@ function buildTokenConfig(vaultAddr, reverseLTV, borrowVaults, vaultData) {
18479
18481
  borrowFactor: 1,
18480
18482
  liquidationPenalty,
18481
18483
  closeFactor: 1,
18482
- collateralDisabled: false,
18484
+ collateralDisabled: ownDepositsOff,
18483
18485
  debtDisabled: true
18484
18486
  };
18485
18487
  }
@@ -18493,7 +18495,8 @@ function buildTokenConfig(vaultAddr, reverseLTV, borrowVaults, vaultData) {
18493
18495
  borrowFactor: 1,
18494
18496
  liquidationPenalty,
18495
18497
  closeFactor: 1,
18496
- debtDisabled: false,
18498
+ // Borrow hooked off (zero hook target) ⇒ no new debt in this config.
18499
+ debtDisabled: selfInfo ? isOperationDisabled(selfInfo, OP_BORROW) : false,
18497
18500
  collateralDisabled: true
18498
18501
  };
18499
18502
  }
@@ -20614,7 +20617,7 @@ var toBig = (v) => {
20614
20617
  var parToWei = (par, index) => toBig(par) * toBig(index) / BASE;
20615
20618
  var getDolomitePublicDataConverter = (lender, chainId, _prices, additionalYields, tokenList = {}) => {
20616
20619
  const marketIds = getDolomiteMarketIds(chainId);
20617
- const expectedNumberOfCalls = GLOBAL_COUNT + MARKET_STRIDE * marketIds.length;
20620
+ const expectedNumberOfCalls = !dolomiteConfigs()?.[chainId]?.dolomiteMargin || marketIds.length === 0 ? 0 : GLOBAL_COUNT + MARKET_STRIDE * marketIds.length;
20618
20621
  return [
20619
20622
  (data) => {
20620
20623
  if (data.length !== expectedNumberOfCalls) return void 0;
@@ -21146,12 +21149,14 @@ var getLenderPublicData = async (chainId, lenders, prices, additionalYields, mul
21146
21149
  let calls = [];
21147
21150
  const validLenders = [];
21148
21151
  const sliceStart = {};
21152
+ const sliceBuilt = {};
21149
21153
  for (const lender of lenders) {
21150
21154
  const abi = getAbi(lender);
21151
21155
  const callData = buildLenderCall(chainId, lender);
21152
21156
  if (callData.some((c) => !c.address)) continue;
21153
21157
  const mappedCalls = callData.map((call) => ({ call, abi: call.abi ?? abi }));
21154
21158
  sliceStart[lender] = calls.length;
21159
+ sliceBuilt[lender] = mappedCalls.length;
21155
21160
  calls.push(...mappedCalls);
21156
21161
  validLenders.push(lender);
21157
21162
  }
@@ -21203,9 +21208,27 @@ var getLenderPublicData = async (chainId, lenders, prices, additionalYields, mul
21203
21208
  }
21204
21209
  })
21205
21210
  );
21206
- let currentSlice = 0;
21211
+ const slices = sliceLenderResults(
21212
+ chainId,
21213
+ rawResults,
21214
+ validLenders.map((lender) => ({
21215
+ lender,
21216
+ start: sliceStart[lender],
21217
+ built: sliceBuilt[lender],
21218
+ declared: getLenderDataConverter(
21219
+ lender,
21220
+ chainId,
21221
+ prices,
21222
+ additionalYields,
21223
+ list,
21224
+ rateUnitSeconds.get(lender)
21225
+ )[1]
21226
+ }))
21227
+ );
21207
21228
  for (const lender of validLenders) {
21208
- const [converter, sliceLength] = getLenderDataConverter(
21229
+ const data = slices[lender];
21230
+ if (!data || data.length === 0) continue;
21231
+ const [converter] = getLenderDataConverter(
21209
21232
  lender,
21210
21233
  chainId,
21211
21234
  prices,
@@ -21213,30 +21236,40 @@ var getLenderPublicData = async (chainId, lenders, prices, additionalYields, mul
21213
21236
  list,
21214
21237
  rateUnitSeconds.get(lender)
21215
21238
  );
21216
- if (sliceLength > 0) {
21217
- try {
21218
- const data = rawResults.slice(currentSlice, currentSlice + sliceLength);
21219
- const convertedData = converter(data);
21220
- if (isMultiMarket(lender)) {
21221
- if (!convertedData) {
21222
- invalidLenders.push(lender);
21223
- } else {
21224
- Object.assign(lenderData, convertedData);
21225
- }
21239
+ try {
21240
+ const convertedData = converter(data);
21241
+ if (isMultiMarket(lender)) {
21242
+ if (!convertedData) {
21243
+ invalidLenders.push(lender);
21226
21244
  } else {
21227
- if (!convertedData) {
21228
- invalidLenders.push(lender);
21229
- } else {
21230
- lenderData[lender] = convertedData;
21231
- }
21245
+ Object.assign(lenderData, convertedData);
21246
+ }
21247
+ } else {
21248
+ if (!convertedData) {
21249
+ invalidLenders.push(lender);
21250
+ } else {
21251
+ lenderData[lender] = convertedData;
21232
21252
  }
21233
- } catch {
21234
21253
  }
21235
- currentSlice += sliceLength;
21254
+ } catch {
21236
21255
  }
21237
21256
  }
21238
21257
  return lenderData;
21239
21258
  };
21259
+ function sliceLenderResults(chainId, rawResults, entries) {
21260
+ const out = {};
21261
+ for (const { lender, start, built, declared } of entries) {
21262
+ if (declared !== built) {
21263
+ console.warn(
21264
+ `[lending] chain ${chainId} ${lender}: builder emitted ${built} calls but parser expects ${declared} \u2014 dropping this lender for the cycle (builder/parser out of sync)`
21265
+ );
21266
+ out[lender] = null;
21267
+ continue;
21268
+ }
21269
+ out[lender] = built > 0 ? rawResults.slice(start, start + built) : [];
21270
+ }
21271
+ return out;
21272
+ }
21240
21273
  var DEFAULT_MIDNIGHT_API = "https://api.morpho.org/v0/midnight";
21241
21274
  var warn = (...args) => {
21242
21275
  };
@@ -60611,6 +60644,52 @@ function computeV2Allocation(decimals, totalAssetsFormatted, feePercent2, priceU
60611
60644
  };
60612
60645
  }
60613
60646
 
60647
+ // src/vaults/morpho/stubVaults.ts
60648
+ var MORPHO_STUB_VAULTS = {
60649
+ "14": ["0x5eae7e544258e421cb2774e508e15ee8dade8200"],
60650
+ // Flare
60651
+ "146": ["0xd7f2f89e1991de2b9d62fbeeeb3bc0b01d032328"],
60652
+ // Sonic
60653
+ "239": ["0x2903a9e55bb8a05e6cbdd5c5d00203bf527fa9db"],
60654
+ // TAC
60655
+ "1135": ["0x389724731cea95c4a46cc93e96f211f389f31405"],
60656
+ // Lisk
60657
+ "1672": ["0x79ded579756072372510ff3a86f884433a697b5c"],
60658
+ // Pharos
60659
+ "1868": ["0x94665e0df3c8c25119d80b2e3c703ccd127bf37e"],
60660
+ // Soneium
60661
+ "2741": ["0x225c6e63970bb04d0780b3abb047dba659ad3cec"],
60662
+ // Abstract
60663
+ "2818": ["0x7cf2c1a184c2f17e0413a13b21b1fdafd51df08c"],
60664
+ // Morph
60665
+ "4114": ["0xc063aca30b0d56ff0a9e446a94f8cdb421ab89fb"],
60666
+ // Citrea
60667
+ "4326": ["0xf55c695ebaf1f4eefeda0833ef6a29c90e7b7f05"],
60668
+ // MegaETH
60669
+ "34443": ["0xf4461806c58d9e7cd74e79b113d81d127634b807"],
60670
+ // Mode
60671
+ "42220": ["0x099272b39ae8e6d7d415e8ba252c3d2c59432087"],
60672
+ // Celo
60673
+ "43111": ["0x339b3b6413345b4d3beb524c12cd3910c6dd8dbb"],
60674
+ // Hemi
60675
+ "57073": ["0xb00123b1058c13559408b9d609ed417617f588ed"],
60676
+ // Ink
60677
+ "59144": ["0x3e89134a270b8f0dc3dfd8bf6e249fddb2f7a634"],
60678
+ // Linea
60679
+ "98866": [
60680
+ "0x6f8acb9c03abb7ba6ba24b4698b019ffe96eae60",
60681
+ "0xd2586890224ab02bf31334e15872cd9c93f68ba8"
60682
+ ]
60683
+ // Plume
60684
+ };
60685
+ var STUB_SET = new Map(
60686
+ Object.entries(MORPHO_STUB_VAULTS).map(([chainId, list]) => [
60687
+ chainId,
60688
+ new Set(list.map((a) => a.toLowerCase()))
60689
+ ])
60690
+ );
60691
+ var isMorphoStubVault = (chainId, vault) => STUB_SET.get(chainId)?.has(vault.toLowerCase()) ?? false;
60692
+
60614
60693
  // src/vaults/morpho/fetchFromChain.ts
60615
60694
  var { chunk: chunk5 } = lodash;
60616
60695
  var VAULT_CALLS = [
@@ -60706,7 +60785,13 @@ var collectEntries = (chainId, protocols, skip) => {
60706
60785
  return out;
60707
60786
  };
60708
60787
  var fetchMorphoVaultsFromChain = async (chainId, multicallRetry, prices = {}, tokenList = {}, opts = {}) => {
60709
- const entries = opts.vaultsOverride ? opts.vaultsOverride.map((entry) => ({ protocol: "", entry })) : collectEntries(chainId, opts.protocols, DEFAULT_SKIP_PROTOCOLS);
60788
+ const entries = (opts.vaultsOverride ? opts.vaultsOverride.map((entry) => ({ protocol: "", entry })) : collectEntries(chainId, opts.protocols, DEFAULT_SKIP_PROTOCOLS)).filter(({ entry }) => {
60789
+ if (!isMorphoStubVault(chainId, entry.vault)) return true;
60790
+ console.warn(
60791
+ `[morpho vaults] chain ${chainId}: skipping ${entry.vault} \u2014 factory smoke-test vault (stub underlying)`
60792
+ );
60793
+ return false;
60794
+ });
60710
60795
  if (entries.length === 0) return {};
60711
60796
  const phase1Calls = entries.flatMap(
60712
60797
  ({ entry }) => PHASE1_CALLS.map((name) => ({