@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 +122 -41
- package/dist/index.js.map +1 -1
- package/dist/vaults/savings/registry.d.ts.map +1 -1
- package/dist/yields/intrinsic/fetchers/sparkSavings.d.ts +5 -0
- package/dist/yields/intrinsic/fetchers/sparkSavings.d.ts.map +1 -0
- package/dist/yields/intrinsic/index.d.ts.map +1 -1
- package/package.json +4 -4
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,
|
|
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 =
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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 =
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
38561
|
+
var CHAIN_ID5 = "1";
|
|
38500
38562
|
var SWBTC = "0x8db2350d78abc13f5673a411d4700bcf87864dde";
|
|
38501
38563
|
var ONE_E8 = 10n ** 8n;
|
|
38502
|
-
var
|
|
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
|
|
38506
|
-
var
|
|
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
|
|
38585
|
+
var computeApr5 = async () => {
|
|
38524
38586
|
let lastErr;
|
|
38525
|
-
for (let rpcId = 0; rpcId <
|
|
38587
|
+
for (let rpcId = 0; rpcId < MAX_RPC_TRIES4; rpcId++) {
|
|
38526
38588
|
try {
|
|
38527
|
-
const client = getEvmClient(
|
|
38589
|
+
const client = getEvmClient(CHAIN_ID5, rpcId);
|
|
38528
38590
|
const head = await client.getBlockNumber();
|
|
38529
|
-
const pastBlock = head >
|
|
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 * (
|
|
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
|
|
38621
|
+
return { SWBTC: await computeApr5() };
|
|
38560
38622
|
} catch {
|
|
38561
38623
|
return { SWBTC: 0 };
|
|
38562
38624
|
}
|
|
38563
38625
|
}
|
|
38564
38626
|
};
|
|
38565
|
-
var
|
|
38627
|
+
var CHAIN_ID6 = "42220";
|
|
38566
38628
|
var MANAGER = "0x0239b96d10a434a56cc9e09383077a0490cf9398";
|
|
38567
38629
|
var ONE_E184 = 10n ** 18n;
|
|
38568
|
-
var
|
|
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
|
|
38572
|
-
var
|
|
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
|
|
38651
|
+
var computeApr6 = async () => {
|
|
38590
38652
|
let lastErr;
|
|
38591
|
-
for (let rpcId = 0; rpcId <
|
|
38653
|
+
for (let rpcId = 0; rpcId < MAX_RPC_TRIES5; rpcId++) {
|
|
38592
38654
|
try {
|
|
38593
|
-
const client = getEvmClient(
|
|
38655
|
+
const client = getEvmClient(CHAIN_ID6, rpcId);
|
|
38594
38656
|
const head = await client.getBlockNumber();
|
|
38595
|
-
const pastBlock = head >
|
|
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 * (
|
|
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
|
|
38686
|
+
const apr = await computeApr6();
|
|
38625
38687
|
return { STCELO: apr };
|
|
38626
38688
|
}
|
|
38627
38689
|
};
|
|
38628
|
-
var
|
|
38690
|
+
var CHAIN_ID7 = "1284";
|
|
38629
38691
|
var STDOT = "0xbc7e02c4178a7df7d3e564323a5c359dc96c4db4";
|
|
38630
38692
|
var ONE_E185 = 10n ** 18n;
|
|
38631
|
-
var
|
|
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
|
|
38635
|
-
var
|
|
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
|
|
38714
|
+
var computeApr7 = async () => {
|
|
38653
38715
|
let lastErr;
|
|
38654
|
-
for (let rpcId = 0; rpcId <
|
|
38716
|
+
for (let rpcId = 0; rpcId < MAX_RPC_TRIES6; rpcId++) {
|
|
38655
38717
|
try {
|
|
38656
|
-
const client = getEvmClient(
|
|
38718
|
+
const client = getEvmClient(CHAIN_ID7, rpcId);
|
|
38657
38719
|
const head = await client.getBlockNumber();
|
|
38658
|
-
const pastBlock = head >
|
|
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 * (
|
|
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
|
|
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
|
|
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) * (
|
|
47863
|
+
const apr = (ratio - 1) * (YEAR_SECONDS10 / windowSeconds);
|
|
47783
47864
|
return {
|
|
47784
47865
|
apr,
|
|
47785
47866
|
sharePriceNow: now.p,
|