@1delta/margin-fetcher 0.0.313 → 0.0.316

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
@@ -24668,9 +24668,9 @@ var MULTICALL_ADDRESS = {
24668
24668
  // src/utils/multicall.ts
24669
24669
  var { isArray } = lodash;
24670
24670
  var maxRetries = 3;
24671
- var multicallViemAbiArray = async (chainId, abi, calls, getEvmClient16, retry = true, providerId = 0, retries = maxRetries, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, logs = false) => {
24671
+ var multicallViemAbiArray = async (chainId, abi, calls, getEvmClient17, retry = true, providerId = 0, retries = maxRetries, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, logs = false) => {
24672
24672
  try {
24673
- const provider = getEvmClient16(chainId, providerId);
24673
+ const provider = getEvmClient17(chainId, providerId);
24674
24674
  const abiIsArray = isArray(abi[0]);
24675
24675
  const returnData = await provider.multicall({
24676
24676
  allowFailure,
@@ -24696,7 +24696,7 @@ var multicallViemAbiArray = async (chainId, abi, calls, getEvmClient16, retry =
24696
24696
  chainId,
24697
24697
  abi,
24698
24698
  calls,
24699
- getEvmClient16,
24699
+ getEvmClient17,
24700
24700
  retry,
24701
24701
  providerId,
24702
24702
  retries,
@@ -24706,13 +24706,13 @@ var multicallViemAbiArray = async (chainId, abi, calls, getEvmClient16, retry =
24706
24706
  );
24707
24707
  }
24708
24708
  };
24709
- var multicallShardedAbiArray = async (chainId, abi, calls, getEvmClient16, poolSize, retries = maxRetries, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, logs = false) => {
24709
+ var multicallShardedAbiArray = async (chainId, abi, calls, getEvmClient17, poolSize, retries = maxRetries, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, logs = false) => {
24710
24710
  if (poolSize <= 1) {
24711
24711
  return multicallViemAbiArray(
24712
24712
  chainId,
24713
24713
  abi,
24714
24714
  calls,
24715
- getEvmClient16,
24715
+ getEvmClient17,
24716
24716
  true,
24717
24717
  0,
24718
24718
  retries,
@@ -24735,7 +24735,7 @@ var multicallShardedAbiArray = async (chainId, abi, calls, getEvmClient16, poolS
24735
24735
  const results = new Array(contracts.length);
24736
24736
  const runBatch = async (batch, rpcId, attemptsLeft, size) => {
24737
24737
  try {
24738
- const provider = getEvmClient16(chainId, rpcId);
24738
+ const provider = getEvmClient17(chainId, rpcId);
24739
24739
  const returnData = await provider.multicall({
24740
24740
  allowFailure,
24741
24741
  batchSize: size,
@@ -29362,7 +29362,7 @@ function unflattenLenderData(pools) {
29362
29362
  }
29363
29363
  return result;
29364
29364
  }
29365
- var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient16, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, retries = 3, logs = false, concurrency = 1) => {
29365
+ var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient17, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, retries = 3, logs = false, concurrency = 1) => {
29366
29366
  const queries = organizeUserQueries(queriesRaw);
29367
29367
  const builtCalls = await Promise.all(
29368
29368
  queries.map(async (query3) => {
@@ -29372,7 +29372,7 @@ var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient16, allowF
29372
29372
  query3.lender,
29373
29373
  query3.account,
29374
29374
  query3.params,
29375
- getEvmClient16
29375
+ getEvmClient17
29376
29376
  );
29377
29377
  return callData.map((call) => ({ call, abi: call.abi ?? abi }));
29378
29378
  })
@@ -29382,7 +29382,7 @@ var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient16, allowF
29382
29382
  chainId,
29383
29383
  calls.map((call) => call.abi),
29384
29384
  calls.map((call) => call.call),
29385
- getEvmClient16,
29385
+ getEvmClient17,
29386
29386
  concurrency,
29387
29387
  retries,
29388
29388
  allowFailure,
@@ -32839,6 +32839,67 @@ var hastraPrimeFetcher = {
32839
32839
  return { [HASTRA_PRIME_KEY]: Math.max(0, apr) };
32840
32840
  }
32841
32841
  };
32842
+ var CHAIN_ID4 = "4663";
32843
+ var VAULT2 = "0xde770c84fe66e063336b31737cfe9790f18c4087";
32844
+ var SPARK_SAVINGS_USDG_KEY = "SPUSDG";
32845
+ var RAY3 = 10n ** 27n;
32846
+ var YEAR_SECONDS6 = 365 * 24 * 60 * 60;
32847
+ var WINDOW_BLOCKS3 = 400000n;
32848
+ var MAX_RPC_TRIES3 = 3;
32849
+ var CHI_ABI = [
32850
+ {
32851
+ name: "chi",
32852
+ type: "function",
32853
+ stateMutability: "view",
32854
+ inputs: [],
32855
+ outputs: [{ type: "uint256" }]
32856
+ }
32857
+ ];
32858
+ var readChiAt = (client, blockNumber) => client.readContract({
32859
+ address: VAULT2,
32860
+ abi: CHI_ABI,
32861
+ functionName: "chi",
32862
+ ...blockNumber !== void 0 ? { blockNumber } : {}
32863
+ });
32864
+ var computeApr4 = async () => {
32865
+ let lastErr;
32866
+ for (let rpcId = 0; rpcId < MAX_RPC_TRIES3; rpcId++) {
32867
+ try {
32868
+ const client = getEvmClient(CHAIN_ID4, rpcId);
32869
+ const head = await client.getBlockNumber();
32870
+ const pastBlock = head > WINDOW_BLOCKS3 ? head - WINDOW_BLOCKS3 : 0n;
32871
+ const [chiNow, chiThen, headBlock, thenBlock] = await Promise.all([
32872
+ readChiAt(client),
32873
+ readChiAt(client, pastBlock),
32874
+ client.getBlock({ blockNumber: head }),
32875
+ client.getBlock({ blockNumber: pastBlock })
32876
+ ]);
32877
+ if (chiNow < RAY3 || chiThen < RAY3 || chiNow < chiThen) {
32878
+ throw new Error(
32879
+ `non-archival or invalid chi (now=${chiNow}, then=${chiThen})`
32880
+ );
32881
+ }
32882
+ const elapsed = Number(headBlock.timestamp - thenBlock.timestamp);
32883
+ if (elapsed <= 0) throw new Error("non-positive elapsed window");
32884
+ const growth = Number(chiNow - chiThen) / Number(chiThen);
32885
+ const apr = growth * (YEAR_SECONDS6 / elapsed) * 100;
32886
+ if (!Number.isFinite(apr) || apr < 0) throw new Error(`bad apr ${apr}`);
32887
+ return apr;
32888
+ } catch (e) {
32889
+ lastErr = e;
32890
+ }
32891
+ }
32892
+ throw new Error(
32893
+ `spUSDG APR: no Robinhood RPC returned valid historical chi (${String(lastErr)})`
32894
+ );
32895
+ };
32896
+ var sparkSavingsUsdgFetcher = {
32897
+ label: "SPARK_SAVINGS_USDG",
32898
+ fetch: async () => {
32899
+ const apr = await computeApr4();
32900
+ return { [SPARK_SAVINGS_USDG_KEY]: apr };
32901
+ }
32902
+ };
32842
32903
 
32843
32904
  // src/yields/intrinsic/fetchers/lombard.ts
32844
32905
  var LBTC_APY_URL = "https://mainnet.prod.lombard.finance/api/v1/analytics/estimated-apy";
@@ -33035,6 +33096,7 @@ async function fetchIntrinsicYields() {
33035
33096
  psxdcFetcher,
33036
33097
  coreLstFetcher,
33037
33098
  hastraPrimeFetcher,
33099
+ sparkSavingsUsdgFetcher,
33038
33100
  lombardLbtcFetcher,
33039
33101
  lombardLbtcvFetcher,
33040
33102
  accountableFetcher,
@@ -38496,14 +38558,14 @@ var fetchEulerEarnVaults = async (chainId, prices = {}, tokenList = {}, multical
38496
38558
  ).catch(() => void 0);
38497
38559
  return isNonEmpty(fromSubgraph) ? fromSubgraph : fromApi ?? {};
38498
38560
  };
38499
- var CHAIN_ID4 = "1";
38561
+ var CHAIN_ID5 = "1";
38500
38562
  var SWBTC = "0x8db2350d78abc13f5673a411d4700bcf87864dde";
38501
38563
  var ONE_E8 = 10n ** 8n;
38502
- var YEAR_SECONDS6 = 365 * 24 * 60 * 60;
38564
+ var YEAR_SECONDS7 = 365 * 24 * 60 * 60;
38503
38565
  var WINDOW_SECONDS4 = 7 * 24 * 60 * 60;
38504
38566
  var BLOCK_TIME_SECONDS3 = 12;
38505
- var WINDOW_BLOCKS3 = BigInt(Math.floor(WINDOW_SECONDS4 / BLOCK_TIME_SECONDS3));
38506
- var MAX_RPC_TRIES3 = 5;
38567
+ var WINDOW_BLOCKS4 = BigInt(Math.floor(WINDOW_SECONDS4 / BLOCK_TIME_SECONDS3));
38568
+ var MAX_RPC_TRIES4 = 5;
38507
38569
  var CONVERT_TO_ASSETS_ABI3 = [
38508
38570
  {
38509
38571
  name: "convertToAssets",
@@ -38520,13 +38582,13 @@ var readRateAt3 = (client, blockNumber) => client.readContract({
38520
38582
  args: [ONE_E8],
38521
38583
  ...blockNumber !== void 0 ? { blockNumber } : {}
38522
38584
  });
38523
- var computeApr4 = async () => {
38585
+ var computeApr5 = async () => {
38524
38586
  let lastErr;
38525
- for (let rpcId = 0; rpcId < MAX_RPC_TRIES3; rpcId++) {
38587
+ for (let rpcId = 0; rpcId < MAX_RPC_TRIES4; rpcId++) {
38526
38588
  try {
38527
- const client = getEvmClient(CHAIN_ID4, rpcId);
38589
+ const client = getEvmClient(CHAIN_ID5, rpcId);
38528
38590
  const head = await client.getBlockNumber();
38529
- const pastBlock = head > WINDOW_BLOCKS3 ? head - WINDOW_BLOCKS3 : 0n;
38591
+ const pastBlock = head > WINDOW_BLOCKS4 ? head - WINDOW_BLOCKS4 : 0n;
38530
38592
  const [rateNow, rateThen, headBlock, thenBlock] = await Promise.all([
38531
38593
  readRateAt3(client),
38532
38594
  readRateAt3(client, pastBlock),
@@ -38541,7 +38603,7 @@ var computeApr4 = async () => {
38541
38603
  const elapsed = Number(headBlock.timestamp - thenBlock.timestamp);
38542
38604
  if (elapsed <= 0) throw new Error(`bad elapsed ${elapsed}`);
38543
38605
  const growth = Number(rateNow) / Number(rateThen) - 1;
38544
- const apr = growth * (YEAR_SECONDS6 / elapsed) * 100;
38606
+ const apr = growth * (YEAR_SECONDS7 / elapsed) * 100;
38545
38607
  if (!Number.isFinite(apr) || apr < 0) throw new Error(`bad apr ${apr}`);
38546
38608
  return apr;
38547
38609
  } catch (e) {
@@ -38556,20 +38618,20 @@ var swBtcFetcher = {
38556
38618
  label: "SWBTC",
38557
38619
  fetch: async () => {
38558
38620
  try {
38559
- return { SWBTC: await computeApr4() };
38621
+ return { SWBTC: await computeApr5() };
38560
38622
  } catch {
38561
38623
  return { SWBTC: 0 };
38562
38624
  }
38563
38625
  }
38564
38626
  };
38565
- var CHAIN_ID5 = "42220";
38627
+ var CHAIN_ID6 = "42220";
38566
38628
  var MANAGER = "0x0239b96d10a434a56cc9e09383077a0490cf9398";
38567
38629
  var ONE_E184 = 10n ** 18n;
38568
- var YEAR_SECONDS7 = 365 * 24 * 60 * 60;
38630
+ var YEAR_SECONDS8 = 365 * 24 * 60 * 60;
38569
38631
  var WINDOW_SECONDS5 = 7 * 24 * 60 * 60;
38570
38632
  var BLOCK_TIME_SECONDS4 = 1;
38571
- var WINDOW_BLOCKS4 = BigInt(Math.floor(WINDOW_SECONDS5 / BLOCK_TIME_SECONDS4));
38572
- var MAX_RPC_TRIES4 = 5;
38633
+ var WINDOW_BLOCKS5 = BigInt(Math.floor(WINDOW_SECONDS5 / BLOCK_TIME_SECONDS4));
38634
+ var MAX_RPC_TRIES5 = 5;
38573
38635
  var TO_CELO_ABI = [
38574
38636
  {
38575
38637
  name: "toCelo",
@@ -38586,13 +38648,13 @@ var readRateAt4 = (client, blockNumber) => client.readContract({
38586
38648
  args: [ONE_E184],
38587
38649
  ...blockNumber !== void 0 ? { blockNumber } : {}
38588
38650
  });
38589
- var computeApr5 = async () => {
38651
+ var computeApr6 = async () => {
38590
38652
  let lastErr;
38591
- for (let rpcId = 0; rpcId < MAX_RPC_TRIES4; rpcId++) {
38653
+ for (let rpcId = 0; rpcId < MAX_RPC_TRIES5; rpcId++) {
38592
38654
  try {
38593
- const client = getEvmClient(CHAIN_ID5, rpcId);
38655
+ const client = getEvmClient(CHAIN_ID6, rpcId);
38594
38656
  const head = await client.getBlockNumber();
38595
- const pastBlock = head > WINDOW_BLOCKS4 ? head - WINDOW_BLOCKS4 : 0n;
38657
+ const pastBlock = head > WINDOW_BLOCKS5 ? head - WINDOW_BLOCKS5 : 0n;
38596
38658
  const [rateNow, rateThen, headBlock, thenBlock] = await Promise.all([
38597
38659
  readRateAt4(client),
38598
38660
  readRateAt4(client, pastBlock),
@@ -38607,7 +38669,7 @@ var computeApr5 = async () => {
38607
38669
  const elapsed = Number(headBlock.timestamp - thenBlock.timestamp);
38608
38670
  if (elapsed <= 0) throw new Error("non-positive elapsed window");
38609
38671
  const growth = Number(rateNow - rateThen) / Number(rateThen);
38610
- const apr = growth * (YEAR_SECONDS7 / elapsed) * 100;
38672
+ const apr = growth * (YEAR_SECONDS8 / elapsed) * 100;
38611
38673
  if (!Number.isFinite(apr) || apr < 0) throw new Error(`bad apr ${apr}`);
38612
38674
  return apr;
38613
38675
  } catch (e) {
@@ -38621,18 +38683,18 @@ var computeApr5 = async () => {
38621
38683
  var stceloFetcher = {
38622
38684
  label: "STCELO",
38623
38685
  fetch: async () => {
38624
- const apr = await computeApr5();
38686
+ const apr = await computeApr6();
38625
38687
  return { STCELO: apr };
38626
38688
  }
38627
38689
  };
38628
- var CHAIN_ID6 = "1284";
38690
+ var CHAIN_ID7 = "1284";
38629
38691
  var STDOT = "0xbc7e02c4178a7df7d3e564323a5c359dc96c4db4";
38630
38692
  var ONE_E185 = 10n ** 18n;
38631
- var YEAR_SECONDS8 = 365 * 24 * 60 * 60;
38693
+ var YEAR_SECONDS9 = 365 * 24 * 60 * 60;
38632
38694
  var WINDOW_SECONDS6 = 180 * 24 * 60 * 60;
38633
38695
  var BLOCK_TIME_SECONDS5 = 6;
38634
- var WINDOW_BLOCKS5 = BigInt(Math.floor(WINDOW_SECONDS6 / BLOCK_TIME_SECONDS5));
38635
- var MAX_RPC_TRIES5 = 5;
38696
+ var WINDOW_BLOCKS6 = BigInt(Math.floor(WINDOW_SECONDS6 / BLOCK_TIME_SECONDS5));
38697
+ var MAX_RPC_TRIES6 = 5;
38636
38698
  var POOLED_BY_SHARES_ABI = [
38637
38699
  {
38638
38700
  name: "getPooledTokenByShares",
@@ -38649,13 +38711,13 @@ var readRateAt5 = (client, blockNumber) => client.readContract({
38649
38711
  args: [ONE_E185],
38650
38712
  ...blockNumber !== void 0 ? { blockNumber } : {}
38651
38713
  });
38652
- var computeApr6 = async () => {
38714
+ var computeApr7 = async () => {
38653
38715
  let lastErr;
38654
- for (let rpcId = 0; rpcId < MAX_RPC_TRIES5; rpcId++) {
38716
+ for (let rpcId = 0; rpcId < MAX_RPC_TRIES6; rpcId++) {
38655
38717
  try {
38656
- const client = getEvmClient(CHAIN_ID6, rpcId);
38718
+ const client = getEvmClient(CHAIN_ID7, rpcId);
38657
38719
  const head = await client.getBlockNumber();
38658
- const pastBlock = head > WINDOW_BLOCKS5 ? head - WINDOW_BLOCKS5 : 0n;
38720
+ const pastBlock = head > WINDOW_BLOCKS6 ? head - WINDOW_BLOCKS6 : 0n;
38659
38721
  const [rateNow, rateThen, headBlock, thenBlock] = await Promise.all([
38660
38722
  readRateAt5(client),
38661
38723
  readRateAt5(client, pastBlock),
@@ -38670,7 +38732,7 @@ var computeApr6 = async () => {
38670
38732
  const elapsed = Number(headBlock.timestamp - thenBlock.timestamp);
38671
38733
  if (elapsed <= 0) throw new Error("non-positive elapsed window");
38672
38734
  const growth = Number(rateNow - rateThen) / Number(rateThen);
38673
- const apr = growth * (YEAR_SECONDS8 / elapsed) * 100;
38735
+ const apr = growth * (YEAR_SECONDS9 / elapsed) * 100;
38674
38736
  if (!Number.isFinite(apr) || apr < 0) throw new Error(`bad apr ${apr}`);
38675
38737
  return apr;
38676
38738
  } catch (e) {
@@ -38684,7 +38746,7 @@ var computeApr6 = async () => {
38684
38746
  var stDotFetcher = {
38685
38747
  label: "STDOT",
38686
38748
  fetch: async () => {
38687
- const apr = await computeApr6();
38749
+ const apr = await computeApr7();
38688
38750
  return { STDOT: apr };
38689
38751
  }
38690
38752
  };
@@ -45273,6 +45335,25 @@ var SINGLE_CHAIN_ENTRIES = {
45273
45335
  yieldFetcher: savbtcFetcher,
45274
45336
  yieldKey: "Staked avBTC::savBTC"
45275
45337
  }
45338
+ ],
45339
+ "4663": [
45340
+ {
45341
+ // Spark Savings USDG on Robinhood Chain — Sky/Spark savings token
45342
+ // over USDG. ERC-4626 share price accrues via a `chi()` rate
45343
+ // accumulator; `ssr()` is not readable so APR comes from the
45344
+ // chi-delta fetcher. Standard permissionless 4626 redeem.
45345
+ address: "0xde770c84fe66e063336b31737cfe9790f18c4087",
45346
+ underlying: "0x5fc5360d0400a0fd4f2af552add042d716f1d168",
45347
+ // USDG
45348
+ symbol: "spUSDG",
45349
+ brand: "Spark",
45350
+ decimals: 6,
45351
+ isRebasing: false,
45352
+ isMintable: true,
45353
+ withdrawalMode: "instant",
45354
+ yieldFetcher: sparkSavingsUsdgFetcher,
45355
+ yieldKey: SPARK_SAVINGS_USDG_KEY
45356
+ }
45276
45357
  ]
45277
45358
  };
45278
45359
  var SAVINGS_REGISTRY = (() => {
@@ -47750,7 +47831,7 @@ var readVaultSharePrices = async (chainId, addresses, multicallRetry) => {
47750
47831
  };
47751
47832
 
47752
47833
  // src/vaults/yield/annualize.ts
47753
- var YEAR_SECONDS9 = 365 * 24 * 60 * 60;
47834
+ var YEAR_SECONDS10 = 365 * 24 * 60 * 60;
47754
47835
  var SCALE = 10n ** 18n;
47755
47836
  var appendSnapshot = (points, snap, options) => {
47756
47837
  const maxPoints = options?.maxPoints ?? 90;
@@ -47779,7 +47860,7 @@ var computeVaultApr = (points, options) => {
47779
47860
  if (pThen === 0n) return void 0;
47780
47861
  const ratioScaled = BigInt(now.p) * SCALE / pThen;
47781
47862
  const ratio = Number(ratioScaled) / 1e18;
47782
- const apr = (ratio - 1) * (YEAR_SECONDS9 / windowSeconds);
47863
+ const apr = (ratio - 1) * (YEAR_SECONDS10 / windowSeconds);
47783
47864
  return {
47784
47865
  apr,
47785
47866
  sharePriceNow: now.p,