@1delta/margin-fetcher 0.0.232 → 0.0.233

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.
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Minimal ABI for Silo V2 (and V3 — identical shape) InterestRateModelV2.
3
+ *
4
+ * Only `getConfig(silo)` is needed for reserve-data rate derivation.
5
+ * Keeping this local avoids pulling in the full `@1delta/irm-sdk` just
6
+ * for a single ABI entry.
7
+ */
8
+ export declare const InterestRateModelV2Abi: readonly [{
9
+ readonly type: "function";
10
+ readonly name: "getConfig";
11
+ readonly stateMutability: "view";
12
+ readonly inputs: readonly [{
13
+ readonly name: "_silo";
14
+ readonly type: "address";
15
+ }];
16
+ readonly outputs: readonly [{
17
+ readonly name: "";
18
+ readonly type: "tuple";
19
+ readonly components: readonly [{
20
+ readonly name: "uopt";
21
+ readonly type: "int256";
22
+ }, {
23
+ readonly name: "ucrit";
24
+ readonly type: "int256";
25
+ }, {
26
+ readonly name: "ulow";
27
+ readonly type: "int256";
28
+ }, {
29
+ readonly name: "klin";
30
+ readonly type: "int256";
31
+ }, {
32
+ readonly name: "ki";
33
+ readonly type: "int256";
34
+ }, {
35
+ readonly name: "kcrit";
36
+ readonly type: "int256";
37
+ }, {
38
+ readonly name: "klow";
39
+ readonly type: "int256";
40
+ }, {
41
+ readonly name: "beta";
42
+ readonly type: "int256";
43
+ }, {
44
+ readonly name: "ri";
45
+ readonly type: "int256";
46
+ }, {
47
+ readonly name: "Tcrit";
48
+ readonly type: "int256";
49
+ }];
50
+ }];
51
+ }];
52
+ //# sourceMappingURL=InterestRateModelV2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InterestRateModelV2.d.ts","sourceRoot":"","sources":["../../../src/abis/silo-v2/InterestRateModelV2.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyBzB,CAAA"}
package/dist/index.js CHANGED
@@ -18709,8 +18709,36 @@ var SiloLensAbi = [
18709
18709
  }
18710
18710
  ];
18711
18711
 
18712
+ // src/abis/silo-v2/InterestRateModelV2.ts
18713
+ var InterestRateModelV2Abi = [
18714
+ {
18715
+ type: "function",
18716
+ name: "getConfig",
18717
+ stateMutability: "view",
18718
+ inputs: [{ name: "_silo", type: "address" }],
18719
+ outputs: [
18720
+ {
18721
+ name: "",
18722
+ type: "tuple",
18723
+ components: [
18724
+ { name: "uopt", type: "int256" },
18725
+ { name: "ucrit", type: "int256" },
18726
+ { name: "ulow", type: "int256" },
18727
+ { name: "klin", type: "int256" },
18728
+ { name: "ki", type: "int256" },
18729
+ { name: "kcrit", type: "int256" },
18730
+ { name: "klow", type: "int256" },
18731
+ { name: "beta", type: "int256" },
18732
+ { name: "ri", type: "int256" },
18733
+ { name: "Tcrit", type: "int256" }
18734
+ ]
18735
+ }
18736
+ ]
18737
+ }
18738
+ ];
18739
+
18712
18740
  // src/lending/public-data/silo-v2/publicCallBuild.ts
18713
- var SILO_V2_CALLS_PER_SIDE = 2;
18741
+ var SILO_V2_CALLS_PER_SIDE = 3;
18714
18742
  var SILO_V2_CALLS_PER_PAIR = SILO_V2_CALLS_PER_SIDE * 2;
18715
18743
  function buildSiloV2LenderReserveCall(_chainId, lender) {
18716
18744
  const market = getSiloV2MarketEntry(_chainId, lender);
@@ -18729,13 +18757,96 @@ function buildSiloV2LenderReserveCall(_chainId, lender) {
18729
18757
  name: "getDebtAssets",
18730
18758
  params: [],
18731
18759
  abi: SiloAbi
18760
+ },
18761
+ {
18762
+ address: half.interestRateModel,
18763
+ name: "getConfig",
18764
+ params: [half.silo],
18765
+ abi: InterestRateModelV2Abi
18732
18766
  }
18733
18767
  );
18734
18768
  }
18735
18769
  return calls;
18736
18770
  }
18737
18771
 
18772
+ // src/lending/public-data/silo-v2/irmRates.ts
18773
+ var DP = 1e18;
18774
+ var WAD = 1e18;
18775
+ var SECONDS_PER_YEAR4 = 365 * 24 * 3600;
18776
+ function toBigIntSafe(val) {
18777
+ if (typeof val === "bigint") return val;
18778
+ if (val == null || val === "0x") return 0n;
18779
+ try {
18780
+ return BigInt(val);
18781
+ } catch {
18782
+ return 0n;
18783
+ }
18784
+ }
18785
+ function parseIRMConfig(raw, half) {
18786
+ if (!raw || raw === "0x") return null;
18787
+ try {
18788
+ const uopt = toBigIntSafe(raw.uopt ?? raw[0]);
18789
+ const ucrit = toBigIntSafe(raw.ucrit ?? raw[1]);
18790
+ const ulow = toBigIntSafe(raw.ulow ?? raw[2]);
18791
+ const klin = toBigIntSafe(raw.klin ?? raw[3]);
18792
+ const ki = toBigIntSafe(raw.ki ?? raw[4]);
18793
+ const kcrit = toBigIntSafe(raw.kcrit ?? raw[5]);
18794
+ const klow = toBigIntSafe(raw.klow ?? raw[6]);
18795
+ const beta = toBigIntSafe(raw.beta ?? raw[7]);
18796
+ const ri = toBigIntSafe(raw.ri ?? raw[8]);
18797
+ const Tcrit = toBigIntSafe(raw.Tcrit ?? raw[9]);
18798
+ const daoFee = half.daoFee != null ? Number(BigInt(half.daoFee)) / WAD : void 0;
18799
+ const deployerFee = half.deployerFee != null ? Number(BigInt(half.deployerFee)) / WAD : void 0;
18800
+ return {
18801
+ uopt,
18802
+ ucrit,
18803
+ ulow,
18804
+ klin,
18805
+ ki,
18806
+ kcrit,
18807
+ klow,
18808
+ beta,
18809
+ ri,
18810
+ Tcrit,
18811
+ ...daoFee != null ? { daoFee } : {},
18812
+ ...deployerFee != null ? { deployerFee } : {}
18813
+ };
18814
+ } catch {
18815
+ return null;
18816
+ }
18817
+ }
18818
+ function calculateBorrowRate(utilization, params) {
18819
+ const uopt = Number(params.uopt) / DP;
18820
+ const ucrit = Number(params.ucrit) / DP;
18821
+ const ulow = Number(params.ulow) / DP;
18822
+ const klin = Number(params.klin) / DP;
18823
+ const ki = Number(params.ki) / DP;
18824
+ const kcrit = Number(params.kcrit) / DP;
18825
+ const klow = Number(params.klow) / DP;
18826
+ const ri = Number(params.ri) / DP;
18827
+ const Tcrit = Number(params.Tcrit) / DP;
18828
+ const beta = Number(params.beta) / DP;
18829
+ const u = utilization;
18830
+ const T = 0;
18831
+ const rp = u > ucrit ? kcrit * (1 + Tcrit + beta * T) * (u - ucrit) : Math.min(0, klow * (u - ulow));
18832
+ const rlin = klin * u;
18833
+ let riEff = Math.max(ri, rlin);
18834
+ riEff = Math.max(riEff + ki * (u - uopt) * T, rlin);
18835
+ const rcurPerSecond = Math.max(riEff + rp, rlin);
18836
+ const rcurAnnual = rcurPerSecond * SECONDS_PER_YEAR4;
18837
+ return Math.min(Math.max(rcurAnnual * 100, 0), 1e4);
18838
+ }
18839
+ function calculateSiloRates(utilization, params) {
18840
+ const borrowRate = calculateBorrowRate(utilization, params);
18841
+ const daoFee = params.daoFee ?? 0;
18842
+ const deployerFee = params.deployerFee ?? 0;
18843
+ const totalFee = daoFee + deployerFee;
18844
+ const depositRate = borrowRate / 100 * utilization * (1 - totalFee) * 100;
18845
+ return { borrowRate, depositRate };
18846
+ }
18847
+
18738
18848
  // src/lending/public-data/silo-v2/publicCallParse.ts
18849
+ var ZERO_ADDRESS = "0x0000000000000000000000000000000000000000";
18739
18850
  var getSiloV2ReservesDataConverter = (lender, chainId, prices, additionalYields, tokenList = {}) => {
18740
18851
  const market = getSiloV2MarketEntry(chainId, lender);
18741
18852
  if (!market) return [() => void 0, 0];
@@ -18761,13 +18872,23 @@ var getSiloV2ReservesDataConverter = (lender, chainId, prices, additionalYields,
18761
18872
  const slot = s * SILO_V2_CALLS_PER_SIDE;
18762
18873
  const totalAssetsRaw = toBigInt7(data[slot]);
18763
18874
  const debtAssetsRaw = toBigInt7(data[slot + 1]);
18875
+ const irmConfigRaw = data[slot + 2];
18764
18876
  const decimals = self.decimals;
18765
18877
  const totalDeposits = Number(formatUnits(totalAssetsRaw, decimals));
18766
18878
  const totalDebt = Number(formatUnits(debtAssetsRaw, decimals));
18767
18879
  const totalLiquidity = totalDeposits - totalDebt;
18768
18880
  const utilization = totalDeposits > 0 ? totalDebt / totalDeposits : 0;
18769
- const depositRatePct = 0;
18770
- const variableBorrowRatePct = 0;
18881
+ let depositRatePct = 0;
18882
+ let variableBorrowRatePct = 0;
18883
+ const irmParams = parseIRMConfig(irmConfigRaw, self);
18884
+ if (irmParams) {
18885
+ try {
18886
+ const rates = calculateSiloRates(utilization, irmParams);
18887
+ variableBorrowRatePct = rates.borrowRate;
18888
+ depositRatePct = rates.depositRate;
18889
+ } catch {
18890
+ }
18891
+ }
18771
18892
  const tokenAddrLc = self.token.toLowerCase();
18772
18893
  const assetMeta = tokenList[tokenAddrLc];
18773
18894
  const oracleKey = toOracleKey(assetMeta?.assetGroup ?? null) || toGenericPriceKey(tokenAddrLc, chainId);
@@ -18837,8 +18958,8 @@ var getSiloV2ReservesDataConverter = (lender, chainId, prices, additionalYields,
18837
18958
  silo: self.silo,
18838
18959
  counterpartySilo: other.silo,
18839
18960
  siloConfig: market.siloConfig,
18840
- oracle: self.solvencyOracle,
18841
- irm: self.interestRateModel,
18961
+ oracle: self.solvencyOracle || ZERO_ADDRESS,
18962
+ irm: self.interestRateModel || ZERO_ADDRESS,
18842
18963
  shareTokens: {
18843
18964
  collateral: self.collateralShareToken,
18844
18965
  protected: self.protectedShareToken,
@@ -18861,7 +18982,7 @@ var getSiloV2ReservesDataConverter = (lender, chainId, prices, additionalYields,
18861
18982
  };
18862
18983
 
18863
18984
  // src/lending/public-data/silo-v3/publicCallBuild.ts
18864
- var SILO_V3_CALLS_PER_SIDE = 2;
18985
+ var SILO_V3_CALLS_PER_SIDE = 3;
18865
18986
  var SILO_V3_CALLS_PER_PAIR = SILO_V3_CALLS_PER_SIDE * 2;
18866
18987
  function buildSiloV3LenderReserveCall(_chainId, lender) {
18867
18988
  const market = getSiloV3MarketEntry(_chainId, lender);
@@ -18880,6 +19001,12 @@ function buildSiloV3LenderReserveCall(_chainId, lender) {
18880
19001
  name: "getDebtAssets",
18881
19002
  params: [],
18882
19003
  abi: SiloAbi
19004
+ },
19005
+ {
19006
+ address: half.interestRateModel,
19007
+ name: "getConfig",
19008
+ params: [half.silo],
19009
+ abi: InterestRateModelV2Abi
18883
19010
  }
18884
19011
  );
18885
19012
  }
@@ -18887,7 +19014,7 @@ function buildSiloV3LenderReserveCall(_chainId, lender) {
18887
19014
  }
18888
19015
 
18889
19016
  // src/lending/public-data/silo-v3/publicCallParse.ts
18890
- var ZERO_ADDRESS = "0x0000000000000000000000000000000000000000";
19017
+ var ZERO_ADDRESS2 = "0x0000000000000000000000000000000000000000";
18891
19018
  var getSiloV3ReservesDataConverter = (lender, chainId, prices, additionalYields, tokenList = {}) => {
18892
19019
  const market = getSiloV3MarketEntry(chainId, lender);
18893
19020
  if (!market) return [() => void 0, 0];
@@ -18913,13 +19040,23 @@ var getSiloV3ReservesDataConverter = (lender, chainId, prices, additionalYields,
18913
19040
  const slot = s * SILO_V3_CALLS_PER_SIDE;
18914
19041
  const totalAssetsRaw = toBigInt7(data[slot]);
18915
19042
  const debtAssetsRaw = toBigInt7(data[slot + 1]);
19043
+ const irmConfigRaw = data[slot + 2];
18916
19044
  const decimals = self.decimals;
18917
19045
  const totalDeposits = Number(formatUnits(totalAssetsRaw, decimals));
18918
19046
  const totalDebt = Number(formatUnits(debtAssetsRaw, decimals));
18919
19047
  const totalLiquidity = totalDeposits - totalDebt;
18920
19048
  const utilization = totalDeposits > 0 ? totalDebt / totalDeposits : 0;
18921
- const depositRatePct = 0;
18922
- const variableBorrowRatePct = 0;
19049
+ let depositRatePct = 0;
19050
+ let variableBorrowRatePct = 0;
19051
+ const irmParams = parseIRMConfig(irmConfigRaw, self);
19052
+ if (irmParams) {
19053
+ try {
19054
+ const rates = calculateSiloRates(utilization, irmParams);
19055
+ variableBorrowRatePct = rates.borrowRate;
19056
+ depositRatePct = rates.depositRate;
19057
+ } catch {
19058
+ }
19059
+ }
18923
19060
  const tokenAddrLc = self.token.toLowerCase();
18924
19061
  const assetMeta = tokenList[tokenAddrLc];
18925
19062
  const oracleKey = toOracleKey(assetMeta?.assetGroup ?? null) || toGenericPriceKey(tokenAddrLc, chainId);
@@ -18981,8 +19118,8 @@ var getSiloV3ReservesDataConverter = (lender, chainId, prices, additionalYields,
18981
19118
  silo: self.silo,
18982
19119
  counterpartySilo: other.silo,
18983
19120
  siloConfig: market.siloConfig,
18984
- oracle: self.solvencyOracle || ZERO_ADDRESS,
18985
- irm: self.interestRateModel || ZERO_ADDRESS,
19121
+ oracle: self.solvencyOracle || ZERO_ADDRESS2,
19122
+ irm: self.interestRateModel || ZERO_ADDRESS2,
18986
19123
  shareTokens: {
18987
19124
  collateral: self.collateralShareToken,
18988
19125
  protected: self.protectedShareToken,
@@ -19145,8 +19282,10 @@ var getAbi = (lender) => {
19145
19282
  if (isMorphoType(lender)) return MorphoLensAbi;
19146
19283
  if (isEulerType(lender)) return vaultLensAbi;
19147
19284
  if (isAaveV4Type(lender)) return [...AaveV4SpokeAbi, ...AaveV4OracleAbi, ...AaveV4HubAbi];
19148
- if (isSiloV2Type(lender)) return [...SiloAbi, ...SiloLensAbi];
19149
- if (isSiloV3Type(lender)) return [...SiloAbi, ...SiloLensAbi];
19285
+ if (isSiloV2Type(lender))
19286
+ return [...SiloAbi, ...SiloLensAbi, ...InterestRateModelV2Abi];
19287
+ if (isSiloV3Type(lender))
19288
+ return [...SiloAbi, ...SiloLensAbi, ...InterestRateModelV2Abi];
19150
19289
  if (isSumerType(lender)) return [...SumerLensAbi, ...SumerComptrollerAbi];
19151
19290
  if (lender === Lender.TAKARA) return [...TakaraMarketStateAbi];
19152
19291
  if (isCompoundV2Type(lender)) return VenusLensAbi;
@@ -19200,7 +19339,6 @@ var getLenderPublicData = async (chainId, lenders, prices, additionalYields, mul
19200
19339
  }
19201
19340
  }
19202
19341
  } catch {
19203
- console.log("error for chain/lender", chainId, lender);
19204
19342
  }
19205
19343
  currentSlice += sliceLength;
19206
19344
  }
@@ -19530,7 +19668,7 @@ function bigintToLtv(v) {
19530
19668
  }
19531
19669
 
19532
19670
  // src/lending/public-data/silo-v3/convertPublic.ts
19533
- var ZERO_ADDRESS2 = "0x0000000000000000000000000000000000000000";
19671
+ var ZERO_ADDRESS3 = "0x0000000000000000000000000000000000000000";
19534
19672
  function convertSiloV3MarketsToPublicResponse(apiItems, chainId, prices, additionalYields = {
19535
19673
  intrinsicYields: {},
19536
19674
  lenderRewards: {},
@@ -19627,8 +19765,8 @@ function convertSiloV3MarketsToPublicResponse(apiItems, chainId, prices, additio
19627
19765
  silo: self.silo.toLowerCase(),
19628
19766
  counterpartySilo: other.silo.toLowerCase(),
19629
19767
  siloConfig: registryEntry.siloConfig.toLowerCase(),
19630
- oracle: (api.solvencyOracleAddress || self.solvencyOracle || ZERO_ADDRESS2).toLowerCase(),
19631
- irm: (api.interestRateModelId || self.interestRateModel || ZERO_ADDRESS2).toLowerCase(),
19768
+ oracle: (api.solvencyOracleAddress || self.solvencyOracle || ZERO_ADDRESS3).toLowerCase(),
19769
+ irm: (api.interestRateModelId || self.interestRateModel || ZERO_ADDRESS3).toLowerCase(),
19632
19770
  shareTokens: {
19633
19771
  collateral: self.collateralShareToken,
19634
19772
  protected: self.protectedShareToken,
@@ -19662,8 +19800,8 @@ function bigintToLtv2(v) {
19662
19800
  return Number.isFinite(n) ? n / 1e18 : 0;
19663
19801
  }
19664
19802
  }
19665
-
19666
- // src/lending/public-data/fetchLenderExt.ts
19803
+ var warn = (...args) => {
19804
+ };
19667
19805
  async function getLenderDataFromApi(lender, chainId, prices, additionalYields, includeUnlisted = false) {
19668
19806
  if (isMorphoType(lender))
19669
19807
  return await fetchMorphoMarkets(chainId, includeUnlisted);
@@ -19709,7 +19847,7 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
19709
19847
  const listResult = settled[0];
19710
19848
  const list = listResult.status === "fulfilled" ? listResult.value : {};
19711
19849
  if (listResult.status === "rejected") {
19712
- console.warn(
19850
+ warn(
19713
19851
  `[lending] tokenList fetch failed on chain ${chainId}:`,
19714
19852
  listResult.reason
19715
19853
  );
@@ -19731,13 +19869,13 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
19731
19869
  if (converted[lk]) lenderData[lk] = converted[lk];
19732
19870
  }
19733
19871
  } catch (e) {
19734
- console.warn(
19872
+ warn(
19735
19873
  `[lending] Silo v2 API convert failed on chain ${chainId}:`,
19736
19874
  e?.message ?? e
19737
19875
  );
19738
19876
  }
19739
19877
  } else {
19740
- console.warn(
19878
+ warn(
19741
19879
  `[lending] Silo v2 API fetch failed on chain ${chainId}:`,
19742
19880
  siloV2Result.reason?.message ?? siloV2Result.reason
19743
19881
  );
@@ -19759,13 +19897,13 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
19759
19897
  if (converted[lk]) lenderData[lk] = converted[lk];
19760
19898
  }
19761
19899
  } catch (e) {
19762
- console.warn(
19900
+ warn(
19763
19901
  `[lending] Silo v3 API convert failed on chain ${chainId}:`,
19764
19902
  e?.message ?? e
19765
19903
  );
19766
19904
  }
19767
19905
  } else {
19768
- console.warn(
19906
+ warn(
19769
19907
  `[lending] Silo v3 API fetch failed on chain ${chainId}:`,
19770
19908
  siloV3Result.reason?.message ?? siloV3Result.reason
19771
19909
  );
@@ -19775,7 +19913,7 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
19775
19913
  try {
19776
19914
  const result = settled[i + 3];
19777
19915
  if (result.status === "rejected") {
19778
- console.warn(
19916
+ warn(
19779
19917
  `[lending] API fetch failed for ${otherLenders[i]} on chain ${chainId}:`,
19780
19918
  result.reason?.message ?? result.reason
19781
19919
  );
@@ -19804,11 +19942,12 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
19804
19942
  );
19805
19943
  }
19806
19944
  } catch (e) {
19807
- console.log("error fetching from API on", chainId, ":", e);
19808
19945
  }
19809
19946
  }
19810
19947
  return lenderData;
19811
19948
  };
19949
+ var warn2 = (...args) => {
19950
+ };
19812
19951
  function lenderApiOnly(lender, chainId) {
19813
19952
  if (lender === Lender.MORPHO_BLUE) {
19814
19953
  if (chainId === Chain.SONEIUM) return false;
@@ -19842,7 +19981,7 @@ var getLenderPublicDataAll = async (chainId, lenders, prices, additionalYields,
19842
19981
  includeUnlistedMorphoMarkets
19843
19982
  );
19844
19983
  } catch (e) {
19845
- console.warn(
19984
+ warn2(
19846
19985
  `[lending] API fetch failed for chain ${chainId}:`,
19847
19986
  e?.message ?? e
19848
19987
  );
@@ -19865,7 +20004,7 @@ var getLenderPublicDataAll = async (chainId, lenders, prices, additionalYields,
19865
20004
  tokenList
19866
20005
  );
19867
20006
  } catch (e) {
19868
- console.warn(
20007
+ warn2(
19869
20008
  `[lending] on-chain fetch failed for chain ${chainId}:`,
19870
20009
  e?.message ?? e
19871
20010
  );
@@ -30176,6 +30315,12 @@ var morphoFetcher = {
30176
30315
  var SCALING_DECIMALS_OVERRIDES = {
30177
30316
  [Lender.SUMER]: 18
30178
30317
  };
30318
+ var BASE_ASSET_OVERRIDES = {
30319
+ [Lender.CREAM_FINANCE]: {
30320
+ [Chain.BNB_SMART_CHAIN_MAINNET]: { baseAsset: zeroAddress }
30321
+ // BNB
30322
+ }
30323
+ };
30179
30324
  var CompoundV2OracleAbi = [
30180
30325
  {
30181
30326
  inputs: [{ internalType: "address", name: "cToken", type: "address" }],
@@ -30195,6 +30340,7 @@ function getCompoundV2Calls(chainId) {
30195
30340
  if (!oracleAddress || tokens.length === 0) continue;
30196
30341
  const calls = [];
30197
30342
  const meta = [];
30343
+ const baseAssetOverride = BASE_ASSET_OVERRIDES[lender]?.[chainId]?.baseAsset;
30198
30344
  for (const token of tokens) {
30199
30345
  calls.push({
30200
30346
  address: oracleAddress,
@@ -30204,7 +30350,8 @@ function getCompoundV2Calls(chainId) {
30204
30350
  meta.push({
30205
30351
  cToken: token.cToken,
30206
30352
  underlying: token.underlying,
30207
- lender
30353
+ lender,
30354
+ baseAssetOverride
30208
30355
  });
30209
30356
  }
30210
30357
  if (calls.length > 0) {
@@ -30218,7 +30365,7 @@ function getCompoundV2Calls(chainId) {
30218
30365
  return results;
30219
30366
  }
30220
30367
  function parseCompoundV2Results(data, meta, context) {
30221
- const { tokenList } = context;
30368
+ const { chainId, tokenList, usdPrices } = context;
30222
30369
  const entries = [];
30223
30370
  data.forEach((rawResult, index) => {
30224
30371
  const queryMeta = meta[index];
@@ -30227,14 +30374,25 @@ function parseCompoundV2Results(data, meta, context) {
30227
30374
  const underlyingLc = queryMeta.underlying.toLowerCase();
30228
30375
  const underlyingDecimals = tokenList?.[underlyingLc]?.decimals ?? 18;
30229
30376
  const scalingDecimals = SCALING_DECIMALS_OVERRIDES[queryMeta.lender] ?? 36 - underlyingDecimals;
30230
- const priceUSD = Number(formatUnits(BigInt(rawResult.toString()), scalingDecimals));
30231
- if (isNaN(priceUSD) || priceUSD === 0) return;
30377
+ const rawPriceNum = Number(
30378
+ formatUnits(BigInt(rawResult.toString()), scalingDecimals)
30379
+ );
30380
+ if (isNaN(rawPriceNum) || rawPriceNum === 0) return;
30381
+ let baseAssetUSD = 1;
30382
+ if (queryMeta.baseAssetOverride) {
30383
+ const baseAssetLc = queryMeta.baseAssetOverride.toLowerCase();
30384
+ const baseOracleKey = tokenList?.[baseAssetLc]?.assetGroup ?? `${chainId}-${baseAssetLc}`;
30385
+ baseAssetUSD = usdPrices[baseOracleKey] ?? usdPrices[baseAssetLc] ?? 1;
30386
+ }
30387
+ const priceUSD = rawPriceNum * baseAssetUSD;
30388
+ const isBaseAsset = queryMeta.baseAssetOverride && underlyingLc === queryMeta.baseAssetOverride.toLowerCase();
30232
30389
  entries.push({
30233
30390
  asset: underlyingLc,
30234
- price: priceUSD,
30235
- // For Compound V2, raw price is already USD denominated
30391
+ price: rawPriceNum,
30236
30392
  priceUSD,
30237
- marketUid: createMarketUid(context.chainId, queryMeta.lender, queryMeta.cToken)
30393
+ marketUid: createMarketUid(chainId, queryMeta.lender, queryMeta.cToken),
30394
+ staticBase: isBaseAsset || void 0,
30395
+ baseAsset: queryMeta.baseAssetOverride
30238
30396
  });
30239
30397
  } catch {
30240
30398
  }
@@ -30729,7 +30887,7 @@ var SiloOracleAbi = [
30729
30887
  type: "function"
30730
30888
  }
30731
30889
  ];
30732
- var ZERO_ADDRESS3 = "0x0000000000000000000000000000000000000000";
30890
+ var ZERO_ADDRESS4 = "0x0000000000000000000000000000000000000000";
30733
30891
  function lookupUSD(context, asset) {
30734
30892
  const lc = asset.toLowerCase();
30735
30893
  const groupKey = context.tokenList?.[lc]?.assetGroup ?? `${context.chainId}-${lc}`;
@@ -30741,7 +30899,7 @@ function getSiloV2Calls(chainId) {
30741
30899
  const tokensWithRealOracle = /* @__PURE__ */ new Set();
30742
30900
  for (const market of allMarkets) {
30743
30901
  for (const half of [market.silo0, market.silo1]) {
30744
- if (half.solvencyOracle && half.solvencyOracle !== ZERO_ADDRESS3) {
30902
+ if (half.solvencyOracle && half.solvencyOracle !== ZERO_ADDRESS4) {
30745
30903
  tokensWithRealOracle.add(half.token.toLowerCase());
30746
30904
  }
30747
30905
  }
@@ -30754,7 +30912,7 @@ function getSiloV2Calls(chainId) {
30754
30912
  const lenderKey = siloV2LenderKey(market.siloConfig);
30755
30913
  const halves = [market.silo0, market.silo1];
30756
30914
  const isStatic = halves.map(
30757
- (h) => !h.solvencyOracle || h.solvencyOracle === ZERO_ADDRESS3
30915
+ (h) => !h.solvencyOracle || h.solvencyOracle === ZERO_ADDRESS4
30758
30916
  );
30759
30917
  if (isStatic[0] && isStatic[1]) {
30760
30918
  const t0 = halves[0].token.toLowerCase();
@@ -30774,7 +30932,7 @@ function getSiloV2Calls(chainId) {
30774
30932
  decimals: half.decimals,
30775
30933
  silo: half.silo.toLowerCase(),
30776
30934
  lenderKey,
30777
- oracle: ZERO_ADDRESS3,
30935
+ oracle: ZERO_ADDRESS4,
30778
30936
  partnerToken: partnerLc,
30779
30937
  isStatic: true
30780
30938
  });
@@ -30900,7 +31058,7 @@ var SiloOracleAbi2 = [
30900
31058
  type: "function"
30901
31059
  }
30902
31060
  ];
30903
- var ZERO_ADDRESS4 = "0x0000000000000000000000000000000000000000";
31061
+ var ZERO_ADDRESS5 = "0x0000000000000000000000000000000000000000";
30904
31062
  function lookupUSD2(context, asset) {
30905
31063
  const lc = asset.toLowerCase();
30906
31064
  const groupKey = context.tokenList?.[lc]?.assetGroup ?? `${context.chainId}-${lc}`;
@@ -30912,7 +31070,7 @@ function getSiloV3Calls(chainId) {
30912
31070
  const tokensWithRealOracle = /* @__PURE__ */ new Set();
30913
31071
  for (const market of allMarkets) {
30914
31072
  for (const half of [market.silo0, market.silo1]) {
30915
- if (half.solvencyOracle && half.solvencyOracle !== ZERO_ADDRESS4) {
31073
+ if (half.solvencyOracle && half.solvencyOracle !== ZERO_ADDRESS5) {
30916
31074
  tokensWithRealOracle.add(half.token.toLowerCase());
30917
31075
  }
30918
31076
  }
@@ -30925,7 +31083,7 @@ function getSiloV3Calls(chainId) {
30925
31083
  const lenderKey = siloV3LenderKey(market.siloConfig);
30926
31084
  const halves = [market.silo0, market.silo1];
30927
31085
  const isStatic = halves.map(
30928
- (h) => !h.solvencyOracle || h.solvencyOracle === ZERO_ADDRESS4
31086
+ (h) => !h.solvencyOracle || h.solvencyOracle === ZERO_ADDRESS5
30929
31087
  );
30930
31088
  if (isStatic[0] && isStatic[1]) {
30931
31089
  const t0 = halves[0].token.toLowerCase();
@@ -30945,7 +31103,7 @@ function getSiloV3Calls(chainId) {
30945
31103
  decimals: half.decimals,
30946
31104
  silo: half.silo.toLowerCase(),
30947
31105
  lenderKey,
30948
- oracle: ZERO_ADDRESS4,
31106
+ oracle: ZERO_ADDRESS5,
30949
31107
  partnerToken: partnerLc,
30950
31108
  isStatic: true
30951
31109
  });
@@ -31121,7 +31279,7 @@ function lookupUSD3(context, asset) {
31121
31279
  return context.usdPrices[groupKey] ?? context.usdPrices[lc] ?? 0;
31122
31280
  }
31123
31281
  function parseSiloV2GraphQLResults(items, context) {
31124
- const ZERO_ADDRESS5 = "0x0000000000000000000000000000000000000000";
31282
+ const ZERO_ADDRESS6 = "0x0000000000000000000000000000000000000000";
31125
31283
  const out = [];
31126
31284
  const seen = /* @__PURE__ */ new Set();
31127
31285
  for (const item of items) {
@@ -31144,8 +31302,8 @@ function parseSiloV2GraphQLResults(items, context) {
31144
31302
  const partnerTokenLc = other.token.toLowerCase();
31145
31303
  const dedupKey = `${lenderKey}:${tokenLc}`;
31146
31304
  if (seen.has(dedupKey)) continue;
31147
- const oracleAddr = (side.solvencyOracleAddress ?? side.solvencyOracle?.id ?? self.solvencyOracle ?? ZERO_ADDRESS5).toLowerCase();
31148
- const isStatic = !oracleAddr || oracleAddr === ZERO_ADDRESS5;
31305
+ const oracleAddr = (side.solvencyOracleAddress ?? side.solvencyOracle?.id ?? self.solvencyOracle ?? ZERO_ADDRESS6).toLowerCase();
31306
+ const isStatic = !oracleAddr || oracleAddr === ZERO_ADDRESS6;
31149
31307
  const siloAddrLc = self.silo.toLowerCase();
31150
31308
  try {
31151
31309
  let priceUSD = 0;
@@ -31265,7 +31423,7 @@ function lookupUSD4(context, asset) {
31265
31423
  return context.usdPrices[groupKey] ?? context.usdPrices[lc] ?? 0;
31266
31424
  }
31267
31425
  function parseSiloV3GraphQLResults(items, context) {
31268
- const ZERO_ADDRESS5 = "0x0000000000000000000000000000000000000000";
31426
+ const ZERO_ADDRESS6 = "0x0000000000000000000000000000000000000000";
31269
31427
  const out = [];
31270
31428
  const seen = /* @__PURE__ */ new Set();
31271
31429
  for (const item of items) {
@@ -31288,8 +31446,8 @@ function parseSiloV3GraphQLResults(items, context) {
31288
31446
  const partnerTokenLc = other.token.toLowerCase();
31289
31447
  const dedupKey = `${lenderKey}:${tokenLc}`;
31290
31448
  if (seen.has(dedupKey)) continue;
31291
- const oracleAddr = (side.solvencyOracleAddress ?? side.solvencyOracle?.id ?? self.solvencyOracle ?? ZERO_ADDRESS5).toLowerCase();
31292
- const isStatic = !oracleAddr || oracleAddr === ZERO_ADDRESS5;
31449
+ const oracleAddr = (side.solvencyOracleAddress ?? side.solvencyOracle?.id ?? self.solvencyOracle ?? ZERO_ADDRESS6).toLowerCase();
31450
+ const isStatic = !oracleAddr || oracleAddr === ZERO_ADDRESS6;
31293
31451
  const siloAddrLc = self.silo.toLowerCase();
31294
31452
  try {
31295
31453
  let priceUSD = 0;