@1delta/margin-fetcher 0.0.312 → 0.0.314
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 +104 -17
- package/dist/index.js.map +1 -1
- package/dist/vaults/euler-earn/fetchFromApi.d.ts +2 -1
- package/dist/vaults/euler-earn/fetchFromApi.d.ts.map +1 -1
- package/dist/vaults/euler-earn/fetchFromSubgraph.d.ts +8 -0
- package/dist/vaults/euler-earn/fetchFromSubgraph.d.ts.map +1 -1
- package/dist/vaults/euler-earn/fetchPublic.d.ts +3 -2
- package/dist/vaults/euler-earn/fetchPublic.d.ts.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/package.json +5 -5
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,
|
|
@@ -38372,15 +38372,15 @@ async function getJson(url) {
|
|
|
38372
38372
|
clearTimeout(timer);
|
|
38373
38373
|
}
|
|
38374
38374
|
}
|
|
38375
|
-
function mapApiDetail(d, chainId, prices, tokenList) {
|
|
38375
|
+
function mapApiDetail(d, chainId, prices, tokenList, shareDecimalsByVault) {
|
|
38376
38376
|
const address = (d.address ?? "").toLowerCase();
|
|
38377
38377
|
const underlying = (d.asset?.address ?? "").toLowerCase();
|
|
38378
38378
|
if (!address || !underlying) return null;
|
|
38379
38379
|
const assetMeta = tokenList[underlying];
|
|
38380
|
-
const decimals = Number(d.decimals ?? d.asset?.decimals ?? 18);
|
|
38381
38380
|
const assetDecimals = Number(
|
|
38382
|
-
d.asset?.decimals ?? assetMeta?.decimals ??
|
|
38381
|
+
d.asset?.decimals ?? assetMeta?.decimals ?? 18
|
|
38383
38382
|
);
|
|
38383
|
+
const decimals = shareDecimalsByVault.get(address) ?? assetDecimals;
|
|
38384
38384
|
const totalAssetsRaw = String(d.totalAssets ?? "0");
|
|
38385
38385
|
const totalSupplyRaw = String(d.totalShares ?? "0");
|
|
38386
38386
|
const convertToAssets = d.exchangeRate != null ? rescaleExchangeRate(d.exchangeRate, decimals) : deriveConvertToAssets(totalAssetsRaw, totalSupplyRaw, decimals);
|
|
@@ -38447,7 +38447,7 @@ async function mapWithConcurrency(items, limit, fn) {
|
|
|
38447
38447
|
);
|
|
38448
38448
|
return out;
|
|
38449
38449
|
}
|
|
38450
|
-
async function fetchEulerEarnVaultsFromApi(chainId, prices = {}, tokenList = {}) {
|
|
38450
|
+
async function fetchEulerEarnVaultsFromApi(chainId, prices = {}, tokenList = {}, multicallRetry) {
|
|
38451
38451
|
const list = await getJson(
|
|
38452
38452
|
`${EULER_DATA_API_BASE2}/earn/vaults?chainId=${chainId}&limit=200`
|
|
38453
38453
|
);
|
|
@@ -38461,10 +38461,16 @@ async function fetchEulerEarnVaultsFromApi(chainId, prices = {}, tokenList = {})
|
|
|
38461
38461
|
`${EULER_DATA_API_BASE2}/earn/vaults/${chainId}/${row.address}?include=strategies`
|
|
38462
38462
|
).then((d) => d?.data)
|
|
38463
38463
|
);
|
|
38464
|
+
const vaultAddrs = details.map((d) => d?.address).filter((a) => !!a);
|
|
38465
|
+
const shareDecimalsByVault = await fetchShareDecimals(
|
|
38466
|
+
chainId,
|
|
38467
|
+
vaultAddrs,
|
|
38468
|
+
multicallRetry
|
|
38469
|
+
);
|
|
38464
38470
|
const out = {};
|
|
38465
38471
|
for (const d of details) {
|
|
38466
38472
|
if (!d) continue;
|
|
38467
|
-
const v = mapApiDetail(d, chainId, prices, tokenList);
|
|
38473
|
+
const v = mapApiDetail(d, chainId, prices, tokenList, shareDecimalsByVault);
|
|
38468
38474
|
if (v) out[v.address] = v;
|
|
38469
38475
|
}
|
|
38470
38476
|
return out;
|
|
@@ -38476,7 +38482,8 @@ var fetchEulerEarnVaults = async (chainId, prices = {}, tokenList = {}, multical
|
|
|
38476
38482
|
const fromApi = await fetchEulerEarnVaultsFromApi(
|
|
38477
38483
|
chainId,
|
|
38478
38484
|
prices,
|
|
38479
|
-
tokenList
|
|
38485
|
+
tokenList,
|
|
38486
|
+
multicallRetry
|
|
38480
38487
|
).catch(() => void 0);
|
|
38481
38488
|
if (isNonEmpty(fromApi)) return fromApi;
|
|
38482
38489
|
const subgraphUrl = getEulerEarnSubgraphUrl(chainId);
|
|
@@ -44939,6 +44946,67 @@ var readerErc46262 = (entry) => {
|
|
|
44939
44946
|
|
|
44940
44947
|
// src/vaults/savings/readers/index.ts
|
|
44941
44948
|
var buildReader2 = (entry) => readerErc46262(entry);
|
|
44949
|
+
var CHAIN_ID7 = "4663";
|
|
44950
|
+
var VAULT2 = "0xde770c84fe66e063336b31737cfe9790f18c4087";
|
|
44951
|
+
var SPARK_SAVINGS_USDG_KEY = "SPUSDG";
|
|
44952
|
+
var RAY3 = 10n ** 27n;
|
|
44953
|
+
var YEAR_SECONDS9 = 365 * 24 * 60 * 60;
|
|
44954
|
+
var WINDOW_BLOCKS6 = 400000n;
|
|
44955
|
+
var MAX_RPC_TRIES6 = 3;
|
|
44956
|
+
var CHI_ABI = [
|
|
44957
|
+
{
|
|
44958
|
+
name: "chi",
|
|
44959
|
+
type: "function",
|
|
44960
|
+
stateMutability: "view",
|
|
44961
|
+
inputs: [],
|
|
44962
|
+
outputs: [{ type: "uint256" }]
|
|
44963
|
+
}
|
|
44964
|
+
];
|
|
44965
|
+
var readChiAt = (client, blockNumber) => client.readContract({
|
|
44966
|
+
address: VAULT2,
|
|
44967
|
+
abi: CHI_ABI,
|
|
44968
|
+
functionName: "chi",
|
|
44969
|
+
...blockNumber !== void 0 ? { blockNumber } : {}
|
|
44970
|
+
});
|
|
44971
|
+
var computeApr7 = async () => {
|
|
44972
|
+
let lastErr;
|
|
44973
|
+
for (let rpcId = 0; rpcId < MAX_RPC_TRIES6; rpcId++) {
|
|
44974
|
+
try {
|
|
44975
|
+
const client = getEvmClient(CHAIN_ID7, rpcId);
|
|
44976
|
+
const head = await client.getBlockNumber();
|
|
44977
|
+
const pastBlock = head > WINDOW_BLOCKS6 ? head - WINDOW_BLOCKS6 : 0n;
|
|
44978
|
+
const [chiNow, chiThen, headBlock, thenBlock] = await Promise.all([
|
|
44979
|
+
readChiAt(client),
|
|
44980
|
+
readChiAt(client, pastBlock),
|
|
44981
|
+
client.getBlock({ blockNumber: head }),
|
|
44982
|
+
client.getBlock({ blockNumber: pastBlock })
|
|
44983
|
+
]);
|
|
44984
|
+
if (chiNow < RAY3 || chiThen < RAY3 || chiNow < chiThen) {
|
|
44985
|
+
throw new Error(
|
|
44986
|
+
`non-archival or invalid chi (now=${chiNow}, then=${chiThen})`
|
|
44987
|
+
);
|
|
44988
|
+
}
|
|
44989
|
+
const elapsed = Number(headBlock.timestamp - thenBlock.timestamp);
|
|
44990
|
+
if (elapsed <= 0) throw new Error("non-positive elapsed window");
|
|
44991
|
+
const growth = Number(chiNow - chiThen) / Number(chiThen);
|
|
44992
|
+
const apr = growth * (YEAR_SECONDS9 / elapsed) * 100;
|
|
44993
|
+
if (!Number.isFinite(apr) || apr < 0) throw new Error(`bad apr ${apr}`);
|
|
44994
|
+
return apr;
|
|
44995
|
+
} catch (e) {
|
|
44996
|
+
lastErr = e;
|
|
44997
|
+
}
|
|
44998
|
+
}
|
|
44999
|
+
throw new Error(
|
|
45000
|
+
`spUSDG APR: no Robinhood RPC returned valid historical chi (${String(lastErr)})`
|
|
45001
|
+
);
|
|
45002
|
+
};
|
|
45003
|
+
var sparkSavingsUsdgFetcher = {
|
|
45004
|
+
label: "SPARK_SAVINGS_USDG",
|
|
45005
|
+
fetch: async () => {
|
|
45006
|
+
const apr = await computeApr7();
|
|
45007
|
+
return { [SPARK_SAVINGS_USDG_KEY]: apr };
|
|
45008
|
+
}
|
|
45009
|
+
};
|
|
44942
45010
|
|
|
44943
45011
|
// src/vaults/savings/registry.ts
|
|
44944
45012
|
var stUsdGroup = {
|
|
@@ -45266,6 +45334,25 @@ var SINGLE_CHAIN_ENTRIES = {
|
|
|
45266
45334
|
yieldFetcher: savbtcFetcher,
|
|
45267
45335
|
yieldKey: "Staked avBTC::savBTC"
|
|
45268
45336
|
}
|
|
45337
|
+
],
|
|
45338
|
+
"4663": [
|
|
45339
|
+
{
|
|
45340
|
+
// Spark Savings USDG on Robinhood Chain — Sky/Spark savings token
|
|
45341
|
+
// over USDG. ERC-4626 share price accrues via a `chi()` rate
|
|
45342
|
+
// accumulator; `ssr()` is not readable so APR comes from the
|
|
45343
|
+
// chi-delta fetcher. Standard permissionless 4626 redeem.
|
|
45344
|
+
address: "0xde770c84fe66e063336b31737cfe9790f18c4087",
|
|
45345
|
+
underlying: "0x5fc5360d0400a0fd4f2af552add042d716f1d168",
|
|
45346
|
+
// USDG
|
|
45347
|
+
symbol: "spUSDG",
|
|
45348
|
+
brand: "Spark",
|
|
45349
|
+
decimals: 6,
|
|
45350
|
+
isRebasing: false,
|
|
45351
|
+
isMintable: true,
|
|
45352
|
+
withdrawalMode: "instant",
|
|
45353
|
+
yieldFetcher: sparkSavingsUsdgFetcher,
|
|
45354
|
+
yieldKey: SPARK_SAVINGS_USDG_KEY
|
|
45355
|
+
}
|
|
45269
45356
|
]
|
|
45270
45357
|
};
|
|
45271
45358
|
var SAVINGS_REGISTRY = (() => {
|
|
@@ -47743,7 +47830,7 @@ var readVaultSharePrices = async (chainId, addresses, multicallRetry) => {
|
|
|
47743
47830
|
};
|
|
47744
47831
|
|
|
47745
47832
|
// src/vaults/yield/annualize.ts
|
|
47746
|
-
var
|
|
47833
|
+
var YEAR_SECONDS10 = 365 * 24 * 60 * 60;
|
|
47747
47834
|
var SCALE = 10n ** 18n;
|
|
47748
47835
|
var appendSnapshot = (points, snap, options) => {
|
|
47749
47836
|
const maxPoints = options?.maxPoints ?? 90;
|
|
@@ -47772,7 +47859,7 @@ var computeVaultApr = (points, options) => {
|
|
|
47772
47859
|
if (pThen === 0n) return void 0;
|
|
47773
47860
|
const ratioScaled = BigInt(now.p) * SCALE / pThen;
|
|
47774
47861
|
const ratio = Number(ratioScaled) / 1e18;
|
|
47775
|
-
const apr = (ratio - 1) * (
|
|
47862
|
+
const apr = (ratio - 1) * (YEAR_SECONDS10 / windowSeconds);
|
|
47776
47863
|
return {
|
|
47777
47864
|
apr,
|
|
47778
47865
|
sharePriceNow: now.p,
|