@1delta/margin-fetcher 5.0.86 → 5.0.88

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
@@ -3,7 +3,7 @@ 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, morphoTypeMarkets, resolveTermApiBase, flyingTulipConfigFor, flyingTulipAssetsFor, liquityConfigFor, liquityBranchesByChain, riverConfigFor, riverChainData, termMaxApiBaseUrl, termMaxLenderKey, inverseConfigFor, inverseChainData, coolerConfigFor, llamaLendConfigFor, llamaLendChainData, llamaLendApiBaseUrl, resupplyConfigFor, fraxlendConfigFor, dssConfigFor, dssChainData, dssDebtToken, dssDebtJoin, frankencoinConfigFor, frankencoinChainData, aaveOracles, 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';
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, dolomiteIsolationMarket, morphoTypeMarkets, resolveTermApiBase, flyingTulipConfigFor, flyingTulipAssetsFor, liquityConfigFor, liquityBranchesByChain, riverConfigFor, riverChainData, termMaxApiBaseUrl, termMaxLenderKey, inverseConfigFor, inverseChainData, coolerConfigFor, llamaLendConfigFor, llamaLendChainData, llamaLendApiBaseUrl, resupplyConfigFor, fraxlendConfigFor, dssConfigFor, dssChainData, dssDebtToken, dssDebtJoin, frankencoinConfigFor, frankencoinChainData, aaveOracles, 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
9
  import { multicallRetryUniversal, getEvmClient, getEvmChain, createMulticallRetryUniversal, LIST_OVERRIDES, getEvmClientUniversal } from '@1delta/providers';
@@ -10328,13 +10328,13 @@ var REPAIR_BACKOFF_JITTER_MS = 60;
10328
10328
  var sleep = (ms) => new Promise((resolve) => setTimeout(resolve, Math.max(0, ms)));
10329
10329
  var backoffForRound = (round) => REPAIR_BACKOFF_BASE_MS * 2 ** round + Math.random() * REPAIR_BACKOFF_JITTER_MS;
10330
10330
  var endpointUrl = (client, rpcId) => client?.transport?.url ?? `rpc#${rpcId}`;
10331
- var resolveEndpoint = (chainId, getEvmClient20, startRpcId, tried, maxProbe = 12, timeoutMs) => {
10331
+ var resolveEndpoint = (chainId, getEvmClient21, startRpcId, tried, maxProbe = 12, timeoutMs) => {
10332
10332
  let fallback = null;
10333
10333
  for (let probe = 0; probe < maxProbe; probe++) {
10334
10334
  const rpcId = startRpcId + probe;
10335
10335
  let client;
10336
10336
  try {
10337
- client = getEvmClient20(chainId, rpcId, { timeoutMs });
10337
+ client = getEvmClient21(chainId, rpcId, { timeoutMs });
10338
10338
  } catch {
10339
10339
  break;
10340
10340
  }
@@ -10363,7 +10363,7 @@ var recordPermanentFailures = (slots, offset, collector) => {
10363
10363
  if (slots[i].permanent) collector.add(offset + i);
10364
10364
  }
10365
10365
  };
10366
- var repairFailedSlots = async (chainId, contracts, slots, getEvmClient20, nextRpcId, batchSize, logs, rounds = MULTICALL_REPAIR_ROUNDS, options) => {
10366
+ var repairFailedSlots = async (chainId, contracts, slots, getEvmClient21, nextRpcId, batchSize, logs, rounds = MULTICALL_REPAIR_ROUNDS, options) => {
10367
10367
  let searchFrom = nextRpcId;
10368
10368
  for (let round = 0; round < rounds; round++) {
10369
10369
  const failedIdx = [];
@@ -10373,7 +10373,7 @@ var repairFailedSlots = async (chainId, contracts, slots, getEvmClient20, nextRp
10373
10373
  if (failedIdx.length === 0) return slots;
10374
10374
  const endpoint = resolveEndpoint(
10375
10375
  chainId,
10376
- getEvmClient20,
10376
+ getEvmClient21,
10377
10377
  searchFrom,
10378
10378
  options?.tried
10379
10379
  );
@@ -10425,7 +10425,7 @@ var repairFailedSlots = async (chainId, contracts, slots, getEvmClient20, nextRp
10425
10425
  }
10426
10426
  return slots;
10427
10427
  };
10428
- var multicallShardedAbiArray = async (chainId, abi, calls, getEvmClient20, poolSize, retries = maxRetries, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, logs = false, retryFailed = false, permanentFailures, options) => {
10428
+ var multicallShardedAbiArray = async (chainId, abi, calls, getEvmClient21, poolSize, retries = maxRetries, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, logs = false, retryFailed = false, permanentFailures, options) => {
10429
10429
  const abiIsArray = isArray(abi[0]);
10430
10430
  const contracts = calls.map(({ address, name, params }, i) => ({
10431
10431
  abi: abiIsArray ? abi?.[i] : abi,
@@ -10499,7 +10499,7 @@ var multicallShardedAbiArray = async (chainId, abi, calls, getEvmClient20, poolS
10499
10499
  const attemptHedged = async (items, startRpcId, tried) => {
10500
10500
  const primary = resolveEndpoint(
10501
10501
  chainId,
10502
- getEvmClient20,
10502
+ getEvmClient21,
10503
10503
  startRpcId,
10504
10504
  tried,
10505
10505
  12,
@@ -10523,7 +10523,7 @@ var multicallShardedAbiArray = async (chainId, abi, calls, getEvmClient20, poolS
10523
10523
  clearTimeout(timer);
10524
10524
  const alt = resolveEndpoint(
10525
10525
  chainId,
10526
- getEvmClient20,
10526
+ getEvmClient21,
10527
10527
  primary.rpcId + 1,
10528
10528
  tried,
10529
10529
  12,
@@ -10575,7 +10575,7 @@ var multicallShardedAbiArray = async (chainId, abi, calls, getEvmClient20, poolS
10575
10575
  chainId,
10576
10576
  batch.items,
10577
10577
  slots,
10578
- getEvmClient20,
10578
+ getEvmClient21,
10579
10579
  won.rpcId + 1,
10580
10580
  requestBytes,
10581
10581
  logs,
@@ -10597,7 +10597,7 @@ var multicallShardedAbiArray = async (chainId, abi, calls, getEvmClient20, poolS
10597
10597
  const tried = /* @__PURE__ */ new Set();
10598
10598
  const start = resolveEndpoint(
10599
10599
  chainId,
10600
- getEvmClient20,
10600
+ getEvmClient21,
10601
10601
  workerId,
10602
10602
  void 0,
10603
10603
  12,
@@ -12013,7 +12013,7 @@ function createSumerUserState(payload, lenderData, totalDeposits24h = 0, totalDe
12013
12013
  // src/lending/user-data/utils/createMultiAccountStyleUserState.ts
12014
12014
  function createMultiAccountTypeUserState(payload, lenderData, histData) {
12015
12015
  const positionKeys = Object.keys(payload.lendingPositions ?? {});
12016
- let marketUids = getMarketUidsFromMeta(lenderData);
12016
+ let marketUids2 = getMarketUidsFromMeta(lenderData);
12017
12017
  const { chainId, account } = payload;
12018
12018
  let data = [];
12019
12019
  for (let j = 0; j < positionKeys.length; j++) {
@@ -12036,8 +12036,8 @@ function createMultiAccountTypeUserState(payload, lenderData, histData) {
12036
12036
  let collateral = 0;
12037
12037
  let borrowDiscountedCollateral = 0;
12038
12038
  let adjustedDebt = 0;
12039
- for (let i = 0; i < marketUids.length; i++) {
12040
- const marketUid = marketUids[i];
12039
+ for (let i = 0; i < marketUids2.length; i++) {
12040
+ const marketUid = marketUids2[i];
12041
12041
  if (!lenderData?.[marketUid] || !payload.lendingPositions[posId][marketUid])
12042
12042
  continue;
12043
12043
  const pos = payload.lendingPositions[posId][marketUid];
@@ -12093,8 +12093,8 @@ function createMultiAccountTypeUserState(payload, lenderData, histData) {
12093
12093
  rewards: {}
12094
12094
  };
12095
12095
  const creditLine = Math.max(0, borrowDiscountedCollateral - adjustedDebt);
12096
- for (let i = 0; i < marketUids.length; i++) {
12097
- const marketUid = marketUids[i];
12096
+ for (let i = 0; i < marketUids2.length; i++) {
12097
+ const marketUid = marketUids2[i];
12098
12098
  if (!lenderData?.[marketUid]) continue;
12099
12099
  const { configs, flags, borrowLiquidity, withdrawLiquidity } = lenderData[marketUid];
12100
12100
  const config = resolveModeConfig(configs, mode);
@@ -20598,7 +20598,10 @@ var DOLOMITE_MARKET_FNS = [
20598
20598
  "getMarketMarginPremium",
20599
20599
  "getMarketInterestRate"
20600
20600
  ];
20601
- var DOLOMITE_GLOBAL_FNS = ["getMarginRatio", "getEarningsRate"];
20601
+ var DOLOMITE_GLOBAL_FNS = [
20602
+ "getMarginRatio",
20603
+ "getEarningsRate"
20604
+ ];
20602
20605
  var buildDolomiteCall = (chainId, _lender) => {
20603
20606
  const margin = dolomiteConfigs()?.[chainId]?.dolomiteMargin;
20604
20607
  const marketIds = getDolomiteMarketIds(chainId);
@@ -20678,6 +20681,59 @@ function resolveDolomiteMode(heldMarketIds, emode) {
20678
20681
  }
20679
20682
  return cats.size === 1 ? [...cats][0] : "0";
20680
20683
  }
20684
+ var marketUids = (chainId, lender, ids) => ids.map((id) => createMarketUid(chainId, lender, String(id)));
20685
+ function resolveDolomiteRowIdentity(chainId, lender, marketId, token, tokenList = {}) {
20686
+ const lower4 = token.toLowerCase();
20687
+ const meta = tokenList[lower4];
20688
+ const table = dolomiteIsolationMarket(
20689
+ chainId,
20690
+ marketId
20691
+ );
20692
+ const receiptUnderlying = meta?.props?.receipt?.protocol === "dolomite-isolation" ? meta.props.receipt.underlying?.toLowerCase() : void 0;
20693
+ const underlying = table?.underlying?.toLowerCase() ?? receiptUnderlying;
20694
+ if (!underlying) {
20695
+ return {
20696
+ name: lenderShortName(lender) + " " + (meta?.symbol ?? ""),
20697
+ asset: meta,
20698
+ yieldKey: toOracleKey(meta?.assetGroup ?? null)
20699
+ };
20700
+ }
20701
+ const underlyingMeta = tokenList[underlying];
20702
+ const symbol = meta?.symbol ?? (underlyingMeta?.symbol ? "d" + underlyingMeta.symbol : table?.underlyingSymbol ? "d" + table.underlyingSymbol : "");
20703
+ const asset = meta && !meta.logoURI && underlyingMeta?.logoURI ? { ...meta, logoURI: underlyingMeta.logoURI } : meta;
20704
+ const isolation = table ? {
20705
+ factory: table.factory,
20706
+ underlying,
20707
+ underlyingSymbol: table.underlyingSymbol,
20708
+ underlyingDecimals: table.underlyingDecimals,
20709
+ allowedDebtMarketUids: table.allowableDebtMarketIds.length > 0 ? marketUids(chainId, lender, table.allowableDebtMarketIds) : void 0,
20710
+ allowedCollateralMarketUids: table.allowableCollateralMarketIds.length > 0 ? marketUids(chainId, lender, table.allowableCollateralMarketIds) : void 0,
20711
+ wrapper: table.wrapper,
20712
+ unwrapper: table.unwrapper,
20713
+ wrapperInputMarketUids: marketUids(
20714
+ chainId,
20715
+ lender,
20716
+ table.wrapperInputMarketIds
20717
+ ),
20718
+ unwrapperOutputMarketUids: marketUids(
20719
+ chainId,
20720
+ lender,
20721
+ table.unwrapperOutputMarketIds
20722
+ ),
20723
+ async: table.async,
20724
+ executionFeeWei: table.executionFeeWei
20725
+ } : void 0;
20726
+ return {
20727
+ name: lenderShortName(lender) + " " + symbol,
20728
+ asset,
20729
+ // The underlying's group; fall back to the dToken's own group only when
20730
+ // the underlying is unlisted (then nothing is keyed on it anyway).
20731
+ yieldKey: toOracleKey(
20732
+ underlyingMeta?.assetGroup ?? meta?.assetGroup ?? null
20733
+ ),
20734
+ isolation
20735
+ };
20736
+ }
20681
20737
 
20682
20738
  // src/lending/public-data/dolomite/publicCallParse.ts
20683
20739
  var BASE = 10n ** 18n;
@@ -20735,12 +20791,19 @@ var getDolomitePublicDataConverter = (lender, chainId, _prices, additionalYields
20735
20791
  const config = buildDolomiteConfigs(marketId, p, R, isClosing, emode);
20736
20792
  const liquidity = Number(totalDeposits) - Number(totalDebt);
20737
20793
  const marketUid = createMarketUid(chainId, lender, String(marketId));
20794
+ const identity = resolveDolomiteRowIdentity(
20795
+ chainId,
20796
+ lender,
20797
+ marketId,
20798
+ underlying,
20799
+ tokenList
20800
+ );
20738
20801
  result[marketUid] = {
20739
20802
  marketUid,
20740
- name: lenderShortName(lender) + " " + (meta?.symbol ?? ""),
20803
+ name: identity.name,
20741
20804
  poolId: underlying,
20742
20805
  underlying,
20743
- asset: meta,
20806
+ asset: identity.asset,
20744
20807
  marketId,
20745
20808
  totalDeposits,
20746
20809
  totalDebt,
@@ -20756,7 +20819,9 @@ var getDolomitePublicDataConverter = (lender, chainId, _prices, additionalYields
20756
20819
  variableBorrowRate,
20757
20820
  stableBorrowRate: 0,
20758
20821
  collateralActive: true,
20759
- intrinsicYield: additionalYields?.intrinsicYields?.[underlying] ?? 0,
20822
+ // By ASSET GROUP (the map's key), the underlying's for an isolation
20823
+ // market — see `isolation.ts`.
20824
+ intrinsicYield: additionalYields?.intrinsicYields?.[identity.yieldKey] ?? 0,
20760
20825
  rewards: [],
20761
20826
  config,
20762
20827
  closeFactor: 1,
@@ -20772,7 +20837,11 @@ var getDolomitePublicDataConverter = (lender, chainId, _prices, additionalYields
20772
20837
  // and the term sheet then printed a red "Currently unavailable" over
20773
20838
  // the collateral leg of a loop that builds and executes fine. The
20774
20839
  // borrow half is already carried correctly by `config[*].debtDisabled`.
20775
- depositsEnabled: true
20840
+ depositsEnabled: true,
20841
+ ...identity.isolation && {
20842
+ isolation: identity.isolation,
20843
+ allowedDebtMarketUids: identity.isolation.allowedDebtMarketUids
20844
+ }
20776
20845
  };
20777
20846
  });
20778
20847
  return { data: result, chainId };
@@ -29549,13 +29618,24 @@ function convertDolomiteSubgraphMarkets(raw, chainId, prices, additionalYields,
29549
29618
  isClosing,
29550
29619
  emode
29551
29620
  );
29552
- const marketUid = createMarketUid(chainId, LENDER, String(info.token.marketId));
29621
+ const marketUid = createMarketUid(
29622
+ chainId,
29623
+ LENDER,
29624
+ String(info.token.marketId)
29625
+ );
29626
+ const identity = resolveDolomiteRowIdentity(
29627
+ chainId,
29628
+ LENDER,
29629
+ info.token.marketId,
29630
+ underlying,
29631
+ tokenList
29632
+ );
29553
29633
  result[marketUid] = {
29554
29634
  marketUid,
29555
- name: lenderShortName(LENDER) + " " + (meta?.symbol ?? info.token.symbol ?? ""),
29635
+ name: meta ? identity.name : lenderShortName(LENDER) + " " + (info.token.symbol ?? ""),
29556
29636
  poolId: underlying,
29557
29637
  underlying,
29558
- asset: meta,
29638
+ asset: identity.asset,
29559
29639
  marketId: info.token.marketId,
29560
29640
  totalDeposits,
29561
29641
  totalDebt,
@@ -29571,14 +29651,22 @@ function convertDolomiteSubgraphMarkets(raw, chainId, prices, additionalYields,
29571
29651
  variableBorrowRate,
29572
29652
  stableBorrowRate: 0,
29573
29653
  collateralActive: true,
29574
- intrinsicYield: additionalYields?.intrinsicYields?.[underlying] ?? 0,
29654
+ // Keyed by ASSET GROUP like every other lender (the map is
29655
+ // `intrinsicYields[assetGroup]`, never by address) — and for an
29656
+ // isolation market by the UNDERLYING's group, since a dGM earns what
29657
+ // its GM earns.
29658
+ intrinsicYield: additionalYields?.intrinsicYields?.[identity.yieldKey] ?? 0,
29575
29659
  rewards: [],
29576
29660
  config,
29577
29661
  closeFactor: 1,
29578
29662
  borrowingEnabled: !isClosing,
29579
29663
  // Deposits are NOT gated by this flag — see the note in `publicCallParse`.
29580
29664
  // The subgraph names it `isBorrowingDisabled`, which says so outright.
29581
- depositsEnabled: true
29665
+ depositsEnabled: true,
29666
+ ...identity.isolation && {
29667
+ isolation: identity.isolation,
29668
+ allowedDebtMarketUids: identity.isolation.allowedDebtMarketUids
29669
+ }
29582
29670
  };
29583
29671
  }
29584
29672
  return { data: result, chainId };
@@ -31223,30 +31311,59 @@ var buildGearboxV3UserCall = (chainId, _lender, account) => {
31223
31311
  };
31224
31312
  var SUBGRAPH_CACHE_TTL_MS = 3e4;
31225
31313
  var SUBGRAPH_TIMEOUT_MS2 = 1e4;
31314
+ var DOLOMITE_ISO_ID_PREFIX = "iso:";
31315
+ function parseDolomiteSubAccountId(id) {
31316
+ if (id.startsWith(DOLOMITE_ISO_ID_PREFIX)) {
31317
+ const [, marketId, number] = id.split(":");
31318
+ return { isolationMarketId: marketId, number };
31319
+ }
31320
+ return { number: id };
31321
+ }
31322
+ function toDolomiteSubAccountId(number, isolationMarketId) {
31323
+ return isolationMarketId ? `${DOLOMITE_ISO_ID_PREFIX}${isolationMarketId}:${number}` : number;
31324
+ }
31226
31325
  var subgraphCache = /* @__PURE__ */ new Map();
31227
- function fetchDolomiteAccountNumbers(chainId, owner) {
31326
+ function fetchDolomiteSubAccounts(chainId, owner) {
31228
31327
  const key3 = `${chainId}:${owner.toLowerCase()}`;
31229
31328
  const cached = subgraphCache.get(key3);
31230
31329
  if (cached) return cached.promise;
31231
- const promise = fetchAccountNumbersFromSubgraph(chainId, owner).then((ns) => dedupeWithDefault(ns)).catch(() => ["0"]);
31232
- const timer = setTimeout(() => subgraphCache.delete(key3), SUBGRAPH_CACHE_TTL_MS);
31330
+ const promise = fetchSubAccountsFromSubgraph(chainId, owner).then((accounts) => withDefault(owner, accounts)).catch(() => withDefault(owner, []));
31331
+ const timer = setTimeout(
31332
+ () => subgraphCache.delete(key3),
31333
+ SUBGRAPH_CACHE_TTL_MS
31334
+ );
31233
31335
  subgraphCache.set(key3, { promise, timer });
31234
31336
  return promise;
31235
31337
  }
31236
- function dedupeWithDefault(numbers) {
31237
- const set = new Set(numbers);
31238
- set.add("0");
31239
- return [...set];
31338
+ async function fetchDolomiteAccountNumbers(chainId, owner) {
31339
+ const accounts = await fetchDolomiteSubAccounts(chainId, owner);
31340
+ return accounts.filter((a) => !a.isolationMarketId).map((a) => a.number);
31341
+ }
31342
+ function withDefault(owner, accounts) {
31343
+ const seen = /* @__PURE__ */ new Set();
31344
+ const out = [];
31345
+ const push2 = (a) => {
31346
+ if (seen.has(a.id)) return;
31347
+ seen.add(a.id);
31348
+ out.push(a);
31349
+ };
31350
+ push2({ id: "0", owner, number: "0" });
31351
+ accounts.forEach(push2);
31352
+ return out;
31240
31353
  }
31241
- async function fetchAccountNumbersFromSubgraph(chainId, owner) {
31354
+ async function fetchSubAccountsFromSubgraph(chainId, owner) {
31242
31355
  const url = DOLOMITE_SUBGRAPH_URLS[chainId];
31243
- if (!url) return ["0"];
31356
+ if (!url) return [];
31244
31357
  const query3 = `{
31245
31358
  marginAccounts(
31246
31359
  first: 1000
31247
- where: { user: "${owner.toLowerCase()}", or: [{ hasSupplyValue: true }, { hasBorrowValue: true }] }
31360
+ where: { and: [
31361
+ { effectiveUser: "${owner.toLowerCase()}" },
31362
+ { or: [{ hasSupplyValue: true }, { hasBorrowValue: true }] }
31363
+ ] }
31248
31364
  ) {
31249
31365
  accountNumber
31366
+ user { id isolationModeVault { marketId } }
31250
31367
  }
31251
31368
  }`;
31252
31369
  const controller = new AbortController();
@@ -31258,21 +31375,46 @@ async function fetchAccountNumbersFromSubgraph(chainId, owner) {
31258
31375
  body: JSON.stringify({ query: query3 }),
31259
31376
  signal: controller.signal
31260
31377
  });
31261
- if (!response.ok) return ["0"];
31378
+ if (!response.ok) {
31379
+ console.warn(
31380
+ `[dolomite] sub-account query for ${owner} on chain ${chainId} answered HTTP ${response.status}; serving the default account only`
31381
+ );
31382
+ return [];
31383
+ }
31262
31384
  const data = await response.json();
31385
+ if (data?.errors?.length) {
31386
+ console.warn(
31387
+ `[dolomite] sub-account query for ${owner} on chain ${chainId} rejected: ${data.errors.map((e) => e.message).join("; ")}; serving the default account only`
31388
+ );
31389
+ return [];
31390
+ }
31263
31391
  const accounts = data?.data?.marginAccounts;
31264
- if (!accounts || accounts.length === 0) return ["0"];
31265
- return accounts.map((a) => String(a.accountNumber));
31392
+ if (!accounts || accounts.length === 0) return [];
31393
+ const lowerOwner = owner.toLowerCase();
31394
+ return accounts.map((a) => {
31395
+ const number = String(a.accountNumber);
31396
+ const accountOwner = a.user.id.toLowerCase();
31397
+ const isolationMarketId = accountOwner !== lowerOwner ? a.user.isolationModeVault?.marketId : void 0;
31398
+ return {
31399
+ id: toDolomiteSubAccountId(number, isolationMarketId),
31400
+ owner: accountOwner,
31401
+ number,
31402
+ isolationMarketId
31403
+ };
31404
+ });
31266
31405
  } finally {
31267
31406
  clearTimeout(timeout);
31268
31407
  }
31269
31408
  }
31270
31409
  var RESOLVED_STORE_TTL_MS2 = 6e4;
31271
31410
  var resolvedStore = /* @__PURE__ */ new Map();
31411
+ function getResolvedDolomiteSubAccounts(chainId, account) {
31412
+ return resolvedStore.get(`${chainId}:${account.toLowerCase()}`)?.accounts;
31413
+ }
31272
31414
  function getResolvedDolomiteAccountNumbers(chainId, account) {
31273
- return resolvedStore.get(`${chainId}:${account.toLowerCase()}`)?.numbers;
31415
+ return getResolvedDolomiteSubAccounts(chainId, account)?.map((a) => a.id);
31274
31416
  }
31275
- function storeResolvedNumbers(chainId, account, numbers) {
31417
+ function storeResolved(chainId, account, accounts) {
31276
31418
  const key3 = `${chainId}:${account.toLowerCase()}`;
31277
31419
  const existing = resolvedStore.get(key3);
31278
31420
  if (existing) clearTimeout(existing.timer);
@@ -31280,17 +31422,20 @@ function storeResolvedNumbers(chainId, account, numbers) {
31280
31422
  () => resolvedStore.delete(key3),
31281
31423
  RESOLVED_STORE_TTL_MS2
31282
31424
  );
31283
- resolvedStore.set(key3, { numbers, timer });
31425
+ resolvedStore.set(key3, { accounts, timer });
31284
31426
  }
31285
31427
  var buildDolomiteUserCall = async (chainId, _lender, account, accountNumbers) => {
31286
31428
  const margin = dolomiteConfigs()?.[chainId]?.dolomiteMargin;
31287
31429
  if (!margin) return [];
31288
- const numbers = accountNumbers ?? await fetchDolomiteAccountNumbers(chainId, account);
31289
- storeResolvedNumbers(chainId, account, numbers);
31290
- return numbers.map((number) => ({
31430
+ const accounts = accountNumbers ? withDefault(
31431
+ account,
31432
+ accountNumbers.map((n) => ({ id: n, owner: account, number: n }))
31433
+ ) : await fetchDolomiteSubAccounts(chainId, account);
31434
+ storeResolved(chainId, account, accounts);
31435
+ return accounts.map(({ owner, number }) => ({
31291
31436
  address: margin,
31292
31437
  name: "getAccountBalances",
31293
- params: [{ owner: account, number }]
31438
+ params: [{ owner, number }]
31294
31439
  }));
31295
31440
  };
31296
31441
  var midnightMarketCallCount = (collateralCount) => 2 + collateralCount;
@@ -33961,7 +34106,7 @@ function createMorphoEntryFromMarketWithLens(balanceInfo, metaMap, chainId, lend
33961
34106
  // src/lending/user-data/utils/createEulerMultiAccountTypeUserState.ts
33962
34107
  function createEulerMultiAccountTypeUserState(payload, lenderData, histData) {
33963
34108
  const subAccountIndexes = Object.keys(payload.lendingPositions ?? {});
33964
- const marketUids = getMarketUidsFromMeta(lenderData);
34109
+ const marketUids2 = getMarketUidsFromMeta(lenderData);
33965
34110
  const { chainId, account } = payload;
33966
34111
  const data = [];
33967
34112
  for (let j = 0; j < subAccountIndexes.length; j++) {
@@ -33984,8 +34129,8 @@ function createEulerMultiAccountTypeUserState(payload, lenderData, histData) {
33984
34129
  let collateral = 0;
33985
34130
  let borrowDiscountedCollateral = 0;
33986
34131
  let adjustedDebt = 0;
33987
- for (let i = 0; i < marketUids.length; i++) {
33988
- const marketUid = marketUids[i];
34132
+ for (let i = 0; i < marketUids2.length; i++) {
34133
+ const marketUid = marketUids2[i];
33989
34134
  if (!lenderData?.[marketUid] || !payload.lendingPositions[subAccountIndex][marketUid])
33990
34135
  continue;
33991
34136
  const pos = payload.lendingPositions[subAccountIndex][marketUid];
@@ -34044,8 +34189,8 @@ function createEulerMultiAccountTypeUserState(payload, lenderData, histData) {
34044
34189
  rewards: {}
34045
34190
  };
34046
34191
  const creditLine = Math.max(0, borrowDiscountedCollateral - adjustedDebt);
34047
- for (let i = 0; i < marketUids.length; i++) {
34048
- const marketUid = marketUids[i];
34192
+ for (let i = 0; i < marketUids2.length; i++) {
34193
+ const marketUid = marketUids2[i];
34049
34194
  if (!lenderData?.[marketUid]) continue;
34050
34195
  const { configs, flags, borrowLiquidity, withdrawLiquidity } = lenderData[marketUid];
34051
34196
  const config = configs?.[configKey];
@@ -35107,8 +35252,10 @@ var getGearboxV3UserDataConverter = (_lender, chainId, account, meta) => {
35107
35252
  ];
35108
35253
  };
35109
35254
  var getDolomiteUserDataConverter = (lender, chainId, account, metaMap) => {
35110
- const numbers = getResolvedDolomiteAccountNumbers(chainId, account) ?? ["0"];
35111
- const expectedNumberOfCalls = numbers.length;
35255
+ const subAccounts = getResolvedDolomiteSubAccounts(chainId, account) ?? [
35256
+ { id: "0", owner: account, number: "0" }
35257
+ ];
35258
+ const expectedNumberOfCalls = subAccounts.length;
35112
35259
  const emode = dolomiteEmode()?.[chainId];
35113
35260
  return [
35114
35261
  (_data) => {
@@ -35118,7 +35265,7 @@ var getDolomiteUserDataConverter = (lender, chainId, account, metaMap) => {
35118
35265
  const modes = {};
35119
35266
  _data.forEach((res, i) => {
35120
35267
  if (isFailedCall(res)) return;
35121
- const id = numbers[i];
35268
+ const id = subAccounts[i].id;
35122
35269
  histData[id] = { totalDebt24h: 0, totalDeposits24h: 0 };
35123
35270
  lendingPositions[id] = {};
35124
35271
  const marketIds = res?.[0 /* markets */] ?? [];
@@ -42630,7 +42777,7 @@ function unflattenLenderData(pools) {
42630
42777
  }
42631
42778
  return result;
42632
42779
  }
42633
- var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient20, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, retries = 3, logs = false, concurrency = 1, permanentFailures, onEndpointFailure) => {
42780
+ var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient21, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, retries = 3, logs = false, concurrency = 1, permanentFailures, onEndpointFailure) => {
42634
42781
  const queries = organizeUserQueries(queriesRaw);
42635
42782
  const builtCalls = await Promise.all(
42636
42783
  queries.map(async (query3) => {
@@ -42640,7 +42787,7 @@ var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient20, allowF
42640
42787
  query3.lender,
42641
42788
  query3.account,
42642
42789
  query3.params,
42643
- getEvmClient20
42790
+ getEvmClient21
42644
42791
  );
42645
42792
  return callData.map((call) => ({ call, abi: call.abi ?? abi }));
42646
42793
  })
@@ -42650,7 +42797,7 @@ var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient20, allowF
42650
42797
  chainId,
42651
42798
  calls.map((call) => call.abi),
42652
42799
  calls.map((call) => call.call),
42653
- getEvmClient20,
42800
+ getEvmClient21,
42654
42801
  concurrency,
42655
42802
  retries,
42656
42803
  allowFailure,
@@ -45913,6 +46060,73 @@ var tavaxFetcher = {
45913
46060
  )
45914
46061
  })
45915
46062
  };
46063
+ var CHAIN_ID7 = "14";
46064
+ var VAULT2 = "0x4c18ff3c89632c3dd62e796c0afa5c07c4c1b2b3";
46065
+ var ONE_E187 = 10n ** 18n;
46066
+ var WINDOW_SECONDS6 = 7 * 24 * 60 * 60;
46067
+ var VAULT_ABI = [
46068
+ {
46069
+ name: "convertToAssets",
46070
+ type: "function",
46071
+ stateMutability: "view",
46072
+ inputs: [{ type: "uint256", name: "shares" }],
46073
+ outputs: [{ type: "uint256" }]
46074
+ },
46075
+ {
46076
+ name: "totalAssetsAt",
46077
+ type: "function",
46078
+ stateMutability: "view",
46079
+ inputs: [{ type: "uint48", name: "timestamp" }],
46080
+ outputs: [{ type: "uint256" }]
46081
+ },
46082
+ {
46083
+ name: "totalSupplyAt",
46084
+ type: "function",
46085
+ stateMutability: "view",
46086
+ inputs: [{ type: "uint48", name: "timestamp" }],
46087
+ outputs: [{ type: "uint256" }]
46088
+ }
46089
+ ];
46090
+ var computeApr6 = async () => {
46091
+ const client = getEvmClient(CHAIN_ID7);
46092
+ const head = await client.getBlockNumber();
46093
+ const headBlock = await client.getBlock({ blockNumber: head });
46094
+ const then = Number(headBlock.timestamp) - WINDOW_SECONDS6;
46095
+ const [rateNow, assetsThen, supplyThen] = await Promise.all([
46096
+ client.readContract({
46097
+ address: VAULT2,
46098
+ abi: VAULT_ABI,
46099
+ functionName: "convertToAssets",
46100
+ args: [ONE_E187]
46101
+ }),
46102
+ client.readContract({
46103
+ address: VAULT2,
46104
+ abi: VAULT_ABI,
46105
+ functionName: "totalAssetsAt",
46106
+ args: [then]
46107
+ }),
46108
+ client.readContract({
46109
+ address: VAULT2,
46110
+ abi: VAULT_ABI,
46111
+ functionName: "totalSupplyAt",
46112
+ args: [then]
46113
+ })
46114
+ ]);
46115
+ if (supplyThen === 0n) throw new Error("stXRP: zero historical totalSupply");
46116
+ const rateThen = assetsThen * ONE_E187 / supplyThen;
46117
+ if (rateNow < ONE_E187 || rateThen < ONE_E187 || rateNow < rateThen) {
46118
+ throw new Error(`stXRP: invalid rates (now=${rateNow}, then=${rateThen})`);
46119
+ }
46120
+ const apr = annualizeRateDeltaPercent(rateNow, rateThen, WINDOW_SECONDS6);
46121
+ if (!Number.isFinite(apr) || apr < 0) {
46122
+ throw new Error(`stXRP: bad apr ${apr}`);
46123
+ }
46124
+ return apr;
46125
+ };
46126
+ var stxrpFetcher = {
46127
+ label: "STXRP",
46128
+ fetch: async () => ({ "Firelight stXRP::stXRP": await computeApr6() })
46129
+ };
45916
46130
 
45917
46131
  // src/vaults/lst/registry.ts
45918
46132
  var LST_REGISTRY = {
@@ -47425,6 +47639,81 @@ var LST_REGISTRY = {
47425
47639
  isNativeUnderlying: false,
47426
47640
  withdrawalMode: "dex-only"
47427
47641
  }
47642
+ ],
47643
+ // Flare (14) — Firelight stXRP, the XRP cover-vault share token.
47644
+ "14": [
47645
+ {
47646
+ // Firelight stXRP — ERC-4626 vault share over FXRP (6-dec / 6-dec).
47647
+ // Non-rebasing: coverage premiums stream into the vault and compound
47648
+ // into `convertToAssets`; supply does not expand. Withdrawal is
47649
+ // period-based and delayed — `withdraw`/`redeem` create a
47650
+ // `WithdrawRequest` (shares burned immediately), `claimWithdraw` pays
47651
+ // out after the period ends (1–2 days with 1-day periods, 30–60 days
47652
+ // at feature-complete). No same-block redemption, so instant
47653
+ // `liquidity` is 0. Principal is slashable pro-rata after the
47654
+ // protocol's First-Loss Buffer.
47655
+ address: "0x4c18ff3c89632c3dd62e796c0afa5c07c4c1b2b3",
47656
+ underlying: "0xad552a648c74d49e10027ab8a618a3ad4901c5be",
47657
+ // FXRP
47658
+ symbol: "stXRP",
47659
+ brand: "Firelight",
47660
+ decimals: 6,
47661
+ underlyingDecimals: 6,
47662
+ reader: "erc4626",
47663
+ isErc4626: true,
47664
+ isRebasing: false,
47665
+ isMintable: true,
47666
+ isNativeUnderlying: false,
47667
+ mintContract: "0x4c18ff3c89632c3dd62e796c0afa5c07c4c1b2b3",
47668
+ mintInputAsset: "0xad552a648c74d49e10027ab8a618a3ad4901c5be",
47669
+ // FXRP
47670
+ withdrawalMode: "queued",
47671
+ // APR from the on-chain rate delta (no public APY API yet). Key is the
47672
+ // canonical token-list assetGroup — stXRP carries its own group.
47673
+ yieldFetcher: stxrpFetcher,
47674
+ yieldKey: "Firelight stXRP::stXRP"
47675
+ },
47676
+ {
47677
+ // SparkDEX stFLR — Lido-style rebasing share token over native FLR.
47678
+ // Deposit via `submit()` (native FLR) or `submitWrapped()` (WFLR);
47679
+ // withdrawal via `requestWithdrawal()`/`claimWithdrawal()` (queued) or
47680
+ // `instantWithdrawal()` (fee). `brand` is the disambiguator against
47681
+ // Sceptre's sFLR — both wrap FLR.
47682
+ address: "0x0988c6ba244a90c07a917ebe609eb3264be716ff",
47683
+ underlying: "0x0000000000000000000000000000000000000000",
47684
+ // native FLR
47685
+ symbol: "stFLR",
47686
+ brand: "SparkDEX",
47687
+ decimals: 18,
47688
+ reader: "flarePooledFlr",
47689
+ isErc4626: false,
47690
+ isRebasing: true,
47691
+ isMintable: true,
47692
+ isNativeUnderlying: true,
47693
+ mintContract: "0x0988c6ba244a90c07a917ebe609eb3264be716ff",
47694
+ mintInputAsset: "native",
47695
+ withdrawalMode: "queued"
47696
+ },
47697
+ {
47698
+ // Sceptre sFLR — Lido-style rebasing share token over native FLR
47699
+ // (native Flare staking). Deposit via `deposit()` (native FLR);
47700
+ // withdrawal via unlock requests (`cooldownPeriod()`) or
47701
+ // `instantRedeem()` (fee). Distinct `brand` from SparkDEX stFLR.
47702
+ address: "0x12e605bc104e93b45e1ad99f9e555f659051c2bb",
47703
+ underlying: "0x0000000000000000000000000000000000000000",
47704
+ // native FLR
47705
+ symbol: "sFLR",
47706
+ brand: "Sceptre",
47707
+ decimals: 18,
47708
+ reader: "flarePooledFlr",
47709
+ isErc4626: false,
47710
+ isRebasing: true,
47711
+ isMintable: true,
47712
+ isNativeUnderlying: true,
47713
+ mintContract: "0x12e605bc104e93b45e1ad99f9e555f659051c2bb",
47714
+ mintInputAsset: "native",
47715
+ withdrawalMode: "queued"
47716
+ }
47428
47717
  ]
47429
47718
  };
47430
47719
  var getLstRegistry = (chainId) => LST_REGISTRY[chainId] ?? [];
@@ -47810,7 +48099,7 @@ var sparkSavingsFetcher = {
47810
48099
  return out;
47811
48100
  }
47812
48101
  };
47813
- var CHAIN_ID7 = Chain.ETHEREUM_MAINNET;
48102
+ var CHAIN_ID8 = Chain.ETHEREUM_MAINNET;
47814
48103
  var SREUSD = "0x557ab1e003951a73c12d16f0fea8490e39c33c35";
47815
48104
  var SREUSD_KEY = "SREUSD";
47816
48105
  var SREUSD_GROUP_KEY = "Savings reUSD::sreUSD";
@@ -47818,7 +48107,7 @@ var sreusdSavingsFetcher = {
47818
48107
  label: "SREUSD",
47819
48108
  fetch: async () => {
47820
48109
  const results = await multicallRetryUniversal({
47821
- chain: CHAIN_ID7,
48110
+ chain: CHAIN_ID8,
47822
48111
  abi: LINEAR_REWARDS_APR_ABI,
47823
48112
  calls: linearRewardsCalls(SREUSD),
47824
48113
  allowFailure: false
@@ -48102,10 +48391,10 @@ var toriFetcher = {
48102
48391
  return { [STRUSD_KEY]: apr, [STRUSD_GROUP_KEY]: apr };
48103
48392
  }
48104
48393
  };
48105
- var CHAIN_ID8 = Chain.ETHEREUM_MAINNET;
48394
+ var CHAIN_ID9 = Chain.ETHEREUM_MAINNET;
48106
48395
  var SNUSD = "0x08efcc2f3e61185d0ea7f8830b3fec9bfa2ee313";
48107
48396
  var YEAR_SECONDS8 = 31536000n;
48108
- var ONE_E187 = 10n ** 18n;
48397
+ var ONE_E188 = 10n ** 18n;
48109
48398
  var SNUSD_KEY = "SNUSD";
48110
48399
  var SNUSD_GROUP_KEY = "Staked NUSD::sNUSD";
48111
48400
  var SNUSD_LEGACY_GROUP_KEY = "sNUSD::Staked NUSD";
@@ -48141,7 +48430,7 @@ var STAKED_NUSD_ABI = [
48141
48430
  ];
48142
48431
  var fetchSnusdAprOnChain = async () => {
48143
48432
  const [vestingAmount, lastDistribution, vestingPeriod, totalAssets] = await multicallRetryUniversal({
48144
- chain: CHAIN_ID8,
48433
+ chain: CHAIN_ID9,
48145
48434
  abi: STAKED_NUSD_ABI,
48146
48435
  calls: [
48147
48436
  { address: SNUSD, name: "vestingAmount", params: [] },
@@ -48156,7 +48445,7 @@ var fetchSnusdAprOnChain = async () => {
48156
48445
  const window = elapsed > vestingPeriod ? elapsed : vestingPeriod;
48157
48446
  if (window <= 0n) return 0;
48158
48447
  const perSecond = vestingAmount / window;
48159
- return Number(perSecond * YEAR_SECONDS8 * ONE_E187 / totalAssets) / 1e16;
48448
+ return Number(perSecond * YEAR_SECONDS8 * ONE_E188 / totalAssets) / 1e16;
48160
48449
  };
48161
48450
  var snusdFetcher = {
48162
48451
  label: "SNUSD",
@@ -48169,13 +48458,13 @@ var snusdFetcher = {
48169
48458
  };
48170
48459
  }
48171
48460
  };
48172
- var CHAIN_ID9 = Chain.ETHEREUM_MAINNET;
48461
+ var CHAIN_ID10 = Chain.ETHEREUM_MAINNET;
48173
48462
  var WITRY = "0xe346c29b5b60ef870b9724c57ccfbbc631e47dee";
48174
48463
  var BRIX_APY_URL = "https://brix.money/api/witry/apy-snapshot?windowDays=30&method=realized";
48175
48464
  var BRIX_DEFILLAMA_POOL = "da8c4ac9-733d-4a98-85a5-83b76b7e84d1";
48176
48465
  var VESTING_PERIOD = 248400n;
48177
48466
  var YEAR_SECONDS9 = 31536000n;
48178
- var ONE_E188 = 10n ** 18n;
48467
+ var ONE_E189 = 10n ** 18n;
48179
48468
  var WITRY_KEY = "WITRY";
48180
48469
  var WITRY_GROUP_KEY = "Wrapped iTRY::WITRY";
48181
48470
  var STAKED_ITRY_ABI = [
@@ -48213,7 +48502,7 @@ var fetchBrixAprPercent = async () => {
48213
48502
  };
48214
48503
  var fetchWitryAprOnChain = async () => {
48215
48504
  const [vestingAmount, lastDistribution, totalAssets] = await multicallRetryUniversal({
48216
- chain: CHAIN_ID9,
48505
+ chain: CHAIN_ID10,
48217
48506
  abi: STAKED_ITRY_ABI,
48218
48507
  calls: [
48219
48508
  { address: WITRY, name: "vestingAmount", params: [] },
@@ -48227,7 +48516,7 @@ var fetchWitryAprOnChain = async () => {
48227
48516
  const window = elapsed > VESTING_PERIOD ? elapsed : VESTING_PERIOD;
48228
48517
  if (window <= 0n) throw new Error("wiTRY: bad vesting window");
48229
48518
  const perSecond = vestingAmount / window;
48230
- const apr = Number(perSecond * YEAR_SECONDS9 * ONE_E188 / totalAssets) / 1e16;
48519
+ const apr = Number(perSecond * YEAR_SECONDS9 * ONE_E189 / totalAssets) / 1e16;
48231
48520
  if (!Number.isFinite(apr) || apr <= 0) throw new Error("wiTRY: no yield");
48232
48521
  return apr;
48233
48522
  };
@@ -48255,13 +48544,13 @@ var capFetcher = {
48255
48544
  return { [STCUSD_KEY]: apr, [STCUSD_BRIDGED_GROUP_KEY]: apr };
48256
48545
  }
48257
48546
  };
48258
- var CHAIN_ID10 = "1";
48547
+ var CHAIN_ID11 = "1";
48259
48548
  var WSTGBP = "0x57c3571f10767e49c9d7b60feb6c67804783b7ae";
48260
48549
  var WREN_NAV_GROWTH_URL = "https://wstgbp.com/api/nav-growth";
48261
- var ONE_E189 = 10n ** 18n;
48262
- var WINDOW_SECONDS6 = 90 * 24 * 60 * 60;
48550
+ var ONE_E1810 = 10n ** 18n;
48551
+ var WINDOW_SECONDS7 = 90 * 24 * 60 * 60;
48263
48552
  var BLOCK_TIME_SECONDS5 = 12;
48264
- var WINDOW_BLOCKS5 = BigInt(Math.floor(WINDOW_SECONDS6 / BLOCK_TIME_SECONDS5));
48553
+ var WINDOW_BLOCKS5 = BigInt(Math.floor(WINDOW_SECONDS7 / BLOCK_TIME_SECONDS5));
48265
48554
  var MAX_RPC_TRIES5 = 2;
48266
48555
  var ONCHAIN_DEADLINE_MS = 12e3;
48267
48556
  var WSTGBP_KEY = "WSTGBP";
@@ -48298,7 +48587,7 @@ var computeAprOnChain = async () => {
48298
48587
  for (let rpcId = 0; rpcId < MAX_RPC_TRIES5; rpcId++) {
48299
48588
  if (Date.now() > deadline) break;
48300
48589
  try {
48301
- const client = getEvmClient(CHAIN_ID10, rpcId);
48590
+ const client = getEvmClient(CHAIN_ID11, rpcId);
48302
48591
  const head = await client.getBlockNumber();
48303
48592
  const pastBlock = head > WINDOW_BLOCKS5 ? head - WINDOW_BLOCKS5 : 0n;
48304
48593
  const [navNow, navThen, headBlock, thenBlock] = await Promise.all([
@@ -48307,7 +48596,7 @@ var computeAprOnChain = async () => {
48307
48596
  client.getBlock({ blockNumber: head }),
48308
48597
  client.getBlock({ blockNumber: pastBlock })
48309
48598
  ]);
48310
- if (navNow < ONE_E189 || navThen < ONE_E189) {
48599
+ if (navNow < ONE_E1810 || navThen < ONE_E1810) {
48311
48600
  throw new Error("wstGBP: navprice below par \u2014 pruned or bad read");
48312
48601
  }
48313
48602
  if (navNow < navThen) {
@@ -48329,13 +48618,13 @@ var wrenFetcher = {
48329
48618
  return { [WSTGBP_KEY]: apr, [WSTGBP_GROUP_KEY]: apr };
48330
48619
  }
48331
48620
  };
48332
- var CHAIN_ID11 = Chain.ETHEREUM_MAINNET;
48621
+ var CHAIN_ID12 = Chain.ETHEREUM_MAINNET;
48333
48622
  var APYUSD = "0x38eeb52f0771140d10c4e9a9a72349a329fe8a6a";
48334
48623
  var APYX_LINEAR_VEST = "0x0d62b4cc02b4b51ed19ddf41d7a7979cf394c99f";
48335
48624
  var APYX_DISCOVER_URL = "https://api.apyx.fi/v1/rewards/seasons/2/discover";
48336
48625
  var APYX_DEFILLAMA_POOL = "cb6139f9-4a68-4efd-8245-0312a92aee55";
48337
48626
  var YEAR_SECONDS10 = 31536000n;
48338
- var ONE_E1810 = 10n ** 18n;
48627
+ var ONE_E1811 = 10n ** 18n;
48339
48628
  var APYUSD_KEY = "APYUSD";
48340
48629
  var APYUSD_GROUP_KEY = "apyUSD::APYUSD";
48341
48630
  var APYUSD_LEGACY_GROUP_KEY = "apyUSD::apyUSD";
@@ -48364,7 +48653,7 @@ var APYX_READ_ABI = [
48364
48653
  ];
48365
48654
  var fetchApyusdAprOnChain = async () => {
48366
48655
  const [totalAssets, unvested, periodRemaining] = await multicallRetryUniversal({
48367
- chain: CHAIN_ID11,
48656
+ chain: CHAIN_ID12,
48368
48657
  abi: APYX_READ_ABI,
48369
48658
  calls: [
48370
48659
  { address: APYUSD, name: "totalAssets", params: [] },
@@ -48381,7 +48670,7 @@ var fetchApyusdAprOnChain = async () => {
48381
48670
  throw new Error("apyx vesting state empty");
48382
48671
  }
48383
48672
  const perSecond = unvested / periodRemaining;
48384
- return Number(perSecond * YEAR_SECONDS10 * ONE_E1810 / totalAssets) / 1e16;
48673
+ return Number(perSecond * YEAR_SECONDS10 * ONE_E1811 / totalAssets) / 1e16;
48385
48674
  };
48386
48675
  var fetchApyusdApyFromApi = async () => {
48387
48676
  const res = await fetch(APYX_DISCOVER_URL, {
@@ -48500,12 +48789,12 @@ var strataFetcher = {
48500
48789
  return out;
48501
48790
  }
48502
48791
  };
48503
- var CHAIN_ID12 = "1";
48792
+ var CHAIN_ID13 = "1";
48504
48793
  var SCRVUSD = "0x0655977feb2f289a4ab78af67bab0d17aab84367";
48505
- var ONE_E1811 = 10n ** 18n;
48506
- var WINDOW_SECONDS7 = 30 * 24 * 60 * 60;
48794
+ var ONE_E1812 = 10n ** 18n;
48795
+ var WINDOW_SECONDS8 = 30 * 24 * 60 * 60;
48507
48796
  var BLOCK_TIME_SECONDS6 = 12;
48508
- var WINDOW_BLOCKS6 = BigInt(Math.floor(WINDOW_SECONDS7 / BLOCK_TIME_SECONDS6));
48797
+ var WINDOW_BLOCKS6 = BigInt(Math.floor(WINDOW_SECONDS8 / BLOCK_TIME_SECONDS6));
48509
48798
  var SERIES_SPAN_SECONDS = 45 * 24 * 60 * 60;
48510
48799
  var MAX_RPC_TRIES6 = 2;
48511
48800
  var ONCHAIN_DEADLINE_MS2 = 12e3;
@@ -48540,7 +48829,7 @@ var fetchCurveSeriesAprPercent = async (nowSeconds) => {
48540
48829
  ).sort((a, b) => a.timestamp - b.timestamp);
48541
48830
  if (points.length < 2) throw new Error("scrvUSD: series too short");
48542
48831
  const last = points[points.length - 1];
48543
- const base = [...points].reverse().find((p) => p.timestamp <= last.timestamp - WINDOW_SECONDS7);
48832
+ const base = [...points].reverse().find((p) => p.timestamp <= last.timestamp - WINDOW_SECONDS8);
48544
48833
  if (!base) throw new Error("scrvUSD: series does not span the window");
48545
48834
  const elapsed = last.timestamp - base.timestamp;
48546
48835
  if (elapsed <= 0) throw new Error("scrvUSD: non-positive window");
@@ -48550,7 +48839,7 @@ var readRateAt5 = (client, blockNumber) => client.readContract({
48550
48839
  address: SCRVUSD,
48551
48840
  abi: CONVERT_TO_ASSETS_ABI4,
48552
48841
  functionName: "convertToAssets",
48553
- args: [ONE_E1811],
48842
+ args: [ONE_E1812],
48554
48843
  ...blockNumber !== void 0 ? { blockNumber } : {}
48555
48844
  });
48556
48845
  var computeAprOnChain2 = async () => {
@@ -48559,7 +48848,7 @@ var computeAprOnChain2 = async () => {
48559
48848
  for (let rpcId = 0; rpcId < MAX_RPC_TRIES6; rpcId++) {
48560
48849
  if (Date.now() > deadline) break;
48561
48850
  try {
48562
- const client = getEvmClient(CHAIN_ID12, rpcId);
48851
+ const client = getEvmClient(CHAIN_ID13, rpcId);
48563
48852
  const head = await client.getBlockNumber();
48564
48853
  const pastBlock = head > WINDOW_BLOCKS6 ? head - WINDOW_BLOCKS6 : 0n;
48565
48854
  const [rateNow, rateThen, headBlock, thenBlock] = await Promise.all([
@@ -48568,7 +48857,7 @@ var computeAprOnChain2 = async () => {
48568
48857
  client.getBlock({ blockNumber: head }),
48569
48858
  client.getBlock({ blockNumber: pastBlock })
48570
48859
  ]);
48571
- if (rateNow < ONE_E1811 || rateThen < ONE_E1811) {
48860
+ if (rateNow < ONE_E1812 || rateThen < ONE_E1812) {
48572
48861
  throw new Error("scrvUSD: share price below par \u2014 pruned or bad read");
48573
48862
  }
48574
48863
  const elapsed = Number(headBlock.timestamp - thenBlock.timestamp);
@@ -48598,7 +48887,7 @@ var YEAR_SECONDS11 = 31536e3;
48598
48887
  var STRC_UNIT = 1e6;
48599
48888
  var SUSDAT_KEY = "Saturn sUSDat::SUSDAT";
48600
48889
  var SUSDAT_BRIDGED_KEY = "Staked Saturn USD::sUSDat";
48601
- var VAULT_ABI = [
48890
+ var VAULT_ABI2 = [
48602
48891
  {
48603
48892
  name: "vestingAmount",
48604
48893
  type: "function",
@@ -48658,7 +48947,7 @@ var decodeStrcPrice = (cell) => {
48658
48947
  var computeIncomeApr = async () => {
48659
48948
  const [vestingAmount, vestingPeriod, totalAssets, oracle] = await multicallRetryUniversal({
48660
48949
  chain: Chain.ETHEREUM_MAINNET,
48661
- abi: VAULT_ABI,
48950
+ abi: VAULT_ABI2,
48662
48951
  calls: [
48663
48952
  { address: SUSDAT, name: "vestingAmount", params: [] },
48664
48953
  { address: SUSDAT, name: "vestingPeriod", params: [] },
@@ -48775,7 +49064,7 @@ var sthusdFetcher = {
48775
49064
  };
48776
49065
  }
48777
49066
  };
48778
- var CHAIN_ID13 = Chain.ETHEREUM_MAINNET;
49067
+ var CHAIN_ID14 = Chain.ETHEREUM_MAINNET;
48779
49068
  var HUMA_PST_FEED = "0x4be50be32db1510240d542f77c5b36ca0d0965e6";
48780
49069
  var HUMA_PST_KEY = "HUMA::PST";
48781
49070
  var HUMA_PST_GROUP_KEY = "PayFi Strategy Token::PST";
@@ -48852,7 +49141,7 @@ var windowAprFromRounds = (latest, candidates, nowSeconds, windowSeconds = HUMA_
48852
49141
  };
48853
49142
  var fetchPstAprOnChain = async () => {
48854
49143
  const [latestRaw] = await multicallRetryUniversal({
48855
- chain: CHAIN_ID13,
49144
+ chain: CHAIN_ID14,
48856
49145
  abi: FEED_ABI,
48857
49146
  calls: [{ address: HUMA_PST_FEED, name: "latestRoundData", params: [] }],
48858
49147
  allowFailure: false
@@ -48874,7 +49163,7 @@ var fetchPstAprOnChain = async () => {
48874
49163
  )
48875
49164
  ];
48876
49165
  const results = await multicallRetryUniversal({
48877
- chain: CHAIN_ID13,
49166
+ chain: CHAIN_ID14,
48878
49167
  abi: FEED_ABI,
48879
49168
  calls: probeRounds.map((r) => ({
48880
49169
  address: HUMA_PST_FEED,
@@ -51250,20 +51539,19 @@ var stEurGroup = {
51250
51539
  chains: {
51251
51540
  "1": {
51252
51541
  address: "0x004626a008b1acdc4c74ab51644093b155e59a23",
51253
- underlying: "0x1abaea1f7c830bd89acc67ec4af516284b1bc33c"
51542
+ underlying: "0x1a7e4e63778b4f12a199c062f3efdd288afcbce8"
51254
51543
  },
51255
51544
  "42161": {
51256
51545
  address: "0x004626a008b1acdc4c74ab51644093b155e59a23",
51257
- underlying: "0x1abaea1f7c830bd89acc67ec4af516284b1bc33c"
51546
+ underlying: "0xfa5ed56a203466cbbc2430a43c66b9d8723528e7"
51258
51547
  },
51259
- // Gnosis — `0x1aBa…` EURA exists on chain 100 per Angle docs.
51260
51548
  "100": {
51261
51549
  address: "0x004626a008b1acdc4c74ab51644093b155e59a23",
51262
- underlying: "0x1abaea1f7c830bd89acc67ec4af516284b1bc33c"
51550
+ underlying: "0x4b1e2c2762667331bc91648052f646d1b0d35984"
51263
51551
  },
51264
51552
  "59144": {
51265
51553
  address: "0x004626a008b1acdc4c74ab51644093b155e59a23",
51266
- underlying: "0x1abaea1f7c830bd89acc67ec4af516284b1bc33c"
51554
+ underlying: "0x1a7e4e63778b4f12a199c062f3efdd288afcbce8"
51267
51555
  }
51268
51556
  }
51269
51557
  };
@@ -52369,7 +52657,12 @@ var SINGLE_CHAIN_ENTRIES = {
52369
52657
  },
52370
52658
  {
52371
52659
  address: "0x1202f5c7b4b9e47a1a484e8b270be34dbbc75055",
52372
- underlying: "0x6c8984bc7dbbedaf4f6b2fd766f16ebb7d10aab4",
52660
+ // `asset()` is USR itself: wstUSR is a 4626 over USR (deposit USR, get
52661
+ // wstUSR) that holds the rebasing stUSR internally. The row carried
52662
+ // stUSR `0x6c8984bc…` as its underlying until 2026-09-18, which would
52663
+ // have had the generic deposit route pull a token the vault never asks
52664
+ // for.
52665
+ underlying: "0x66a1e37c9b0eaddca17d3662d6c05f4decf3e110",
52373
52666
  symbol: "wstUSR",
52374
52667
  brand: "Resolv",
52375
52668
  description: "USR is Resolv's delta-neutral synthetic dollar (ETH collateral hedged with perpetual shorts; the RLP insurance layer absorbs losses first). stUSR stakes it and rebases; wstUSR is the non-rebasing wrapper. Instant unwrap with no cooldown.",
@@ -53483,32 +53776,32 @@ var fetchGmxRawData = async (chainId, period, apiUrlOverride) => {
53483
53776
  };
53484
53777
 
53485
53778
  // src/yields/intrinsic/fetchers/gmx.ts
53486
- var GMX_CHAIN = "42161";
53487
- var gmx_eth_usd = "GMX Market ETH/USD::GM [WETH-USDC]";
53488
- var gmx_btc_usd = "GMX Market BTC/USD::GM [WBTC-USDC]";
53489
- var glv_wbtc_usdc = "GMX Liquidity Vault [WBTC-USDC]::GLV [WBTC-USDC]";
53490
- var glv_weth_usdc = "GMX Liquidity Vault [WETH-USDC]::GLV [WETH-USDC]";
53491
- var gmx_eth_usd_address = "0x70d95587d40a2caf56bd97485ab3eec10bee6336";
53492
- var gmx_btc_usd_address = "0x47c031236e19d024b42f8ae6780e44a573170703";
53493
- var glv_wbtc_usdc_address = "0xdf03eed325b82bc1d4db8b49c30ecc9e05104b96";
53494
- var glv_weth_usdc_address = "0x528a5bac7e746c9a509a1f4f6df58a03d44279f9";
53779
+ var GMX_CHAIN = String(Chain.ARBITRUM_ONE);
53780
+ var LEGACY_KEYS = {
53781
+ "0x70d95587d40a2caf56bd97485ab3eec10bee6336": "GMX Market ETH/USD::GM [WETH-USDC]",
53782
+ "0x47c031236e19d024b42f8ae6780e44a573170703": "GMX Market BTC/USD::GM [WBTC-USDC]",
53783
+ "0xdf03eed325b82bc1d4db8b49c30ecc9e05104b96": "GMX Liquidity Vault [WBTC-USDC]::GLV [WBTC-USDC]",
53784
+ "0x528a5bac7e746c9a509a1f4f6df58a03d44279f9": "GMX Liquidity Vault [WETH-USDC]::GLV [WETH-USDC]"
53785
+ };
53495
53786
  var gmxFetcher = {
53496
53787
  label: "GMX",
53497
53788
  fetch: async () => {
53498
- const { apy } = await fetchGmxRawData(GMX_CHAIN, GMX_DEFAULT_APY_PERIOD);
53789
+ const [{ apy }, lists] = await Promise.all([
53790
+ fetchGmxRawData(GMX_CHAIN, GMX_DEFAULT_APY_PERIOD),
53791
+ getListsMulti([GMX_CHAIN]).catch(() => ({}))
53792
+ ]);
53793
+ const list = lists?.[GMX_CHAIN]?.list ?? {};
53499
53794
  const rData = {};
53500
- for (const [addr4, d] of Object.entries(apy.markets ?? {})) {
53795
+ const put = (addr4, d) => {
53501
53796
  const a = addr4.toLowerCase();
53502
- if (a === gmx_eth_usd_address) rData[gmx_eth_usd] = apyToApr(d.apy) * 100;
53503
- if (a === gmx_btc_usd_address) rData[gmx_btc_usd] = apyToApr(d.apy) * 100;
53504
- }
53505
- for (const [addr4, d] of Object.entries(apy.glvs ?? {})) {
53506
- const a = addr4.toLowerCase();
53507
- if (a === glv_wbtc_usdc_address)
53508
- rData[glv_wbtc_usdc] = apyToApr(d.apy) * 100;
53509
- if (a === glv_weth_usdc_address)
53510
- rData[glv_weth_usdc] = apyToApr(d.apy) * 100;
53511
- }
53797
+ const apr = apyToApr(d.apy) * 100;
53798
+ const group = list[a]?.assetGroup;
53799
+ if (group) rData[group] = apr;
53800
+ const legacy = LEGACY_KEYS[a];
53801
+ if (legacy && legacy !== group) rData[legacy] = apr;
53802
+ };
53803
+ for (const [addr4, d] of Object.entries(apy.markets ?? {})) put(addr4, d);
53804
+ for (const [addr4, d] of Object.entries(apy.glvs ?? {})) put(addr4, d);
53512
53805
  return rData;
53513
53806
  }
53514
53807
  };
@@ -54133,6 +54426,28 @@ var INTRINSIC_FETCHERS = (() => {
54133
54426
  return [...seen];
54134
54427
  })();
54135
54428
 
54429
+ // src/yields/intrinsic/receipts.ts
54430
+ var RECEIPT_CHAINS = ["42161", "5000", "80094"];
54431
+ async function propagateReceiptYields(intrinsicYields) {
54432
+ let lists;
54433
+ try {
54434
+ lists = await getListsMulti(RECEIPT_CHAINS);
54435
+ } catch {
54436
+ return;
54437
+ }
54438
+ for (const chainId of RECEIPT_CHAINS) {
54439
+ const list = lists?.[chainId]?.list ?? {};
54440
+ for (const token of Object.values(list)) {
54441
+ const receipt = token?.props?.receipt;
54442
+ if (!receipt?.underlying || !token.assetGroup) continue;
54443
+ if (intrinsicYields[token.assetGroup] !== void 0) continue;
54444
+ const underlying = list[String(receipt.underlying).toLowerCase()];
54445
+ const rate = underlying?.assetGroup ? intrinsicYields[underlying.assetGroup] : void 0;
54446
+ if (rate !== void 0) intrinsicYields[token.assetGroup] = rate;
54447
+ }
54448
+ }
54449
+ }
54450
+
54136
54451
  // src/yields/intrinsic/index.ts
54137
54452
  async function fetchIntrinsicYields() {
54138
54453
  const wstethPromise = safeFetch(wstethFetcher.label, wstethFetcher.fetch);
@@ -54147,6 +54462,7 @@ async function fetchIntrinsicYields() {
54147
54462
  for (const result of results) {
54148
54463
  if (result) Object.assign(intrinsicYields, result);
54149
54464
  }
54465
+ await propagateReceiptYields(intrinsicYields);
54150
54466
  return intrinsicYields;
54151
54467
  }
54152
54468
 
@@ -58405,7 +58721,8 @@ function safeGetCalls(fetcherName, fn, errors) {
58405
58721
  return [];
58406
58722
  }
58407
58723
  }
58408
- function buildGroup(fetcherName, results, parse, abi, derivation) {
58724
+ var isCallTarget = (a) => typeof a === "string" && /^0x[0-9a-fA-F]{40}$/.test(a);
58725
+ function buildGroup(fetcherName, results, parse, abi, derivation, getCallsErrors) {
58409
58726
  const group = {
58410
58727
  fetcherName,
58411
58728
  calls: [],
@@ -58414,6 +58731,14 @@ function buildGroup(fetcherName, results, parse, abi, derivation) {
58414
58731
  trackers: []
58415
58732
  };
58416
58733
  for (const fr of results) {
58734
+ const bad = fr.calls.filter((c) => !isCallTarget(c?.address));
58735
+ if (bad.length > 0) {
58736
+ const sample = bad[0];
58737
+ const msg = `${bad.length}/${fr.calls.length} calls target an invalid address (${JSON.stringify(sample?.address)} ${sample?.name ?? "?"}) \u2014 lender dropped from the batch; fix the registry entry (lender-metadata), this is not an RPC failure`;
58738
+ if (getCallsErrors) getCallsErrors[`${fetcherName}:${fr.lender}`] = msg;
58739
+ console.warn(`[oracle-prices] ${fetcherName} ${fr.lender}: ${msg}`);
58740
+ continue;
58741
+ }
58417
58742
  group.trackers.push({
58418
58743
  lender: fr.lender,
58419
58744
  meta: fr.meta,
@@ -58658,140 +58983,160 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
58658
58983
  aaveResults,
58659
58984
  aaveFetcher.parse,
58660
58985
  AaveOracleAbi,
58661
- "direct"
58986
+ "direct",
58987
+ getCallsErrors
58662
58988
  );
58663
58989
  const compoundV2Group = buildGroup(
58664
58990
  "compoundV2",
58665
58991
  compoundV2Results,
58666
58992
  compoundV2Fetcher.parse,
58667
58993
  CompoundV2OracleAbi,
58668
- "direct"
58994
+ "direct",
58995
+ getCallsErrors
58669
58996
  );
58670
58997
  const compoundV3Group = buildGroup(
58671
58998
  "compoundV3",
58672
58999
  compoundV3Results,
58673
59000
  compoundV3Fetcher.parse,
58674
59001
  ChainlinkAggregatorAbi,
58675
- "direct"
59002
+ "direct",
59003
+ getCallsErrors
58676
59004
  );
58677
59005
  const listaGroup = buildGroup(
58678
59006
  "lista",
58679
59007
  listaResults,
58680
59008
  listaFetcher.parse,
58681
59009
  ProxyOracleAbi,
58682
- "direct"
59010
+ "direct",
59011
+ getCallsErrors
58683
59012
  );
58684
59013
  const llamaLendGroup = buildGroup(
58685
59014
  "llamaLend",
58686
59015
  llamaLendResults,
58687
59016
  llamaLendFetcher.parse,
58688
59017
  getLlamaLendAbi(),
58689
- "derived"
59018
+ "derived",
59019
+ getCallsErrors
58690
59020
  );
58691
59021
  const eulerGroup = buildGroup(
58692
59022
  "eulerV2",
58693
59023
  eulerResults,
58694
59024
  eulerV2Fetcher.parse,
58695
59025
  getEulerV2Abi(),
58696
- "direct"
59026
+ "direct",
59027
+ getCallsErrors
58697
59028
  );
58698
59029
  const aaveV4Group = buildGroup(
58699
59030
  "aaveV4",
58700
59031
  aaveV4Results,
58701
59032
  aaveV4Fetcher.parse,
58702
59033
  getAaveV4Abi(),
58703
- "direct"
59034
+ "direct",
59035
+ getCallsErrors
58704
59036
  );
58705
59037
  const morphoGroup = buildGroup(
58706
59038
  "morpho",
58707
59039
  morphoResults,
58708
59040
  morphoFetcher.parse,
58709
59041
  ProxyOracleAbi,
58710
- "derived"
59042
+ "derived",
59043
+ getCallsErrors
58711
59044
  );
58712
59045
  const midnightGroup = buildGroup(
58713
59046
  "midnight",
58714
59047
  midnightResults,
58715
59048
  midnightFetcher.parse,
58716
59049
  ProxyOracleAbi,
58717
- "derived"
59050
+ "derived",
59051
+ getCallsErrors
58718
59052
  );
58719
59053
  const exactlyGroup = buildGroup(
58720
59054
  "exactly",
58721
59055
  exactlyResults,
58722
59056
  exactlyFetcher.parse,
58723
59057
  getExactlyAbi(),
58724
- "direct"
59058
+ "direct",
59059
+ getCallsErrors
58725
59060
  );
58726
59061
  const flyingTulipGroup = buildGroup(
58727
59062
  "flyingTulip",
58728
59063
  flyingTulipResults,
58729
59064
  flyingTulipFetcher.parse,
58730
59065
  getFlyingTulipAbi(),
58731
- "direct"
59066
+ "direct",
59067
+ getCallsErrors
58732
59068
  );
58733
59069
  const termGroup = buildGroup(
58734
59070
  "term",
58735
59071
  termResults,
58736
59072
  termFetcher.parse,
58737
59073
  getTermAbi(),
58738
- "direct"
59074
+ "direct",
59075
+ getCallsErrors
58739
59076
  );
58740
59077
  const liquityGroup = buildGroup(
58741
59078
  "liquity",
58742
59079
  liquityResults,
58743
59080
  liquityFetcher.parse,
58744
59081
  getLiquityAbi(),
58745
- "direct"
59082
+ "direct",
59083
+ getCallsErrors
58746
59084
  );
58747
59085
  const riverGroup = buildGroup(
58748
59086
  "river",
58749
59087
  riverResults,
58750
59088
  riverFetcher.parse,
58751
59089
  getRiverAbi(),
58752
- "direct"
59090
+ "direct",
59091
+ getCallsErrors
58753
59092
  );
58754
59093
  const dssGroup = buildGroup(
58755
59094
  "dss",
58756
59095
  dssResults,
58757
59096
  dssFetcher.parse,
58758
59097
  dssFetcher.getAbi(),
58759
- "direct"
59098
+ "direct",
59099
+ getCallsErrors
58760
59100
  );
58761
59101
  const curvanceGroup = buildGroup(
58762
59102
  "curvance",
58763
59103
  curvanceResults,
58764
59104
  curvanceFetcher.parse,
58765
59105
  curvanceFetcher.getAbi(),
58766
- "direct"
59106
+ "direct",
59107
+ getCallsErrors
58767
59108
  );
58768
59109
  const resupplyGroup = buildGroup(
58769
59110
  "resupply",
58770
59111
  resupplyResults,
58771
59112
  resupplyFetcher.parse,
58772
59113
  resupplyFetcher.getAbi(),
58773
- "direct"
59114
+ "direct",
59115
+ getCallsErrors
58774
59116
  );
58775
59117
  const inverseGroup = buildGroup(
58776
59118
  "inverse",
58777
59119
  inverseResults,
58778
59120
  inverseFetcher.parse,
58779
59121
  getInverseAbi(),
58780
- "direct"
59122
+ "direct",
59123
+ getCallsErrors
58781
59124
  );
58782
59125
  const tellerGroup = buildGroup(
58783
59126
  "teller",
58784
59127
  tellerResults,
58785
59128
  tellerFetcher.parse,
58786
59129
  getTellerAbi(),
58787
- "derived"
59130
+ "derived",
59131
+ getCallsErrors
58788
59132
  );
58789
59133
  const fraxlendGroup = buildGroup(
58790
59134
  "fraxlend",
58791
59135
  fraxlendResults,
58792
59136
  fraxlendFetcher.parse,
58793
59137
  getFraxlendAbi(),
58794
- "derived"
59138
+ "derived",
59139
+ getCallsErrors
58795
59140
  );
58796
59141
  const termMaxGroup = buildGroup(
58797
59142
  "termmax",
@@ -58800,42 +59145,48 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
58800
59145
  getTermMaxAbi(),
58801
59146
  // DIRECT: `OracleAggregatorV2.getPrice` returns a USD price outright —
58802
59147
  // nothing is derived from another asset's price.
58803
- "direct"
59148
+ "direct",
59149
+ getCallsErrors
58804
59150
  );
58805
59151
  const siloV2Group = buildGroup(
58806
59152
  "siloV2",
58807
59153
  siloV2Results,
58808
59154
  siloV2Fetcher.parse,
58809
59155
  getSiloV2Abi(),
58810
- "derived"
59156
+ "derived",
59157
+ getCallsErrors
58811
59158
  );
58812
59159
  const siloV3Group = buildGroup(
58813
59160
  "siloV3",
58814
59161
  siloV3Results,
58815
59162
  siloV3Fetcher.parse,
58816
59163
  getSiloV3Abi(),
58817
- "derived"
59164
+ "derived",
59165
+ getCallsErrors
58818
59166
  );
58819
59167
  const fluidGroup = buildGroup(
58820
59168
  "fluid",
58821
59169
  fluidResults,
58822
59170
  fluidFetcher.parse,
58823
59171
  getFluidAbi(),
58824
- "derived"
59172
+ "derived",
59173
+ getCallsErrors
58825
59174
  );
58826
59175
  const gearboxV3Group = buildGroup(
58827
59176
  "gearboxV3",
58828
59177
  gearboxV3Results,
58829
59178
  gearboxV3Fetcher.parse,
58830
59179
  getGearboxV3Abi(),
58831
- "derived"
59180
+ "derived",
59181
+ getCallsErrors
58832
59182
  );
58833
59183
  const dolomiteGroup = buildGroup(
58834
59184
  "dolomite",
58835
59185
  dolomiteResults,
58836
59186
  dolomiteFetcher.parse,
58837
59187
  getDolomiteAbi(),
58838
- "direct"
59188
+ "direct",
59189
+ getCallsErrors
58839
59190
  );
58840
59191
  const allGroups = [
58841
59192
  aaveGroup,
@@ -63143,7 +63494,7 @@ var Erc4626PreviewRedeemAbi = [
63143
63494
  ];
63144
63495
 
63145
63496
  // src/vaults/lst/readers/shared.ts
63146
- var ONE_E1812 = 10n ** 18n;
63497
+ var ONE_E1813 = 10n ** 18n;
63147
63498
  var rescaleDecimals = (v, fromDec, toDec) => toDec >= fromDec ? v * 10n ** BigInt(toDec - fromDec) : v / 10n ** BigInt(fromDec - toDec);
63148
63499
  var MULTICALL3_ADDRESS = "0xcA11bde05977b3631167028862bE2a173976CA11";
63149
63500
  var Multicall3BalanceAbi = [
@@ -63186,7 +63537,7 @@ var readerBeetsStS = (entry) => ({
63186
63537
  }
63187
63538
  const liquidity = toBigInt14(pool);
63188
63539
  return {
63189
- totalAssets: totalSupply * exchangeRate / ONE_E1812,
63540
+ totalAssets: totalSupply * exchangeRate / ONE_E1813,
63190
63541
  totalSupply,
63191
63542
  exchangeRate,
63192
63543
  liquidity
@@ -63219,7 +63570,7 @@ var readerBenqiSavax = (entry) => ({
63219
63570
  {
63220
63571
  address: entry.address,
63221
63572
  name: "getPooledAvaxByShares",
63222
- params: [ONE_E1812]
63573
+ params: [ONE_E1813]
63223
63574
  },
63224
63575
  { address: entry.address, name: "totalPooledAvax", params: [] }
63225
63576
  ],
@@ -63230,7 +63581,7 @@ var readerBenqiSavax = (entry) => ({
63230
63581
  if (totalSupply === void 0 || exchangeRate === void 0) {
63231
63582
  return void 0;
63232
63583
  }
63233
- const totalAssets = toBigInt14(totalPooled) ?? totalSupply * exchangeRate / ONE_E1812;
63584
+ const totalAssets = toBigInt14(totalPooled) ?? totalSupply * exchangeRate / ONE_E1813;
63234
63585
  return {
63235
63586
  totalAssets,
63236
63587
  totalSupply,
@@ -63249,7 +63600,7 @@ var readerBgtWrapper1to1 = (entry) => ({
63249
63600
  return {
63250
63601
  totalAssets: totalSupply,
63251
63602
  totalSupply,
63252
- exchangeRate: ONE_E1812
63603
+ exchangeRate: ONE_E1813
63253
63604
  };
63254
63605
  }
63255
63606
  });
@@ -63279,7 +63630,7 @@ var readerDineroBeraEth = (entry) => ({
63279
63630
  return void 0;
63280
63631
  }
63281
63632
  return {
63282
- totalAssets: totalSupply * exchangeRate / ONE_E1812,
63633
+ totalAssets: totalSupply * exchangeRate / ONE_E1813,
63283
63634
  totalSupply,
63284
63635
  exchangeRate
63285
63636
  };
@@ -63291,7 +63642,7 @@ var readerErc4626 = (entry) => ({
63291
63642
  calls: [
63292
63643
  { address: entry.address, name: "totalAssets", params: [] },
63293
63644
  { address: entry.address, name: "totalSupply", params: [] },
63294
- { address: entry.address, name: "convertToAssets", params: [ONE_E1812] }
63645
+ { address: entry.address, name: "convertToAssets", params: [ONE_E1813] }
63295
63646
  ],
63296
63647
  abis: [Erc4626ReadAbi, TotalSupplyAbi, Erc4626ReadAbi],
63297
63648
  parse: ([assets, supply, rate]) => {
@@ -63308,7 +63659,7 @@ var readerErc4626PreviewRedeem = (entry) => ({
63308
63659
  calls: [
63309
63660
  { address: entry.address, name: "totalAssets", params: [] },
63310
63661
  { address: entry.address, name: "totalSupply", params: [] },
63311
- { address: entry.address, name: "previewRedeem", params: [ONE_E1812] }
63662
+ { address: entry.address, name: "previewRedeem", params: [ONE_E1813] }
63312
63663
  ],
63313
63664
  abis: [Erc4626PreviewRedeemAbi, TotalSupplyAbi, Erc4626PreviewRedeemAbi],
63314
63665
  parse: ([assets, supply, rate]) => {
@@ -63388,7 +63739,7 @@ var readerEtherFiWeEth = (entry) => {
63388
63739
  }
63389
63740
  }
63390
63741
  return {
63391
- totalAssets: totalSupply * exchangeRate / ONE_E1812,
63742
+ totalAssets: totalSupply * exchangeRate / ONE_E1813,
63392
63743
  totalSupply,
63393
63744
  exchangeRate,
63394
63745
  liquidity
@@ -63397,6 +63748,50 @@ var readerEtherFiWeEth = (entry) => {
63397
63748
  };
63398
63749
  };
63399
63750
 
63751
+ // src/vaults/lst/abis/flarePooled.ts
63752
+ var FlarePooledFlrAbi = [
63753
+ {
63754
+ name: "totalPooledFlr",
63755
+ type: "function",
63756
+ stateMutability: "view",
63757
+ inputs: [],
63758
+ outputs: [{ type: "uint256" }]
63759
+ },
63760
+ {
63761
+ name: "totalShares",
63762
+ type: "function",
63763
+ stateMutability: "view",
63764
+ inputs: [],
63765
+ outputs: [{ type: "uint256" }]
63766
+ },
63767
+ {
63768
+ name: "getPooledFlrByShares",
63769
+ type: "function",
63770
+ stateMutability: "view",
63771
+ inputs: [{ name: "shares", type: "uint256" }],
63772
+ outputs: [{ type: "uint256" }]
63773
+ }
63774
+ ];
63775
+
63776
+ // src/vaults/lst/readers/flarePooled.ts
63777
+ var readerFlarePooledFlr = (entry) => ({
63778
+ calls: [
63779
+ { address: entry.address, name: "totalPooledFlr", params: [] },
63780
+ { address: entry.address, name: "totalShares", params: [] },
63781
+ { address: entry.address, name: "getPooledFlrByShares", params: [ONE_E1813] }
63782
+ ],
63783
+ abis: [FlarePooledFlrAbi, FlarePooledFlrAbi, FlarePooledFlrAbi],
63784
+ parse: ([pooledFlr, shares, rate]) => {
63785
+ const totalAssets = toBigInt14(pooledFlr);
63786
+ const totalSupply = toBigInt14(shares);
63787
+ const exchangeRate = toBigInt14(rate);
63788
+ if (totalAssets === void 0 || totalSupply === void 0 || exchangeRate === void 0) {
63789
+ return void 0;
63790
+ }
63791
+ return { totalAssets, totalSupply, exchangeRate };
63792
+ }
63793
+ });
63794
+
63400
63795
  // src/vaults/lst/abis/hyperbeat.ts
63401
63796
  var HyperbeatStakingCoreAbi = [
63402
63797
  {
@@ -63421,7 +63816,7 @@ var readerHyperbeatBeHype = (entry) => {
63421
63816
  return {
63422
63817
  totalAssets: totalSupply,
63423
63818
  totalSupply,
63424
- exchangeRate: ONE_E1812
63819
+ exchangeRate: ONE_E1813
63425
63820
  };
63426
63821
  }
63427
63822
  };
@@ -63429,7 +63824,7 @@ var readerHyperbeatBeHype = (entry) => {
63429
63824
  return {
63430
63825
  calls: [
63431
63826
  { address: entry.address, name: "totalSupply", params: [] },
63432
- { address: stakingCore, name: "BeHYPEToHYPE", params: [ONE_E1812] }
63827
+ { address: stakingCore, name: "BeHYPEToHYPE", params: [ONE_E1813] }
63433
63828
  ],
63434
63829
  abis: [TotalSupplyAbi, HyperbeatStakingCoreAbi],
63435
63830
  parse: ([supply, rate]) => {
@@ -63439,7 +63834,7 @@ var readerHyperbeatBeHype = (entry) => {
63439
63834
  return void 0;
63440
63835
  }
63441
63836
  return {
63442
- totalAssets: totalSupply * exchangeRate / ONE_E1812,
63837
+ totalAssets: totalSupply * exchangeRate / ONE_E1813,
63443
63838
  totalSupply,
63444
63839
  exchangeRate
63445
63840
  };
@@ -63471,7 +63866,7 @@ var readerKelpRsEth = (entry) => {
63471
63866
  return {
63472
63867
  totalAssets: totalSupply,
63473
63868
  totalSupply,
63474
- exchangeRate: ONE_E1812
63869
+ exchangeRate: ONE_E1813
63475
63870
  };
63476
63871
  }
63477
63872
  };
@@ -63489,7 +63884,7 @@ var readerKelpRsEth = (entry) => {
63489
63884
  return void 0;
63490
63885
  }
63491
63886
  return {
63492
- totalAssets: totalSupply * exchangeRate / ONE_E1812,
63887
+ totalAssets: totalSupply * exchangeRate / ONE_E1813,
63493
63888
  totalSupply,
63494
63889
  exchangeRate
63495
63890
  };
@@ -63521,7 +63916,7 @@ var readerKinetiqKHype = (entry) => {
63521
63916
  return {
63522
63917
  totalAssets: totalSupply,
63523
63918
  totalSupply,
63524
- exchangeRate: ONE_E1812
63919
+ exchangeRate: ONE_E1813
63525
63920
  };
63526
63921
  }
63527
63922
  };
@@ -63529,7 +63924,7 @@ var readerKinetiqKHype = (entry) => {
63529
63924
  return {
63530
63925
  calls: [
63531
63926
  { address: entry.address, name: "totalSupply", params: [] },
63532
- { address: accountant, name: "kHYPEToHYPE", params: [ONE_E1812] }
63927
+ { address: accountant, name: "kHYPEToHYPE", params: [ONE_E1813] }
63533
63928
  ],
63534
63929
  abis: [TotalSupplyAbi, KinetiqStakingAccountantAbi],
63535
63930
  parse: ([supply, rate]) => {
@@ -63539,7 +63934,7 @@ var readerKinetiqKHype = (entry) => {
63539
63934
  return void 0;
63540
63935
  }
63541
63936
  return {
63542
- totalAssets: totalSupply * exchangeRate / ONE_E1812,
63937
+ totalAssets: totalSupply * exchangeRate / ONE_E1813,
63543
63938
  totalSupply,
63544
63939
  exchangeRate
63545
63940
  };
@@ -63579,7 +63974,7 @@ var readerLairStKaia = (entry) => ({
63579
63974
  if (totalSupply === void 0 || exchangeRate === void 0) {
63580
63975
  return void 0;
63581
63976
  }
63582
- const totalAssets = toBigInt14(totalStaking) ?? totalSupply * exchangeRate / ONE_E1812;
63977
+ const totalAssets = toBigInt14(totalStaking) ?? totalSupply * exchangeRate / ONE_E1813;
63583
63978
  return {
63584
63979
  totalAssets,
63585
63980
  totalSupply,
@@ -63613,7 +64008,7 @@ var readerLidoWstEth = (entry) => ({
63613
64008
  return void 0;
63614
64009
  }
63615
64010
  return {
63616
- totalAssets: totalSupply * exchangeRate / ONE_E1812,
64011
+ totalAssets: totalSupply * exchangeRate / ONE_E1813,
63617
64012
  totalSupply,
63618
64013
  exchangeRate
63619
64014
  };
@@ -63651,7 +64046,7 @@ var readerListaSlisBnb = (entry) => {
63651
64046
  return {
63652
64047
  totalAssets: totalSupply,
63653
64048
  totalSupply,
63654
- exchangeRate: ONE_E1812
64049
+ exchangeRate: ONE_E1813
63655
64050
  };
63656
64051
  }
63657
64052
  };
@@ -63659,7 +64054,7 @@ var readerListaSlisBnb = (entry) => {
63659
64054
  return {
63660
64055
  calls: [
63661
64056
  { address: entry.address, name: "totalSupply", params: [] },
63662
- { address: manager, name: "convertSnBnbToBnb", params: [ONE_E1812] },
64057
+ { address: manager, name: "convertSnBnbToBnb", params: [ONE_E1813] },
63663
64058
  { address: manager, name: "getTotalPooledBnb", params: [] }
63664
64059
  ],
63665
64060
  abis: [TotalSupplyAbi, ListaStakeManagerReadAbi, ListaStakeManagerReadAbi],
@@ -63670,7 +64065,7 @@ var readerListaSlisBnb = (entry) => {
63670
64065
  return void 0;
63671
64066
  }
63672
64067
  const pooledBnb = toBigInt14(pooled);
63673
- const totalAssets = pooledBnb ?? totalSupply * exchangeRate / ONE_E1812;
64068
+ const totalAssets = pooledBnb ?? totalSupply * exchangeRate / ONE_E1813;
63674
64069
  return { totalAssets, totalSupply, exchangeRate };
63675
64070
  }
63676
64071
  };
@@ -63700,7 +64095,7 @@ var readerMantleMEth = (entry) => {
63700
64095
  return {
63701
64096
  totalAssets: totalSupply,
63702
64097
  totalSupply,
63703
- exchangeRate: ONE_E1812
64098
+ exchangeRate: ONE_E1813
63704
64099
  };
63705
64100
  }
63706
64101
  };
@@ -63708,7 +64103,7 @@ var readerMantleMEth = (entry) => {
63708
64103
  return {
63709
64104
  calls: [
63710
64105
  { address: entry.address, name: "totalSupply", params: [] },
63711
- { address: staking, name: "mETHToETH", params: [ONE_E1812] }
64106
+ { address: staking, name: "mETHToETH", params: [ONE_E1813] }
63712
64107
  ],
63713
64108
  abis: [TotalSupplyAbi, MantleStakingAbi],
63714
64109
  parse: ([supply, rate]) => {
@@ -63718,7 +64113,7 @@ var readerMantleMEth = (entry) => {
63718
64113
  return void 0;
63719
64114
  }
63720
64115
  return {
63721
- totalAssets: totalSupply * exchangeRate / ONE_E1812,
64116
+ totalAssets: totalSupply * exchangeRate / ONE_E1813,
63722
64117
  totalSupply,
63723
64118
  exchangeRate
63724
64119
  };
@@ -63739,7 +64134,7 @@ var readerOffChain = (entry) => {
63739
64134
  return {
63740
64135
  totalAssets: rescaleDecimals(totalSupply, shareDec, underlyingDec),
63741
64136
  totalSupply,
63742
- exchangeRate: ONE_E1812
64137
+ exchangeRate: ONE_E1813
63743
64138
  };
63744
64139
  }
63745
64140
  };
@@ -63773,7 +64168,7 @@ var readerRenzoEzEth = (entry) => {
63773
64168
  return {
63774
64169
  totalAssets: totalSupply,
63775
64170
  totalSupply,
63776
- exchangeRate: ONE_E1812
64171
+ exchangeRate: ONE_E1813
63777
64172
  };
63778
64173
  }
63779
64174
  };
@@ -63792,7 +64187,7 @@ var readerRenzoEzEth = (entry) => {
63792
64187
  return {
63793
64188
  totalAssets: totalTvl,
63794
64189
  totalSupply,
63795
- exchangeRate: totalTvl * ONE_E1812 / totalSupply
64190
+ exchangeRate: totalTvl * ONE_E1813 / totalSupply
63796
64191
  };
63797
64192
  }
63798
64193
  };
@@ -63848,7 +64243,7 @@ var readerRocketReth = (entry) => {
63848
64243
  }
63849
64244
  const liquidity = depositPool ? toBigInt14(slice2[2]) : void 0;
63850
64245
  return {
63851
- totalAssets: totalSupply * exchangeRate / ONE_E1812,
64246
+ totalAssets: totalSupply * exchangeRate / ONE_E1813,
63852
64247
  totalSupply,
63853
64248
  exchangeRate,
63854
64249
  liquidity
@@ -63890,7 +64285,7 @@ var readerStaderEthx = (entry) => {
63890
64285
  return {
63891
64286
  totalAssets: totalSupply,
63892
64287
  totalSupply,
63893
- exchangeRate: ONE_E1812
64288
+ exchangeRate: ONE_E1813
63894
64289
  };
63895
64290
  }
63896
64291
  };
@@ -63908,7 +64303,7 @@ var readerStaderEthx = (entry) => {
63908
64303
  return void 0;
63909
64304
  }
63910
64305
  return {
63911
- totalAssets: totalSupply * exchangeRate / ONE_E1812,
64306
+ totalAssets: totalSupply * exchangeRate / ONE_E1813,
63912
64307
  totalSupply,
63913
64308
  exchangeRate
63914
64309
  };
@@ -63925,7 +64320,7 @@ var readerStaderMaticX = (entry) => {
63925
64320
  {
63926
64321
  address: rateAddress,
63927
64322
  name: "convertMaticXToMatic",
63928
- params: [ONE_E1812],
64323
+ params: [ONE_E1813],
63929
64324
  chainId: homeChainId
63930
64325
  }
63931
64326
  ],
@@ -63940,7 +64335,7 @@ var readerStaderMaticX = (entry) => {
63940
64335
  }
63941
64336
  const isCrossChain = homeContract !== void 0;
63942
64337
  return {
63943
- totalAssets: isCrossChain ? totalSupply * amountInMatic / ONE_E1812 : totalPooledMatic ?? totalSupply * amountInMatic / ONE_E1812,
64338
+ totalAssets: isCrossChain ? totalSupply * amountInMatic / ONE_E1813 : totalPooledMatic ?? totalSupply * amountInMatic / ONE_E1813,
63944
64339
  totalSupply,
63945
64340
  exchangeRate: amountInMatic
63946
64341
  };
@@ -63972,7 +64367,7 @@ var readerStakeWiseOsEth = (entry) => {
63972
64367
  return {
63973
64368
  totalAssets: totalSupply,
63974
64369
  totalSupply,
63975
- exchangeRate: ONE_E1812
64370
+ exchangeRate: ONE_E1813
63976
64371
  };
63977
64372
  }
63978
64373
  };
@@ -63980,7 +64375,7 @@ var readerStakeWiseOsEth = (entry) => {
63980
64375
  return {
63981
64376
  calls: [
63982
64377
  { address: entry.address, name: "totalSupply", params: [] },
63983
- { address: controller, name: "convertToAssets", params: [ONE_E1812] }
64378
+ { address: controller, name: "convertToAssets", params: [ONE_E1813] }
63984
64379
  ],
63985
64380
  abis: [TotalSupplyAbi, StakeWiseOsTokenAbi],
63986
64381
  parse: ([supply, rate]) => {
@@ -63990,7 +64385,7 @@ var readerStakeWiseOsEth = (entry) => {
63990
64385
  return void 0;
63991
64386
  }
63992
64387
  return {
63993
- totalAssets: totalSupply * exchangeRate / ONE_E1812,
64388
+ totalAssets: totalSupply * exchangeRate / ONE_E1813,
63994
64389
  totalSupply,
63995
64390
  exchangeRate
63996
64391
  };
@@ -64022,7 +64417,7 @@ var readerStCelo = (entry) => {
64022
64417
  return {
64023
64418
  totalAssets: totalSupply,
64024
64419
  totalSupply,
64025
- exchangeRate: ONE_E1812
64420
+ exchangeRate: ONE_E1813
64026
64421
  };
64027
64422
  }
64028
64423
  };
@@ -64030,7 +64425,7 @@ var readerStCelo = (entry) => {
64030
64425
  return {
64031
64426
  calls: [
64032
64427
  { address: entry.address, name: "totalSupply", params: [] },
64033
- { address: manager, name: "toCelo", params: [ONE_E1812] }
64428
+ { address: manager, name: "toCelo", params: [ONE_E1813] }
64034
64429
  ],
64035
64430
  abis: [TotalSupplyAbi, StCeloManagerAbi],
64036
64431
  parse: ([supply, rate]) => {
@@ -64040,7 +64435,7 @@ var readerStCelo = (entry) => {
64040
64435
  return void 0;
64041
64436
  }
64042
64437
  return {
64043
- totalAssets: totalSupply * exchangeRate / ONE_E1812,
64438
+ totalAssets: totalSupply * exchangeRate / ONE_E1813,
64044
64439
  totalSupply,
64045
64440
  exchangeRate
64046
64441
  };
@@ -64073,7 +64468,7 @@ var readerSwellGetRate = (entry) => ({
64073
64468
  return void 0;
64074
64469
  }
64075
64470
  return {
64076
- totalAssets: totalSupply * exchangeRate / ONE_E1812,
64471
+ totalAssets: totalSupply * exchangeRate / ONE_E1813,
64077
64472
  totalSupply,
64078
64473
  exchangeRate
64079
64474
  };
@@ -64104,7 +64499,7 @@ var readerValantisWstHype = (entry) => {
64104
64499
  return {
64105
64500
  totalAssets: totalSupply,
64106
64501
  totalSupply,
64107
- exchangeRate: ONE_E1812
64502
+ exchangeRate: ONE_E1813
64108
64503
  };
64109
64504
  }
64110
64505
  };
@@ -64122,7 +64517,7 @@ var readerValantisWstHype = (entry) => {
64122
64517
  return void 0;
64123
64518
  }
64124
64519
  return {
64125
- totalAssets: totalSupply * exchangeRate / ONE_E1812,
64520
+ totalAssets: totalSupply * exchangeRate / ONE_E1813,
64126
64521
  totalSupply,
64127
64522
  exchangeRate
64128
64523
  };
@@ -64156,7 +64551,7 @@ var readerVedaAccountant = (entry) => {
64156
64551
  return {
64157
64552
  totalAssets: rescaleDecimals(totalSupply, shareDec, underlyingDec),
64158
64553
  totalSupply,
64159
- exchangeRate: ONE_E1812
64554
+ exchangeRate: ONE_E1813
64160
64555
  };
64161
64556
  }
64162
64557
  };
@@ -64175,7 +64570,7 @@ var readerVedaAccountant = (entry) => {
64175
64570
  const exchangeRate = rawRate * scale3;
64176
64571
  return {
64177
64572
  totalAssets: rescaleDecimals(
64178
- totalSupply * exchangeRate / ONE_E1812,
64573
+ totalSupply * exchangeRate / ONE_E1813,
64179
64574
  shareDec,
64180
64575
  underlyingDec
64181
64576
  ),
@@ -64211,9 +64606,9 @@ var readerAnkrRatio = (entry) => ({
64211
64606
  return void 0;
64212
64607
  }
64213
64608
  return {
64214
- totalAssets: totalSupply * ONE_E1812 / r,
64609
+ totalAssets: totalSupply * ONE_E1813 / r,
64215
64610
  totalSupply,
64216
- exchangeRate: ONE_E1812 * ONE_E1812 / r
64611
+ exchangeRate: ONE_E1813 * ONE_E1813 / r
64217
64612
  };
64218
64613
  }
64219
64614
  });
@@ -64243,7 +64638,7 @@ var readerBinanceWbeth = (entry) => ({
64243
64638
  return void 0;
64244
64639
  }
64245
64640
  return {
64246
- totalAssets: totalSupply * exchangeRate / ONE_E1812,
64641
+ totalAssets: totalSupply * exchangeRate / ONE_E1813,
64247
64642
  totalSupply,
64248
64643
  exchangeRate
64249
64644
  };
@@ -64289,7 +64684,7 @@ var readerCoreEarnRate = (entry) => {
64289
64684
  return {
64290
64685
  totalAssets: totalSupply * r / CORE_RATE_DENOM,
64291
64686
  totalSupply,
64292
- exchangeRate: r * ONE_E1812 / CORE_RATE_DENOM
64687
+ exchangeRate: r * ONE_E1813 / CORE_RATE_DENOM
64293
64688
  };
64294
64689
  }
64295
64690
  };
@@ -64311,7 +64706,7 @@ var readerCoreStakedRatio = (entry) => {
64311
64706
  return {
64312
64707
  totalAssets: totalStaked,
64313
64708
  totalSupply,
64314
- exchangeRate: totalStaked * ONE_E1812 / totalSupply
64709
+ exchangeRate: totalStaked * ONE_E1813 / totalSupply
64315
64710
  };
64316
64711
  }
64317
64712
  };
@@ -64346,7 +64741,7 @@ var readerKintsuSMon = (entry) => ({
64346
64741
  const totalAssets = toBigInt14(pooled);
64347
64742
  const totalSupply = toBigInt14(shares);
64348
64743
  if (totalAssets === void 0 || totalSupply === void 0) return void 0;
64349
- const exchangeRate = totalSupply > 0n ? totalAssets * ONE_E1812 / totalSupply : ONE_E1812;
64744
+ const exchangeRate = totalSupply > 0n ? totalAssets * ONE_E1813 / totalSupply : ONE_E1813;
64350
64745
  return { totalAssets, totalSupply, exchangeRate };
64351
64746
  }
64352
64747
  });
@@ -64421,7 +64816,7 @@ var readerTreehouseTAsset = (entry) => {
64421
64816
  calls: [
64422
64817
  { address: entry.address, name: "totalAssets", params: [] },
64423
64818
  { address: entry.address, name: "totalSupply", params: [] },
64424
- { address: entry.address, name: "convertToAssets", params: [ONE_E1812] },
64819
+ { address: entry.address, name: "convertToAssets", params: [ONE_E1813] },
64425
64820
  { address: fl, name: "getRedeemableAmount", params: [] },
64426
64821
  { address: fl, name: "redemptionFee", params: [] },
64427
64822
  { address: fl, name: "minRedeemInUnderlying", params: [] },
@@ -64519,6 +64914,8 @@ var buildReader = (entry) => {
64519
64914
  return readerErc4626PreviewRedeem(entry);
64520
64915
  case "lidoWstEth":
64521
64916
  return readerLidoWstEth(entry);
64917
+ case "flarePooledFlr":
64918
+ return readerFlarePooledFlr(entry);
64522
64919
  case "listaSlisBnb":
64523
64920
  return readerListaSlisBnb(entry);
64524
64921
  case "rocketReth":
@@ -65050,7 +65447,7 @@ var deriveProtocolExitRoutes = (i) => {
65050
65447
  };
65051
65448
 
65052
65449
  // src/vaults/lst/fetchPublic.ts
65053
- var ONE_E1813 = 10n ** 18n;
65450
+ var ONE_E1814 = 10n ** 18n;
65054
65451
  var ERC20_BALANCE_ABI = parseAbi([
65055
65452
  "function balanceOf(address) view returns (uint256)"
65056
65453
  ]);
@@ -65181,8 +65578,8 @@ var fetchLstShareTokens = async (chainId, multicallRetry, prices = {}, tokenList
65181
65578
  const underlyingUnit = 10n ** BigInt(underlyingDec);
65182
65579
  const totalAssetsFormatted = Number(state.totalAssets) / 10 ** underlyingDec;
65183
65580
  const totalAssetsUsd = priceUsd !== void 0 ? totalAssetsFormatted * priceUsd : 0;
65184
- const convertToAssets = state.exchangeRate * underlyingUnit / ONE_E1813;
65185
- const convertToShares = state.exchangeRate > 0n ? ONE_E1813 * shareUnit / state.exchangeRate : 0n;
65581
+ const convertToAssets = state.exchangeRate * underlyingUnit / ONE_E1814;
65582
+ const convertToShares = state.exchangeRate > 0n ? ONE_E1814 * shareUnit / state.exchangeRate : 0n;
65186
65583
  let liquidityRaw;
65187
65584
  if (state.liquidity !== void 0) {
65188
65585
  liquidityRaw = state.liquidity;
@@ -68686,6 +69083,38 @@ var LST_WITHDRAWAL_REGISTRY = {
68686
69083
  symbol: "pumpBTC",
68687
69084
  reader: "noQueue"
68688
69085
  }
69086
+ ],
69087
+ // Flare (14) — Firelight stXRP. Period-based queue: `withdraw`/`redeem`
69088
+ // create a `WithdrawRequest` for `currentPeriod() + 1`; `claimWithdraw(period)`
69089
+ // pays out after the period ends. The surface (`withdrawSharesOf(period, account)`,
69090
+ // `withdrawalsOf(period, account)`, `isWithdrawClaimed(period, account)`) is
69091
+ // verified on-chain, but the period-window enumeration reader is not yet
69092
+ // built — placeholder so the orchestrator surfaces the asset (returns []).
69093
+ "14": [
69094
+ {
69095
+ lst: "0x4c18ff3c89632c3dd62e796c0afa5c07c4c1b2b3",
69096
+ brand: "Firelight",
69097
+ symbol: "stXRP",
69098
+ reader: "unverified"
69099
+ },
69100
+ {
69101
+ // SparkDEX stFLR — `requestWithdrawal()` / `claimWithdrawal()` queue +
69102
+ // `instantWithdrawal()` fee leg. Reader not built yet; placeholder so
69103
+ // the orchestrator surfaces the asset.
69104
+ lst: "0x0988c6ba244a90c07a917ebe609eb3264be716ff",
69105
+ brand: "SparkDEX",
69106
+ symbol: "stFLR",
69107
+ reader: "unverified"
69108
+ },
69109
+ {
69110
+ // Sceptre sFLR — unlock-request queue (`cooldownPeriod()`) +
69111
+ // `instantRedeem()` fee leg. Reader not built yet; placeholder so the
69112
+ // orchestrator surfaces the asset.
69113
+ lst: "0x12e605bc104e93b45e1ad99f9e555f659051c2bb",
69114
+ brand: "Sceptre",
69115
+ symbol: "sFLR",
69116
+ reader: "unverified"
69117
+ }
68689
69118
  ]
68690
69119
  };
68691
69120
  var getLstWithdrawalRegistry = (chainId, extraEntries) => {
@@ -68819,7 +69248,7 @@ var NavOracleReadAbi = [
68819
69248
  ];
68820
69249
 
68821
69250
  // src/vaults/savings/readers/shared.ts
68822
- var ONE_E1814 = 10n ** 18n;
69251
+ var ONE_E1815 = 10n ** 18n;
68823
69252
  var toBigInt16 = (v) => {
68824
69253
  if (v === void 0 || v === null) return void 0;
68825
69254
  if (typeof v === "bigint") return v;
@@ -68860,7 +69289,7 @@ var readerErc46262 = (entry) => {
68860
69289
  return {
68861
69290
  totalAssets,
68862
69291
  totalSupply,
68863
- exchangeRate: convertToAssetsRaw * ONE_E1814 / underlyingUnit
69292
+ exchangeRate: convertToAssetsRaw * ONE_E1815 / underlyingUnit
68864
69293
  };
68865
69294
  }
68866
69295
  };
@@ -68891,7 +69320,7 @@ var readerErc4626Cooldown = (entry) => {
68891
69320
  return {
68892
69321
  totalAssets,
68893
69322
  totalSupply,
68894
- exchangeRate: convertToAssetsRaw * ONE_E1814 / underlyingUnit,
69323
+ exchangeRate: convertToAssetsRaw * ONE_E1815 / underlyingUnit,
68895
69324
  withdrawalCooldownSeconds: cooldownSecs === void 0 ? void 0 : Number(cooldownSecs)
68896
69325
  };
68897
69326
  }
@@ -69576,7 +70005,7 @@ var readerErc4626Idle = (entry) => {
69576
70005
  return {
69577
70006
  totalAssets,
69578
70007
  totalSupply,
69579
- exchangeRate: convertToAssetsRaw * ONE_E1814 / underlyingUnit,
70008
+ exchangeRate: convertToAssetsRaw * ONE_E1815 / underlyingUnit,
69580
70009
  ...capacity !== void 0 ? {
69581
70010
  instantRedeemCapacity: capacity,
69582
70011
  instantRedeemEnabled: true,
@@ -69625,7 +70054,7 @@ var readerErc4626WithdrawLimit = (entry) => {
69625
70054
  return {
69626
70055
  totalAssets,
69627
70056
  totalSupply,
69628
- exchangeRate: convertToAssetsRaw * ONE_E1814 / underlyingUnit,
70057
+ exchangeRate: convertToAssetsRaw * ONE_E1815 / underlyingUnit,
69629
70058
  ...capacity !== void 0 ? {
69630
70059
  instantRedeemCapacity: capacity,
69631
70060
  instantRedeemEnabled: true,
@@ -69665,8 +70094,8 @@ var readerBitfiBfbtc = (entry) => {
69665
70094
  const currentRatio = toBigInt16(ratio);
69666
70095
  if (totalSupply === void 0) return void 0;
69667
70096
  if (currentRatio === void 0 || currentRatio <= 0n) return void 0;
69668
- const exchangeRate = ONE_E1814 * BITFI_RATIO_SCALE / currentRatio;
69669
- const totalAssets = totalSupply * exchangeRate * underlyingUnit / (ONE_E1814 * shareUnit);
70097
+ const exchangeRate = ONE_E1815 * BITFI_RATIO_SCALE / currentRatio;
70098
+ const totalAssets = totalSupply * exchangeRate * underlyingUnit / (ONE_E1815 * shareUnit);
69670
70099
  const feeOf = (cell) => {
69671
70100
  if (!Array.isArray(cell)) return void 0;
69672
70101
  const pct3 = toBigInt16(cell[0]);
@@ -69734,9 +70163,9 @@ var readerBitfiVault = (entry) => {
69734
70163
  if (totalAssets === void 0 || totalSupply === void 0)
69735
70164
  return void 0;
69736
70165
  if (currentRatio === void 0 || currentRatio <= 0n) return void 0;
69737
- const exchangeRate = currentRatio * ONE_E1814 / BITFI_RATIO_SCALE;
70166
+ const exchangeRate = currentRatio * ONE_E1815 / BITFI_RATIO_SCALE;
69738
70167
  const depRatio = toBigInt16(depositRatio);
69739
- const fundamentalExchangeRate = depRatio !== void 0 && depRatio > 0n ? depRatio * ONE_E1814 / BITFI_RATIO_SCALE : void 0;
70168
+ const fundamentalExchangeRate = depRatio !== void 0 && depRatio > 0n ? depRatio * ONE_E1815 / BITFI_RATIO_SCALE : void 0;
69740
70169
  const supplyCap = toBigInt16(cap);
69741
70170
  const isPaused = paused === true;
69742
70171
  let depositCapacity;
@@ -69779,7 +70208,7 @@ var readerBitwayVault = (entry) => {
69779
70208
  {
69780
70209
  address: vault,
69781
70210
  name: "convertToAssets",
69782
- params: [ONE_E1814, underlying]
70211
+ params: [ONE_E1815, underlying]
69783
70212
  },
69784
70213
  { address: vault, name: "getContractBalance", params: [underlying] },
69785
70214
  { address: vault, name: "WAITING_TIME", params: [] }
@@ -69802,7 +70231,7 @@ var readerBitwayVault = (entry) => {
69802
70231
  // totalSupply is in raw share units; convert to raw underlying.
69803
70232
  // (Every live leg is 18/18-dec — BSC stables are 18-dec — but the
69804
70233
  // rescale keeps a future 6-dec listing honest.)
69805
- totalAssets: totalSupply * exchangeRate * underlyingUnit / (shareUnit * ONE_E1814),
70234
+ totalAssets: totalSupply * exchangeRate * underlyingUnit / (shareUnit * ONE_E1815),
69806
70235
  totalSupply,
69807
70236
  exchangeRate,
69808
70237
  withdrawFeeBps: penaltyBps,
@@ -69837,7 +70266,7 @@ var readerFrankencoinSavings = (entry) => ({
69837
70266
  // `fetchPublic` derives `convertToAssets` / `convertToShares` from
69838
70267
  // `exchangeRate`, and 1e18 makes them the identity.
69839
70268
  totalSupply: deposits,
69840
- exchangeRate: ONE_E1814
70269
+ exchangeRate: ONE_E1815
69841
70270
  };
69842
70271
  }
69843
70272
  });
@@ -69884,7 +70313,7 @@ var readerHyperbeatVault = (entry) => {
69884
70313
  const feeRaw = toBigInt16(fee);
69885
70314
  return {
69886
70315
  // totalSupply is in raw share units; convert to raw underlying.
69887
- totalAssets: totalSupply * exchangeRate * underlyingUnit / (shareUnit * ONE_E1814),
70316
+ totalAssets: totalSupply * exchangeRate * underlyingUnit / (shareUnit * ONE_E1815),
69888
70317
  totalSupply,
69889
70318
  exchangeRate,
69890
70319
  // `instantWithdrawalFee` is over a base of 10 000, so the raw
@@ -69921,9 +70350,9 @@ var readerNavOracle = (entry) => {
69921
70350
  const raw = Array.isArray(round) ? round[1] : round?.answer;
69922
70351
  const answer = toBigInt16(raw);
69923
70352
  if (answer === void 0 || answer <= 0n) return void 0;
69924
- const exchangeRate = answer * ONE_E1814 / oracleScale;
70353
+ const exchangeRate = answer * ONE_E1815 / oracleScale;
69925
70354
  return {
69926
- totalAssets: totalSupply * exchangeRate * underlyingUnit / (ONE_E1814 * shareUnit),
70355
+ totalAssets: totalSupply * exchangeRate * underlyingUnit / (ONE_E1815 * shareUnit),
69927
70356
  totalSupply,
69928
70357
  exchangeRate
69929
70358
  };
@@ -69937,7 +70366,7 @@ var readerNativeWnlp = (entry) => {
69937
70366
  return {
69938
70367
  calls: [
69939
70368
  { address, name: "totalSupply", params: [] },
69940
- { address, name: "getNlpByWnlp", params: [ONE_E1814] },
70369
+ { address, name: "getNlpByWnlp", params: [ONE_E1815] },
69941
70370
  { address, name: "instantRedeemFeeBips", params: [] },
69942
70371
  { address, name: "instantRedeemEnabled", params: [] },
69943
70372
  // Falls back to the vault itself when no CreditVault is pinned —
@@ -69971,7 +70400,7 @@ var readerNativeWnlp = (entry) => {
69971
70400
  const windowSeconds = toBigInt16(window);
69972
70401
  const bips = toBigInt16(feeBips);
69973
70402
  return {
69974
- totalAssets: totalSupply * exchangeRate / ONE_E1814,
70403
+ totalAssets: totalSupply * exchangeRate / ONE_E1815,
69975
70404
  totalSupply,
69976
70405
  exchangeRate,
69977
70406
  // `instantRedeemFeeBips` on-chain is already basis points, so it
@@ -70026,7 +70455,7 @@ var readerSaturnVault = (entry) => {
70026
70455
  return {
70027
70456
  totalAssets,
70028
70457
  totalSupply,
70029
- exchangeRate: convertToAssetsRaw * ONE_E1814 / underlyingUnit,
70458
+ exchangeRate: convertToAssetsRaw * ONE_E1815 / underlyingUnit,
70030
70459
  // Shares minted for ONE underlying unit, net of the fee. Equals the
70031
70460
  // derived `1/exchangeRate` while the dial is 0, and diverges the
70032
70461
  // moment it is not.
@@ -70146,7 +70575,7 @@ var readerVenusHub = (entry) => {
70146
70575
  return {
70147
70576
  totalAssets,
70148
70577
  totalSupply,
70149
- exchangeRate: convertToAssetsRaw * ONE_E1814 / underlyingUnit,
70578
+ exchangeRate: convertToAssetsRaw * ONE_E1815 / underlyingUnit,
70150
70579
  ...supplyRate !== void 0 ? { supplyRate } : {},
70151
70580
  ...instantRedeemCapacity !== void 0 ? {
70152
70581
  instantRedeemCapacity: paused ? 0n : instantRedeemCapacity,
@@ -70181,7 +70610,7 @@ var parseStrandedRewards = (slice2, base, coreGroupAssets, hubTotalAssets) => {
70181
70610
  }
70182
70611
  if (supplySpeed === 0n) return 0;
70183
70612
  const rewardsPerYearUsd = supplySpeed * blocksPerYear * rewardPrice;
70184
- const suppliedRaw = vTokenSupply * exchangeRateStored / ONE_E1814;
70613
+ const suppliedRaw = vTokenSupply * exchangeRateStored / ONE_E1815;
70185
70614
  const suppliedUsd = suppliedRaw * underlyingPrice;
70186
70615
  if (suppliedUsd === 0n || hubTotalAssets === 0n) return void 0;
70187
70616
  const marketAprPct = Number(rewardsPerYearUsd * 1000000000n / suppliedUsd) / 1e9;
@@ -70208,7 +70637,7 @@ var readerVesperPool = (entry) => {
70208
70637
  return void 0;
70209
70638
  }
70210
70639
  if (pricePerShare === void 0 || pricePerShare <= 0n) return void 0;
70211
- const exchangeRate = pricePerShare * ONE_E1814 / underlyingUnit;
70640
+ const exchangeRate = pricePerShare * ONE_E1815 / underlyingUnit;
70212
70641
  return {
70213
70642
  totalAssets,
70214
70643
  totalSupply,
@@ -70238,7 +70667,7 @@ var readerWrenNav = (entry) => {
70238
70667
  const burncost = toBigInt16(burn);
70239
70668
  const hasBurncost = burncost !== void 0 && burncost > 0n;
70240
70669
  const exchangeRate = hasBurncost ? burncost : navPrice;
70241
- const totalAssets = totalSupply * exchangeRate * underlyingUnit / (ONE_E1814 * shareUnit);
70670
+ const totalAssets = totalSupply * exchangeRate * underlyingUnit / (ONE_E1815 * shareUnit);
70242
70671
  const burnFlag = toBigInt16(burnable);
70243
70672
  const instantRedeemEnabled = burnFlag === void 0 ? true : burnFlag > 0n;
70244
70673
  return {
@@ -70253,7 +70682,7 @@ var readerWrenNav = (entry) => {
70253
70682
  };
70254
70683
 
70255
70684
  // src/vaults/savings/readers/yieldBasisLt.ts
70256
- var ONE_SHARE = ONE_E1814;
70685
+ var ONE_SHARE = ONE_E1815;
70257
70686
  var readerYieldBasisLt = (entry) => {
70258
70687
  const underlyingUnit = 10n ** BigInt(entry.underlyingDecimals ?? entry.decimals);
70259
70688
  const amm = entry.capacityContract ?? entry.address;
@@ -70281,7 +70710,7 @@ var readerYieldBasisLt = (entry) => {
70281
70710
  }
70282
70711
  if (totalSupply === 0n || redeemRaw === 0n) return void 0;
70283
70712
  const totalAssets = totalSupply * redeemRaw / ONE_SHARE;
70284
- const exchangeRate = redeemRaw * ONE_E1814 / underlyingUnit;
70713
+ const exchangeRate = redeemRaw * ONE_E1815 / underlyingUnit;
70285
70714
  const equity = Array.isArray(valueOracle) ? toBigInt16(valueOracle[1]) : toBigInt16(valueOracle?.value);
70286
70715
  const cap = toBigInt16(maxDebt);
70287
70716
  let depositCapacity;
@@ -70343,7 +70772,7 @@ var buildReader2 = (entry) => {
70343
70772
  var resolveYieldApr2 = async (entries) => (await resolveEntryApr(entries)).apr;
70344
70773
 
70345
70774
  // src/vaults/savings/fetchPublic.ts
70346
- var ONE_E1815 = 10n ** 18n;
70775
+ var ONE_E1816 = 10n ** 18n;
70347
70776
  var resolveSelfOnly = (chainId, vault) => {
70348
70777
  const entry = findSavingsWithdrawEntry(chainId, vault);
70349
70778
  if (!entry) return void 0;
@@ -70430,8 +70859,8 @@ var fetchSavingsVaults = async (chainId, multicallRetry, prices = {}, tokenList
70430
70859
  1,
70431
70860
  Number(liquidityAmount * 1000000n / state.totalAssets) / 1e6
70432
70861
  ) : 1;
70433
- const convertToAssets = state.exchangeRate * underlyingUnit / ONE_E1815;
70434
- const convertToShares = state.convertToShares ?? (state.exchangeRate > 0n ? ONE_E1815 * shareUnit / state.exchangeRate : 0n);
70862
+ const convertToAssets = state.exchangeRate * underlyingUnit / ONE_E1816;
70863
+ const convertToShares = state.convertToShares ?? (state.exchangeRate > 0n ? ONE_E1816 * shareUnit / state.exchangeRate : 0n);
70435
70864
  const depositCapacity = state.depositCapacity?.toString();
70436
70865
  const depositCapacityFormatted = state.depositCapacity !== void 0 ? Number(state.depositCapacity) / 10 ** underlyingDec : void 0;
70437
70866
  const depositCapacityUsd = depositCapacityFormatted !== void 0 && priceUsd !== void 0 ? depositCapacityFormatted * priceUsd : void 0;
@@ -80984,6 +81413,6 @@ function earnPositionTotals(items) {
80984
81413
  };
80985
81414
  }
80986
81415
 
80987
- 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 };
81416
+ export { ApiBookSource, DEFAULT_MIDNIGHT_API, DEFAULT_OUTLIER_GUARD, DEFAULT_PROFILE_ID, DEFAULT_STALE_REJECT_SECONDS, DEFAULT_TERMMAX_API, DEFAULT_TERM_ORDER_STORE, DOLOMITE_ISO_ID_PREFIX, 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, fetchDolomiteSubAccounts, 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, getResolvedDolomiteSubAccounts, 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, parseDolomiteSubAccountId, 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, resolveDolomiteRowIdentity, 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, toDolomiteSubAccountId, toTermFillNow, toTermSheetInput, toVaultTermInput, trancheFromCounterparty, tryParseEarnUid, unflattenLenderData, updateFeedStats, usdValue, usddIlkBytes32, usddKeyParts, usddLenderKey, validateTermSheet, validateTermSheets, validateUserData, vaultSharesToAssets, vaultTermInputFromEarnMarket, vaultTermInputFromSourceRow, vaultTraits, vaultVenue, venueBrand, venueBrandKey, withMaturityLabel, withTrancheLabel };
80988
81417
  //# sourceMappingURL=index.js.map
80989
81418
  //# sourceMappingURL=index.js.map