@1delta/margin-fetcher 5.0.72 → 5.0.74

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
@@ -1,13 +1,13 @@
1
- import { parseAbi, keccak256, encodeAbiParameters, formatEther, BaseError, erc20Abi, stringToHex, isAddress, pad, encodeFunctionData, formatUnits, getAddress, decodeFunctionResult, decodeAbiParameters, concat, parseAbiParameters, AbiEncodingLengthMismatchError, concatHex, toBytes, slice, hexToString, InvalidAddressError, boolToHex, integerRegex, numberToHex, bytesRegex, BytesSizeMismatchError, arrayRegex, UnsupportedPackedAbiType } from './chunk-JUYF2XLF.js';
1
+ import { parseAbi, keccak256, encodeAbiParameters, formatEther, BaseError, erc20Abi, stringToHex, isAddress, pad, encodeFunctionData, formatUnits, getAddress, decodeFunctionResult, decodeAbiParameters, concat, parseAbiParameters, hexToString, AbiEncodingLengthMismatchError, concatHex, toBytes, slice, InvalidAddressError, boolToHex, integerRegex, numberToHex, bytesRegex, BytesSizeMismatchError, arrayRegex, UnsupportedPackedAbiType } from './chunk-JUYF2XLF.js';
2
2
  import './chunk-BYTNVMX7.js';
3
3
  import './chunk-PR4QN5HX.js';
4
4
  import { Lender, isExactly, isMidnight, isTerm, isTermMax, isTeller, isListaDao, isLiquityFamily, isRiver, isInverse, isCooler, isDssType, isCompoundV3Type, isFluid, isGearboxV3, isLlamaLend, isFrankencoin, isResupply, isCurvance, isFlyingTulip, isTwyne, isFraxlend, isAaveV4Type, LIQUITY_FAMILY_LENDERS, isAaveType, isCompoundV3, isCompoundV2Type, isMultiMarket, isSiloV2Type, isSiloV3Type, isDolomite, isMorphoType, isUsdd, isSky, hasCrossMarginRisk, isEulerType, isInit, isVenusType, isSumerType, AAVE_V3_LENDERS, AAVE_V2_LENDERS, isMorphoBlue, isAaveV2Type, isAaveV32Type, isAaveV3Type, isYLDR, isLista, hasSubAccounts, isTectonicType, isKineticType, isBenqiType } from '@1delta/lender-registry';
5
5
  export { hasCrossMarginRisk, isAaveType, isAaveV2Type, isAaveV32Type, isAaveV3Type, isCompoundV3, isCompoundV3Type, isInit, isMorphoType, isMultiMarket, isYLDR } from '@1delta/lender-registry';
6
- import { fetchTokenLists, fetchTokenList, aavePools, compoundV3Pools, initConfig, morphoPools, compoundV2Pools, eulerVaults, siloMarkets, siloV2LenderKey, siloMarketsV3, siloV3LenderKey, aaveV4Spokes, aaveV4SpokeLenderKey, fluidResolvers, gearboxResolvers, dolomiteConfigs, midnightConfig, termConfig, termMarketsByChain, exactlyConfig, flyingTulipLendersByChain, liquityLendersByChain, riverLendersByChain, inverseLendersByChain, coolerLendersByChain, llamaLendLendersByChain, usddLendersByChain, skyLendersByChain, frankencoinLendersByChain, resupplyLendersByChain, curvanceLendersByChain, fraxlendLendersByChain, twyneLendersByChain, tellerConfigByChain, tellerPoolsByChain, termMaxConfigByChain, aaveReserves, compoundV3Reserves, resolveTermApiBase, flyingTulipConfigFor, flyingTulipAssetsFor, liquityConfigFor, liquityBranchesByChain, riverConfigFor, riverChainData, termMaxApiBaseUrl, termMaxLenderKey, inverseConfigFor, inverseChainData, coolerConfigFor, llamaLendConfigFor, llamaLendChainData, llamaLendApiBaseUrl, resupplyConfigFor, fraxlendConfigFor, dssConfigFor, dssChainData, dssDebtToken, dssDebtJoin, frankencoinConfigFor, frankencoinChainData, aaveOracles, morphoTypeMarkets, resolveMidnightApiBase, llamaLendMarketByVault, getSiloV2MarketEntry, getSiloV3MarketEntry, dolomiteEmode, curvanceConfigFor, aaveTokens, morphoTypeVaults, listaCollateralProvider, eulerConfigs, gearboxMarketCompressor, gearboxMarketConfigurators, compoundV2TokenArray, gearboxV3LenderKey, midnightMarketsByChain, twyneConfigFor, twyneChainData, parseAaveV4SpokeLenderKey, fraxlendPairsFor, gearboxAccountCompressor, compoundV2Tokens, exactlyMarketsByChain, aaveOraclesConfig, compoundV2Oracles, compoundV2OraclesConfig, compoundV3OraclesData, compoundV3BaseData, compoundV2Reserves, aaveV4Oracles, morphoTypeOracles } from '@1delta/data-sdk';
6
+ import { fetchTokenLists, fetchTokenList, aavePools, compoundV3Pools, initConfig, morphoPools, compoundV2Pools, eulerVaults, siloMarkets, siloV2LenderKey, siloMarketsV3, siloV3LenderKey, aaveV4Spokes, aaveV4SpokeLenderKey, fluidResolvers, gearboxResolvers, dolomiteConfigs, midnightConfig, termConfig, termMarketsByChain, exactlyConfig, flyingTulipLendersByChain, liquityLendersByChain, riverLendersByChain, inverseLendersByChain, coolerLendersByChain, llamaLendLendersByChain, usddLendersByChain, skyLendersByChain, frankencoinLendersByChain, resupplyLendersByChain, curvanceLendersByChain, fraxlendLendersByChain, twyneLendersByChain, tellerConfigByChain, tellerPoolsByChain, termMaxConfigByChain, aaveReserves, compoundV3Reserves, resolveTermApiBase, flyingTulipConfigFor, flyingTulipAssetsFor, liquityConfigFor, liquityBranchesByChain, riverConfigFor, riverChainData, termMaxApiBaseUrl, termMaxLenderKey, inverseConfigFor, inverseChainData, coolerConfigFor, llamaLendConfigFor, llamaLendChainData, llamaLendApiBaseUrl, resupplyConfigFor, fraxlendConfigFor, dssConfigFor, dssChainData, dssDebtToken, dssDebtJoin, frankencoinConfigFor, frankencoinChainData, aaveOracles, morphoTypeMarkets, resolveMidnightApiBase, llamaLendMarketByVault, getSiloV2MarketEntry, getSiloV3MarketEntry, dolomiteEmode, curvanceConfigFor, aaveTokens, morphoTypeVaults, listaCollateralProvider, eulerConfigs, gearboxMarketCompressor, gearboxMarketConfigurators, compoundV2TokenArray, gearboxV3LenderKey, midnightMarketsByChain, twyneConfigFor, twyneChainData, midnightCollateralRef, parseAaveV4SpokeLenderKey, fraxlendPairsFor, gearboxAccountCompressor, compoundV2Tokens, exactlyMarketsByChain, aaveOraclesConfig, compoundV2Oracles, compoundV2OraclesConfig, compoundV3OraclesData, compoundV3BaseData, compoundV2Reserves, aaveV4Oracles, morphoTypeOracles } from '@1delta/data-sdk';
7
7
  import lodash from 'lodash';
8
8
  import { Chain, isEvmChainId } from '@1delta/chain-registry';
9
- import { multicallRetryUniversal, getEvmClient, getEvmChain, getEvmClientUniversal } from '@1delta/providers';
10
- import { LiquityTroveManagerAbi, LiquityActivePoolAbi, LiquityStabilityPoolAbi, LiquityPriceFeedAbi, LiquitySortedTrovesAbi, RiverTroveManagerAbi, RiverStabilityPoolAbi, TellerMarketRegistryAbi, TellerV2Abi, InverseMarketAbi, InverseOracleAbi, InverseDbrAbi, Erc20Abi, CoolerMonoAbi, CoolerLtvOracleAbi, LlamaLendControllerAbi, LlamaLendControllerV1Abi, LlamaLendControllerV2Abi, LlamaLendVaultAbi, LlamaLendAmmAbi, TwyneCollateralVaultAbi, MetaMorphoAbi, FluidDexResolverAbi, ExactlyPreviewerAbi, ExactlyAuditorAbi, FlyingTulipLendingLensAbi, LenderCommitmentGroupAbi, ResupplyRegistryAbi, ResupplyPairAbi, ResupplyUtilitiesAbi, ResupplyRewardHandlerAbi, ResupplyPairEmissionsAbi, ConvexPoolUtilAbi, FraxlendPairAbi, FraxlendLeverAbi, FrankencoinPositionAbi, FluidLendingResolverAbi, FluidVaultResolverAbi, FluidLiquidityResolverAbi, MoolahVaultAbi, UsddVatAbi, UsddJugAbi, UsddSpotAbi, MorphoLensAbi, AaveV4SpokeAbi, AaveV4OracleAbi, AaveV4HubAbi, DolomiteMarginAbi, GearboxMarketCompressorV310Abi, MorphoBlueAbi, MidnightAbi, TermRepoTokenAbi, TermRepoServicerAbi, TermRepoCollateralManagerAbi, LiquityTroveNFTAbi, LiquityCollSurplusPoolAbi, TellerCollateralManagerAbi, TermMaxViewerAbi, InverseEscrowAbi, CurvanceMarketManagerAbi, CurvanceCTokenAbi, GearboxCreditAccountCompressorV310Abi, TwyneVaultManagerAbi, TwyneCollateralVaultFactoryAbi, AaveV2V3Abi, TwyneATokenWrapperAbi, UsddCdpManagerAbi, UsddProxyRegistryAbi, CurvanceProtocolReaderAbi, CurvanceCentralRegistryAbi, TermPriceConsumerAbi, CurvanceOracleManagerAbi, TermMaxOracleAggregatorV2Abi } from '@1delta/abis';
9
+ import { multicallRetryUniversal, getEvmClient, getEvmChain, createMulticallRetryUniversal, LIST_OVERRIDES, getEvmClientUniversal } from '@1delta/providers';
10
+ import { LiquityTroveManagerAbi, LiquityActivePoolAbi, LiquityStabilityPoolAbi, LiquityPriceFeedAbi, LiquitySortedTrovesAbi, RiverTroveManagerAbi, RiverStabilityPoolAbi, TellerMarketRegistryAbi, TellerV2Abi, InverseMarketAbi, InverseOracleAbi, InverseDbrAbi, CurveTricryptoOracleAbi, Erc20Abi, CoolerMonoAbi, CoolerLtvOracleAbi, LlamaLendControllerAbi, LlamaLendControllerV1Abi, LlamaLendControllerV2Abi, LlamaLendVaultAbi, LlamaLendAmmAbi, TwyneCollateralVaultAbi, MetaMorphoAbi, FluidDexResolverAbi, ExactlyPreviewerAbi, ExactlyAuditorAbi, FlyingTulipLendingLensAbi, LenderCommitmentGroupAbi, ResupplyRegistryAbi, ResupplyPairAbi, ResupplyUtilitiesAbi, ResupplyRewardHandlerAbi, ResupplyPairEmissionsAbi, ConvexPoolUtilAbi, FraxlendPairAbi, FraxlendLeverAbi, FrankencoinPositionAbi, FluidLendingResolverAbi, FluidVaultResolverAbi, FluidLiquidityResolverAbi, MoolahVaultAbi, UsddVatAbi, UsddJugAbi, UsddSpotAbi, MorphoLensAbi, AaveV4SpokeAbi, AaveV4OracleAbi, AaveV4HubAbi, DolomiteMarginAbi, GearboxMarketCompressorV310Abi, MorphoBlueAbi, MidnightAbi, TermRepoTokenAbi, TermRepoServicerAbi, TermRepoCollateralManagerAbi, LiquityTroveNFTAbi, LiquityCollSurplusPoolAbi, TellerCollateralManagerAbi, TermMaxViewerAbi, InverseEscrowAbi, CurvanceMarketManagerAbi, CurvanceCTokenAbi, GearboxCreditAccountCompressorV310Abi, TwyneVaultManagerAbi, TwyneCollateralVaultFactoryAbi, AaveV2V3Abi, TwyneATokenWrapperAbi, UsddCdpManagerAbi, UsddProxyRegistryAbi, CurvanceProtocolReaderAbi, CurvanceCentralRegistryAbi, TermPriceConsumerAbi, CurvanceOracleManagerAbi, TermMaxOracleAggregatorV2Abi } from '@1delta/abis';
11
11
  export { MorphoLensAbi } from '@1delta/abis';
12
12
  import { prepareDebitDataMulticall, prepareLenderDebitMulticall, parseDebitDataResult, parseLenderDebitResult, getPermit2ContractAddress, getLstAcceptedInputs, savingsVerbRequires, savingsSupportsVerb, getCompoundV2Comptroller as getCompoundV2Comptroller$1, getCompoundV3CometAddress as getCompoundV3CometAddress$1, getMorphoAddress, FLUID_VAULT_FACTORY, getAaveStyleLenderTokenAddress, LendingMode, getAaveCollateralTokenAddress, getSiloHalfForUnderlying, findSavingsWithdrawEntry, bandLtvCurve, InitMarginAddresses, ignoresReceiver, buildLstWithdrawRequest, SAVINGS_RECEIVER_CAPABILITY } from '@1delta/calldata-sdk';
13
13
  import { proxyNativeFetch } from '@1delta/proxy-fetch';
@@ -6264,6 +6264,7 @@ var LENDER_SHORT_NAMES = {
6264
6264
  [Lender.AVALON_PUMPBTC]: "Avalon pumpBTC",
6265
6265
  [Lender.COMPOUND_V2]: "Comp. V2",
6266
6266
  [Lender.COMPOUND_V3_AERO]: "Comp. AERO",
6267
+ [Lender.COMPOUND_V3_INSTITUTIONAL_USDC]: "Comp. USDC (Inst.)",
6267
6268
  [Lender.COMPOUND_V3_USDBC]: "Comp. USDBC",
6268
6269
  [Lender.COMPOUND_V3_USDC]: "Comp. USDC",
6269
6270
  [Lender.COMPOUND_V3_USDCE]: "Comp. USDC.e",
@@ -11736,58 +11737,72 @@ function convertMarketsToMorphoResponse(response, chainId, additionalYields = {
11736
11737
  m,
11737
11738
  collateralAssetAddress
11738
11739
  );
11739
- data[m].data[collateralMarketUid] = {
11740
- marketUid: collateralMarketUid,
11741
- name: "Collateral " + (metaCollateral?.symbol ?? collateralAsset.symbol ?? ""),
11742
- poolId: collateralAssetAddress,
11743
- underlying: collateralAssetAddress,
11744
- asset: metaCollateral,
11745
- totalDeposits: formatNr(
11746
- state.collateralAssets,
11747
- collateralAsset.decimals
11748
- ),
11749
- totalDebtStable: 0,
11750
- totalDebt: 0,
11751
- totalLiquidity: formatNr(
11752
- state.collateralAssets,
11753
- collateralAsset.decimals
11754
- ),
11755
- borrowLiquidity: formatNr(
11756
- state.collateralAssets,
11757
- collateralAsset.decimals
11758
- ),
11759
- totalLiquidityUSD: Number(state.collateralAssetsUsd),
11760
- borrowLiquidityUSD: Number(state.collateralAssetsUsd),
11761
- totalDepositsUSD: Number(state.collateralAssetsUsd),
11762
- totalDebtStableUSD: 0,
11763
- totalDebtUSD: 0,
11764
- utilization: 0,
11765
- depositRate: 0,
11766
- variableBorrowRate: 0,
11767
- stableBorrowRate: 0,
11768
- intrinsicYield: additionalYields?.intrinsicYields?.[metaCollateral?.assetGroup] ?? 0,
11769
- rewards: void 0,
11770
- decimals: collateralAsset.decimals,
11771
- config: {
11740
+ const existingLoanRow = data[m].data[collateralMarketUid];
11741
+ if (existingLoanRow) {
11742
+ existingLoanRow.collateralActive = true;
11743
+ existingLoanRow.config = {
11772
11744
  0: {
11773
- category: 0,
11745
+ ...existingLoanRow.config?.[0] ?? {},
11774
11746
  borrowCollateralFactor: ltv,
11775
11747
  collateralFactor: ltv,
11776
- borrowFactor: 1,
11777
11748
  liquidationPenalty,
11778
- closeFactor: 1,
11779
- collateralDisabled: false,
11780
- debtDisabled: true
11749
+ collateralDisabled: false
11781
11750
  }
11782
- },
11783
- closeFactor: 1,
11784
- collateralActive: true,
11785
- borrowingEnabled: false,
11786
- depositsEnabled: true,
11787
- hasStable: false,
11788
- isActive: true,
11789
- isFrozen: false
11790
- };
11751
+ };
11752
+ } else {
11753
+ data[m].data[collateralMarketUid] = {
11754
+ marketUid: collateralMarketUid,
11755
+ name: "Collateral " + (metaCollateral?.symbol ?? collateralAsset.symbol ?? ""),
11756
+ poolId: collateralAssetAddress,
11757
+ underlying: collateralAssetAddress,
11758
+ asset: metaCollateral,
11759
+ totalDeposits: formatNr(
11760
+ state.collateralAssets,
11761
+ collateralAsset.decimals
11762
+ ),
11763
+ totalDebtStable: 0,
11764
+ totalDebt: 0,
11765
+ totalLiquidity: formatNr(
11766
+ state.collateralAssets,
11767
+ collateralAsset.decimals
11768
+ ),
11769
+ borrowLiquidity: formatNr(
11770
+ state.collateralAssets,
11771
+ collateralAsset.decimals
11772
+ ),
11773
+ totalLiquidityUSD: Number(state.collateralAssetsUsd),
11774
+ borrowLiquidityUSD: Number(state.collateralAssetsUsd),
11775
+ totalDepositsUSD: Number(state.collateralAssetsUsd),
11776
+ totalDebtStableUSD: 0,
11777
+ totalDebtUSD: 0,
11778
+ utilization: 0,
11779
+ depositRate: 0,
11780
+ variableBorrowRate: 0,
11781
+ stableBorrowRate: 0,
11782
+ intrinsicYield: additionalYields?.intrinsicYields?.[metaCollateral?.assetGroup] ?? 0,
11783
+ rewards: void 0,
11784
+ decimals: collateralAsset.decimals,
11785
+ config: {
11786
+ 0: {
11787
+ category: 0,
11788
+ borrowCollateralFactor: ltv,
11789
+ collateralFactor: ltv,
11790
+ borrowFactor: 1,
11791
+ liquidationPenalty,
11792
+ closeFactor: 1,
11793
+ collateralDisabled: false,
11794
+ debtDisabled: true
11795
+ }
11796
+ },
11797
+ closeFactor: 1,
11798
+ collateralActive: true,
11799
+ borrowingEnabled: false,
11800
+ depositsEnabled: true,
11801
+ hasStable: false,
11802
+ isActive: true,
11803
+ isFrozen: false
11804
+ };
11805
+ }
11791
11806
  data[m].params = {
11792
11807
  market: {
11793
11808
  lender: m,
@@ -16663,13 +16678,13 @@ var REPAIR_BACKOFF_JITTER_MS = 60;
16663
16678
  var sleep = (ms) => new Promise((resolve) => setTimeout(resolve, Math.max(0, ms)));
16664
16679
  var backoffForRound = (round) => REPAIR_BACKOFF_BASE_MS * 2 ** round + Math.random() * REPAIR_BACKOFF_JITTER_MS;
16665
16680
  var endpointUrl = (client, rpcId) => client?.transport?.url ?? `rpc#${rpcId}`;
16666
- var resolveEndpoint = (chainId, getEvmClient20, startRpcId, tried, maxProbe = 12, timeoutMs) => {
16681
+ var resolveEndpoint = (chainId, getEvmClient19, startRpcId, tried, maxProbe = 12, timeoutMs) => {
16667
16682
  let fallback = null;
16668
16683
  for (let probe = 0; probe < maxProbe; probe++) {
16669
16684
  const rpcId = startRpcId + probe;
16670
16685
  let client;
16671
16686
  try {
16672
- client = getEvmClient20(chainId, rpcId, { timeoutMs });
16687
+ client = getEvmClient19(chainId, rpcId, { timeoutMs });
16673
16688
  } catch {
16674
16689
  break;
16675
16690
  }
@@ -16698,7 +16713,7 @@ var recordPermanentFailures = (slots, offset, collector) => {
16698
16713
  if (slots[i].permanent) collector.add(offset + i);
16699
16714
  }
16700
16715
  };
16701
- var repairFailedSlots = async (chainId, contracts, slots, getEvmClient20, nextRpcId, batchSize, logs, rounds = MULTICALL_REPAIR_ROUNDS, options) => {
16716
+ var repairFailedSlots = async (chainId, contracts, slots, getEvmClient19, nextRpcId, batchSize, logs, rounds = MULTICALL_REPAIR_ROUNDS, options) => {
16702
16717
  let searchFrom = nextRpcId;
16703
16718
  for (let round = 0; round < rounds; round++) {
16704
16719
  const failedIdx = [];
@@ -16708,7 +16723,7 @@ var repairFailedSlots = async (chainId, contracts, slots, getEvmClient20, nextRp
16708
16723
  if (failedIdx.length === 0) return slots;
16709
16724
  const endpoint = resolveEndpoint(
16710
16725
  chainId,
16711
- getEvmClient20,
16726
+ getEvmClient19,
16712
16727
  searchFrom,
16713
16728
  options?.tried
16714
16729
  );
@@ -16760,7 +16775,7 @@ var repairFailedSlots = async (chainId, contracts, slots, getEvmClient20, nextRp
16760
16775
  }
16761
16776
  return slots;
16762
16777
  };
16763
- var multicallShardedAbiArray = async (chainId, abi, calls, getEvmClient20, poolSize, retries = maxRetries, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, logs = false, retryFailed = false, permanentFailures, options) => {
16778
+ var multicallShardedAbiArray = async (chainId, abi, calls, getEvmClient19, poolSize, retries = maxRetries, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, logs = false, retryFailed = false, permanentFailures, options) => {
16764
16779
  const abiIsArray = isArray(abi[0]);
16765
16780
  const contracts = calls.map(({ address, name, params }, i) => ({
16766
16781
  abi: abiIsArray ? abi?.[i] : abi,
@@ -16834,7 +16849,7 @@ var multicallShardedAbiArray = async (chainId, abi, calls, getEvmClient20, poolS
16834
16849
  const attemptHedged = async (items, startRpcId, tried) => {
16835
16850
  const primary = resolveEndpoint(
16836
16851
  chainId,
16837
- getEvmClient20,
16852
+ getEvmClient19,
16838
16853
  startRpcId,
16839
16854
  tried,
16840
16855
  12,
@@ -16858,7 +16873,7 @@ var multicallShardedAbiArray = async (chainId, abi, calls, getEvmClient20, poolS
16858
16873
  clearTimeout(timer);
16859
16874
  const alt = resolveEndpoint(
16860
16875
  chainId,
16861
- getEvmClient20,
16876
+ getEvmClient19,
16862
16877
  primary.rpcId + 1,
16863
16878
  tried,
16864
16879
  12,
@@ -16910,7 +16925,7 @@ var multicallShardedAbiArray = async (chainId, abi, calls, getEvmClient20, poolS
16910
16925
  chainId,
16911
16926
  batch.items,
16912
16927
  slots,
16913
- getEvmClient20,
16928
+ getEvmClient19,
16914
16929
  won.rpcId + 1,
16915
16930
  requestBytes,
16916
16931
  logs,
@@ -16932,7 +16947,7 @@ var multicallShardedAbiArray = async (chainId, abi, calls, getEvmClient20, poolS
16932
16947
  const tried = /* @__PURE__ */ new Set();
16933
16948
  const start = resolveEndpoint(
16934
16949
  chainId,
16935
- getEvmClient20,
16950
+ getEvmClient19,
16936
16951
  workerId,
16937
16952
  void 0,
16938
16953
  12,
@@ -21543,12 +21558,12 @@ function convertMidnightMarketsToResponse(raw, chainId, prices = {}, _additional
21543
21558
  isActive: true,
21544
21559
  isFrozen: false
21545
21560
  };
21546
- config.collateralParams.forEach((c) => {
21561
+ config.collateralParams.forEach((c, i) => {
21547
21562
  const collAddr = c.token.toLowerCase();
21548
21563
  const ltv = parseLtv(c.lltv);
21549
21564
  const cursor = toBigIntOr0(c.liquidationCursor);
21550
21565
  const liquidationPenalty = cursor > 0n ? midnightLiquidationPenaltyNumber(toBigIntOr0(c.lltv), cursor) : liquidationPenaltyFromLltv(ltv);
21551
- const collUid = createMarketUid(chainId, m, collAddr);
21566
+ const collUid = createMarketUid(chainId, m, midnightCollateralRef(collAddr, i));
21552
21567
  const collAsset = tokens[collAddr];
21553
21568
  const collKey = toOracleKey(collAsset?.assetGroup) || toGenericPriceKey(collAddr, chainId);
21554
21569
  const collPrice = prices[collKey] ?? 0;
@@ -24611,6 +24626,7 @@ var INVERSE_PUBLIC_READ_ABI = [
24611
24626
  ...InverseMarketAbi,
24612
24627
  ...InverseOracleAbi,
24613
24628
  ...InverseDbrAbi,
24629
+ ...CurveTricryptoOracleAbi,
24614
24630
  ...Erc20Abi
24615
24631
  ];
24616
24632
  var READS_PER_MARKET2 = 5;
@@ -24622,29 +24638,52 @@ var fetchJson = async (url, timeoutMs = 6e3) => {
24622
24638
  if (!res.ok) throw new Error(`HTTP ${res.status}`);
24623
24639
  return res.json();
24624
24640
  };
24625
- var fetchDbrPriceDola = async (snapshot) => {
24626
- try {
24627
- const d = await fetchJson(DBR_URL);
24628
- const p = Number(d?.priceDola);
24629
- if (Number.isFinite(p) && p > 0) return p;
24630
- } catch {
24631
- }
24632
- const snap = Number(snapshot);
24633
- return Number.isFinite(snap) && snap > 0 ? snap : null;
24641
+ var toNum3 = (v) => {
24642
+ if (typeof v === "bigint") return Number(v);
24643
+ return typeof v === "number" && Number.isFinite(v) ? v : null;
24634
24644
  };
24635
- var fetchReplenishmentPriceBps = async (chainId, dbr) => {
24645
+ var fetchInverseChainWide = async (chainId, config) => {
24646
+ const pool = config.dbrPricePool;
24647
+ const calls = [
24648
+ { address: config.dbr, name: "replenishmentPriceBps", params: [] }
24649
+ ];
24650
+ if (pool) {
24651
+ calls.push(
24652
+ { address: pool, name: "coins", params: [0n] },
24653
+ { address: pool, name: "coins", params: [1n] },
24654
+ { address: pool, name: "price_oracle", params: [0n] }
24655
+ );
24656
+ }
24636
24657
  try {
24637
- const [v] = await multicallRetryUniversal({
24658
+ const r = await multicallRetryUniversal({
24638
24659
  chain: chainId,
24639
- calls: [{ address: dbr, name: "replenishmentPriceBps", params: [] }],
24660
+ calls,
24640
24661
  abi: INVERSE_PUBLIC_READ_ABI,
24641
24662
  allowFailure: true
24642
24663
  });
24643
- if (typeof v === "bigint") return Number(v);
24644
- if (typeof v === "number" && Number.isFinite(v)) return v;
24664
+ const replenishmentPriceBps = toNum3(r[0]);
24665
+ if (!pool) return { dbrPriceDola: null, replenishmentPriceBps };
24666
+ const same = (a, b) => typeof a === "string" && a.toLowerCase() === b.toLowerCase();
24667
+ const ordered = same(r[1], config.dola) && same(r[2], config.dbr);
24668
+ const raw = typeof r[3] === "bigint" ? Number(r[3]) / 1e18 : NaN;
24669
+ return {
24670
+ dbrPriceDola: ordered && Number.isFinite(raw) && raw > 0 ? raw : null,
24671
+ replenishmentPriceBps
24672
+ };
24645
24673
  } catch {
24674
+ return { dbrPriceDola: null, replenishmentPriceBps: null };
24646
24675
  }
24647
- return null;
24676
+ };
24677
+ var resolveDbrPriceDola = async (onChain, snapshot) => {
24678
+ if (onChain !== null) return onChain;
24679
+ try {
24680
+ const d = await fetchJson(DBR_URL);
24681
+ const p = Number(d?.priceDola);
24682
+ if (Number.isFinite(p) && p > 0) return p;
24683
+ } catch {
24684
+ }
24685
+ const snap = Number(snapshot);
24686
+ return Number.isFinite(snap) && snap > 0 ? snap : null;
24648
24687
  };
24649
24688
  async function fetchInverseMarkets(lender, chainId) {
24650
24689
  const config = inverseConfigFor(lender, chainId);
@@ -24660,8 +24699,11 @@ async function fetchInverseMarkets(lender, chainId) {
24660
24699
  source: "none"
24661
24700
  };
24662
24701
  if (!config || markets.length === 0) return empty;
24663
- const dbrPricePromise = fetchDbrPriceDola(config.dbrPriceDolaSnapshot);
24664
- const replenishPromise = fetchReplenishmentPriceBps(chainId, config.dbr);
24702
+ const chainWidePromise = fetchInverseChainWide(chainId, config);
24703
+ const dbrPricePromise = chainWidePromise.then(
24704
+ (c) => resolveDbrPriceDola(c.dbrPriceDola, config.dbrPriceDolaSnapshot)
24705
+ );
24706
+ const replenishPromise = chainWidePromise.then((c) => c.replenishmentPriceBps);
24665
24707
  try {
24666
24708
  const api = await fetchJson(FIXED_MARKETS_URL);
24667
24709
  const byAddr = {};
@@ -34979,7 +35021,11 @@ var getMidnightUserDataConverter = (_lender, chainId, account, meta) => {
34979
35021
  if (collAmt === 0n) return;
34980
35022
  anyBalance = true;
34981
35023
  const collAddr = c.token.toLowerCase();
34982
- const collUid = createMarketUid(chainId, lenderKey, collAddr);
35024
+ const collUid = createMarketUid(
35025
+ chainId,
35026
+ lenderKey,
35027
+ midnightCollateralRef(collAddr, i)
35028
+ );
34983
35029
  const collMeta = metaMap[collUid];
34984
35030
  const collDec = collMeta?.asset?.decimals ?? c.decimals;
34985
35031
  const collDisplayPrice = collMeta ? getDisplayPrice(collMeta) : 0;
@@ -35264,11 +35310,11 @@ var getExactlyUserDataConverter = (_lender, chainId, account, meta) => {
35264
35310
  for (const p of m.fixedBorrowPositions) {
35265
35311
  const maturity = Number(p.maturity);
35266
35312
  const trancheStr = parseRawAmount(p.previewValue.toString(), decimals);
35267
- const isMatured2 = maturity < now;
35313
+ const isMatured = maturity < now;
35268
35314
  const face = faceOf(p);
35269
35315
  const faceStr = parseRawAmount(face.toString(), decimals);
35270
- const discount = isMatured2 ? "0" : parseRawAmount((face - p.previewValue).toString(), decimals);
35271
- const penalty = isMatured2 ? parseRawAmount((p.previewValue - face).toString(), decimals) : "0";
35316
+ const discount = isMatured ? "0" : parseRawAmount((face - p.previewValue).toString(), decimals);
35317
+ const penalty = isMatured ? parseRawAmount((p.previewValue - face).toString(), decimals) : "0";
35272
35318
  posData[`${loanUid}#${maturity}`] = {
35273
35319
  marketUid: loanUid,
35274
35320
  underlying: assetAddr,
@@ -35297,7 +35343,7 @@ var getExactlyUserDataConverter = (_lender, chainId, account, meta) => {
35297
35343
  p.position.fee.toString(),
35298
35344
  decimals
35299
35345
  ),
35300
- isMatured: isMatured2,
35346
+ isMatured,
35301
35347
  /** rebate if repaid now, before maturity (never a fee) */
35302
35348
  earlyRepayDiscount: discount,
35303
35349
  /** penalty already accrued past maturity */
@@ -35308,7 +35354,7 @@ var getExactlyUserDataConverter = (_lender, chainId, account, meta) => {
35308
35354
  decimals
35309
35355
  ),
35310
35356
  latePenaltyApr: penaltyApr,
35311
- secondsLate: isMatured2 ? now - maturity : 0
35357
+ secondsLate: isMatured ? now - maturity : 0
35312
35358
  }
35313
35359
  };
35314
35360
  }
@@ -37118,7 +37164,7 @@ var getTellerUserDataConverter = (_lender, chainId, account, meta) => {
37118
37164
  const loanDuration = Number(big20(field10(loanDetails, "loanDuration", 6)));
37119
37165
  const aprBps = Number(big20(field10(terms, "APR", 2)));
37120
37166
  const maturity = acceptedTs > 0 ? acceptedTs + loanDuration : void 0;
37121
- const isMatured2 = defaulted || maturity !== void 0 && maturity < now;
37167
+ const isMatured = defaulted || maturity !== void 0 && maturity < now;
37122
37168
  const collStr = parseRawAmount(collAmount.toString(), collDecimals);
37123
37169
  const collNum = Number(collStr);
37124
37170
  const debtStr = parseRawAmount(owedTotal.toString(), principalDecimals);
@@ -37174,7 +37220,7 @@ var getTellerUserDataConverter = (_lender, chainId, account, meta) => {
37174
37220
  apr: aprBps / 100,
37175
37221
  maturity,
37176
37222
  accruedInterest: interestStr,
37177
- isMatured: isMatured2
37223
+ isMatured
37178
37224
  }
37179
37225
  }
37180
37226
  };
@@ -37286,7 +37332,7 @@ var getTermMaxUserDataConverter = (_lender, chainId, account, meta) => {
37286
37332
  const loanDec = loanMeta?.asset?.decimals ?? market.debtDecimals;
37287
37333
  const collDec = collMeta?.asset?.decimals ?? market.collateralDecimals;
37288
37334
  const maturity = Number(market.maturity);
37289
- const isMatured2 = maturity > 0 && maturity <= now;
37335
+ const isMatured = maturity > 0 && maturity <= now;
37290
37336
  const positionsByAccount = {};
37291
37337
  const modes = {};
37292
37338
  const hist = {};
@@ -37362,7 +37408,7 @@ var getTermMaxUserDataConverter = (_lender, chainId, account, meta) => {
37362
37408
  isDynamic: false,
37363
37409
  debt: debtStr,
37364
37410
  maturity: maturity || void 0,
37365
- isMatured: isMatured2
37411
+ isMatured
37366
37412
  }
37367
37413
  }
37368
37414
  };
@@ -42323,7 +42369,7 @@ function unflattenLenderData(pools) {
42323
42369
  }
42324
42370
  return result;
42325
42371
  }
42326
- var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient20, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, retries = 3, logs = false, concurrency = 1, permanentFailures, onEndpointFailure) => {
42372
+ var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient19, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, retries = 3, logs = false, concurrency = 1, permanentFailures, onEndpointFailure) => {
42327
42373
  const queries = organizeUserQueries(queriesRaw);
42328
42374
  const builtCalls = await Promise.all(
42329
42375
  queries.map(async (query3) => {
@@ -42333,7 +42379,7 @@ var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient20, allowF
42333
42379
  query3.lender,
42334
42380
  query3.account,
42335
42381
  query3.params,
42336
- getEvmClient20
42382
+ getEvmClient19
42337
42383
  );
42338
42384
  return callData.map((call) => ({ call, abi: call.abi ?? abi }));
42339
42385
  })
@@ -42343,7 +42389,7 @@ var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient20, allowF
42343
42389
  chainId,
42344
42390
  calls.map((call) => call.abi),
42345
42391
  calls.map((call) => call.call),
42346
- getEvmClient20,
42392
+ getEvmClient19,
42347
42393
  concurrency,
42348
42394
  retries,
42349
42395
  allowFailure,
@@ -50199,7 +50245,9 @@ var DEFILLAMA_POOLS = {
50199
50245
  [vesperYieldKey("1", "0x4dbe3f01abe271d3e65432c74851625a8c30aa7b")]: "9b473092-6f2d-4fe6-af5a-f746b77ef5a0",
50200
50246
  // vaSTETH 1.41 %
50201
50247
  [vesperYieldKey("1", "0xd1c117319b3595fbc39b471ab1fd485629eb05f2")]: "359dd5cd-67a6-4f6a-83db-1edb301637e7",
50202
- // vaETH — 9.11 % (see divergence note)
50248
+ // vaETH — 9.11 %, then 89.65 % on
50249
+ // 2026-09-09 against a realized 0.47 %. THE WORST ROW IN THIS TABLE: never
50250
+ // treat a Llama value for this pool as plausible. See the hazard note above.
50203
50251
  [vesperYieldKey("1", "0xa8b607aa09b6a2e306f93e74c282fb13f6a80452")]: "eb342dc8-8d50-4300-8e92-c8d88e026c94",
50204
50252
  // vaUSDC 3.16 %
50205
50253
  [vesperYieldKey("1", "0x0538c8bac84e95a9df8ac10aad17dbe81b9e36ee")]: "d07783c3-bd68-4e38-927f-762fcb349dfc",
@@ -54926,15 +54974,16 @@ function getMidnightCalls(chainId) {
54926
54974
  if (!market.marketId || !market.loanToken) continue;
54927
54975
  const legs = [];
54928
54976
  const calls = [];
54929
- for (const c of market.collateralParams ?? []) {
54930
- if (!c.oracle || !c.token) continue;
54977
+ (market.collateralParams ?? []).forEach((c, collateralIndex) => {
54978
+ if (!c.oracle || !c.token) return;
54931
54979
  legs.push({
54932
54980
  collateralAsset: c.token.toLowerCase(),
54933
54981
  collateralDecimals: c.decimals,
54934
- oracle: c.oracle
54982
+ oracle: c.oracle,
54983
+ collateralIndex
54935
54984
  });
54936
54985
  calls.push({ address: c.oracle, name: "price", params: [] });
54937
- }
54986
+ });
54938
54987
  if (legs.length === 0) continue;
54939
54988
  results.push({
54940
54989
  calls,
@@ -54983,7 +55032,11 @@ function parseMidnightResults(data, meta, context) {
54983
55032
  price: priceDebtToCollateral,
54984
55033
  // raw: collateral price in loan asset terms
54985
55034
  priceUSD: priceDebtToCollateral * loanAssetUSD,
54986
- marketUid: createMarketUid(chainId, lenderKey, leg.collateralAsset),
55035
+ marketUid: createMarketUid(
55036
+ chainId,
55037
+ lenderKey,
55038
+ midnightCollateralRef(leg.collateralAsset, leg.collateralIndex)
55039
+ ),
54987
55040
  targetLender: lenderKey,
54988
55041
  baseAsset: loanAsset
54989
55042
  });
@@ -69767,6 +69820,7 @@ var fetchUpshiftVaults = async (chainId, prices = {}, tokenList = {}) => {
69767
69820
  var NOISE_DEVIATION_BPS = 10;
69768
69821
  var IMPLAUSIBLE_APR_PERCENT2 = 1e3;
69769
69822
  var DUST_TVL_USD = 1e3;
69823
+ var AMPLIFYING_TENOR_SECS = 86400;
69770
69824
  var impliedDeviationBps = (c) => {
69771
69825
  const secs = c.expiry - c.nowSecs;
69772
69826
  if (!(secs > 0)) return 0;
@@ -69788,7 +69842,8 @@ var isUnearnableRate = (args) => {
69788
69842
  if (isImplausibleMagnitude(aprPercent, totalAssetsUsd)) return true;
69789
69843
  if (expiry === void 0) return false;
69790
69844
  const nowSecs = args.nowSecs ?? Math.floor(Date.now() / 1e3);
69791
- return (totalAssetsUsd ?? 0) < DUST_TVL_USD && isAnnualizationNoise({ aprPercent, expiry, nowSecs });
69845
+ if (!isAnnualizationNoise({ aprPercent, expiry, nowSecs })) return false;
69846
+ return (totalAssetsUsd ?? 0) < DUST_TVL_USD || expiry - nowSecs < AMPLIFYING_TENOR_SECS;
69792
69847
  };
69793
69848
 
69794
69849
  // src/vaults/yearn/fetchPublic.ts
@@ -72363,9 +72418,13 @@ function feePhrase(fee) {
72363
72418
  const bound = fee.mutable && fee.cap != null ? `, governance-set up to a maximum of ${fee.unit === "bps" ? `${fee.cap} bps` : pct(fee.cap)}` : fee.mutable ? ", governance-set" : "";
72364
72419
  return `${fee.label}: ${amount4}${rebate}${bound}${qualifier}`;
72365
72420
  }
72421
+ function hasMatured(m, nowSecs) {
72422
+ if (m.kind !== "fixed-date" || !m.maturity) return false;
72423
+ return m.maturity <= (Math.floor(Date.now() / 1e3));
72424
+ }
72366
72425
  function maturityPhrase(m) {
72367
72426
  if (m.kind === "fixed-date" && m.maturity)
72368
- return `until ${shortDate(m.maturity)}`;
72427
+ return `${hasMatured(m) ? "matured" : "until"} ${shortDate(m.maturity)}`;
72369
72428
  if (m.kind === "rolling-duration") {
72370
72429
  if (m.maxDurationSecs) return `for up to ${duration(m.maxDurationSecs)}`;
72371
72430
  return "for a term you choose";
@@ -72482,6 +72541,9 @@ function supplyHeadline(s, sheet = {}) {
72482
72541
  const rate = `${rateLabel(s)} ${pct(s.rate.aprTotal)}${windowNote(s.rate)}${provenance(s.rate)}`;
72483
72542
  const exit = headlineExitFromRoutes(s.exit.routes, sheet.asset?.symbol) ?? exitPhrase[String(s.exit.mode)] ?? (s.exit.settlement === "sync" ? "withdraw any time" : "delayed withdrawal");
72484
72543
  const cooldown = s.exit.cooldownSecs ? ` (${duration(s.exit.cooldownSecs)})` : "";
72544
+ if (hasMatured(s.maturity)) {
72545
+ return `Matured ${shortDate(s.maturity.maturity)} \xB7 ${exit}${cooldown}`;
72546
+ }
72485
72547
  const mat = s.maturity.kind === "perpetual" ? "" : ` ${maturityPhrase(s.maturity)}`;
72486
72548
  const warmup = s.rate.warmupSecs ? ` \xB7 earns after ${duration(s.rate.warmupSecs)}` : "";
72487
72549
  return `${rate}${mat}${warmup} \xB7 ${exit}${cooldown}`;
@@ -75082,24 +75144,27 @@ function earnMarketFromVault(row, chainId, opts = {}) {
75082
75144
  const deposit = toPercent2(rates.depositRate);
75083
75145
  const base = toPercent2(rates.supplyRate) ?? (deposit !== void 0 && rewards !== void 0 ? deposit - rewards : deposit);
75084
75146
  const total = toPercent2(rates.totalRate) ?? deposit ?? sum(base, rewards) ?? 0;
75085
- const rate = {
75086
- total,
75087
- base,
75088
- rewards,
75089
- // A vault has no separate intrinsic leg — whatever it pays IS the venue's
75090
- // own yield. Leaving this undefined rendered an empty "Venue APR" on every
75091
- // vault row, which read as "this vault pays nothing".
75092
- marketOwn: total,
75093
- // ...and for the same reason it can never be pass-through.
75094
- passthrough: false,
75095
- kind: resolveRateKind(provider, meta),
75096
- source: EARN_RATE_SOURCE_BY_PROVIDER[provider] ?? "api",
75097
- // The curator's cut. Dropped entirely until now, which left the earn row
75098
- // unable to say why its net rate sits below the gross one — and left the
75099
- // term sheet built from this row with no fee schedule at all.
75100
- fee: toPercent2(rates.fee)
75101
- };
75102
75147
  const maturity = resolveMaturity(meta);
75148
+ const rate = earnRateAtMaturity(
75149
+ {
75150
+ total,
75151
+ base,
75152
+ rewards,
75153
+ // A vault has no separate intrinsic leg — whatever it pays IS the venue's
75154
+ // own yield. Leaving this undefined rendered an empty "Venue APR" on every
75155
+ // vault row, which read as "this vault pays nothing".
75156
+ marketOwn: total,
75157
+ // ...and for the same reason it can never be pass-through.
75158
+ passthrough: false,
75159
+ kind: resolveRateKind(provider, meta),
75160
+ source: EARN_RATE_SOURCE_BY_PROVIDER[provider] ?? "api",
75161
+ // The curator's cut. Dropped entirely until now, which left the earn row
75162
+ // unable to say why its net rate sits below the gross one — and left the
75163
+ // term sheet built from this row with no fee schedule at all.
75164
+ fee: toPercent2(rates.fee)
75165
+ },
75166
+ maturity
75167
+ );
75103
75168
  const availability = resolveAvailability(meta, maturity);
75104
75169
  const exitMode = resolveExitMode2(provider, meta, tvl, liq);
75105
75170
  const market = {
@@ -75244,7 +75309,7 @@ function resolveAvailability(meta, maturity) {
75244
75309
  const capFull = capacity === "0";
75245
75310
  let gating;
75246
75311
  let reason;
75247
- if (isMatured(maturity)) {
75312
+ if (isMaturedTerm(maturity)) {
75248
75313
  gating = "matured";
75249
75314
  reason = "This market has reached maturity";
75250
75315
  } else if (isMintable === false) {
@@ -75289,9 +75354,26 @@ function resolveMaturity(meta) {
75289
75354
  atMaturity: str6(meta.atMaturity) ?? "stops-earning"
75290
75355
  };
75291
75356
  }
75292
- function isMatured(maturity) {
75357
+ function isMaturedTerm(maturity, nowSecs = Math.floor(Date.now() / 1e3)) {
75293
75358
  if (!maturity?.maturity) return false;
75294
- return maturity.maturity <= Math.floor(Date.now() / 1e3);
75359
+ return maturity.maturity <= nowSecs;
75360
+ }
75361
+ function earnRateAtMaturity(rate, maturity, nowSecs) {
75362
+ if (!isMaturedTerm(maturity, nowSecs)) return rate;
75363
+ return {
75364
+ ...rate,
75365
+ total: 0,
75366
+ // Every yield leg, not just the headline: a consumer that re-sums the legs
75367
+ // (or ranks on `marketOwn`, as the unified tab's second sort does) would
75368
+ // otherwise get the stale number back through the side door.
75369
+ ...rate.base !== void 0 ? { base: 0 } : {},
75370
+ ...rate.rewards !== void 0 ? { rewards: 0 } : {},
75371
+ ...rate.intrinsic !== void 0 ? { intrinsic: 0 } : {},
75372
+ ...rate.marketOwn !== void 0 ? { marketOwn: 0 } : {}
75373
+ // `fee`, `kind` and `source` are untouched: the fee schedule and the
75374
+ // mechanism are still facts about the instrument, and calling a matured
75375
+ // bond's rate anything but `fixed-term` would lose what it was.
75376
+ };
75295
75377
  }
75296
75378
  function amount2(raw, formatted, usd, decimals) {
75297
75379
  const rawStr = raw != null ? String(raw) : void 0;
@@ -76137,7 +76219,7 @@ function parseMulticallRpcResponses(responses, batches, allowFailure = true, per
76137
76219
  });
76138
76220
  return allResults;
76139
76221
  }
76140
- var ERC20MetadataAbi = [
76222
+ var ERC20_STRING_ABI = [
76141
76223
  {
76142
76224
  inputs: [],
76143
76225
  name: "name",
@@ -76160,38 +76242,110 @@ var ERC20MetadataAbi = [
76160
76242
  type: "function"
76161
76243
  }
76162
76244
  ];
76163
- async function fetchTokenMetadata(chain, addrs) {
76164
- const tokens = {};
76165
- const client = getEvmClient(chain);
76166
- const results = await client.multicall({
76167
- allowFailure: false,
76168
- batchSize: 300,
76169
- contracts: addrs.map((addr4) => [
76170
- {
76171
- abi: ERC20MetadataAbi,
76172
- functionName: "name",
76173
- address: addr4,
76174
- args: []
76175
- },
76176
- {
76177
- abi: ERC20MetadataAbi,
76178
- functionName: "symbol",
76179
- address: addr4,
76180
- args: []
76181
- },
76182
- {
76183
- abi: ERC20MetadataAbi,
76184
- functionName: "decimals",
76185
- address: addr4,
76186
- args: []
76187
- }
76188
- ]).flat()
76245
+ var ERC20_BYTES32_ABI = [
76246
+ {
76247
+ inputs: [],
76248
+ name: "name",
76249
+ outputs: [{ internalType: "bytes32", name: "", type: "bytes32" }],
76250
+ stateMutability: "view",
76251
+ type: "function"
76252
+ },
76253
+ {
76254
+ inputs: [],
76255
+ name: "symbol",
76256
+ outputs: [{ internalType: "bytes32", name: "", type: "bytes32" }],
76257
+ stateMutability: "view",
76258
+ type: "function"
76259
+ }
76260
+ ];
76261
+ var FAILED = "0x";
76262
+ function decodeBytes32(value) {
76263
+ if (typeof value !== "string" || !value.startsWith("0x")) return void 0;
76264
+ if (value === FAILED) return void 0;
76265
+ try {
76266
+ const decoded = hexToString(value).replace(/\0+$/, "").trim();
76267
+ return decoded.length > 0 ? decoded : void 0;
76268
+ } catch {
76269
+ return void 0;
76270
+ }
76271
+ }
76272
+ function asString(value) {
76273
+ if (typeof value !== "string") return void 0;
76274
+ if (value === FAILED) return void 0;
76275
+ const trimmed = value.trim();
76276
+ return trimmed.length > 0 ? trimmed : void 0;
76277
+ }
76278
+ async function fetchTokenMetadata(chain, addrs, options = {}) {
76279
+ const { rpcUrls, maxRetries: maxRetries2 = 3 } = options;
76280
+ const unique = [
76281
+ ...new Set(
76282
+ addrs.filter((a) => typeof a === "string" && isAddress(a, { strict: false })).map((a) => a.toLowerCase())
76283
+ )
76284
+ ];
76285
+ if (unique.length === 0) return {};
76286
+ const multicall = createMulticallRetryUniversal(
76287
+ rpcUrls?.length ? { [chain]: rpcUrls } : LIST_OVERRIDES
76288
+ );
76289
+ const calls = unique.flatMap((address) => [
76290
+ { address, name: "name", args: [] },
76291
+ { address, name: "symbol", args: [] },
76292
+ { address, name: "decimals", args: [] }
76293
+ ]);
76294
+ const results = await multicall({
76295
+ chain,
76296
+ calls,
76297
+ abi: ERC20_STRING_ABI,
76298
+ maxRetries: maxRetries2,
76299
+ allowFailure: true
76300
+ });
76301
+ const names = /* @__PURE__ */ new Map();
76302
+ const symbols = /* @__PURE__ */ new Map();
76303
+ const decimalsByAddr = /* @__PURE__ */ new Map();
76304
+ unique.forEach((address, i) => {
76305
+ names.set(address, asString(results[i * 3]));
76306
+ symbols.set(address, asString(results[i * 3 + 1]));
76307
+ const raw = results[i * 3 + 2];
76308
+ decimalsByAddr.set(
76309
+ address,
76310
+ typeof raw === "number" ? raw : typeof raw === "bigint" ? Number(raw) : void 0
76311
+ );
76189
76312
  });
76190
- addrs.forEach((addr4, i) => {
76191
- const name = results[i * 3];
76192
- const symbol = results[i * 3 + 1];
76193
- const decimals = results[i * 3 + 2];
76194
- const address = addr4.toLowerCase();
76313
+ const needsBytes32 = unique.filter(
76314
+ (a) => decimalsByAddr.get(a) !== void 0 && (names.get(a) === void 0 || symbols.get(a) === void 0)
76315
+ );
76316
+ if (needsBytes32.length > 0) {
76317
+ const b32Calls = needsBytes32.flatMap((address) => [
76318
+ { address, name: "name", args: [] },
76319
+ { address, name: "symbol", args: [] }
76320
+ ]);
76321
+ try {
76322
+ const b32 = await multicall({
76323
+ chain,
76324
+ calls: b32Calls,
76325
+ abi: ERC20_BYTES32_ABI,
76326
+ maxRetries: maxRetries2,
76327
+ allowFailure: true
76328
+ });
76329
+ needsBytes32.forEach((address, i) => {
76330
+ if (names.get(address) === void 0) {
76331
+ const decoded = decodeBytes32(b32[i * 2]);
76332
+ if (decoded) names.set(address, decoded);
76333
+ }
76334
+ if (symbols.get(address) === void 0) {
76335
+ const decoded = decodeBytes32(b32[i * 2 + 1]);
76336
+ if (decoded) symbols.set(address, decoded);
76337
+ }
76338
+ });
76339
+ } catch {
76340
+ }
76341
+ }
76342
+ const tokens = {};
76343
+ for (const address of unique) {
76344
+ const decimals = decimalsByAddr.get(address);
76345
+ if (decimals === void 0 || !Number.isInteger(decimals)) continue;
76346
+ if (decimals < 0 || decimals > 36) continue;
76347
+ const symbol = symbols.get(address) ?? `${address.slice(0, 6)}\u2026`;
76348
+ const name = names.get(address) ?? symbol;
76195
76349
  tokens[address] = {
76196
76350
  chainId: String(chain),
76197
76351
  decimals,
@@ -76201,7 +76355,7 @@ async function fetchTokenMetadata(chain, addrs) {
76201
76355
  assetGroup: `${symbol}::${name}`,
76202
76356
  currencyId: `${symbol}::${name}`
76203
76357
  };
76204
- });
76358
+ }
76205
76359
  return tokens;
76206
76360
  }
76207
76361
  function balanceFetcher() {
@@ -79469,6 +79623,6 @@ function earnPositionTotals(items) {
79469
79623
  };
79470
79624
  }
79471
79625
 
79472
- export { ApiBookSource, DEFAULT_MIDNIGHT_API, DEFAULT_OUTLIER_GUARD, DEFAULT_PROFILE_ID, DEFAULT_STALE_REJECT_SECONDS, DEFAULT_TERMMAX_API, DEFAULT_TERM_ORDER_STORE, EARN_DESCRIPTIONS, EARN_LABELS, EARN_RATE_SOURCE_BY_PROVIDER, EMPTY_BALANCE, EXACTLY_LENDER_KEY, FLYING_TULIP_LENDER_KEY, FRACTION_RATE_PROVIDERS, GMX_API_HOSTS, GMX_READ_CONTRACTS, GMX_SUPPORTED_CHAINS, HYPERCORE_VAULT_REGISTRY, IDLE_MARKET_ID, INTERFACE_IDS, LAGOON_API_URL, LAGOON_CHAIN_IDS, MORPHO_LENS, MULTICALL_FAILURE, MaxParamThresholds, PASSTHROUGH_RATE_EPSILON, PENDLE_ASSETS_URL, PENDLE_CHAIN_IDS, PENDLE_MARKETS_URL, SDK_FRACTION_RATE_PROVIDERS, SPECTRA_NETWORKS, SPECTRA_RATE_MAX_PERCENT, SPECTRA_RATE_MIN_PERCENT, STABLECOIN_SYMBOLS, STCELO_MANAGER_ADDRESS, TELLER_CALLS_PER_BID, DECIMAL_BASE as TERMMAX_DECIMAL_BASE, TERMMAX_LIQUIDATION_PENALTY, TERMMAX_LIQUIDATION_WINDOW_SECS, TERMMAX_LIQUIDATOR_BONUS, TERMMAX_MARKETS_PER_CALL, TERMMAX_PARTIAL_CLOSE_FACTOR, TERMMAX_PARTIAL_LIQUIDATION_THRESHOLD_USD, TERM_ADAPTERS, TERM_PROFILES, TERM_SHEET_SCHEMA_VERSION, TermMaxApiSource, TermSubgraphSource, UPSHIFT_CHAIN_IDS, UPSHIFT_VAULTS_URL, VAULT_PROVIDERS, VAULT_PROVIDER_PROFILE, VAULT_PROVIDER_TRAITS, VAULT_SHARE_PRICE_PROBE, VAULT_VENUE_PREFIX, VOLATILE_VAULT_OVERRIDES, YEARN_CHAIN_IDS, YEARN_YDAEMON_BASE, __resetResupplyUserCaches, accountDepositListKey, accountWithdrawalListKey, appendSnapshot, applyEarnSanity, applyPositionDelta, attachImplications, attachPricesToFlashLiquidity, borrowDescription, borrowFindings, borrowHeadline, buildExposures2 as buildExposures, buildFluidFTokensCall, buildLendingPositionUid, buildLiquityUserCall, buildLoopResult, buildMorphoTypeCall, buildMorphoTypeUserCallWithLens, buildPortfolioTotals, buildSumerAccumulators, buildSummaries, buildTellerUserCall, buildTermMaxUserCall, buildTermSheet, buildTermSheetsForGroup, buildVaultEarnUid, buildVaultLookup, buildVaultTermSheet, calculateLeverage, calculateNetApr, calculateOverallNetApr, calculateWeightedAverage, classifyFreshness, classifyReliability, classifyVault, clearPendleMarketsCache, clearSpectraMarketsCache, collateralSymbolsByVenue, collectFeedObservations, computeBorrowDelta2 as computeBorrowDelta, computeCloseTradeDeltas, computeCollateralSwapDeltas, computeDebtSwapDeltas, computeDepositDelta2 as computeDepositDelta, computeEModeAnalysis, computeOpenTradeDeltas, computePostTradeMetrics, computeRepayDelta2 as computeRepayDelta, computeSumerBorrowDelta, computeSumerDepositDelta, computeSumerRepayDelta, computeSumerWaterfall, computeSumerWithdrawDelta, computeVaultApr, computeWithdrawDelta2 as computeWithdrawDelta, computeZapTradeDeltas, consensusReference, convertCoolerMarketsToResponse, convertDssMarketsToResponse, convertExactlyMarketsToResponse, convertFlyingTulipMarketsToResponse, convertFrankencoinMarketsToResponse, convertFraxlendPairsToResponse, convertInverseMarketsToResponse, convertLenderUserDataResult, convertLiquityMarketsToResponse, convertLlamaLendMarketsToResponse, convertResupplyMarketsToResponse, convertRiverMarketsToResponse, convertTellerMarketsToResponse, convertTermMarketsToResponse, convertTermMaxMarketsToResponse, convertUsddMarketsToResponse, createMarketUid, createMidnightBookSource, createMulticallRpcCall, createRawRpcCalls, createTermBookSource, createTermMaxDataSource, decodeListaMarkets, decodeMarkets, decodePackedListaUserDataset, decodePackedMorphoUserDataset, deriveBorrowTags, deriveSupplyTags, detectInterfaceKinds, dexResolverFor, disambiguateEarnNames, dssIlkBytes32, dssKeyParts, dssLenderKey, duration, earnDescription, earnLabel, earnMarketFromPool, earnMarketFromVault, earnMarketLabel, earnPositionFromLenderEntry, earnPositionFromVaultBalance, earnPositionTotals, earnRowSubtitle, earnUidFromMarketUid, earnVaultTerms, earnVenueKind, encodeBalanceFetcherCalldata, enrichTermSheet, enrichmentIndexFromRows, exactlyPairLtv, exactlyPenaltyRateToAprPercent, exactlyWadRateToPercent, feePhrase, feedKeyOf, feedStatKey, fetchCoolerMarkets, fetchDolomiteAccountNumbers, fetchDssMarkets, fetchEulerEarnVaults, fetchEulerEarnVaultsFromSubgraph, fetchEulerSubAccountIndexes, fetchExactlyMarkets, fetchFlashLiquidityForChain, fetchFluidDexState, fetchFluidFTokens, fetchFlyingTulipMarkets, fetchFrankencoinMarkets, fetchFraxlendPairs, fetchGeneralYields, fetchGeneralYieldsByMarketUid, fetchGmxExecutionFees, fetchGmxTickerPrices, fetchGmxVaults, fetchHypercoreVaults, fetchInverseMarkets, fetchLagoonApiVaults, fetchLagoonVaults, fetchLiquityMarkets, fetchListaVaultsFromChain, fetchLlamaLendMarkets, fetchMorphoUserBalances, fetchMorphoUserPositionMarkets, fetchMorphoVaults, fetchMorphoVaultsFromApi, fetchMorphoVaultsFromChain, fetchOraclePrices, fetchPendleApiAssets, fetchPendleApiMarkets, fetchPendlePrices, fetchPendlePtMarkets, fetchResupplyMarkets, fetchRiverMarkets, fetchSiloVaults, fetchSpectraApiMarkets, fetchSpectraPtMarkets, fetchTellerMarkets, fetchTermMarkets, fetchTermMaxMarkets, fetchTermStoreOrders, fetchTokenBalances, fetchTokenMetadata, fetchUpshiftApiVaults, fetchUpshiftVaults, fetchUsddMarkets, fetchYearnApiVaults, fetchYearnVaults, fillableRemaining, filterActiveLenders, filterLendersByProtocol, finalizeInfo, findingsFor, formatRaw, frankencoinKeyParts, frankencoinLenderKey, fraxlendAssetPerCollateral, fraxlendKeyParts, fraxlendLenderKey, fuseLenderData, generateLendingPools, getAavesForChain, getAssetConfig, getBalanceForMarketUid, getBorrowCapacity, getCachedFluidDexState, getCachedLiquityTroves, getCachedTellerBids, getCachedTermMaxDiscovery, getCachedTermMaxMarket, getCachedTermMaxMarkets, getCoreValidators, getFluidFTokensConverter, getGmxApiHost, getGmxReadContracts, getGmxUserPositions, getHealthFactor, getHypercoreUserPositions, getHypercoreVaultRegistry, getLenderAssets, getLenderPublicData, getLenderPublicDataAll, getLenderPublicDataViaApi, getLenderUserDataMulti, getLenderUserDataResult, getLendersForChain, getLstDelegation, getLstValidators, getLstWithdrawalRegistry, getLstWithdrawalRequests, getMaxAmountClose, getMaxAmountCollateralSwap, getMaxAmountDebtSwap, getMaxAmountOpen, getMergedUserData, getMorphoTypeMarketConverter, getReadFailurePolicy, getResolvedDolomiteAccountNumbers, getStCeloValidatorGroups, getSubAccountAddress, getSubAccountIndex, getTermProfile, getVaultPublicDataAll, getVaultWithdrawalRequests, hasCritical, hasEulerEarnVaultSubgraph, hasLagoonVaults, hasMorphoPositionIndex, hasMorphoUserApi, hasMorphoUserSubgraph, hasPendleMarkets, hasSpectraMarkets, hasUpshiftVaults, hasYearnVaults, ilkToKeySegment, implausibleRatePercent, inverseKeyParts, inverseLenderKey, isBoundNeed, isFailedCall, isIlliquid, isLendingPosition, isLiveMarket as isLivePendleMarket, isLiveSpectraMarket, isSecondaryMarketOnly, isStablecoinSymbol, isUnearnableEarnRate, isUnrealizableEarnRate, isVaultPosition, isVaultVenue, isYearnV3, keySegmentToIlk, keysFromMaps, lenderApiOnly, lenderFamily, liquityCandidateTroveIds, liquityKeyParts, liquityLenderKey, llamaLendKeyParts, llamaLendLenderKey, meetsLiquidityFloor, mergeDeep, multicall3Abi2 as multicall3Abi, nanTo, needsLenderApproval, needsTokenApproval, noOpResult, normalizeToBytes, organizeUserQueries, parseBalanceFetcherResult, parseEarnUid, parseMergedResult, parseMulticallRpcResponses, parseExpirySeconds as parsePendleExpirySeconds, parseRawRpcBatchResponses, parseRawRpcResponses, parseCurveFee as parseSpectraCurveFee, parsePtRate as parseSpectraPtRate, parseTermMaxLtv, parseTokenBalanceResult, pct, assetKey as pendleAssetKey, pickPool as pickSpectraPool, positivePart2 as positivePart, predictInverseEscrow, prepareLenderUserDataRpcCalls, prepareMergedMulticallParams, prepareMergedRpcCalls, prepareMulticallInputs, prepareTokenBalanceRpcCalls, priceGlvVaults, priceGmMarkets, probeAaveFeedTimestamps, pruneFeedStats, rankFindings, ratePercent, readVaultSharePrices, rejectOutliers as rejectPriceOutliers, repairImpossibleTvl, resolveAdapter, resolveDerivation, resolveEarnIdentity, resolveModeConfig, resolveStCeloDepositGroup, resolveVaultProfileId, resupplyKeyParts, resupplyLenderKey, resupplyMarketLabel, riverKeyParts, riverLenderKey, sanePercent as saneSpectraPercent, savingsAddresses, savingsBalanceKind, secondaryMarketVault, selectAssetGroupPrices, setMysticApiKey, shortDate, spectraAddress, spectraNetwork, spectraPoolsUrl, splitChainScopedAddress as splitPendleChainScopedAddress, stampCapabilities, stampEarnSubtitles, stampVaultClassification, stampVaultTermSheets, stripLeadingBrand, supplyDescription, supplyFindings, supplyHeadline, swapRoutedProvidersArePriceConsistent, tellerBpsToPercent, tellerImpliedLtv, tellerLenderKey, tellerPoolFromLenderKey, termApiBaseUrl, termLenderKey, termMaxApiBase, borrowNif as termMaxBorrowNif, curveApr as termMaxCurveApr, curveAprNumber as termMaxCurveAprNumber, daysToMaturity as termMaxDaysToMaturity, lendNif as termMaxLendNif, mintGtFeeRatio as termMaxMintGtFeeRatio, ratioToNumber as termMaxRatioToNumber, ratioToPercent as termMaxRatioToPercent, termOfferRateToAprPct, termOrderStoreBaseUrl, tickToAprNumber, tickToPrice, toDigest, toTermFillNow, toTermSheetInput, toVaultTermInput, trancheFromCounterparty, tryParseEarnUid, unflattenLenderData, updateFeedStats, usdValue, usddIlkBytes32, usddKeyParts, usddLenderKey, validateTermSheet, validateTermSheets, validateUserData, vaultSharesToAssets, vaultTermInputFromEarnMarket, vaultTermInputFromSourceRow, vaultTraits, vaultVenue, venueBrand, venueBrandKey, withMaturityLabel, withTrancheLabel };
79626
+ export { ApiBookSource, DEFAULT_MIDNIGHT_API, DEFAULT_OUTLIER_GUARD, DEFAULT_PROFILE_ID, DEFAULT_STALE_REJECT_SECONDS, DEFAULT_TERMMAX_API, DEFAULT_TERM_ORDER_STORE, EARN_DESCRIPTIONS, EARN_LABELS, EARN_RATE_SOURCE_BY_PROVIDER, EMPTY_BALANCE, EXACTLY_LENDER_KEY, FLYING_TULIP_LENDER_KEY, FRACTION_RATE_PROVIDERS, GMX_API_HOSTS, GMX_READ_CONTRACTS, GMX_SUPPORTED_CHAINS, HYPERCORE_VAULT_REGISTRY, IDLE_MARKET_ID, INTERFACE_IDS, LAGOON_API_URL, LAGOON_CHAIN_IDS, MORPHO_LENS, MULTICALL_FAILURE, MaxParamThresholds, PASSTHROUGH_RATE_EPSILON, PENDLE_ASSETS_URL, PENDLE_CHAIN_IDS, PENDLE_MARKETS_URL, SDK_FRACTION_RATE_PROVIDERS, SPECTRA_NETWORKS, SPECTRA_RATE_MAX_PERCENT, SPECTRA_RATE_MIN_PERCENT, STABLECOIN_SYMBOLS, STCELO_MANAGER_ADDRESS, TELLER_CALLS_PER_BID, DECIMAL_BASE as TERMMAX_DECIMAL_BASE, TERMMAX_LIQUIDATION_PENALTY, TERMMAX_LIQUIDATION_WINDOW_SECS, TERMMAX_LIQUIDATOR_BONUS, TERMMAX_MARKETS_PER_CALL, TERMMAX_PARTIAL_CLOSE_FACTOR, TERMMAX_PARTIAL_LIQUIDATION_THRESHOLD_USD, TERM_ADAPTERS, TERM_PROFILES, TERM_SHEET_SCHEMA_VERSION, TermMaxApiSource, TermSubgraphSource, UPSHIFT_CHAIN_IDS, UPSHIFT_VAULTS_URL, VAULT_PROVIDERS, VAULT_PROVIDER_PROFILE, VAULT_PROVIDER_TRAITS, VAULT_SHARE_PRICE_PROBE, VAULT_VENUE_PREFIX, VOLATILE_VAULT_OVERRIDES, YEARN_CHAIN_IDS, YEARN_YDAEMON_BASE, __resetResupplyUserCaches, accountDepositListKey, accountWithdrawalListKey, appendSnapshot, applyEarnSanity, applyPositionDelta, attachImplications, attachPricesToFlashLiquidity, borrowDescription, borrowFindings, borrowHeadline, buildExposures2 as buildExposures, buildFluidFTokensCall, buildLendingPositionUid, buildLiquityUserCall, buildLoopResult, buildMorphoTypeCall, buildMorphoTypeUserCallWithLens, buildPortfolioTotals, buildSumerAccumulators, buildSummaries, buildTellerUserCall, buildTermMaxUserCall, buildTermSheet, buildTermSheetsForGroup, buildVaultEarnUid, buildVaultLookup, buildVaultTermSheet, calculateLeverage, calculateNetApr, calculateOverallNetApr, calculateWeightedAverage, classifyFreshness, classifyReliability, classifyVault, clearPendleMarketsCache, clearSpectraMarketsCache, collateralSymbolsByVenue, collectFeedObservations, computeBorrowDelta2 as computeBorrowDelta, computeCloseTradeDeltas, computeCollateralSwapDeltas, computeDebtSwapDeltas, computeDepositDelta2 as computeDepositDelta, computeEModeAnalysis, computeOpenTradeDeltas, computePostTradeMetrics, computeRepayDelta2 as computeRepayDelta, computeSumerBorrowDelta, computeSumerDepositDelta, computeSumerRepayDelta, computeSumerWaterfall, computeSumerWithdrawDelta, computeVaultApr, computeWithdrawDelta2 as computeWithdrawDelta, computeZapTradeDeltas, consensusReference, convertCoolerMarketsToResponse, convertDssMarketsToResponse, convertExactlyMarketsToResponse, convertFlyingTulipMarketsToResponse, convertFrankencoinMarketsToResponse, convertFraxlendPairsToResponse, convertInverseMarketsToResponse, convertLenderUserDataResult, convertLiquityMarketsToResponse, convertLlamaLendMarketsToResponse, convertResupplyMarketsToResponse, convertRiverMarketsToResponse, convertTellerMarketsToResponse, convertTermMarketsToResponse, convertTermMaxMarketsToResponse, convertUsddMarketsToResponse, createMarketUid, createMidnightBookSource, createMulticallRpcCall, createRawRpcCalls, createTermBookSource, createTermMaxDataSource, decodeListaMarkets, decodeMarkets, decodePackedListaUserDataset, decodePackedMorphoUserDataset, deriveBorrowTags, deriveSupplyTags, detectInterfaceKinds, dexResolverFor, disambiguateEarnNames, dssIlkBytes32, dssKeyParts, dssLenderKey, duration, earnDescription, earnLabel, earnMarketFromPool, earnMarketFromVault, earnMarketLabel, earnPositionFromLenderEntry, earnPositionFromVaultBalance, earnPositionTotals, earnRateAtMaturity, earnRowSubtitle, earnUidFromMarketUid, earnVaultTerms, earnVenueKind, encodeBalanceFetcherCalldata, enrichTermSheet, enrichmentIndexFromRows, exactlyPairLtv, exactlyPenaltyRateToAprPercent, exactlyWadRateToPercent, feePhrase, feedKeyOf, feedStatKey, fetchCoolerMarkets, fetchDolomiteAccountNumbers, fetchDssMarkets, fetchEulerEarnVaults, fetchEulerEarnVaultsFromSubgraph, fetchEulerSubAccountIndexes, fetchExactlyMarkets, fetchFlashLiquidityForChain, fetchFluidDexState, fetchFluidFTokens, fetchFlyingTulipMarkets, fetchFrankencoinMarkets, fetchFraxlendPairs, fetchGeneralYields, fetchGeneralYieldsByMarketUid, fetchGmxExecutionFees, fetchGmxTickerPrices, fetchGmxVaults, fetchHypercoreVaults, fetchInverseMarkets, fetchLagoonApiVaults, fetchLagoonVaults, fetchLiquityMarkets, fetchListaVaultsFromChain, fetchLlamaLendMarkets, fetchMorphoUserBalances, fetchMorphoUserPositionMarkets, fetchMorphoVaults, fetchMorphoVaultsFromApi, fetchMorphoVaultsFromChain, fetchOraclePrices, fetchPendleApiAssets, fetchPendleApiMarkets, fetchPendlePrices, fetchPendlePtMarkets, fetchResupplyMarkets, fetchRiverMarkets, fetchSiloVaults, fetchSpectraApiMarkets, fetchSpectraPtMarkets, fetchTellerMarkets, fetchTermMarkets, fetchTermMaxMarkets, fetchTermStoreOrders, fetchTokenBalances, fetchTokenMetadata, fetchUpshiftApiVaults, fetchUpshiftVaults, fetchUsddMarkets, fetchYearnApiVaults, fetchYearnVaults, fillableRemaining, filterActiveLenders, filterLendersByProtocol, finalizeInfo, findingsFor, formatRaw, frankencoinKeyParts, frankencoinLenderKey, fraxlendAssetPerCollateral, fraxlendKeyParts, fraxlendLenderKey, fuseLenderData, generateLendingPools, getAavesForChain, getAssetConfig, getBalanceForMarketUid, getBorrowCapacity, getCachedFluidDexState, getCachedLiquityTroves, getCachedTellerBids, getCachedTermMaxDiscovery, getCachedTermMaxMarket, getCachedTermMaxMarkets, getCoreValidators, getFluidFTokensConverter, getGmxApiHost, getGmxReadContracts, getGmxUserPositions, getHealthFactor, getHypercoreUserPositions, getHypercoreVaultRegistry, getLenderAssets, getLenderPublicData, getLenderPublicDataAll, getLenderPublicDataViaApi, getLenderUserDataMulti, getLenderUserDataResult, getLendersForChain, getLstDelegation, getLstValidators, getLstWithdrawalRegistry, getLstWithdrawalRequests, getMaxAmountClose, getMaxAmountCollateralSwap, getMaxAmountDebtSwap, getMaxAmountOpen, getMergedUserData, getMorphoTypeMarketConverter, getReadFailurePolicy, getResolvedDolomiteAccountNumbers, getStCeloValidatorGroups, getSubAccountAddress, getSubAccountIndex, getTermProfile, getVaultPublicDataAll, getVaultWithdrawalRequests, hasCritical, hasEulerEarnVaultSubgraph, hasLagoonVaults, hasMorphoPositionIndex, hasMorphoUserApi, hasMorphoUserSubgraph, hasPendleMarkets, hasSpectraMarkets, hasUpshiftVaults, hasYearnVaults, ilkToKeySegment, implausibleRatePercent, inverseKeyParts, inverseLenderKey, isBoundNeed, isFailedCall, isIlliquid, isLendingPosition, isLiveMarket as isLivePendleMarket, isLiveSpectraMarket, isMaturedTerm, isSecondaryMarketOnly, isStablecoinSymbol, isUnearnableEarnRate, isUnrealizableEarnRate, isVaultPosition, isVaultVenue, isYearnV3, keySegmentToIlk, keysFromMaps, lenderApiOnly, lenderFamily, liquityCandidateTroveIds, liquityKeyParts, liquityLenderKey, llamaLendKeyParts, llamaLendLenderKey, meetsLiquidityFloor, mergeDeep, multicall3Abi2 as multicall3Abi, nanTo, needsLenderApproval, needsTokenApproval, noOpResult, normalizeToBytes, organizeUserQueries, parseBalanceFetcherResult, parseEarnUid, parseMergedResult, parseMulticallRpcResponses, parseExpirySeconds as parsePendleExpirySeconds, parseRawRpcBatchResponses, parseRawRpcResponses, parseCurveFee as parseSpectraCurveFee, parsePtRate as parseSpectraPtRate, parseTermMaxLtv, parseTokenBalanceResult, pct, assetKey as pendleAssetKey, pickPool as pickSpectraPool, positivePart2 as positivePart, predictInverseEscrow, prepareLenderUserDataRpcCalls, prepareMergedMulticallParams, prepareMergedRpcCalls, prepareMulticallInputs, prepareTokenBalanceRpcCalls, priceGlvVaults, priceGmMarkets, probeAaveFeedTimestamps, pruneFeedStats, rankFindings, ratePercent, readVaultSharePrices, rejectOutliers as rejectPriceOutliers, repairImpossibleTvl, resolveAdapter, resolveDerivation, resolveEarnIdentity, resolveModeConfig, resolveStCeloDepositGroup, resolveVaultProfileId, resupplyKeyParts, resupplyLenderKey, resupplyMarketLabel, riverKeyParts, riverLenderKey, sanePercent as saneSpectraPercent, savingsAddresses, savingsBalanceKind, secondaryMarketVault, selectAssetGroupPrices, setMysticApiKey, shortDate, spectraAddress, spectraNetwork, spectraPoolsUrl, splitChainScopedAddress as splitPendleChainScopedAddress, stampCapabilities, stampEarnSubtitles, stampVaultClassification, stampVaultTermSheets, stripLeadingBrand, supplyDescription, supplyFindings, supplyHeadline, swapRoutedProvidersArePriceConsistent, tellerBpsToPercent, tellerImpliedLtv, tellerLenderKey, tellerPoolFromLenderKey, termApiBaseUrl, termLenderKey, termMaxApiBase, borrowNif as termMaxBorrowNif, curveApr as termMaxCurveApr, curveAprNumber as termMaxCurveAprNumber, daysToMaturity as termMaxDaysToMaturity, lendNif as termMaxLendNif, mintGtFeeRatio as termMaxMintGtFeeRatio, ratioToNumber as termMaxRatioToNumber, ratioToPercent as termMaxRatioToPercent, termOfferRateToAprPct, termOrderStoreBaseUrl, tickToAprNumber, tickToPrice, toDigest, toTermFillNow, toTermSheetInput, toVaultTermInput, trancheFromCounterparty, tryParseEarnUid, unflattenLenderData, updateFeedStats, usdValue, usddIlkBytes32, usddKeyParts, usddLenderKey, validateTermSheet, validateTermSheets, validateUserData, vaultSharesToAssets, vaultTermInputFromEarnMarket, vaultTermInputFromSourceRow, vaultTraits, vaultVenue, venueBrand, venueBrandKey, withMaturityLabel, withTrancheLabel };
79473
79627
  //# sourceMappingURL=index.js.map
79474
79628
  //# sourceMappingURL=index.js.map