@1delta/margin-fetcher 0.0.280 → 0.0.282

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
@@ -4,7 +4,7 @@ import './chunk-PR4QN5HX.js';
4
4
  import { Lender, isAaveType, isCompoundV3, isMultiMarket, isSiloV2Type, isSiloV3Type, isDolomite, isAaveV4Type, isInit, isMorphoType, isCompoundV2Type, isVenusType, isSumerType, AAVE_V3_LENDERS, AAVE_V2_LENDERS, isAaveV2Type, isAaveV32Type, isAaveV3Type, isEulerType, isFluid, isGearboxV3, isYLDR, isCompoundV3Type, isLista, isTectonicType, isKineticType, isBenqiType } from '@1delta/lender-registry';
5
5
  export { isAaveType, isAaveV2Type, isAaveV32Type, isAaveV3Type, isCompoundV3, isCompoundV3Type, isInit, isMorphoType, isMultiMarket, isYLDR } from '@1delta/lender-registry';
6
6
  import lodash from 'lodash';
7
- import { getEvmChain, getEvmClient, getEvmClientUniversal, multicallRetryUniversal, getEvmClientWithCustomRpcsUniversal } from '@1delta/providers';
7
+ import { getEvmChain, getEvmClient, getEvmClientUniversal, multicallRetryUniversal } from '@1delta/providers';
8
8
  import { MetaMorphoAbi, FluidLendingResolverAbi, FluidVaultResolverAbi, MoolahVaultAbi, MorphoLensAbi, AaveV4SpokeAbi, AaveV4OracleAbi, AaveV4HubAbi, DolomiteMarginAbi, GearboxMarketCompressorV310Abi, MorphoBlueAbi, GearboxCreditAccountCompressorV310Abi } from '@1delta/abis';
9
9
  export { MorphoLensAbi } from '@1delta/abis';
10
10
  import { prepareDebitDataMulticall, prepareLenderDebitMulticall, parseDebitDataResult, parseLenderDebitResult, getPermit2ContractAddress, getCompoundV3CometAddress as getCompoundV3CometAddress$1, getMorphoAddress, getAaveCollateralTokenAddress, getSiloHalfForUnderlying, InitMarginAddresses, getLstAcceptedInputs } from '@1delta/calldata-sdk';
@@ -32486,97 +32486,42 @@ var ankrFetcher = {
32486
32486
  return result;
32487
32487
  }
32488
32488
  };
32489
- var STAKE_MANAGER = "0x1adb950d8bb3da4be104211d5ab038628e477fe6";
32489
+
32490
+ // src/yields/intrinsic/fetchers/lista.ts
32491
+ var HISTORY_URL = "https://api.lista.org/api/datachart/history";
32490
32492
  var SLISBNB = "Lista Staked BNB::slisBNB";
32491
- var CONVERT_ABI = [
32492
- {
32493
- name: "convertSnBnbToBnb",
32494
- type: "function",
32495
- stateMutability: "view",
32496
- inputs: [{ type: "uint256" }],
32497
- outputs: [{ type: "uint256" }]
32498
- }
32499
- ];
32500
- var ONE_E18 = 10n ** 18n;
32501
- var YEAR_SECONDS2 = 31536e3;
32502
- var WINDOWS_SECONDS = [7 * 86400, 3 * 86400, 86400];
32503
- var BLOCK_TIME_SAMPLE = 10000n;
32504
- var BNB_ARCHIVE_RPCS = {
32505
- [Chain.BNB_SMART_CHAIN_MAINNET]: [
32506
- "https://bsc.drpc.org",
32507
- "https://bsc-rpc.publicnode.com",
32508
- "https://bsc.api.onfinality.io/public",
32509
- "https://1rpc.io/bnb"
32510
- ]
32511
- };
32512
- var RPC_ATTEMPTS2 = BNB_ARCHIVE_RPCS[Chain.BNB_SMART_CHAIN_MAINNET].length;
32513
- var TOTAL_TIMEOUT_MS2 = 8e3;
32514
- var withTimeout2 = (p, ms) => Promise.race([
32515
- p,
32516
- new Promise(
32517
- (_3, reject) => setTimeout(() => reject(new Error("lista slisBNB yield timeout")), ms)
32518
- )
32519
- ]);
32520
- var readRate = (client, blockNumber) => client.readContract({
32521
- address: STAKE_MANAGER,
32522
- abi: CONVERT_ABI,
32523
- functionName: "convertSnBnbToBnb",
32524
- args: [ONE_E18],
32525
- blockNumber
32526
- });
32527
- var sampleApr2 = async () => {
32528
- for (let rpcId = 0; rpcId < RPC_ATTEMPTS2; rpcId++) {
32529
- try {
32530
- const client = getEvmClientWithCustomRpcsUniversal({
32531
- chain: Chain.BNB_SMART_CHAIN_MAINNET,
32532
- rpcId,
32533
- customRpcs: BNB_ARCHIVE_RPCS
32534
- });
32535
- const latest = await client.getBlockNumber();
32536
- if (latest <= BLOCK_TIME_SAMPLE) continue;
32537
- const [blockNow, blockRef] = await Promise.all([
32538
- client.getBlock({ blockNumber: latest }),
32539
- client.getBlock({ blockNumber: latest - BLOCK_TIME_SAMPLE })
32540
- ]);
32541
- const secondsPerBlock = Number(blockNow.timestamp - blockRef.timestamp) / Number(BLOCK_TIME_SAMPLE);
32542
- if (!(secondsPerBlock > 0)) continue;
32543
- for (const windowSeconds of WINDOWS_SECONDS) {
32544
- const back = BigInt(Math.round(windowSeconds / secondsPerBlock));
32545
- if (latest <= back) continue;
32546
- const oldBlock = latest - back;
32547
- try {
32548
- const [rNow, rOld, blockOld] = await Promise.all([
32549
- readRate(client, latest),
32550
- readRate(client, oldBlock),
32551
- client.getBlock({ blockNumber: oldBlock })
32552
- ]);
32553
- const elapsed = Number(blockNow.timestamp - blockOld.timestamp);
32554
- if (rOld <= 0n || rNow <= rOld || elapsed <= 0) continue;
32555
- const growth = Number(rNow - rOld) / Number(rOld);
32556
- const apr = growth * (YEAR_SECONDS2 / elapsed) * 100;
32557
- if (Number.isFinite(apr) && apr > 0) return apr;
32558
- } catch {
32559
- }
32560
- }
32561
- } catch {
32562
- }
32563
- }
32564
- return 0;
32565
- };
32493
+ var DAY_SECONDS = 86400;
32494
+ var LOOKBACK_SECONDS = 14 * DAY_SECONDS;
32495
+ var TIMEOUT_MS = 8e3;
32566
32496
  var slisBnbFetcher = {
32567
32497
  label: "SLISBNB",
32568
32498
  fetch: async () => {
32499
+ const nowSec = Math.floor(Date.now() / 1e3);
32500
+ const url = `${HISTORY_URL}?name=slisBNBRate&cycle=1&startTime=${nowSec - LOOKBACK_SECONDS}&endTime=${nowSec}`;
32501
+ const controller = new AbortController();
32502
+ const timer = setTimeout(() => controller.abort(), TIMEOUT_MS);
32569
32503
  try {
32570
- return { [SLISBNB]: await withTimeout2(sampleApr2(), TOTAL_TIMEOUT_MS2) };
32571
- } catch {
32572
- return { [SLISBNB]: 0 };
32504
+ const res = await fetch(url, {
32505
+ method: "GET",
32506
+ headers: { Accept: "application/json" },
32507
+ signal: controller.signal
32508
+ }).then((r) => r.json());
32509
+ const points = res.data ?? [];
32510
+ if (points.length === 0) return { [SLISBNB]: 0 };
32511
+ const latest = points.reduce(
32512
+ (a, b) => b.chartTime > a.chartTime ? b : a
32513
+ );
32514
+ const apr = Number(latest.amount);
32515
+ return { [SLISBNB]: Number.isFinite(apr) && apr > 0 ? apr : 0 };
32516
+ } finally {
32517
+ clearTimeout(timer);
32573
32518
  }
32574
32519
  }
32575
32520
  };
32576
32521
  var CHAIN_ID = "80094";
32577
32522
  var IBERA = "0x9b6761bf2397bb5a6624a856cc84a3a14dcd3fe5";
32578
- var ONE_E182 = 10n ** 18n;
32579
- var YEAR_SECONDS3 = 365 * 24 * 60 * 60;
32523
+ var ONE_E18 = 10n ** 18n;
32524
+ var YEAR_SECONDS2 = 365 * 24 * 60 * 60;
32580
32525
  var WINDOW_SECONDS = 3 * 24 * 60 * 60;
32581
32526
  var BLOCK_TIME_SECONDS = 2;
32582
32527
  var WINDOW_BLOCKS = BigInt(Math.floor(WINDOW_SECONDS / BLOCK_TIME_SECONDS));
@@ -32594,7 +32539,7 @@ var readRateAt = (client, blockNumber) => client.readContract({
32594
32539
  address: IBERA,
32595
32540
  abi: CONVERT_TO_ASSETS_ABI,
32596
32541
  functionName: "convertToAssets",
32597
- args: [ONE_E182],
32542
+ args: [ONE_E18],
32598
32543
  ...blockNumber !== void 0 ? { blockNumber } : {}
32599
32544
  });
32600
32545
  var computeApr = async () => {
@@ -32610,7 +32555,7 @@ var computeApr = async () => {
32610
32555
  client.getBlock({ blockNumber: head }),
32611
32556
  client.getBlock({ blockNumber: pastBlock })
32612
32557
  ]);
32613
- if (rateNow < ONE_E182 || rateThen < ONE_E182 || rateNow < rateThen) {
32558
+ if (rateNow < ONE_E18 || rateThen < ONE_E18 || rateNow < rateThen) {
32614
32559
  throw new Error(
32615
32560
  `non-archival or invalid rates (now=${rateNow}, then=${rateThen})`
32616
32561
  );
@@ -32618,7 +32563,7 @@ var computeApr = async () => {
32618
32563
  const elapsed = Number(headBlock.timestamp - thenBlock.timestamp);
32619
32564
  if (elapsed <= 0) throw new Error("non-positive elapsed window");
32620
32565
  const growth = Number(rateNow - rateThen) / Number(rateThen);
32621
- const apr = growth * (YEAR_SECONDS3 / elapsed) * 100;
32566
+ const apr = growth * (YEAR_SECONDS2 / elapsed) * 100;
32622
32567
  if (!Number.isFinite(apr) || apr < 0) throw new Error(`bad apr ${apr}`);
32623
32568
  return apr;
32624
32569
  } catch (e) {
@@ -32668,8 +32613,8 @@ var ibgtFetcher = {
32668
32613
  var CHAIN_ID2 = "1";
32669
32614
  var APXETH = "0x9ba021b0a9b958b5e75ce9f6dff97c7ee52cb3e6";
32670
32615
  var APXETH_DEFILLAMA_POOL = "fc25b5ff-2ba8-44a3-895b-e0d22d96365f";
32671
- var ONE_E183 = 10n ** 18n;
32672
- var YEAR_SECONDS4 = 365 * 24 * 60 * 60;
32616
+ var ONE_E182 = 10n ** 18n;
32617
+ var YEAR_SECONDS3 = 365 * 24 * 60 * 60;
32673
32618
  var WINDOW_SECONDS2 = 7 * 24 * 60 * 60;
32674
32619
  var BLOCK_TIME_SECONDS2 = 12;
32675
32620
  var WINDOW_BLOCKS2 = BigInt(Math.floor(WINDOW_SECONDS2 / BLOCK_TIME_SECONDS2));
@@ -32687,7 +32632,7 @@ var readRateAt2 = (client, blockNumber) => client.readContract({
32687
32632
  address: APXETH,
32688
32633
  abi: CONVERT_TO_ASSETS_ABI2,
32689
32634
  functionName: "convertToAssets",
32690
- args: [ONE_E183],
32635
+ args: [ONE_E182],
32691
32636
  ...blockNumber !== void 0 ? { blockNumber } : {}
32692
32637
  });
32693
32638
  var computeApr2 = async () => {
@@ -32703,7 +32648,7 @@ var computeApr2 = async () => {
32703
32648
  client.getBlock({ blockNumber: head }),
32704
32649
  client.getBlock({ blockNumber: pastBlock })
32705
32650
  ]);
32706
- if (rateNow < ONE_E183 || rateThen < ONE_E183 || rateNow < rateThen) {
32651
+ if (rateNow < ONE_E182 || rateThen < ONE_E182 || rateNow < rateThen) {
32707
32652
  throw new Error(
32708
32653
  `non-archival or invalid rates (now=${rateNow}, then=${rateThen})`
32709
32654
  );
@@ -32711,7 +32656,7 @@ var computeApr2 = async () => {
32711
32656
  const elapsed = Number(headBlock.timestamp - thenBlock.timestamp);
32712
32657
  if (elapsed <= 0) throw new Error("non-positive elapsed window");
32713
32658
  const growth = Number(rateNow - rateThen) / Number(rateThen);
32714
- const apr = growth * (YEAR_SECONDS4 / elapsed) * 100;
32659
+ const apr = growth * (YEAR_SECONDS3 / elapsed) * 100;
32715
32660
  if (!Number.isFinite(apr) || apr < 0) throw new Error(`bad apr ${apr}`);
32716
32661
  return apr;
32717
32662
  } catch (e) {
@@ -32747,7 +32692,7 @@ var PRIME_STAKING_BASE_APY = 4.5;
32747
32692
  var CHAIN_ID3 = "50";
32748
32693
  var VAULT = "0x98d916f5773ac0482b49856f2659d6c32114c4ba";
32749
32694
  var SUBGRAPH_URL = "https://subgraph.primenumbers.xyz/subgraphs/name/liquidstaking";
32750
- var YEAR_SECONDS5 = 365 * 24 * 60 * 60;
32695
+ var YEAR_SECONDS4 = 365 * 24 * 60 * 60;
32751
32696
  var WINDOW_SECONDS3 = 180 * 24 * 60 * 60;
32752
32697
  var MIN_SANE_APR = 1;
32753
32698
  var MAX_SANE_APR = 12;
@@ -32792,7 +32737,7 @@ var computeApr3 = async () => {
32792
32737
  ]);
32793
32738
  if (totalAssets <= 0n) throw new Error("zero TVL");
32794
32739
  const growth = Number(rewardsWei) / Number(totalAssets);
32795
- const apr = growth * (YEAR_SECONDS5 / WINDOW_SECONDS3) * 100;
32740
+ const apr = growth * (YEAR_SECONDS4 / WINDOW_SECONDS3) * 100;
32796
32741
  if (!Number.isFinite(apr)) throw new Error(`bad apr ${apr}`);
32797
32742
  return apr;
32798
32743
  };
@@ -32810,8 +32755,8 @@ var psxdcFetcher = {
32810
32755
  var STCORE_KEY = "Liquid staked CORE::stCORE";
32811
32756
  var DUALCORE_KEY = "b14g dualCORE::DUALCORE";
32812
32757
  var SCORE_KEY = "StakedCore::SCORE";
32813
- var YEAR_SECONDS6 = 365 * 24 * 60 * 60;
32814
- var ONE_E184 = 10n ** 18n;
32758
+ var YEAR_SECONDS5 = 365 * 24 * 60 * 60;
32759
+ var ONE_E183 = 10n ** 18n;
32815
32760
  var EARN = "0xf5fa1728babc3f8d2a617397fac2696c958c3409";
32816
32761
  var SCORE = "0xa20b3b97df3a02f9185175760300a06b4e0a2c05";
32817
32762
  var GET_EXCHANGE_RATES_ABI = [
@@ -32848,7 +32793,7 @@ var computeStCoreApr = async () => {
32848
32793
  const days = rates.length - 1;
32849
32794
  if (first <= 0n || last < first) continue;
32850
32795
  const growth = Number(last - first) / Number(first);
32851
- const apr = growth * (YEAR_SECONDS6 / (days * 86400)) * 100;
32796
+ const apr = growth * (YEAR_SECONDS5 / (days * 86400)) * 100;
32852
32797
  if (Number.isFinite(apr) && apr >= 0) return apr;
32853
32798
  } catch {
32854
32799
  }
@@ -32887,7 +32832,7 @@ var computeScoreApr = async () => {
32887
32832
  ]);
32888
32833
  const sup = supply;
32889
32834
  if (sup <= 0n) return 0;
32890
- return Number(staked * ONE_E184 / sup) / 1e18;
32835
+ return Number(staked * ONE_E183 / sup) / 1e18;
32891
32836
  };
32892
32837
  for (const window of WINDOWS) {
32893
32838
  for (let rpcId = 0; rpcId < 3; rpcId++) {
@@ -32904,7 +32849,7 @@ var computeScoreApr = async () => {
32904
32849
  ]);
32905
32850
  const elapsed = Number(bNow.timestamp - bOld.timestamp);
32906
32851
  if (rOld <= 0 || rNow <= rOld || elapsed <= 0) continue;
32907
- const apr = (rNow - rOld) / rOld * (YEAR_SECONDS6 / elapsed) * 100;
32852
+ const apr = (rNow - rOld) / rOld * (YEAR_SECONDS5 / elapsed) * 100;
32908
32853
  if (Number.isFinite(apr) && apr > 0) return apr;
32909
32854
  } catch {
32910
32855
  }
@@ -38272,7 +38217,7 @@ var fetchEulerEarnVaults = async (chainId, prices = {}, tokenList = {}) => {
38272
38217
  var CHAIN_ID4 = "1";
38273
38218
  var SWBTC = "0x8db2350d78abc13f5673a411d4700bcf87864dde";
38274
38219
  var ONE_E8 = 10n ** 8n;
38275
- var YEAR_SECONDS7 = 365 * 24 * 60 * 60;
38220
+ var YEAR_SECONDS6 = 365 * 24 * 60 * 60;
38276
38221
  var WINDOW_SECONDS4 = 7 * 24 * 60 * 60;
38277
38222
  var BLOCK_TIME_SECONDS3 = 12;
38278
38223
  var WINDOW_BLOCKS3 = BigInt(Math.floor(WINDOW_SECONDS4 / BLOCK_TIME_SECONDS3));
@@ -38314,7 +38259,7 @@ var computeApr4 = async () => {
38314
38259
  const elapsed = Number(headBlock.timestamp - thenBlock.timestamp);
38315
38260
  if (elapsed <= 0) throw new Error(`bad elapsed ${elapsed}`);
38316
38261
  const growth = Number(rateNow) / Number(rateThen) - 1;
38317
- const apr = growth * (YEAR_SECONDS7 / elapsed) * 100;
38262
+ const apr = growth * (YEAR_SECONDS6 / elapsed) * 100;
38318
38263
  if (!Number.isFinite(apr) || apr < 0) throw new Error(`bad apr ${apr}`);
38319
38264
  return apr;
38320
38265
  } catch (e) {
@@ -38337,8 +38282,8 @@ var swBtcFetcher = {
38337
38282
  };
38338
38283
  var CHAIN_ID5 = "42220";
38339
38284
  var MANAGER = "0x0239b96d10a434a56cc9e09383077a0490cf9398";
38340
- var ONE_E185 = 10n ** 18n;
38341
- var YEAR_SECONDS8 = 365 * 24 * 60 * 60;
38285
+ var ONE_E184 = 10n ** 18n;
38286
+ var YEAR_SECONDS7 = 365 * 24 * 60 * 60;
38342
38287
  var WINDOW_SECONDS5 = 7 * 24 * 60 * 60;
38343
38288
  var BLOCK_TIME_SECONDS4 = 1;
38344
38289
  var WINDOW_BLOCKS4 = BigInt(Math.floor(WINDOW_SECONDS5 / BLOCK_TIME_SECONDS4));
@@ -38356,7 +38301,7 @@ var readRateAt4 = (client, blockNumber) => client.readContract({
38356
38301
  address: MANAGER,
38357
38302
  abi: TO_CELO_ABI,
38358
38303
  functionName: "toCelo",
38359
- args: [ONE_E185],
38304
+ args: [ONE_E184],
38360
38305
  ...blockNumber !== void 0 ? { blockNumber } : {}
38361
38306
  });
38362
38307
  var computeApr5 = async () => {
@@ -38372,7 +38317,7 @@ var computeApr5 = async () => {
38372
38317
  client.getBlock({ blockNumber: head }),
38373
38318
  client.getBlock({ blockNumber: pastBlock })
38374
38319
  ]);
38375
- if (rateNow < ONE_E185 || rateThen < ONE_E185 || rateNow < rateThen) {
38320
+ if (rateNow < ONE_E184 || rateThen < ONE_E184 || rateNow < rateThen) {
38376
38321
  throw new Error(
38377
38322
  `non-archival or invalid rates (now=${rateNow}, then=${rateThen})`
38378
38323
  );
@@ -38380,7 +38325,7 @@ var computeApr5 = async () => {
38380
38325
  const elapsed = Number(headBlock.timestamp - thenBlock.timestamp);
38381
38326
  if (elapsed <= 0) throw new Error("non-positive elapsed window");
38382
38327
  const growth = Number(rateNow - rateThen) / Number(rateThen);
38383
- const apr = growth * (YEAR_SECONDS8 / elapsed) * 100;
38328
+ const apr = growth * (YEAR_SECONDS7 / elapsed) * 100;
38384
38329
  if (!Number.isFinite(apr) || apr < 0) throw new Error(`bad apr ${apr}`);
38385
38330
  return apr;
38386
38331
  } catch (e) {
@@ -38413,8 +38358,8 @@ var lombardLbtcFetcher = {
38413
38358
  };
38414
38359
  var CHAIN_ID6 = "1284";
38415
38360
  var STDOT = "0xbc7e02c4178a7df7d3e564323a5c359dc96c4db4";
38416
- var ONE_E186 = 10n ** 18n;
38417
- var YEAR_SECONDS9 = 365 * 24 * 60 * 60;
38361
+ var ONE_E185 = 10n ** 18n;
38362
+ var YEAR_SECONDS8 = 365 * 24 * 60 * 60;
38418
38363
  var WINDOW_SECONDS6 = 180 * 24 * 60 * 60;
38419
38364
  var BLOCK_TIME_SECONDS5 = 6;
38420
38365
  var WINDOW_BLOCKS5 = BigInt(Math.floor(WINDOW_SECONDS6 / BLOCK_TIME_SECONDS5));
@@ -38432,7 +38377,7 @@ var readRateAt5 = (client, blockNumber) => client.readContract({
38432
38377
  address: STDOT,
38433
38378
  abi: POOLED_BY_SHARES_ABI,
38434
38379
  functionName: "getPooledTokenByShares",
38435
- args: [ONE_E186],
38380
+ args: [ONE_E185],
38436
38381
  ...blockNumber !== void 0 ? { blockNumber } : {}
38437
38382
  });
38438
38383
  var computeApr6 = async () => {
@@ -38448,7 +38393,7 @@ var computeApr6 = async () => {
38448
38393
  client.getBlock({ blockNumber: head }),
38449
38394
  client.getBlock({ blockNumber: pastBlock })
38450
38395
  ]);
38451
- if (rateNow < ONE_E186 || rateThen < ONE_E186 || rateNow < rateThen) {
38396
+ if (rateNow < ONE_E185 || rateThen < ONE_E185 || rateNow < rateThen) {
38452
38397
  throw new Error(
38453
38398
  `non-archival or invalid rates (now=${rateNow}, then=${rateThen})`
38454
38399
  );
@@ -38456,7 +38401,7 @@ var computeApr6 = async () => {
38456
38401
  const elapsed = Number(headBlock.timestamp - thenBlock.timestamp);
38457
38402
  if (elapsed <= 0) throw new Error("non-positive elapsed window");
38458
38403
  const growth = Number(rateNow - rateThen) / Number(rateThen);
38459
- const apr = growth * (YEAR_SECONDS9 / elapsed) * 100;
38404
+ const apr = growth * (YEAR_SECONDS8 / elapsed) * 100;
38460
38405
  if (!Number.isFinite(apr) || apr < 0) throw new Error(`bad apr ${apr}`);
38461
38406
  return apr;
38462
38407
  } catch (e) {
@@ -39776,7 +39721,7 @@ var Erc4626PreviewRedeemAbi = [
39776
39721
  ];
39777
39722
 
39778
39723
  // src/vaults/lst/readers/shared.ts
39779
- var ONE_E187 = 10n ** 18n;
39724
+ var ONE_E186 = 10n ** 18n;
39780
39725
  var rescaleDecimals = (v, fromDec, toDec) => toDec >= fromDec ? v * 10n ** BigInt(toDec - fromDec) : v / 10n ** BigInt(fromDec - toDec);
39781
39726
  var MULTICALL3_ADDRESS = "0xcA11bde05977b3631167028862bE2a173976CA11";
39782
39727
  var Multicall3BalanceAbi = [
@@ -39819,7 +39764,7 @@ var readerBeetsStS = (entry) => ({
39819
39764
  }
39820
39765
  const liquidity = toBigInt10(pool);
39821
39766
  return {
39822
- totalAssets: totalSupply * exchangeRate / ONE_E187,
39767
+ totalAssets: totalSupply * exchangeRate / ONE_E186,
39823
39768
  totalSupply,
39824
39769
  exchangeRate,
39825
39770
  liquidity
@@ -39852,7 +39797,7 @@ var readerBenqiSavax = (entry) => ({
39852
39797
  {
39853
39798
  address: entry.address,
39854
39799
  name: "getPooledAvaxByShares",
39855
- params: [ONE_E187]
39800
+ params: [ONE_E186]
39856
39801
  },
39857
39802
  { address: entry.address, name: "totalPooledAvax", params: [] }
39858
39803
  ],
@@ -39863,7 +39808,7 @@ var readerBenqiSavax = (entry) => ({
39863
39808
  if (totalSupply === void 0 || exchangeRate === void 0) {
39864
39809
  return void 0;
39865
39810
  }
39866
- const totalAssets = toBigInt10(totalPooled) ?? totalSupply * exchangeRate / ONE_E187;
39811
+ const totalAssets = toBigInt10(totalPooled) ?? totalSupply * exchangeRate / ONE_E186;
39867
39812
  return {
39868
39813
  totalAssets,
39869
39814
  totalSupply,
@@ -39882,7 +39827,7 @@ var readerBgtWrapper1to1 = (entry) => ({
39882
39827
  return {
39883
39828
  totalAssets: totalSupply,
39884
39829
  totalSupply,
39885
- exchangeRate: ONE_E187
39830
+ exchangeRate: ONE_E186
39886
39831
  };
39887
39832
  }
39888
39833
  });
@@ -39912,7 +39857,7 @@ var readerDineroBeraEth = (entry) => ({
39912
39857
  return void 0;
39913
39858
  }
39914
39859
  return {
39915
- totalAssets: totalSupply * exchangeRate / ONE_E187,
39860
+ totalAssets: totalSupply * exchangeRate / ONE_E186,
39916
39861
  totalSupply,
39917
39862
  exchangeRate
39918
39863
  };
@@ -39924,7 +39869,7 @@ var readerErc4626 = (entry) => ({
39924
39869
  calls: [
39925
39870
  { address: entry.address, name: "totalAssets", params: [] },
39926
39871
  { address: entry.address, name: "totalSupply", params: [] },
39927
- { address: entry.address, name: "convertToAssets", params: [ONE_E187] }
39872
+ { address: entry.address, name: "convertToAssets", params: [ONE_E186] }
39928
39873
  ],
39929
39874
  abis: [Erc4626ReadAbi, TotalSupplyAbi, Erc4626ReadAbi],
39930
39875
  parse: ([assets, supply, rate]) => {
@@ -39941,7 +39886,7 @@ var readerErc4626PreviewRedeem = (entry) => ({
39941
39886
  calls: [
39942
39887
  { address: entry.address, name: "totalAssets", params: [] },
39943
39888
  { address: entry.address, name: "totalSupply", params: [] },
39944
- { address: entry.address, name: "previewRedeem", params: [ONE_E187] }
39889
+ { address: entry.address, name: "previewRedeem", params: [ONE_E186] }
39945
39890
  ],
39946
39891
  abis: [Erc4626PreviewRedeemAbi, TotalSupplyAbi, Erc4626PreviewRedeemAbi],
39947
39892
  parse: ([assets, supply, rate]) => {
@@ -40021,7 +39966,7 @@ var readerEtherFiWeEth = (entry) => {
40021
39966
  }
40022
39967
  }
40023
39968
  return {
40024
- totalAssets: totalSupply * exchangeRate / ONE_E187,
39969
+ totalAssets: totalSupply * exchangeRate / ONE_E186,
40025
39970
  totalSupply,
40026
39971
  exchangeRate,
40027
39972
  liquidity
@@ -40054,7 +39999,7 @@ var readerHyperbeatBeHype = (entry) => {
40054
39999
  return {
40055
40000
  totalAssets: totalSupply,
40056
40001
  totalSupply,
40057
- exchangeRate: ONE_E187
40002
+ exchangeRate: ONE_E186
40058
40003
  };
40059
40004
  }
40060
40005
  };
@@ -40062,7 +40007,7 @@ var readerHyperbeatBeHype = (entry) => {
40062
40007
  return {
40063
40008
  calls: [
40064
40009
  { address: entry.address, name: "totalSupply", params: [] },
40065
- { address: stakingCore, name: "BeHYPEToHYPE", params: [ONE_E187] }
40010
+ { address: stakingCore, name: "BeHYPEToHYPE", params: [ONE_E186] }
40066
40011
  ],
40067
40012
  abis: [TotalSupplyAbi, HyperbeatStakingCoreAbi],
40068
40013
  parse: ([supply, rate]) => {
@@ -40072,7 +40017,7 @@ var readerHyperbeatBeHype = (entry) => {
40072
40017
  return void 0;
40073
40018
  }
40074
40019
  return {
40075
- totalAssets: totalSupply * exchangeRate / ONE_E187,
40020
+ totalAssets: totalSupply * exchangeRate / ONE_E186,
40076
40021
  totalSupply,
40077
40022
  exchangeRate
40078
40023
  };
@@ -40104,7 +40049,7 @@ var readerKelpRsEth = (entry) => {
40104
40049
  return {
40105
40050
  totalAssets: totalSupply,
40106
40051
  totalSupply,
40107
- exchangeRate: ONE_E187
40052
+ exchangeRate: ONE_E186
40108
40053
  };
40109
40054
  }
40110
40055
  };
@@ -40122,7 +40067,7 @@ var readerKelpRsEth = (entry) => {
40122
40067
  return void 0;
40123
40068
  }
40124
40069
  return {
40125
- totalAssets: totalSupply * exchangeRate / ONE_E187,
40070
+ totalAssets: totalSupply * exchangeRate / ONE_E186,
40126
40071
  totalSupply,
40127
40072
  exchangeRate
40128
40073
  };
@@ -40154,7 +40099,7 @@ var readerKinetiqKHype = (entry) => {
40154
40099
  return {
40155
40100
  totalAssets: totalSupply,
40156
40101
  totalSupply,
40157
- exchangeRate: ONE_E187
40102
+ exchangeRate: ONE_E186
40158
40103
  };
40159
40104
  }
40160
40105
  };
@@ -40162,7 +40107,7 @@ var readerKinetiqKHype = (entry) => {
40162
40107
  return {
40163
40108
  calls: [
40164
40109
  { address: entry.address, name: "totalSupply", params: [] },
40165
- { address: accountant, name: "kHYPEToHYPE", params: [ONE_E187] }
40110
+ { address: accountant, name: "kHYPEToHYPE", params: [ONE_E186] }
40166
40111
  ],
40167
40112
  abis: [TotalSupplyAbi, KinetiqStakingAccountantAbi],
40168
40113
  parse: ([supply, rate]) => {
@@ -40172,7 +40117,7 @@ var readerKinetiqKHype = (entry) => {
40172
40117
  return void 0;
40173
40118
  }
40174
40119
  return {
40175
- totalAssets: totalSupply * exchangeRate / ONE_E187,
40120
+ totalAssets: totalSupply * exchangeRate / ONE_E186,
40176
40121
  totalSupply,
40177
40122
  exchangeRate
40178
40123
  };
@@ -40212,7 +40157,7 @@ var readerLairStKaia = (entry) => ({
40212
40157
  if (totalSupply === void 0 || exchangeRate === void 0) {
40213
40158
  return void 0;
40214
40159
  }
40215
- const totalAssets = toBigInt10(totalStaking) ?? totalSupply * exchangeRate / ONE_E187;
40160
+ const totalAssets = toBigInt10(totalStaking) ?? totalSupply * exchangeRate / ONE_E186;
40216
40161
  return {
40217
40162
  totalAssets,
40218
40163
  totalSupply,
@@ -40246,7 +40191,7 @@ var readerLidoWstEth = (entry) => ({
40246
40191
  return void 0;
40247
40192
  }
40248
40193
  return {
40249
- totalAssets: totalSupply * exchangeRate / ONE_E187,
40194
+ totalAssets: totalSupply * exchangeRate / ONE_E186,
40250
40195
  totalSupply,
40251
40196
  exchangeRate
40252
40197
  };
@@ -40284,7 +40229,7 @@ var readerListaSlisBnb = (entry) => {
40284
40229
  return {
40285
40230
  totalAssets: totalSupply,
40286
40231
  totalSupply,
40287
- exchangeRate: ONE_E187
40232
+ exchangeRate: ONE_E186
40288
40233
  };
40289
40234
  }
40290
40235
  };
@@ -40292,7 +40237,7 @@ var readerListaSlisBnb = (entry) => {
40292
40237
  return {
40293
40238
  calls: [
40294
40239
  { address: entry.address, name: "totalSupply", params: [] },
40295
- { address: manager, name: "convertSnBnbToBnb", params: [ONE_E187] },
40240
+ { address: manager, name: "convertSnBnbToBnb", params: [ONE_E186] },
40296
40241
  { address: manager, name: "getTotalPooledBnb", params: [] }
40297
40242
  ],
40298
40243
  abis: [TotalSupplyAbi, ListaStakeManagerReadAbi, ListaStakeManagerReadAbi],
@@ -40303,7 +40248,7 @@ var readerListaSlisBnb = (entry) => {
40303
40248
  return void 0;
40304
40249
  }
40305
40250
  const pooledBnb = toBigInt10(pooled);
40306
- const totalAssets = pooledBnb ?? totalSupply * exchangeRate / ONE_E187;
40251
+ const totalAssets = pooledBnb ?? totalSupply * exchangeRate / ONE_E186;
40307
40252
  return { totalAssets, totalSupply, exchangeRate };
40308
40253
  }
40309
40254
  };
@@ -40333,7 +40278,7 @@ var readerMantleMEth = (entry) => {
40333
40278
  return {
40334
40279
  totalAssets: totalSupply,
40335
40280
  totalSupply,
40336
- exchangeRate: ONE_E187
40281
+ exchangeRate: ONE_E186
40337
40282
  };
40338
40283
  }
40339
40284
  };
@@ -40341,7 +40286,7 @@ var readerMantleMEth = (entry) => {
40341
40286
  return {
40342
40287
  calls: [
40343
40288
  { address: entry.address, name: "totalSupply", params: [] },
40344
- { address: staking, name: "mETHToETH", params: [ONE_E187] }
40289
+ { address: staking, name: "mETHToETH", params: [ONE_E186] }
40345
40290
  ],
40346
40291
  abis: [TotalSupplyAbi, MantleStakingAbi],
40347
40292
  parse: ([supply, rate]) => {
@@ -40351,7 +40296,7 @@ var readerMantleMEth = (entry) => {
40351
40296
  return void 0;
40352
40297
  }
40353
40298
  return {
40354
- totalAssets: totalSupply * exchangeRate / ONE_E187,
40299
+ totalAssets: totalSupply * exchangeRate / ONE_E186,
40355
40300
  totalSupply,
40356
40301
  exchangeRate
40357
40302
  };
@@ -40372,7 +40317,7 @@ var readerOffChain = (entry) => {
40372
40317
  return {
40373
40318
  totalAssets: rescaleDecimals(totalSupply, shareDec, underlyingDec),
40374
40319
  totalSupply,
40375
- exchangeRate: ONE_E187
40320
+ exchangeRate: ONE_E186
40376
40321
  };
40377
40322
  }
40378
40323
  };
@@ -40406,7 +40351,7 @@ var readerRenzoEzEth = (entry) => {
40406
40351
  return {
40407
40352
  totalAssets: totalSupply,
40408
40353
  totalSupply,
40409
- exchangeRate: ONE_E187
40354
+ exchangeRate: ONE_E186
40410
40355
  };
40411
40356
  }
40412
40357
  };
@@ -40425,7 +40370,7 @@ var readerRenzoEzEth = (entry) => {
40425
40370
  return {
40426
40371
  totalAssets: totalTvl,
40427
40372
  totalSupply,
40428
- exchangeRate: totalTvl * ONE_E187 / totalSupply
40373
+ exchangeRate: totalTvl * ONE_E186 / totalSupply
40429
40374
  };
40430
40375
  }
40431
40376
  };
@@ -40481,7 +40426,7 @@ var readerRocketReth = (entry) => {
40481
40426
  }
40482
40427
  const liquidity = depositPool ? toBigInt10(slice[2]) : void 0;
40483
40428
  return {
40484
- totalAssets: totalSupply * exchangeRate / ONE_E187,
40429
+ totalAssets: totalSupply * exchangeRate / ONE_E186,
40485
40430
  totalSupply,
40486
40431
  exchangeRate,
40487
40432
  liquidity
@@ -40523,7 +40468,7 @@ var readerStaderEthx = (entry) => {
40523
40468
  return {
40524
40469
  totalAssets: totalSupply,
40525
40470
  totalSupply,
40526
- exchangeRate: ONE_E187
40471
+ exchangeRate: ONE_E186
40527
40472
  };
40528
40473
  }
40529
40474
  };
@@ -40541,7 +40486,7 @@ var readerStaderEthx = (entry) => {
40541
40486
  return void 0;
40542
40487
  }
40543
40488
  return {
40544
- totalAssets: totalSupply * exchangeRate / ONE_E187,
40489
+ totalAssets: totalSupply * exchangeRate / ONE_E186,
40545
40490
  totalSupply,
40546
40491
  exchangeRate
40547
40492
  };
@@ -40558,7 +40503,7 @@ var readerStaderMaticX = (entry) => {
40558
40503
  {
40559
40504
  address: rateAddress,
40560
40505
  name: "convertMaticXToMatic",
40561
- params: [ONE_E187],
40506
+ params: [ONE_E186],
40562
40507
  chainId: homeChainId
40563
40508
  }
40564
40509
  ],
@@ -40573,7 +40518,7 @@ var readerStaderMaticX = (entry) => {
40573
40518
  }
40574
40519
  const isCrossChain = homeContract !== void 0;
40575
40520
  return {
40576
- totalAssets: isCrossChain ? totalSupply * amountInMatic / ONE_E187 : totalPooledMatic ?? totalSupply * amountInMatic / ONE_E187,
40521
+ totalAssets: isCrossChain ? totalSupply * amountInMatic / ONE_E186 : totalPooledMatic ?? totalSupply * amountInMatic / ONE_E186,
40577
40522
  totalSupply,
40578
40523
  exchangeRate: amountInMatic
40579
40524
  };
@@ -40605,7 +40550,7 @@ var readerStakeWiseOsEth = (entry) => {
40605
40550
  return {
40606
40551
  totalAssets: totalSupply,
40607
40552
  totalSupply,
40608
- exchangeRate: ONE_E187
40553
+ exchangeRate: ONE_E186
40609
40554
  };
40610
40555
  }
40611
40556
  };
@@ -40613,7 +40558,7 @@ var readerStakeWiseOsEth = (entry) => {
40613
40558
  return {
40614
40559
  calls: [
40615
40560
  { address: entry.address, name: "totalSupply", params: [] },
40616
- { address: controller, name: "convertToAssets", params: [ONE_E187] }
40561
+ { address: controller, name: "convertToAssets", params: [ONE_E186] }
40617
40562
  ],
40618
40563
  abis: [TotalSupplyAbi, StakeWiseOsTokenAbi],
40619
40564
  parse: ([supply, rate]) => {
@@ -40623,7 +40568,7 @@ var readerStakeWiseOsEth = (entry) => {
40623
40568
  return void 0;
40624
40569
  }
40625
40570
  return {
40626
- totalAssets: totalSupply * exchangeRate / ONE_E187,
40571
+ totalAssets: totalSupply * exchangeRate / ONE_E186,
40627
40572
  totalSupply,
40628
40573
  exchangeRate
40629
40574
  };
@@ -40655,7 +40600,7 @@ var readerStCelo = (entry) => {
40655
40600
  return {
40656
40601
  totalAssets: totalSupply,
40657
40602
  totalSupply,
40658
- exchangeRate: ONE_E187
40603
+ exchangeRate: ONE_E186
40659
40604
  };
40660
40605
  }
40661
40606
  };
@@ -40663,7 +40608,7 @@ var readerStCelo = (entry) => {
40663
40608
  return {
40664
40609
  calls: [
40665
40610
  { address: entry.address, name: "totalSupply", params: [] },
40666
- { address: manager, name: "toCelo", params: [ONE_E187] }
40611
+ { address: manager, name: "toCelo", params: [ONE_E186] }
40667
40612
  ],
40668
40613
  abis: [TotalSupplyAbi, StCeloManagerAbi],
40669
40614
  parse: ([supply, rate]) => {
@@ -40673,7 +40618,7 @@ var readerStCelo = (entry) => {
40673
40618
  return void 0;
40674
40619
  }
40675
40620
  return {
40676
- totalAssets: totalSupply * exchangeRate / ONE_E187,
40621
+ totalAssets: totalSupply * exchangeRate / ONE_E186,
40677
40622
  totalSupply,
40678
40623
  exchangeRate
40679
40624
  };
@@ -40706,7 +40651,7 @@ var readerSwellGetRate = (entry) => ({
40706
40651
  return void 0;
40707
40652
  }
40708
40653
  return {
40709
- totalAssets: totalSupply * exchangeRate / ONE_E187,
40654
+ totalAssets: totalSupply * exchangeRate / ONE_E186,
40710
40655
  totalSupply,
40711
40656
  exchangeRate
40712
40657
  };
@@ -40737,7 +40682,7 @@ var readerValantisWstHype = (entry) => {
40737
40682
  return {
40738
40683
  totalAssets: totalSupply,
40739
40684
  totalSupply,
40740
- exchangeRate: ONE_E187
40685
+ exchangeRate: ONE_E186
40741
40686
  };
40742
40687
  }
40743
40688
  };
@@ -40755,7 +40700,7 @@ var readerValantisWstHype = (entry) => {
40755
40700
  return void 0;
40756
40701
  }
40757
40702
  return {
40758
- totalAssets: totalSupply * exchangeRate / ONE_E187,
40703
+ totalAssets: totalSupply * exchangeRate / ONE_E186,
40759
40704
  totalSupply,
40760
40705
  exchangeRate
40761
40706
  };
@@ -40789,7 +40734,7 @@ var readerVedaAccountant = (entry) => {
40789
40734
  return {
40790
40735
  totalAssets: rescaleDecimals(totalSupply, shareDec, underlyingDec),
40791
40736
  totalSupply,
40792
- exchangeRate: ONE_E187
40737
+ exchangeRate: ONE_E186
40793
40738
  };
40794
40739
  }
40795
40740
  };
@@ -40808,7 +40753,7 @@ var readerVedaAccountant = (entry) => {
40808
40753
  const exchangeRate = rawRate * scale;
40809
40754
  return {
40810
40755
  totalAssets: rescaleDecimals(
40811
- totalSupply * exchangeRate / ONE_E187,
40756
+ totalSupply * exchangeRate / ONE_E186,
40812
40757
  shareDec,
40813
40758
  underlyingDec
40814
40759
  ),
@@ -40844,9 +40789,9 @@ var readerAnkrRatio = (entry) => ({
40844
40789
  return void 0;
40845
40790
  }
40846
40791
  return {
40847
- totalAssets: totalSupply * ONE_E187 / r,
40792
+ totalAssets: totalSupply * ONE_E186 / r,
40848
40793
  totalSupply,
40849
- exchangeRate: ONE_E187 * ONE_E187 / r
40794
+ exchangeRate: ONE_E186 * ONE_E186 / r
40850
40795
  };
40851
40796
  }
40852
40797
  });
@@ -40890,7 +40835,7 @@ var readerCoreEarnRate = (entry) => {
40890
40835
  return {
40891
40836
  totalAssets: totalSupply * r / CORE_RATE_DENOM,
40892
40837
  totalSupply,
40893
- exchangeRate: r * ONE_E187 / CORE_RATE_DENOM
40838
+ exchangeRate: r * ONE_E186 / CORE_RATE_DENOM
40894
40839
  };
40895
40840
  }
40896
40841
  };
@@ -40912,7 +40857,7 @@ var readerCoreStakedRatio = (entry) => {
40912
40857
  return {
40913
40858
  totalAssets: totalStaked,
40914
40859
  totalSupply,
40915
- exchangeRate: totalStaked * ONE_E187 / totalSupply
40860
+ exchangeRate: totalStaked * ONE_E186 / totalSupply
40916
40861
  };
40917
40862
  }
40918
40863
  };
@@ -40943,7 +40888,7 @@ var readerStellaStDot = (entry) => ({
40943
40888
  {
40944
40889
  address: entry.address,
40945
40890
  name: "getPooledTokenByShares",
40946
- params: [ONE_E187]
40891
+ params: [ONE_E186]
40947
40892
  },
40948
40893
  { address: entry.address, name: "getTotalPooledToken", params: [] }
40949
40894
  ],
@@ -40954,7 +40899,7 @@ var readerStellaStDot = (entry) => ({
40954
40899
  if (totalSupply === void 0 || exchangeRate === void 0) {
40955
40900
  return void 0;
40956
40901
  }
40957
- const totalAssets = toBigInt10(pooled) ?? totalSupply * exchangeRate / ONE_E187;
40902
+ const totalAssets = toBigInt10(pooled) ?? totalSupply * exchangeRate / ONE_E186;
40958
40903
  return {
40959
40904
  totalAssets,
40960
40905
  totalSupply,
@@ -41255,15 +41200,54 @@ var resolveStCeloDepositGroup = async (user, requestedGroup, maxRpcTries = 4) =>
41255
41200
  };
41256
41201
 
41257
41202
  // src/vaults/lst/validators.ts
41203
+ var SOLV_POOLS = {
41204
+ "1": {
41205
+ // SolvBTC — subscribable with WBTC (canonical) or cbBTC; same SolvBTC SFT.
41206
+ "0x7a56e1c57c7475ccf742a1832b028f0456652f97": [
41207
+ {
41208
+ poolId: "0x716db7dc196abe78d5349c7166896f674ab978af26ada3e5b3ea74c5a1b48307",
41209
+ currency: "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599",
41210
+ // WBTC
41211
+ name: "WBTC"
41212
+ },
41213
+ {
41214
+ poolId: "0xdc0937dd33c4af08a08724da23bc45b33b43fbb23f365e7b50a536ce45f447ef",
41215
+ currency: "0xcbb7c0000ab88b473b1f5afd9ef808440eed33bf",
41216
+ // cbBTC
41217
+ name: "cbBTC"
41218
+ }
41219
+ ],
41220
+ // xSolvBTC — the SolvBTC.LST: subscribes with SolvBTC (not WBTC). Verified
41221
+ // via SolvBTCYieldTokenMultiAssetPool.getERC20(sft, slot) == xSolvBTC.
41222
+ "0xd9d920aa40f578ab794426f5c90f6c731d159def": [
41223
+ {
41224
+ poolId: "0xefcca1eb946cdc7b56509489a56b45b75aff74b8bb84dad5b893012157e0df93",
41225
+ currency: "0x7a56e1c57c7475ccf742a1832b028f0456652f97",
41226
+ // SolvBTC
41227
+ name: "SolvBTC"
41228
+ }
41229
+ ]
41230
+ }
41231
+ };
41258
41232
  var LST_DELEGATION = {
41259
- // Core DAO — stCORE `Earn.mint(validator)`: the validator is mandatory.
41233
+ // Core DAO — the validator is mandatory for both stCORE (`Earn.mint(validator)`)
41234
+ // and SCORE (`deposit(validator)`); dualCORE picks internally (no selection).
41260
41235
  "1116": {
41236
+ // stCORE
41261
41237
  "0xb3a8f0f0da9ffc65318aa39e55079796093029ad": {
41262
41238
  required: true,
41263
41239
  kind: "validator",
41264
41240
  optionKey: "validator",
41265
41241
  default: null,
41266
41242
  source: "endpoint"
41243
+ },
41244
+ // SCORE (StakedCore) — its own staking contract, same Core validator set.
41245
+ "0xa20b3b97df3a02f9185175760300a06b4e0a2c05": {
41246
+ required: true,
41247
+ kind: "validator",
41248
+ optionKey: "validator",
41249
+ default: null,
41250
+ source: "endpoint"
41267
41251
  }
41268
41252
  },
41269
41253
  // Celo — StakedCelo: optional from the integrator's view (the server
@@ -41278,22 +41262,25 @@ var LST_DELEGATION = {
41278
41262
  source: "endpoint"
41279
41263
  }
41280
41264
  },
41281
- // Solv (Ethereum) SolvBTC / xSolvBTC / BTC+ require an off-chain poolId
41282
- // (published in Solv's docs), so no on-chain list is returned.
41265
+ // Solv (Ethereum). SolvBTC's pools are curated + verified (`SOLV_POOLS`), so
41266
+ // it surfaces a list and auto-fills the canonical (WBTC) poolId. xSolvBTC /
41267
+ // BTC+ still need their poolIds catalogued → off-chain until then.
41283
41268
  "1": {
41284
41269
  "0x7a56e1c57c7475ccf742a1832b028f0456652f97": {
41285
- required: true,
41270
+ required: false,
41271
+ // canonical WBTC poolId is auto-filled
41286
41272
  kind: "pool",
41287
41273
  optionKey: "poolId",
41288
- default: null,
41289
- source: "offchain"
41274
+ default: "0x716db7dc196abe78d5349c7166896f674ab978af26ada3e5b3ea74c5a1b48307",
41275
+ source: "endpoint"
41290
41276
  },
41291
41277
  "0xd9d920aa40f578ab794426f5c90f6c731d159def": {
41292
- required: true,
41278
+ required: false,
41279
+ // canonical SolvBTC poolId is auto-filled
41293
41280
  kind: "pool",
41294
41281
  optionKey: "poolId",
41295
- default: null,
41296
- source: "offchain"
41282
+ default: "0xefcca1eb946cdc7b56509489a56b45b75aff74b8bb84dad5b893012157e0df93",
41283
+ source: "endpoint"
41297
41284
  },
41298
41285
  "0xcea2daf93617b97504e05affc5bcf9b3922d3034": {
41299
41286
  required: true,
@@ -41309,6 +41296,17 @@ var getLstValidators = async (chainId, shareToken) => {
41309
41296
  const d = getLstDelegation(chainId, shareToken);
41310
41297
  if (!d || d.source !== "endpoint") return [];
41311
41298
  try {
41299
+ if (d.kind === "pool") {
41300
+ const pools = SOLV_POOLS[chainId]?.[shareToken.toLowerCase()] ?? [];
41301
+ return pools.map((p, i) => ({
41302
+ id: p.poolId,
41303
+ status: "active",
41304
+ selectable: true,
41305
+ recommended: i === 0,
41306
+ name: p.name,
41307
+ currency: p.currency
41308
+ }));
41309
+ }
41312
41310
  if (d.kind === "validatorGroup" && chainId === "42220") {
41313
41311
  const groups = await getStCeloValidatorGroups();
41314
41312
  return groups.map((g, i) => ({
@@ -41335,7 +41333,7 @@ var getLstValidators = async (chainId, shareToken) => {
41335
41333
  };
41336
41334
 
41337
41335
  // src/vaults/lst/fetchPublic.ts
41338
- var ONE_E188 = 10n ** 18n;
41336
+ var ONE_E187 = 10n ** 18n;
41339
41337
  var ERC20_BALANCE_ABI = parseAbi([
41340
41338
  "function balanceOf(address) view returns (uint256)"
41341
41339
  ]);
@@ -41450,8 +41448,8 @@ var fetchLstShareTokens = async (chainId, multicallRetry, prices = {}, tokenList
41450
41448
  const underlyingUnit = 10n ** BigInt(underlyingDec);
41451
41449
  const totalAssetsFormatted = Number(state.totalAssets) / 10 ** underlyingDec;
41452
41450
  const totalAssetsUsd = priceUsd !== void 0 ? totalAssetsFormatted * priceUsd : 0;
41453
- const convertToAssets = state.exchangeRate * underlyingUnit / ONE_E188;
41454
- const convertToShares = state.exchangeRate > 0n ? ONE_E188 * shareUnit / state.exchangeRate : 0n;
41451
+ const convertToAssets = state.exchangeRate * underlyingUnit / ONE_E187;
41452
+ const convertToShares = state.exchangeRate > 0n ? ONE_E187 * shareUnit / state.exchangeRate : 0n;
41455
41453
  let liquidityRaw;
41456
41454
  if (state.liquidity !== void 0) {
41457
41455
  liquidityRaw = state.liquidity;
@@ -44484,7 +44482,7 @@ var Erc4626ReadAbi2 = [
44484
44482
  ];
44485
44483
 
44486
44484
  // src/vaults/savings/readers/shared.ts
44487
- var ONE_E189 = 10n ** 18n;
44485
+ var ONE_E188 = 10n ** 18n;
44488
44486
  var toBigInt12 = (v) => {
44489
44487
  if (v === void 0 || v === null) return void 0;
44490
44488
  if (typeof v === "bigint") return v;
@@ -44525,7 +44523,7 @@ var readerErc46262 = (entry) => {
44525
44523
  return {
44526
44524
  totalAssets,
44527
44525
  totalSupply,
44528
- exchangeRate: convertToAssetsRaw * ONE_E189 / underlyingUnit
44526
+ exchangeRate: convertToAssetsRaw * ONE_E188 / underlyingUnit
44529
44527
  };
44530
44528
  }
44531
44529
  };
@@ -44867,7 +44865,7 @@ var resolveYieldApr2 = async (entries) => {
44867
44865
  };
44868
44866
 
44869
44867
  // src/vaults/savings/fetchPublic.ts
44870
- var ONE_E1810 = 10n ** 18n;
44868
+ var ONE_E189 = 10n ** 18n;
44871
44869
  var fetchSavingsVaults = async (chainId, multicallRetry, prices = {}, tokenList = {}) => {
44872
44870
  const entries = getSavingsRegistry(chainId);
44873
44871
  if (entries.length === 0) return {};
@@ -44908,8 +44906,8 @@ var fetchSavingsVaults = async (chainId, multicallRetry, prices = {}, tokenList
44908
44906
  const liquidityRaw = isInstant ? state.totalAssets.toString() : "0";
44909
44907
  const liquidityFormatted = isInstant ? totalAssetsFormatted : 0;
44910
44908
  const liquidityUsd = isInstant ? totalAssetsUsd : 0;
44911
- const convertToAssets = state.exchangeRate * underlyingUnit / ONE_E1810;
44912
- const convertToShares = state.exchangeRate > 0n ? ONE_E1810 * shareUnit / state.exchangeRate : 0n;
44909
+ const convertToAssets = state.exchangeRate * underlyingUnit / ONE_E189;
44910
+ const convertToShares = state.exchangeRate > 0n ? ONE_E189 * shareUnit / state.exchangeRate : 0n;
44913
44911
  const displayName = composeVaultDisplayName(
44914
44912
  entry.brand,
44915
44913
  entry.brand,
@@ -46875,7 +46873,7 @@ var readVaultSharePrices = async (chainId, addresses, multicallRetry) => {
46875
46873
  };
46876
46874
 
46877
46875
  // src/vaults/yield/annualize.ts
46878
- var YEAR_SECONDS10 = 365 * 24 * 60 * 60;
46876
+ var YEAR_SECONDS9 = 365 * 24 * 60 * 60;
46879
46877
  var SCALE = 10n ** 18n;
46880
46878
  var appendSnapshot = (points, snap, options) => {
46881
46879
  const maxPoints = options?.maxPoints ?? 90;
@@ -46904,7 +46902,7 @@ var computeVaultApr = (points, options) => {
46904
46902
  if (pThen === 0n) return void 0;
46905
46903
  const ratioScaled = BigInt(now.p) * SCALE / pThen;
46906
46904
  const ratio = Number(ratioScaled) / 1e18;
46907
- const apr = (ratio - 1) * (YEAR_SECONDS10 / windowSeconds);
46905
+ const apr = (ratio - 1) * (YEAR_SECONDS9 / windowSeconds);
46908
46906
  return {
46909
46907
  apr,
46910
46908
  sharePriceNow: now.p,