@1delta/margin-fetcher 5.0.45 → 5.0.46

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
@@ -27679,13 +27679,13 @@ var REPAIR_BACKOFF_JITTER_MS = 60;
27679
27679
  var sleep = (ms) => new Promise((resolve) => setTimeout(resolve, Math.max(0, ms)));
27680
27680
  var backoffForRound = (round) => REPAIR_BACKOFF_BASE_MS * 2 ** round + Math.random() * REPAIR_BACKOFF_JITTER_MS;
27681
27681
  var endpointUrl = (client, rpcId) => client?.transport?.url ?? `rpc#${rpcId}`;
27682
- var resolveEndpoint = (chainId, getEvmClient16, startRpcId, tried, maxProbe = 12) => {
27682
+ var resolveEndpoint = (chainId, getEvmClient17, startRpcId, tried, maxProbe = 12) => {
27683
27683
  let fallback = null;
27684
27684
  for (let probe = 0; probe < maxProbe; probe++) {
27685
27685
  const rpcId = startRpcId + probe;
27686
27686
  let client;
27687
27687
  try {
27688
- client = getEvmClient16(chainId, rpcId);
27688
+ client = getEvmClient17(chainId, rpcId);
27689
27689
  } catch {
27690
27690
  break;
27691
27691
  }
@@ -27715,7 +27715,7 @@ var recordPermanentFailures = (slots, offset, collector) => {
27715
27715
  if (slots[i].permanent) collector.add(offset + i);
27716
27716
  }
27717
27717
  };
27718
- var repairFailedSlots = async (chainId, contracts, slots, getEvmClient16, nextRpcId, batchSize, logs, rounds = MULTICALL_REPAIR_ROUNDS, options) => {
27718
+ var repairFailedSlots = async (chainId, contracts, slots, getEvmClient17, nextRpcId, batchSize, logs, rounds = MULTICALL_REPAIR_ROUNDS, options) => {
27719
27719
  let searchFrom = nextRpcId;
27720
27720
  for (let round = 0; round < rounds; round++) {
27721
27721
  const failedIdx = [];
@@ -27725,7 +27725,7 @@ var repairFailedSlots = async (chainId, contracts, slots, getEvmClient16, nextRp
27725
27725
  if (failedIdx.length === 0) return slots;
27726
27726
  const endpoint = resolveEndpoint(
27727
27727
  chainId,
27728
- getEvmClient16,
27728
+ getEvmClient17,
27729
27729
  searchFrom,
27730
27730
  options?.tried
27731
27731
  );
@@ -27777,9 +27777,9 @@ var repairFailedSlots = async (chainId, contracts, slots, getEvmClient16, nextRp
27777
27777
  }
27778
27778
  return slots;
27779
27779
  };
27780
- var multicallViemAbiArray = async (chainId, abi, calls, getEvmClient16, retry = true, providerId = 0, retries = maxRetries, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, logs = false, retryFailed = false, permanentFailures, options) => {
27780
+ var multicallViemAbiArray = async (chainId, abi, calls, getEvmClient17, retry = true, providerId = 0, retries = maxRetries, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, logs = false, retryFailed = false, permanentFailures, options) => {
27781
27781
  const tried = options?.tried ?? /* @__PURE__ */ new Set();
27782
- const endpoint = resolveEndpoint(chainId, getEvmClient16, providerId, tried);
27782
+ const endpoint = resolveEndpoint(chainId, getEvmClient17, providerId, tried);
27783
27783
  if (!endpoint) throw new Error("No usable RPC endpoint for " + chainId);
27784
27784
  const endpointOptions = {
27785
27785
  tried,
@@ -27816,7 +27816,7 @@ var multicallViemAbiArray = async (chainId, abi, calls, getEvmClient16, retry =
27816
27816
  chainId,
27817
27817
  abi,
27818
27818
  calls,
27819
- getEvmClient16,
27819
+ getEvmClient17,
27820
27820
  retry,
27821
27821
  endpoint.rpcId + 1,
27822
27822
  retries - 1,
@@ -27832,7 +27832,7 @@ var multicallViemAbiArray = async (chainId, abi, calls, getEvmClient16, retry =
27832
27832
  chainId,
27833
27833
  contracts,
27834
27834
  slots,
27835
- getEvmClient16,
27835
+ getEvmClient17,
27836
27836
  endpoint.rpcId + 1,
27837
27837
  batchSize,
27838
27838
  logs,
@@ -27856,7 +27856,7 @@ var multicallViemAbiArray = async (chainId, abi, calls, getEvmClient16, retry =
27856
27856
  chainId,
27857
27857
  abi,
27858
27858
  calls,
27859
- getEvmClient16,
27859
+ getEvmClient17,
27860
27860
  retry,
27861
27861
  endpoint.rpcId + 1,
27862
27862
  retries,
@@ -27869,13 +27869,13 @@ var multicallViemAbiArray = async (chainId, abi, calls, getEvmClient16, retry =
27869
27869
  );
27870
27870
  }
27871
27871
  };
27872
- var multicallShardedAbiArray = async (chainId, abi, calls, getEvmClient16, poolSize, retries = maxRetries, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, logs = false, retryFailed = false, permanentFailures, options) => {
27872
+ var multicallShardedAbiArray = async (chainId, abi, calls, getEvmClient17, poolSize, retries = maxRetries, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, logs = false, retryFailed = false, permanentFailures, options) => {
27873
27873
  if (poolSize <= 1) {
27874
27874
  return multicallViemAbiArray(
27875
27875
  chainId,
27876
27876
  abi,
27877
27877
  calls,
27878
- getEvmClient16,
27878
+ getEvmClient17,
27879
27879
  true,
27880
27880
  0,
27881
27881
  retries,
@@ -27904,7 +27904,7 @@ var multicallShardedAbiArray = async (chainId, abi, calls, getEvmClient16, poolS
27904
27904
  }
27905
27905
  const results = new Array(contracts.length);
27906
27906
  const runBatch = async (batch, rpcId, attemptsLeft, size, tried) => {
27907
- const endpoint = resolveEndpoint(chainId, getEvmClient16, rpcId, tried);
27907
+ const endpoint = resolveEndpoint(chainId, getEvmClient17, rpcId, tried);
27908
27908
  if (!endpoint) {
27909
27909
  if (logs)
27910
27910
  console.log(
@@ -27948,7 +27948,7 @@ var multicallShardedAbiArray = async (chainId, abi, calls, getEvmClient16, poolS
27948
27948
  chainId,
27949
27949
  batch.items,
27950
27950
  slots,
27951
- getEvmClient16,
27951
+ getEvmClient17,
27952
27952
  endpoint.rpcId + 1,
27953
27953
  size,
27954
27954
  logs,
@@ -38778,7 +38778,7 @@ function unflattenLenderData(pools) {
38778
38778
  }
38779
38779
  return result;
38780
38780
  }
38781
- var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient16, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, retries = 3, logs = false, concurrency = 1, permanentFailures, onEndpointFailure) => {
38781
+ var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient17, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, retries = 3, logs = false, concurrency = 1, permanentFailures, onEndpointFailure) => {
38782
38782
  const queries = organizeUserQueries(queriesRaw);
38783
38783
  const builtCalls = await Promise.all(
38784
38784
  queries.map(async (query3) => {
@@ -38788,7 +38788,7 @@ var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient16, allowF
38788
38788
  query3.lender,
38789
38789
  query3.account,
38790
38790
  query3.params,
38791
- getEvmClient16
38791
+ getEvmClient17
38792
38792
  );
38793
38793
  return callData.map((call) => ({ call, abi: call.abi ?? abi }));
38794
38794
  })
@@ -38798,7 +38798,7 @@ var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient16, allowF
38798
38798
  chainId,
38799
38799
  calls.map((call) => call.abi),
38800
38800
  calls.map((call) => call.call),
38801
- getEvmClient16,
38801
+ getEvmClient17,
38802
38802
  concurrency,
38803
38803
  retries,
38804
38804
  allowFailure,
@@ -44118,13 +44118,87 @@ var capFetcher = {
44118
44118
  return { [STCUSD_KEY]: apr, [STCUSD_BRIDGED_GROUP_KEY]: apr };
44119
44119
  }
44120
44120
  };
44121
- var CHAIN_ID10 = Chain.ETHEREUM_MAINNET;
44121
+ var CHAIN_ID10 = "1";
44122
+ var WSTGBP = "0x57c3571f10767e49c9d7b60feb6c67804783b7ae";
44123
+ var WREN_NAV_GROWTH_URL = "https://wstgbp.com/api/nav-growth";
44124
+ var ONE_E189 = 10n ** 18n;
44125
+ var WINDOW_SECONDS6 = 90 * 24 * 60 * 60;
44126
+ var BLOCK_TIME_SECONDS5 = 12;
44127
+ var WINDOW_BLOCKS5 = BigInt(Math.floor(WINDOW_SECONDS6 / BLOCK_TIME_SECONDS5));
44128
+ var MAX_RPC_TRIES5 = 2;
44129
+ var ONCHAIN_DEADLINE_MS = 12e3;
44130
+ var WSTGBP_KEY = "WSTGBP";
44131
+ var WSTGBP_GROUP_KEY = "Wren Staked tGBP::wstGBP";
44132
+ var NAVPRICE_ABI = [
44133
+ {
44134
+ name: "navprice",
44135
+ type: "function",
44136
+ stateMutability: "view",
44137
+ inputs: [],
44138
+ outputs: [{ type: "uint256" }]
44139
+ }
44140
+ ];
44141
+ var fetchWrenAprPercent = async () => {
44142
+ const res = await fetch(WREN_NAV_GROWTH_URL, {
44143
+ headers: { accept: "application/json" },
44144
+ signal: AbortSignal.timeout(8e3)
44145
+ });
44146
+ if (!res.ok) throw new Error(`Wren HTTP ${res.status}`);
44147
+ const json = await res.json();
44148
+ const apr = Number(json?.aprWad) / 1e16;
44149
+ if (!Number.isFinite(apr) || apr <= 0) throw new Error("aprWad missing");
44150
+ return apr;
44151
+ };
44152
+ var readNavAt = (client, blockNumber) => client.readContract({
44153
+ address: WSTGBP,
44154
+ abi: NAVPRICE_ABI,
44155
+ functionName: "navprice",
44156
+ ...blockNumber !== void 0 ? { blockNumber } : {}
44157
+ });
44158
+ var computeAprOnChain = async () => {
44159
+ let lastErr;
44160
+ const deadline = Date.now() + ONCHAIN_DEADLINE_MS;
44161
+ for (let rpcId = 0; rpcId < MAX_RPC_TRIES5; rpcId++) {
44162
+ if (Date.now() > deadline) break;
44163
+ try {
44164
+ const client = getEvmClient(CHAIN_ID10, rpcId);
44165
+ const head = await client.getBlockNumber();
44166
+ const pastBlock = head > WINDOW_BLOCKS5 ? head - WINDOW_BLOCKS5 : 0n;
44167
+ const [navNow, navThen, headBlock, thenBlock] = await Promise.all([
44168
+ readNavAt(client),
44169
+ readNavAt(client, pastBlock),
44170
+ client.getBlock({ blockNumber: head }),
44171
+ client.getBlock({ blockNumber: pastBlock })
44172
+ ]);
44173
+ if (navNow < ONE_E189 || navThen < ONE_E189) {
44174
+ throw new Error("wstGBP: navprice below par \u2014 pruned or bad read");
44175
+ }
44176
+ if (navNow < navThen) {
44177
+ throw new Error("wstGBP: navprice decreased \u2014 non-archival RPC");
44178
+ }
44179
+ const elapsed = Number(headBlock.timestamp - thenBlock.timestamp);
44180
+ if (elapsed <= 0) throw new Error("wstGBP: non-positive window");
44181
+ return annualizeRateDeltaPercent(navNow, navThen, elapsed);
44182
+ } catch (e) {
44183
+ lastErr = e;
44184
+ }
44185
+ }
44186
+ throw lastErr ?? new Error("wstGBP: no RPC served archive state");
44187
+ };
44188
+ var wrenFetcher = {
44189
+ label: "WREN",
44190
+ fetch: async () => {
44191
+ const apr = await fetchWrenAprPercent().catch(() => computeAprOnChain()).catch(() => 0);
44192
+ return { [WSTGBP_KEY]: apr, [WSTGBP_GROUP_KEY]: apr };
44193
+ }
44194
+ };
44195
+ var CHAIN_ID11 = Chain.ETHEREUM_MAINNET;
44122
44196
  var APYUSD = "0x38eeb52f0771140d10c4e9a9a72349a329fe8a6a";
44123
44197
  var APYX_LINEAR_VEST = "0x0d62b4cc02b4b51ed19ddf41d7a7979cf394c99f";
44124
44198
  var APYX_DISCOVER_URL = "https://api.apyx.fi/v1/rewards/seasons/2/discover";
44125
44199
  var APYX_DEFILLAMA_POOL = "cb6139f9-4a68-4efd-8245-0312a92aee55";
44126
44200
  var YEAR_SECONDS10 = 31536000n;
44127
- var ONE_E189 = 10n ** 18n;
44201
+ var ONE_E1810 = 10n ** 18n;
44128
44202
  var APYUSD_KEY = "APYUSD";
44129
44203
  var APYUSD_GROUP_KEY = "apyUSD::APYUSD";
44130
44204
  var APYUSD_LEGACY_GROUP_KEY = "apyUSD::apyUSD";
@@ -44153,7 +44227,7 @@ var APYX_READ_ABI = [
44153
44227
  ];
44154
44228
  var fetchApyusdAprOnChain = async () => {
44155
44229
  const [totalAssets, unvested, periodRemaining] = await multicallRetryUniversal({
44156
- chain: CHAIN_ID10,
44230
+ chain: CHAIN_ID11,
44157
44231
  abi: APYX_READ_ABI,
44158
44232
  calls: [
44159
44233
  { address: APYUSD, name: "totalAssets", params: [] },
@@ -44170,7 +44244,7 @@ var fetchApyusdAprOnChain = async () => {
44170
44244
  throw new Error("apyx vesting state empty");
44171
44245
  }
44172
44246
  const perSecond = unvested / periodRemaining;
44173
- return Number(perSecond * YEAR_SECONDS10 * ONE_E189 / totalAssets) / 1e16;
44247
+ return Number(perSecond * YEAR_SECONDS10 * ONE_E1810 / totalAssets) / 1e16;
44174
44248
  };
44175
44249
  var fetchApyusdApyFromApi = async () => {
44176
44250
  const res = await fetch(APYX_DISCOVER_URL, {
@@ -46266,6 +46340,55 @@ var SINGLE_CHAIN_ENTRIES = {
46266
46340
  yieldFetcher: capFetcher,
46267
46341
  yieldKey: STCUSD_KEY
46268
46342
  },
46343
+ {
46344
+ // Wren wstGBP — a value-accruing wrapper over tGBP, the FCA-registered
46345
+ // GBP stablecoin issued by BCP Technologies (cash + short-dated gilts,
46346
+ // 1:1 redeemable, listed on Coinbase and Kraken). **The second non-USD
46347
+ // row on this surface after Brix's wiTRY** — see the lira note there:
46348
+ // `supplyRate` is asset-denominated, so a GBP rate belongs beside a
46349
+ // dollar one only with the currency stated, which is why it is in the
46350
+ // description and in `props.savings.base: 'GBP'`. The FX exposure is far
46351
+ // milder than the lira's, but it is the same axis.
46352
+ //
46353
+ // NOT ERC-4626 in any part — `asset()`, `totalAssets()`,
46354
+ // `convertToAssets()` and every `max*` view revert. The token prices
46355
+ // ITSELF through `navprice()`, a figure the issuer restates roughly
46356
+ // weekly in ~6.7 bps steps, hence the `wren-nav` reader.
46357
+ //
46358
+ // Fork-verified 2026-08-14 on the live contract:
46359
+ // - `mint(uint256)` is PERMISSIONLESS and settles at NAV with no entry
46360
+ // fee (`mintcost() == navprice()`): 100 tGBP → 99.1355 wstGBP from a
46361
+ // fresh address. tGBP itself transfers freely (the iTRY check).
46362
+ // - `redeem(uint256)` is the instant exit and pays `burncost()`, which
46363
+ // is ~25 bps BELOW the NAV — 10 wstGBP returned exactly
46364
+ // 10.061984858035600520 tGBP. That gap is reported as the signed
46365
+ // `redemptionDiscountBps`, not smoothed into the share price.
46366
+ // - **`smelt(uint256)` burns shares and pays NOTHING immediately**,
46367
+ // booking a record under `redemptions(i)` for later settlement. It is
46368
+ // a distinct, uncharacterised path — never route an exit to it.
46369
+ // `exit(uint256)` reverts `0x9b604d0b` for an ordinary caller.
46370
+ //
46371
+ // Small: ~83.3k wstGBP over ~84.0k tGBP (≈ $114k at 1.352 GBP/USD).
46372
+ // Ethereum only — no other chain carries the contract, though tGBP
46373
+ // itself is a LayerZero OFT on six.
46374
+ reader: "wren-nav",
46375
+ address: "0x57c3571f10767e49c9d7b60feb6c67804783b7ae",
46376
+ underlying: "0x27f6c8289550fce67f6b50bed1f519966afe5287",
46377
+ // tGBP
46378
+ symbol: "wstGBP",
46379
+ brand: "Wren",
46380
+ // The backing is an FCA-registered issuer's segregated cash and gilt
46381
+ // reserves, and the share price is a NAV the issuer restates — attested,
46382
+ // not verifiable on-chain. Same class as Apyx and Brix.
46383
+ solvency: "nav-attested",
46384
+ description: "tGBP is a pound-sterling stablecoin from BCP Technologies, an FCA-registered issuer, backed 1:1 by cash and short-dated UK gilts held in segregated accounts. wstGBP wraps it and accrues the gilt yield through a NAV the issuer restates weekly \u2014 so the rate is earned in POUNDS, and a dollar-based holder keeps only what is left after the GBP/USD move. Minting is permissionless and free; redeeming is instant but settles ~25 bps below NAV.",
46385
+ decimals: 18,
46386
+ isRebasing: false,
46387
+ isMintable: true,
46388
+ withdrawalMode: "instant",
46389
+ yieldFetcher: wrenFetcher,
46390
+ yieldKey: WSTGBP_KEY
46391
+ },
46269
46392
  {
46270
46393
  // Apyx apyUSD — ERC-4626 over apxUSD, the "Dividend-Backed
46271
46394
  // Dollar" (variable-rate perpetual preferred stock of DAT
@@ -56548,7 +56671,7 @@ var Erc4626PreviewRedeemAbi = [
56548
56671
  ];
56549
56672
 
56550
56673
  // src/vaults/lst/readers/shared.ts
56551
- var ONE_E1810 = 10n ** 18n;
56674
+ var ONE_E1811 = 10n ** 18n;
56552
56675
  var rescaleDecimals = (v, fromDec, toDec) => toDec >= fromDec ? v * 10n ** BigInt(toDec - fromDec) : v / 10n ** BigInt(fromDec - toDec);
56553
56676
  var MULTICALL3_ADDRESS = "0xcA11bde05977b3631167028862bE2a173976CA11";
56554
56677
  var Multicall3BalanceAbi = [
@@ -56591,7 +56714,7 @@ var readerBeetsStS = (entry) => ({
56591
56714
  }
56592
56715
  const liquidity = toBigInt14(pool);
56593
56716
  return {
56594
- totalAssets: totalSupply * exchangeRate / ONE_E1810,
56717
+ totalAssets: totalSupply * exchangeRate / ONE_E1811,
56595
56718
  totalSupply,
56596
56719
  exchangeRate,
56597
56720
  liquidity
@@ -56624,7 +56747,7 @@ var readerBenqiSavax = (entry) => ({
56624
56747
  {
56625
56748
  address: entry.address,
56626
56749
  name: "getPooledAvaxByShares",
56627
- params: [ONE_E1810]
56750
+ params: [ONE_E1811]
56628
56751
  },
56629
56752
  { address: entry.address, name: "totalPooledAvax", params: [] }
56630
56753
  ],
@@ -56635,7 +56758,7 @@ var readerBenqiSavax = (entry) => ({
56635
56758
  if (totalSupply === void 0 || exchangeRate === void 0) {
56636
56759
  return void 0;
56637
56760
  }
56638
- const totalAssets = toBigInt14(totalPooled) ?? totalSupply * exchangeRate / ONE_E1810;
56761
+ const totalAssets = toBigInt14(totalPooled) ?? totalSupply * exchangeRate / ONE_E1811;
56639
56762
  return {
56640
56763
  totalAssets,
56641
56764
  totalSupply,
@@ -56654,7 +56777,7 @@ var readerBgtWrapper1to1 = (entry) => ({
56654
56777
  return {
56655
56778
  totalAssets: totalSupply,
56656
56779
  totalSupply,
56657
- exchangeRate: ONE_E1810
56780
+ exchangeRate: ONE_E1811
56658
56781
  };
56659
56782
  }
56660
56783
  });
@@ -56684,7 +56807,7 @@ var readerDineroBeraEth = (entry) => ({
56684
56807
  return void 0;
56685
56808
  }
56686
56809
  return {
56687
- totalAssets: totalSupply * exchangeRate / ONE_E1810,
56810
+ totalAssets: totalSupply * exchangeRate / ONE_E1811,
56688
56811
  totalSupply,
56689
56812
  exchangeRate
56690
56813
  };
@@ -56696,7 +56819,7 @@ var readerErc4626 = (entry) => ({
56696
56819
  calls: [
56697
56820
  { address: entry.address, name: "totalAssets", params: [] },
56698
56821
  { address: entry.address, name: "totalSupply", params: [] },
56699
- { address: entry.address, name: "convertToAssets", params: [ONE_E1810] }
56822
+ { address: entry.address, name: "convertToAssets", params: [ONE_E1811] }
56700
56823
  ],
56701
56824
  abis: [Erc4626ReadAbi, TotalSupplyAbi, Erc4626ReadAbi],
56702
56825
  parse: ([assets, supply, rate]) => {
@@ -56713,7 +56836,7 @@ var readerErc4626PreviewRedeem = (entry) => ({
56713
56836
  calls: [
56714
56837
  { address: entry.address, name: "totalAssets", params: [] },
56715
56838
  { address: entry.address, name: "totalSupply", params: [] },
56716
- { address: entry.address, name: "previewRedeem", params: [ONE_E1810] }
56839
+ { address: entry.address, name: "previewRedeem", params: [ONE_E1811] }
56717
56840
  ],
56718
56841
  abis: [Erc4626PreviewRedeemAbi, TotalSupplyAbi, Erc4626PreviewRedeemAbi],
56719
56842
  parse: ([assets, supply, rate]) => {
@@ -56793,7 +56916,7 @@ var readerEtherFiWeEth = (entry) => {
56793
56916
  }
56794
56917
  }
56795
56918
  return {
56796
- totalAssets: totalSupply * exchangeRate / ONE_E1810,
56919
+ totalAssets: totalSupply * exchangeRate / ONE_E1811,
56797
56920
  totalSupply,
56798
56921
  exchangeRate,
56799
56922
  liquidity
@@ -56826,7 +56949,7 @@ var readerHyperbeatBeHype = (entry) => {
56826
56949
  return {
56827
56950
  totalAssets: totalSupply,
56828
56951
  totalSupply,
56829
- exchangeRate: ONE_E1810
56952
+ exchangeRate: ONE_E1811
56830
56953
  };
56831
56954
  }
56832
56955
  };
@@ -56834,7 +56957,7 @@ var readerHyperbeatBeHype = (entry) => {
56834
56957
  return {
56835
56958
  calls: [
56836
56959
  { address: entry.address, name: "totalSupply", params: [] },
56837
- { address: stakingCore, name: "BeHYPEToHYPE", params: [ONE_E1810] }
56960
+ { address: stakingCore, name: "BeHYPEToHYPE", params: [ONE_E1811] }
56838
56961
  ],
56839
56962
  abis: [TotalSupplyAbi, HyperbeatStakingCoreAbi],
56840
56963
  parse: ([supply, rate]) => {
@@ -56844,7 +56967,7 @@ var readerHyperbeatBeHype = (entry) => {
56844
56967
  return void 0;
56845
56968
  }
56846
56969
  return {
56847
- totalAssets: totalSupply * exchangeRate / ONE_E1810,
56970
+ totalAssets: totalSupply * exchangeRate / ONE_E1811,
56848
56971
  totalSupply,
56849
56972
  exchangeRate
56850
56973
  };
@@ -56876,7 +56999,7 @@ var readerKelpRsEth = (entry) => {
56876
56999
  return {
56877
57000
  totalAssets: totalSupply,
56878
57001
  totalSupply,
56879
- exchangeRate: ONE_E1810
57002
+ exchangeRate: ONE_E1811
56880
57003
  };
56881
57004
  }
56882
57005
  };
@@ -56894,7 +57017,7 @@ var readerKelpRsEth = (entry) => {
56894
57017
  return void 0;
56895
57018
  }
56896
57019
  return {
56897
- totalAssets: totalSupply * exchangeRate / ONE_E1810,
57020
+ totalAssets: totalSupply * exchangeRate / ONE_E1811,
56898
57021
  totalSupply,
56899
57022
  exchangeRate
56900
57023
  };
@@ -56926,7 +57049,7 @@ var readerKinetiqKHype = (entry) => {
56926
57049
  return {
56927
57050
  totalAssets: totalSupply,
56928
57051
  totalSupply,
56929
- exchangeRate: ONE_E1810
57052
+ exchangeRate: ONE_E1811
56930
57053
  };
56931
57054
  }
56932
57055
  };
@@ -56934,7 +57057,7 @@ var readerKinetiqKHype = (entry) => {
56934
57057
  return {
56935
57058
  calls: [
56936
57059
  { address: entry.address, name: "totalSupply", params: [] },
56937
- { address: accountant, name: "kHYPEToHYPE", params: [ONE_E1810] }
57060
+ { address: accountant, name: "kHYPEToHYPE", params: [ONE_E1811] }
56938
57061
  ],
56939
57062
  abis: [TotalSupplyAbi, KinetiqStakingAccountantAbi],
56940
57063
  parse: ([supply, rate]) => {
@@ -56944,7 +57067,7 @@ var readerKinetiqKHype = (entry) => {
56944
57067
  return void 0;
56945
57068
  }
56946
57069
  return {
56947
- totalAssets: totalSupply * exchangeRate / ONE_E1810,
57070
+ totalAssets: totalSupply * exchangeRate / ONE_E1811,
56948
57071
  totalSupply,
56949
57072
  exchangeRate
56950
57073
  };
@@ -56984,7 +57107,7 @@ var readerLairStKaia = (entry) => ({
56984
57107
  if (totalSupply === void 0 || exchangeRate === void 0) {
56985
57108
  return void 0;
56986
57109
  }
56987
- const totalAssets = toBigInt14(totalStaking) ?? totalSupply * exchangeRate / ONE_E1810;
57110
+ const totalAssets = toBigInt14(totalStaking) ?? totalSupply * exchangeRate / ONE_E1811;
56988
57111
  return {
56989
57112
  totalAssets,
56990
57113
  totalSupply,
@@ -57018,7 +57141,7 @@ var readerLidoWstEth = (entry) => ({
57018
57141
  return void 0;
57019
57142
  }
57020
57143
  return {
57021
- totalAssets: totalSupply * exchangeRate / ONE_E1810,
57144
+ totalAssets: totalSupply * exchangeRate / ONE_E1811,
57022
57145
  totalSupply,
57023
57146
  exchangeRate
57024
57147
  };
@@ -57056,7 +57179,7 @@ var readerListaSlisBnb = (entry) => {
57056
57179
  return {
57057
57180
  totalAssets: totalSupply,
57058
57181
  totalSupply,
57059
- exchangeRate: ONE_E1810
57182
+ exchangeRate: ONE_E1811
57060
57183
  };
57061
57184
  }
57062
57185
  };
@@ -57064,7 +57187,7 @@ var readerListaSlisBnb = (entry) => {
57064
57187
  return {
57065
57188
  calls: [
57066
57189
  { address: entry.address, name: "totalSupply", params: [] },
57067
- { address: manager, name: "convertSnBnbToBnb", params: [ONE_E1810] },
57190
+ { address: manager, name: "convertSnBnbToBnb", params: [ONE_E1811] },
57068
57191
  { address: manager, name: "getTotalPooledBnb", params: [] }
57069
57192
  ],
57070
57193
  abis: [TotalSupplyAbi, ListaStakeManagerReadAbi, ListaStakeManagerReadAbi],
@@ -57075,7 +57198,7 @@ var readerListaSlisBnb = (entry) => {
57075
57198
  return void 0;
57076
57199
  }
57077
57200
  const pooledBnb = toBigInt14(pooled);
57078
- const totalAssets = pooledBnb ?? totalSupply * exchangeRate / ONE_E1810;
57201
+ const totalAssets = pooledBnb ?? totalSupply * exchangeRate / ONE_E1811;
57079
57202
  return { totalAssets, totalSupply, exchangeRate };
57080
57203
  }
57081
57204
  };
@@ -57105,7 +57228,7 @@ var readerMantleMEth = (entry) => {
57105
57228
  return {
57106
57229
  totalAssets: totalSupply,
57107
57230
  totalSupply,
57108
- exchangeRate: ONE_E1810
57231
+ exchangeRate: ONE_E1811
57109
57232
  };
57110
57233
  }
57111
57234
  };
@@ -57113,7 +57236,7 @@ var readerMantleMEth = (entry) => {
57113
57236
  return {
57114
57237
  calls: [
57115
57238
  { address: entry.address, name: "totalSupply", params: [] },
57116
- { address: staking, name: "mETHToETH", params: [ONE_E1810] }
57239
+ { address: staking, name: "mETHToETH", params: [ONE_E1811] }
57117
57240
  ],
57118
57241
  abis: [TotalSupplyAbi, MantleStakingAbi],
57119
57242
  parse: ([supply, rate]) => {
@@ -57123,7 +57246,7 @@ var readerMantleMEth = (entry) => {
57123
57246
  return void 0;
57124
57247
  }
57125
57248
  return {
57126
- totalAssets: totalSupply * exchangeRate / ONE_E1810,
57249
+ totalAssets: totalSupply * exchangeRate / ONE_E1811,
57127
57250
  totalSupply,
57128
57251
  exchangeRate
57129
57252
  };
@@ -57144,7 +57267,7 @@ var readerOffChain = (entry) => {
57144
57267
  return {
57145
57268
  totalAssets: rescaleDecimals(totalSupply, shareDec, underlyingDec),
57146
57269
  totalSupply,
57147
- exchangeRate: ONE_E1810
57270
+ exchangeRate: ONE_E1811
57148
57271
  };
57149
57272
  }
57150
57273
  };
@@ -57178,7 +57301,7 @@ var readerRenzoEzEth = (entry) => {
57178
57301
  return {
57179
57302
  totalAssets: totalSupply,
57180
57303
  totalSupply,
57181
- exchangeRate: ONE_E1810
57304
+ exchangeRate: ONE_E1811
57182
57305
  };
57183
57306
  }
57184
57307
  };
@@ -57197,7 +57320,7 @@ var readerRenzoEzEth = (entry) => {
57197
57320
  return {
57198
57321
  totalAssets: totalTvl,
57199
57322
  totalSupply,
57200
- exchangeRate: totalTvl * ONE_E1810 / totalSupply
57323
+ exchangeRate: totalTvl * ONE_E1811 / totalSupply
57201
57324
  };
57202
57325
  }
57203
57326
  };
@@ -57253,7 +57376,7 @@ var readerRocketReth = (entry) => {
57253
57376
  }
57254
57377
  const liquidity = depositPool ? toBigInt14(slice2[2]) : void 0;
57255
57378
  return {
57256
- totalAssets: totalSupply * exchangeRate / ONE_E1810,
57379
+ totalAssets: totalSupply * exchangeRate / ONE_E1811,
57257
57380
  totalSupply,
57258
57381
  exchangeRate,
57259
57382
  liquidity
@@ -57295,7 +57418,7 @@ var readerStaderEthx = (entry) => {
57295
57418
  return {
57296
57419
  totalAssets: totalSupply,
57297
57420
  totalSupply,
57298
- exchangeRate: ONE_E1810
57421
+ exchangeRate: ONE_E1811
57299
57422
  };
57300
57423
  }
57301
57424
  };
@@ -57313,7 +57436,7 @@ var readerStaderEthx = (entry) => {
57313
57436
  return void 0;
57314
57437
  }
57315
57438
  return {
57316
- totalAssets: totalSupply * exchangeRate / ONE_E1810,
57439
+ totalAssets: totalSupply * exchangeRate / ONE_E1811,
57317
57440
  totalSupply,
57318
57441
  exchangeRate
57319
57442
  };
@@ -57330,7 +57453,7 @@ var readerStaderMaticX = (entry) => {
57330
57453
  {
57331
57454
  address: rateAddress,
57332
57455
  name: "convertMaticXToMatic",
57333
- params: [ONE_E1810],
57456
+ params: [ONE_E1811],
57334
57457
  chainId: homeChainId
57335
57458
  }
57336
57459
  ],
@@ -57345,7 +57468,7 @@ var readerStaderMaticX = (entry) => {
57345
57468
  }
57346
57469
  const isCrossChain = homeContract !== void 0;
57347
57470
  return {
57348
- totalAssets: isCrossChain ? totalSupply * amountInMatic / ONE_E1810 : totalPooledMatic ?? totalSupply * amountInMatic / ONE_E1810,
57471
+ totalAssets: isCrossChain ? totalSupply * amountInMatic / ONE_E1811 : totalPooledMatic ?? totalSupply * amountInMatic / ONE_E1811,
57349
57472
  totalSupply,
57350
57473
  exchangeRate: amountInMatic
57351
57474
  };
@@ -57377,7 +57500,7 @@ var readerStakeWiseOsEth = (entry) => {
57377
57500
  return {
57378
57501
  totalAssets: totalSupply,
57379
57502
  totalSupply,
57380
- exchangeRate: ONE_E1810
57503
+ exchangeRate: ONE_E1811
57381
57504
  };
57382
57505
  }
57383
57506
  };
@@ -57385,7 +57508,7 @@ var readerStakeWiseOsEth = (entry) => {
57385
57508
  return {
57386
57509
  calls: [
57387
57510
  { address: entry.address, name: "totalSupply", params: [] },
57388
- { address: controller, name: "convertToAssets", params: [ONE_E1810] }
57511
+ { address: controller, name: "convertToAssets", params: [ONE_E1811] }
57389
57512
  ],
57390
57513
  abis: [TotalSupplyAbi, StakeWiseOsTokenAbi],
57391
57514
  parse: ([supply, rate]) => {
@@ -57395,7 +57518,7 @@ var readerStakeWiseOsEth = (entry) => {
57395
57518
  return void 0;
57396
57519
  }
57397
57520
  return {
57398
- totalAssets: totalSupply * exchangeRate / ONE_E1810,
57521
+ totalAssets: totalSupply * exchangeRate / ONE_E1811,
57399
57522
  totalSupply,
57400
57523
  exchangeRate
57401
57524
  };
@@ -57427,7 +57550,7 @@ var readerStCelo = (entry) => {
57427
57550
  return {
57428
57551
  totalAssets: totalSupply,
57429
57552
  totalSupply,
57430
- exchangeRate: ONE_E1810
57553
+ exchangeRate: ONE_E1811
57431
57554
  };
57432
57555
  }
57433
57556
  };
@@ -57435,7 +57558,7 @@ var readerStCelo = (entry) => {
57435
57558
  return {
57436
57559
  calls: [
57437
57560
  { address: entry.address, name: "totalSupply", params: [] },
57438
- { address: manager, name: "toCelo", params: [ONE_E1810] }
57561
+ { address: manager, name: "toCelo", params: [ONE_E1811] }
57439
57562
  ],
57440
57563
  abis: [TotalSupplyAbi, StCeloManagerAbi],
57441
57564
  parse: ([supply, rate]) => {
@@ -57445,7 +57568,7 @@ var readerStCelo = (entry) => {
57445
57568
  return void 0;
57446
57569
  }
57447
57570
  return {
57448
- totalAssets: totalSupply * exchangeRate / ONE_E1810,
57571
+ totalAssets: totalSupply * exchangeRate / ONE_E1811,
57449
57572
  totalSupply,
57450
57573
  exchangeRate
57451
57574
  };
@@ -57478,7 +57601,7 @@ var readerSwellGetRate = (entry) => ({
57478
57601
  return void 0;
57479
57602
  }
57480
57603
  return {
57481
- totalAssets: totalSupply * exchangeRate / ONE_E1810,
57604
+ totalAssets: totalSupply * exchangeRate / ONE_E1811,
57482
57605
  totalSupply,
57483
57606
  exchangeRate
57484
57607
  };
@@ -57509,7 +57632,7 @@ var readerValantisWstHype = (entry) => {
57509
57632
  return {
57510
57633
  totalAssets: totalSupply,
57511
57634
  totalSupply,
57512
- exchangeRate: ONE_E1810
57635
+ exchangeRate: ONE_E1811
57513
57636
  };
57514
57637
  }
57515
57638
  };
@@ -57527,7 +57650,7 @@ var readerValantisWstHype = (entry) => {
57527
57650
  return void 0;
57528
57651
  }
57529
57652
  return {
57530
- totalAssets: totalSupply * exchangeRate / ONE_E1810,
57653
+ totalAssets: totalSupply * exchangeRate / ONE_E1811,
57531
57654
  totalSupply,
57532
57655
  exchangeRate
57533
57656
  };
@@ -57561,7 +57684,7 @@ var readerVedaAccountant = (entry) => {
57561
57684
  return {
57562
57685
  totalAssets: rescaleDecimals(totalSupply, shareDec, underlyingDec),
57563
57686
  totalSupply,
57564
- exchangeRate: ONE_E1810
57687
+ exchangeRate: ONE_E1811
57565
57688
  };
57566
57689
  }
57567
57690
  };
@@ -57580,7 +57703,7 @@ var readerVedaAccountant = (entry) => {
57580
57703
  const exchangeRate = rawRate * scale3;
57581
57704
  return {
57582
57705
  totalAssets: rescaleDecimals(
57583
- totalSupply * exchangeRate / ONE_E1810,
57706
+ totalSupply * exchangeRate / ONE_E1811,
57584
57707
  shareDec,
57585
57708
  underlyingDec
57586
57709
  ),
@@ -57616,9 +57739,9 @@ var readerAnkrRatio = (entry) => ({
57616
57739
  return void 0;
57617
57740
  }
57618
57741
  return {
57619
- totalAssets: totalSupply * ONE_E1810 / r,
57742
+ totalAssets: totalSupply * ONE_E1811 / r,
57620
57743
  totalSupply,
57621
- exchangeRate: ONE_E1810 * ONE_E1810 / r
57744
+ exchangeRate: ONE_E1811 * ONE_E1811 / r
57622
57745
  };
57623
57746
  }
57624
57747
  });
@@ -57648,7 +57771,7 @@ var readerBinanceWbeth = (entry) => ({
57648
57771
  return void 0;
57649
57772
  }
57650
57773
  return {
57651
- totalAssets: totalSupply * exchangeRate / ONE_E1810,
57774
+ totalAssets: totalSupply * exchangeRate / ONE_E1811,
57652
57775
  totalSupply,
57653
57776
  exchangeRate
57654
57777
  };
@@ -57694,7 +57817,7 @@ var readerCoreEarnRate = (entry) => {
57694
57817
  return {
57695
57818
  totalAssets: totalSupply * r / CORE_RATE_DENOM,
57696
57819
  totalSupply,
57697
- exchangeRate: r * ONE_E1810 / CORE_RATE_DENOM
57820
+ exchangeRate: r * ONE_E1811 / CORE_RATE_DENOM
57698
57821
  };
57699
57822
  }
57700
57823
  };
@@ -57716,7 +57839,7 @@ var readerCoreStakedRatio = (entry) => {
57716
57839
  return {
57717
57840
  totalAssets: totalStaked,
57718
57841
  totalSupply,
57719
- exchangeRate: totalStaked * ONE_E1810 / totalSupply
57842
+ exchangeRate: totalStaked * ONE_E1811 / totalSupply
57720
57843
  };
57721
57844
  }
57722
57845
  };
@@ -57751,7 +57874,7 @@ var readerKintsuSMon = (entry) => ({
57751
57874
  const totalAssets = toBigInt14(pooled);
57752
57875
  const totalSupply = toBigInt14(shares);
57753
57876
  if (totalAssets === void 0 || totalSupply === void 0) return void 0;
57754
- const exchangeRate = totalSupply > 0n ? totalAssets * ONE_E1810 / totalSupply : ONE_E1810;
57877
+ const exchangeRate = totalSupply > 0n ? totalAssets * ONE_E1811 / totalSupply : ONE_E1811;
57755
57878
  return { totalAssets, totalSupply, exchangeRate };
57756
57879
  }
57757
57880
  });
@@ -58187,7 +58310,7 @@ var getLstValidators = async (chainId, shareToken) => {
58187
58310
  };
58188
58311
 
58189
58312
  // src/vaults/lst/fetchPublic.ts
58190
- var ONE_E1811 = 10n ** 18n;
58313
+ var ONE_E1812 = 10n ** 18n;
58191
58314
  var ERC20_BALANCE_ABI = parseAbi([
58192
58315
  "function balanceOf(address) view returns (uint256)"
58193
58316
  ]);
@@ -58302,8 +58425,8 @@ var fetchLstShareTokens = async (chainId, multicallRetry, prices = {}, tokenList
58302
58425
  const underlyingUnit = 10n ** BigInt(underlyingDec);
58303
58426
  const totalAssetsFormatted = Number(state.totalAssets) / 10 ** underlyingDec;
58304
58427
  const totalAssetsUsd = priceUsd !== void 0 ? totalAssetsFormatted * priceUsd : 0;
58305
- const convertToAssets = state.exchangeRate * underlyingUnit / ONE_E1811;
58306
- const convertToShares = state.exchangeRate > 0n ? ONE_E1811 * shareUnit / state.exchangeRate : 0n;
58428
+ const convertToAssets = state.exchangeRate * underlyingUnit / ONE_E1812;
58429
+ const convertToShares = state.exchangeRate > 0n ? ONE_E1812 * shareUnit / state.exchangeRate : 0n;
58307
58430
  let liquidityRaw;
58308
58431
  if (state.liquidity !== void 0) {
58309
58432
  liquidityRaw = state.liquidity;
@@ -61755,6 +61878,29 @@ var CooldownDurationAbi = [
61755
61878
  outputs: [{ type: "uint24" }]
61756
61879
  }
61757
61880
  ];
61881
+ var WrenNavReadAbi = [
61882
+ {
61883
+ name: "navprice",
61884
+ type: "function",
61885
+ stateMutability: "view",
61886
+ inputs: [],
61887
+ outputs: [{ type: "uint256" }]
61888
+ },
61889
+ {
61890
+ name: "burncost",
61891
+ type: "function",
61892
+ stateMutability: "view",
61893
+ inputs: [],
61894
+ outputs: [{ type: "uint256" }]
61895
+ },
61896
+ {
61897
+ name: "burnable",
61898
+ type: "function",
61899
+ stateMutability: "view",
61900
+ inputs: [],
61901
+ outputs: [{ type: "uint256" }]
61902
+ }
61903
+ ];
61758
61904
  var NavOracleReadAbi = [
61759
61905
  {
61760
61906
  name: "latestRoundData",
@@ -61772,7 +61918,7 @@ var NavOracleReadAbi = [
61772
61918
  ];
61773
61919
 
61774
61920
  // src/vaults/savings/readers/shared.ts
61775
- var ONE_E1812 = 10n ** 18n;
61921
+ var ONE_E1813 = 10n ** 18n;
61776
61922
  var toBigInt16 = (v) => {
61777
61923
  if (v === void 0 || v === null) return void 0;
61778
61924
  if (typeof v === "bigint") return v;
@@ -61813,7 +61959,7 @@ var readerErc46262 = (entry) => {
61813
61959
  return {
61814
61960
  totalAssets,
61815
61961
  totalSupply,
61816
- exchangeRate: convertToAssetsRaw * ONE_E1812 / underlyingUnit
61962
+ exchangeRate: convertToAssetsRaw * ONE_E1813 / underlyingUnit
61817
61963
  };
61818
61964
  }
61819
61965
  };
@@ -61842,7 +61988,7 @@ var readerErc4626Cooldown = (entry) => {
61842
61988
  return {
61843
61989
  totalAssets,
61844
61990
  totalSupply,
61845
- exchangeRate: convertToAssetsRaw * ONE_E1812 / underlyingUnit,
61991
+ exchangeRate: convertToAssetsRaw * ONE_E1813 / underlyingUnit,
61846
61992
  withdrawalCooldownSeconds: cooldownSecs === void 0 ? void 0 : Number(cooldownSecs)
61847
61993
  };
61848
61994
  }
@@ -62032,7 +62178,7 @@ var readerErc4626Idle = (entry) => {
62032
62178
  return {
62033
62179
  totalAssets,
62034
62180
  totalSupply,
62035
- exchangeRate: convertToAssetsRaw * ONE_E1812 / underlyingUnit,
62181
+ exchangeRate: convertToAssetsRaw * ONE_E1813 / underlyingUnit,
62036
62182
  ...capacity !== void 0 ? {
62037
62183
  instantRedeemCapacity: capacity,
62038
62184
  instantRedeemEnabled: true,
@@ -62081,7 +62227,7 @@ var readerErc4626WithdrawLimit = (entry) => {
62081
62227
  return {
62082
62228
  totalAssets,
62083
62229
  totalSupply,
62084
- exchangeRate: convertToAssetsRaw * ONE_E1812 / underlyingUnit,
62230
+ exchangeRate: convertToAssetsRaw * ONE_E1813 / underlyingUnit,
62085
62231
  ...capacity !== void 0 ? {
62086
62232
  instantRedeemCapacity: capacity,
62087
62233
  instantRedeemEnabled: true,
@@ -62110,7 +62256,7 @@ var readerFrankencoinSavings = (entry) => ({
62110
62256
  // `fetchPublic` derives `convertToAssets` / `convertToShares` from
62111
62257
  // `exchangeRate`, and 1e18 makes them the identity.
62112
62258
  totalSupply: deposits,
62113
- exchangeRate: ONE_E1812
62259
+ exchangeRate: ONE_E1813
62114
62260
  };
62115
62261
  }
62116
62262
  });
@@ -62136,7 +62282,7 @@ var readerNavOracle = (entry) => {
62136
62282
  const exchangeRate = toBigInt16(raw);
62137
62283
  if (exchangeRate === void 0 || exchangeRate <= 0n) return void 0;
62138
62284
  return {
62139
- totalAssets: totalSupply * exchangeRate * underlyingUnit / (ONE_E1812 * shareUnit),
62285
+ totalAssets: totalSupply * exchangeRate * underlyingUnit / (ONE_E1813 * shareUnit),
62140
62286
  totalSupply,
62141
62287
  exchangeRate
62142
62288
  };
@@ -62150,7 +62296,7 @@ var readerNativeWnlp = (entry) => {
62150
62296
  return {
62151
62297
  calls: [
62152
62298
  { address, name: "totalSupply", params: [] },
62153
- { address, name: "getNlpByWnlp", params: [ONE_E1812] },
62299
+ { address, name: "getNlpByWnlp", params: [ONE_E1813] },
62154
62300
  { address, name: "instantRedeemFeeBips", params: [] },
62155
62301
  { address, name: "instantRedeemEnabled", params: [] },
62156
62302
  // Falls back to the vault itself when no CreditVault is pinned —
@@ -62184,7 +62330,7 @@ var readerNativeWnlp = (entry) => {
62184
62330
  const windowSeconds = toBigInt16(window);
62185
62331
  const bips = toBigInt16(feeBips);
62186
62332
  return {
62187
- totalAssets: totalSupply * exchangeRate / ONE_E1812,
62333
+ totalAssets: totalSupply * exchangeRate / ONE_E1813,
62188
62334
  totalSupply,
62189
62335
  exchangeRate,
62190
62336
  // `instantRedeemFeeBips` on-chain is already basis points, so it
@@ -62201,8 +62347,42 @@ var readerNativeWnlp = (entry) => {
62201
62347
  };
62202
62348
  };
62203
62349
 
62350
+ // src/vaults/savings/readers/wrenNav.ts
62351
+ var readerWrenNav = (entry) => {
62352
+ const shareUnit = 10n ** BigInt(entry.decimals);
62353
+ const underlyingUnit = 10n ** BigInt(entry.underlyingDecimals ?? entry.decimals);
62354
+ return {
62355
+ calls: [
62356
+ { address: entry.address, name: "totalSupply", params: [] },
62357
+ { address: entry.address, name: "burncost", params: [] },
62358
+ { address: entry.address, name: "navprice", params: [] },
62359
+ { address: entry.address, name: "burnable", params: [] }
62360
+ ],
62361
+ abis: [TotalSupplyAbi2, WrenNavReadAbi, WrenNavReadAbi, WrenNavReadAbi],
62362
+ parse: ([supply, burn, nav, burnable]) => {
62363
+ const totalSupply = toBigInt16(supply);
62364
+ const navPrice = toBigInt16(nav);
62365
+ if (totalSupply === void 0) return void 0;
62366
+ if (navPrice === void 0 || navPrice <= 0n) return void 0;
62367
+ const burncost = toBigInt16(burn);
62368
+ const hasBurncost = burncost !== void 0 && burncost > 0n;
62369
+ const exchangeRate = hasBurncost ? burncost : navPrice;
62370
+ const totalAssets = totalSupply * exchangeRate * underlyingUnit / (ONE_E1813 * shareUnit);
62371
+ const burnFlag = toBigInt16(burnable);
62372
+ const instantRedeemEnabled = burnFlag === void 0 ? true : burnFlag > 0n;
62373
+ return {
62374
+ totalAssets,
62375
+ totalSupply,
62376
+ exchangeRate,
62377
+ fundamentalExchangeRate: hasBurncost ? navPrice : void 0,
62378
+ instantRedeemEnabled
62379
+ };
62380
+ }
62381
+ };
62382
+ };
62383
+
62204
62384
  // src/vaults/savings/readers/yieldBasisLt.ts
62205
- var ONE_SHARE = ONE_E1812;
62385
+ var ONE_SHARE = ONE_E1813;
62206
62386
  var readerYieldBasisLt = (entry) => {
62207
62387
  const underlyingUnit = 10n ** BigInt(entry.underlyingDecimals ?? entry.decimals);
62208
62388
  const amm = entry.capacityContract ?? entry.address;
@@ -62230,7 +62410,7 @@ var readerYieldBasisLt = (entry) => {
62230
62410
  }
62231
62411
  if (totalSupply === 0n || redeemRaw === 0n) return void 0;
62232
62412
  const totalAssets = totalSupply * redeemRaw / ONE_SHARE;
62233
- const exchangeRate = redeemRaw * ONE_E1812 / underlyingUnit;
62413
+ const exchangeRate = redeemRaw * ONE_E1813 / underlyingUnit;
62234
62414
  const equity = Array.isArray(valueOracle) ? toBigInt16(valueOracle[1]) : toBigInt16(valueOracle?.value);
62235
62415
  const cap = toBigInt16(maxDebt);
62236
62416
  let depositCapacity;
@@ -62260,6 +62440,8 @@ var buildReader2 = (entry) => {
62260
62440
  return readerFrankencoinSavings(entry);
62261
62441
  case "yieldbasis-lt":
62262
62442
  return readerYieldBasisLt(entry);
62443
+ case "wren-nav":
62444
+ return readerWrenNav(entry);
62263
62445
  case "erc4626-cooldown":
62264
62446
  return readerErc4626Cooldown(entry);
62265
62447
  case "erc4626-idle":
@@ -62276,7 +62458,7 @@ var buildReader2 = (entry) => {
62276
62458
  var resolveYieldApr2 = async (entries) => (await resolveEntryApr(entries)).apr;
62277
62459
 
62278
62460
  // src/vaults/savings/fetchPublic.ts
62279
- var ONE_E1813 = 10n ** 18n;
62461
+ var ONE_E1814 = 10n ** 18n;
62280
62462
  var fetchSavingsVaults = async (chainId, multicallRetry, prices = {}, tokenList = {}) => {
62281
62463
  const entries = getSavingsRegistry(chainId);
62282
62464
  if (entries.length === 0) return {};
@@ -62325,8 +62507,8 @@ var fetchSavingsVaults = async (chainId, multicallRetry, prices = {}, tokenList
62325
62507
  1,
62326
62508
  Number(liquidityAmount * 1000000n / state.totalAssets) / 1e6
62327
62509
  ) : 1;
62328
- const convertToAssets = state.exchangeRate * underlyingUnit / ONE_E1813;
62329
- const convertToShares = state.exchangeRate > 0n ? ONE_E1813 * shareUnit / state.exchangeRate : 0n;
62510
+ const convertToAssets = state.exchangeRate * underlyingUnit / ONE_E1814;
62511
+ const convertToShares = state.exchangeRate > 0n ? ONE_E1814 * shareUnit / state.exchangeRate : 0n;
62330
62512
  const depositCapacity = state.depositCapacity?.toString();
62331
62513
  const depositCapacityFormatted = state.depositCapacity !== void 0 ? Number(state.depositCapacity) / 10 ** underlyingDec : void 0;
62332
62514
  const depositCapacityUsd = depositCapacityFormatted !== void 0 && priceUsd !== void 0 ? depositCapacityFormatted * priceUsd : void 0;
@@ -63477,6 +63659,11 @@ var STABLECOIN_SYMBOLS = /* @__PURE__ */ new Set([
63477
63659
  "ZCHF",
63478
63660
  "JPYC",
63479
63661
  "GBPT",
63662
+ // BCP Technologies' Tokenised GBP — cash + short-dated gilts, 1:1
63663
+ // redeemable. Drives `denomination` for Wren's wstGBP row, whose underlying
63664
+ // this is. NB `TGBP` is also TrueGBP's ticker; both are GBP stablecoins, so
63665
+ // the classification is right either way.
63666
+ "TGBP",
63480
63667
  "XSGD",
63481
63668
  "TRYB",
63482
63669
  // Brix iTRY — lira-pegged, backed by a regulated basket of Turkish