@1delta/margin-fetcher 5.0.110 → 5.0.112
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.d.ts +80 -2
- package/dist/index.js +378 -102
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/dist/index.js
CHANGED
|
@@ -5,7 +5,7 @@ import { Lender, isExactly, isMidnight, isTerm, isTermMax, isTeller, isListaDao,
|
|
|
5
5
|
export { hasCrossMarginRisk, isAaveType, isAaveV2Type, isAaveV32Type, isAaveV3Type, isCompoundV3, isCompoundV3Type, isInit, isMorphoType, isMultiMarket, isYLDR } from '@1delta/lender-registry';
|
|
6
6
|
import { fetchTokenLists, fetchTokenList, aavePools, compoundV3Pools, initConfig, morphoPools, compoundV2Pools, eulerVaults, siloMarkets, siloV2LenderKey, siloMarketsV3, siloV3LenderKey, aaveV4Spokes, aaveV4SpokeLenderKey, fluidResolvers, gearboxResolvers, dolomiteConfigs, midnightConfig, termConfig, termMarketsByChain, exactlyConfig, flyingTulipLendersByChain, liquityLendersByChain, riverLendersByChain, inverseLendersByChain, coolerLendersByChain, llamaLendLendersByChain, usddLendersByChain, skyLendersByChain, frankencoinLendersByChain, resupplyLendersByChain, curvanceLendersByChain, fraxlendLendersByChain, twyneLendersByChain, tellerConfigByChain, tellerPoolsByChain, termMaxConfigByChain, aaveReserves, compoundV3Reserves, dolomiteIsolationMarket, morphoTypeMarkets, resolveTermApiBase, flyingTulipConfigFor, flyingTulipAssetsFor, liquityConfigFor, liquityBranchesByChain, riverConfigFor, riverChainData, termMaxApiBaseUrl, termMaxLenderKey, inverseConfigFor, inverseChainData, coolerConfigFor, llamaLendConfigFor, llamaLendChainData, llamaLendApiBaseUrl, resupplyConfigFor, fraxlendConfigFor, dssConfigFor, dssChainData, dssDebtToken, dssDebtJoin, frankencoinConfigFor, frankencoinChainData, aaveTokens, compoundV3BaseData, compoundV2TokenArray, morphoTypeVaults, eulerConfigs, fluidVaultEntries, gearboxMarketConfigurators, dolomiteIsolation, liquityMarkets, riverMarkets, tellerConfig, tellerPools, termMarkets, termMaxConfig, midnightMarkets, midnightCollateralRef, llamaLendMarkets, fraxlendPairsFor, inverseMarkets, curvanceConfig, frankencoinMarkets, twyneMarkets, twyneConfigFor, exactlyMarkets, aaveOracles, resolveMidnightApiBase, llamaLendMarketByVault, getSiloV2MarketEntry, getSiloV3MarketEntry, dolomiteEmode, curvanceConfigFor, listaCollateralProvider, gearboxMarketCompressor, gearboxV3LenderKey, midnightMarketsByChain, twyneChainData, parseAaveV4SpokeLenderKey, gearboxAccountCompressor, compoundV2Tokens, exactlyMarketsByChain, aaveOraclesConfig, compoundV2Oracles, compoundV2OraclesConfig, compoundV3OraclesData, compoundV2Reserves, aaveV4Oracles, morphoTypeOracles } from '@1delta/data-sdk';
|
|
7
7
|
import lodash from 'lodash';
|
|
8
|
-
import { Chain, isEvmChainId, isSvmChainId } from '@1delta/chain-registry';
|
|
8
|
+
import { Chain, isEvmChainId, isRetiredChain, isSvmChainId } from '@1delta/chain-registry';
|
|
9
9
|
import { multicallRetryUniversal, getEvmClient, getEvmChain, createMulticallRetryUniversal, LIST_OVERRIDES, getEvmClientUniversal } from '@1delta/providers';
|
|
10
10
|
import { LiquityTroveManagerAbi, LiquityActivePoolAbi, LiquityStabilityPoolAbi, LiquityPriceFeedAbi, LiquitySortedTrovesAbi, RiverTroveManagerAbi, RiverStabilityPoolAbi, TellerMarketRegistryAbi, TellerV2Abi, InverseMarketAbi, InverseOracleAbi, InverseDbrAbi, CurveTricryptoOracleAbi, Erc20Abi, CoolerMonoAbi, CoolerLtvOracleAbi, LlamaLendControllerAbi, LlamaLendControllerV1Abi, LlamaLendControllerV2Abi, LlamaLendVaultAbi, LlamaLendAmmAbi, TwyneCollateralVaultAbi, MetaMorphoAbi, FluidDexResolverAbi, ExactlyPreviewerAbi, ExactlyAuditorAbi, FlyingTulipLendingLensAbi, LenderCommitmentGroupAbi, ResupplyRegistryAbi, ResupplyPairAbi, ResupplyUtilitiesAbi, ResupplyRewardHandlerAbi, ResupplyPairEmissionsAbi, ConvexPoolUtilAbi, FraxlendPairAbi, FraxlendLeverAbi, FrankencoinPositionAbi, FluidLendingResolverAbi, FluidVaultResolverAbi, FluidLiquidityResolverAbi, MoolahVaultAbi, UsddVatAbi, UsddJugAbi, UsddSpotAbi, MorphoLensAbi, AaveV4SpokeAbi, AaveV4OracleAbi, AaveV4HubAbi, DolomiteMarginAbi, GearboxMarketCompressorV310Abi, MorphoBlueAbi, MidnightAbi, TermRepoTokenAbi, TermRepoServicerAbi, TermRepoCollateralManagerAbi, LiquityTroveNFTAbi, LiquityCollSurplusPoolAbi, TellerCollateralManagerAbi, TermMaxViewerAbi, InverseEscrowAbi, CurvanceMarketManagerAbi, CurvanceCTokenAbi, GearboxCreditAccountCompressorV310Abi, TwyneVaultManagerAbi, TwyneCollateralVaultFactoryAbi, AaveV2V3Abi, TwyneATokenWrapperAbi, UsddCdpManagerAbi, UsddProxyRegistryAbi, CurvanceProtocolReaderAbi, CurvanceCentralRegistryAbi, TermPriceConsumerAbi, CurvanceOracleManagerAbi, TermMaxOracleAggregatorV2Abi } from '@1delta/abis';
|
|
11
11
|
export { MorphoLensAbi } from '@1delta/abis';
|
|
@@ -6390,6 +6390,7 @@ var ENABLED_EULER_V2_CHAINS = [
|
|
|
6390
6390
|
Chain.HYPEREVM
|
|
6391
6391
|
];
|
|
6392
6392
|
var getLendersForChain = (c) => {
|
|
6393
|
+
if (isRetiredChain(c)) return [];
|
|
6393
6394
|
let lenders = [];
|
|
6394
6395
|
Object.entries(aavePools() ?? {}).forEach(([l, data]) => {
|
|
6395
6396
|
const chains = Object.keys(data);
|
|
@@ -10965,7 +10966,6 @@ var MORPHO_LENS = {
|
|
|
10965
10966
|
[Chain.ROBINHOOD_CHAIN]: "0x8E24CfC19c6C00c524353CB8816f5f1c2F33c201",
|
|
10966
10967
|
[Chain.STABLE_MAINNET]: "0x8E24CfC19c6C00c524353CB8816f5f1c2F33c201",
|
|
10967
10968
|
[Chain.LISK]: "0x8E24CfC19c6C00c524353CB8816f5f1c2F33c201",
|
|
10968
|
-
[Chain.ABSTRACT]: "0x8e24cfc19c6c00c524353cb8816f5f1c2f33c201",
|
|
10969
10969
|
[Chain.INK]: "0x0bd7473CbBf81d9dD936c61117eD230d95006CA2",
|
|
10970
10970
|
[Chain.KAIA_MAINNET]: "0x925716D57c842B50806884EDb295bA3E3A8EBdFE",
|
|
10971
10971
|
// blue-api does not index these four, so the lens is the ONLY way to read
|
|
@@ -44710,6 +44710,65 @@ var rethFetcher = {
|
|
|
44710
44710
|
}
|
|
44711
44711
|
};
|
|
44712
44712
|
|
|
44713
|
+
// src/yields/intrinsic/fetchers/defillama.ts
|
|
44714
|
+
var POOLS_ENRICHED = "https://yields.llama.fi/poolsEnriched?pool=";
|
|
44715
|
+
var fetchDefiLlamaApy = async (poolId) => {
|
|
44716
|
+
const res = await fetch(POOLS_ENRICHED + poolId, {
|
|
44717
|
+
headers: { accept: "application/json" },
|
|
44718
|
+
signal: AbortSignal.timeout(8e3)
|
|
44719
|
+
});
|
|
44720
|
+
if (!res.ok) throw new Error(`DefiLlama HTTP ${res.status}`);
|
|
44721
|
+
const json = await res.json();
|
|
44722
|
+
const apy = json?.data?.[0]?.apy;
|
|
44723
|
+
if (typeof apy !== "number" || !Number.isFinite(apy)) {
|
|
44724
|
+
throw new Error(`DefiLlama: no apy for pool ${poolId}`);
|
|
44725
|
+
}
|
|
44726
|
+
return apy;
|
|
44727
|
+
};
|
|
44728
|
+
|
|
44729
|
+
// src/yields/intrinsic/fetchers/sanctum.ts
|
|
44730
|
+
var KAMINO_STAKING_YIELDS = "https://api.kamino.finance/staking-yields/tokens";
|
|
44731
|
+
var INF_MINT = "5oVNBeEEQvYi1cX3ir8Dx5n1P7pdxydbGF2X4TxVusJm";
|
|
44732
|
+
var INF_LLAMA_POOL = "3075a746-bdd1-4aac-bcd5-b035abee2622";
|
|
44733
|
+
var INF_KEY = "Infinity::INF::solana";
|
|
44734
|
+
var INF_EPOCHS = 10;
|
|
44735
|
+
var MAX_PLAUSIBLE_APY = 0.3;
|
|
44736
|
+
function meanEpochApy(rows, n = INF_EPOCHS) {
|
|
44737
|
+
if (!Array.isArray(rows)) return void 0;
|
|
44738
|
+
const ok3 = rows.map((r) => ({ epoch: Number(r?.epoch), apy: Number(r?.apy) })).filter(
|
|
44739
|
+
(r) => Number.isFinite(r.epoch) && Number.isFinite(r.apy) && r.apy > 0 && r.apy < MAX_PLAUSIBLE_APY
|
|
44740
|
+
).sort((a, b) => b.epoch - a.epoch).slice(0, n);
|
|
44741
|
+
if (ok3.length === 0) return void 0;
|
|
44742
|
+
return ok3.reduce((s, r) => s + r.apy, 0) / ok3.length;
|
|
44743
|
+
}
|
|
44744
|
+
async function kaminoInfApy() {
|
|
44745
|
+
const end = /* @__PURE__ */ new Date();
|
|
44746
|
+
const start = new Date(end.getTime() - 30 * 864e5);
|
|
44747
|
+
const d = (x) => x.toISOString().slice(0, 10);
|
|
44748
|
+
const res = await fetch(
|
|
44749
|
+
`${KAMINO_STAKING_YIELDS}/${INF_MINT}/history?start=${d(start)}&end=${d(end)}`,
|
|
44750
|
+
{
|
|
44751
|
+
headers: { accept: "application/json" },
|
|
44752
|
+
signal: AbortSignal.timeout(8e3)
|
|
44753
|
+
}
|
|
44754
|
+
);
|
|
44755
|
+
if (!res.ok) throw new Error(`Kamino staking-yields HTTP ${res.status}`);
|
|
44756
|
+
return meanEpochApy(await res.json());
|
|
44757
|
+
}
|
|
44758
|
+
var infFetcher = {
|
|
44759
|
+
label: "SANCTUM_INF",
|
|
44760
|
+
fetch: async () => {
|
|
44761
|
+
const apy = await kaminoInfApy().catch((e) => {
|
|
44762
|
+
console.warn(`[sanctum] Kamino INF history unavailable: ${e.message}`);
|
|
44763
|
+
return void 0;
|
|
44764
|
+
});
|
|
44765
|
+
if (apy !== void 0) return { [INF_KEY]: apyToAprPercent(apy * 100) };
|
|
44766
|
+
const llama = await fetchDefiLlamaApy(INF_LLAMA_POOL);
|
|
44767
|
+
if (!(llama > 0) || llama >= MAX_PLAUSIBLE_APY * 100) return {};
|
|
44768
|
+
return { [INF_KEY]: apyToAprPercent(llama) };
|
|
44769
|
+
}
|
|
44770
|
+
};
|
|
44771
|
+
|
|
44713
44772
|
// src/yields/intrinsic/fetchers/renzo.ts
|
|
44714
44773
|
var EZETH_URL = "https://app.renzoprotocol.com/api/stats?chainId=1";
|
|
44715
44774
|
var ezethFetcher = {
|
|
@@ -44719,6 +44778,41 @@ var ezethFetcher = {
|
|
|
44719
44778
|
return { EZETH: Number(res.data.apr.data.rate) };
|
|
44720
44779
|
}
|
|
44721
44780
|
};
|
|
44781
|
+
var EZSOL_URL = "https://app.renzoprotocol.com/api/stats/ezsol";
|
|
44782
|
+
var KAMINO_STAKING_YIELDS2 = "https://api.kamino.finance/staking-yields/tokens";
|
|
44783
|
+
var EZSOL_MINT = "ezSoL6fY1PVdJcJsUpe5CM3xkfmy3zoVCABybm5WtiC";
|
|
44784
|
+
var JITOSOL_MINT = "J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn";
|
|
44785
|
+
var EZSOL_KEY = "Renzo Restaked SOL::ezSOL::solana";
|
|
44786
|
+
var MAX_PLAUSIBLE_APR = 30;
|
|
44787
|
+
var ok2 = (x) => Number.isFinite(x) && x > 0 && x < MAX_PLAUSIBLE_APR;
|
|
44788
|
+
async function kaminoEpochApy(mint) {
|
|
44789
|
+
const end = /* @__PURE__ */ new Date();
|
|
44790
|
+
const start = new Date(end.getTime() - 30 * 864e5);
|
|
44791
|
+
const d = (x) => x.toISOString().slice(0, 10);
|
|
44792
|
+
const res = await fetch(
|
|
44793
|
+
`${KAMINO_STAKING_YIELDS2}/${mint}/history?start=${d(start)}&end=${d(end)}`,
|
|
44794
|
+
{ signal: AbortSignal.timeout(8e3) }
|
|
44795
|
+
);
|
|
44796
|
+
if (!res.ok) throw new Error(`Kamino staking-yields HTTP ${res.status}`);
|
|
44797
|
+
return meanEpochApy(await res.json());
|
|
44798
|
+
}
|
|
44799
|
+
var ezsolFetcher = {
|
|
44800
|
+
label: "EZSOL",
|
|
44801
|
+
fetch: async () => {
|
|
44802
|
+
const issuer = await fetch(EZSOL_URL, { signal: AbortSignal.timeout(8e3) }).then((r) => r.json()).then((r) => Number(r?.data?.apr?.data)).catch((e) => {
|
|
44803
|
+
console.warn(`[renzo] ezSOL APR unavailable: ${e.message}`);
|
|
44804
|
+
return NaN;
|
|
44805
|
+
});
|
|
44806
|
+
if (ok2(issuer)) return { [EZSOL_KEY]: issuer };
|
|
44807
|
+
const [jito, vrt] = await Promise.all([
|
|
44808
|
+
kaminoEpochApy(JITOSOL_MINT).catch(() => void 0),
|
|
44809
|
+
kaminoEpochApy(EZSOL_MINT).catch(() => void 0)
|
|
44810
|
+
]);
|
|
44811
|
+
if (jito === void 0 || vrt === void 0) return {};
|
|
44812
|
+
const apr = apyToAprPercent(jito * 100) + apyToAprPercent(vrt * 100);
|
|
44813
|
+
return ok2(apr) ? { [EZSOL_KEY]: apr } : {};
|
|
44814
|
+
}
|
|
44815
|
+
};
|
|
44722
44816
|
|
|
44723
44817
|
// src/yields/intrinsic/fetchers/kelp.ts
|
|
44724
44818
|
var RSETH_URL = "https://universe.kelpdao.xyz/rseth/totalApy";
|
|
@@ -44886,22 +44980,6 @@ var createTruFinFetcher = (staker, yieldKey) => ({
|
|
|
44886
44980
|
var trumaticFetcher = createTruFinFetcher("MATIC", "TRUMATIC");
|
|
44887
44981
|
var trupolFetcher = createTruFinFetcher("POL", "TRUPOL");
|
|
44888
44982
|
|
|
44889
|
-
// src/yields/intrinsic/fetchers/defillama.ts
|
|
44890
|
-
var POOLS_ENRICHED = "https://yields.llama.fi/poolsEnriched?pool=";
|
|
44891
|
-
var fetchDefiLlamaApy = async (poolId) => {
|
|
44892
|
-
const res = await fetch(POOLS_ENRICHED + poolId, {
|
|
44893
|
-
headers: { accept: "application/json" },
|
|
44894
|
-
signal: AbortSignal.timeout(8e3)
|
|
44895
|
-
});
|
|
44896
|
-
if (!res.ok) throw new Error(`DefiLlama HTTP ${res.status}`);
|
|
44897
|
-
const json = await res.json();
|
|
44898
|
-
const apy = json?.data?.[0]?.apy;
|
|
44899
|
-
if (typeof apy !== "number" || !Number.isFinite(apy)) {
|
|
44900
|
-
throw new Error(`DefiLlama: no apy for pool ${poolId}`);
|
|
44901
|
-
}
|
|
44902
|
-
return apy;
|
|
44903
|
-
};
|
|
44904
|
-
|
|
44905
44983
|
// src/yields/intrinsic/fetchers/kinetiq.ts
|
|
44906
44984
|
var KHYPE_POOL_ID = "9f25a954-db87-4bb2-a8b2-4be0b843a44c";
|
|
44907
44985
|
var KHYPE_KEY = "Kinetiq Staked HYPE::kHYPE";
|
|
@@ -45252,31 +45330,23 @@ var stKaiaFetcher = {
|
|
|
45252
45330
|
}
|
|
45253
45331
|
}
|
|
45254
45332
|
};
|
|
45255
|
-
var
|
|
45333
|
+
var YIELD_APY_URL = "https://api.lista.org/v1/stakes/yield-apy";
|
|
45256
45334
|
var SLISBNB = "Lista Staked BNB::slisBNB";
|
|
45257
|
-
var DAY_SECONDS2 = 86400;
|
|
45258
|
-
var LOOKBACK_SECONDS = 14 * DAY_SECONDS2;
|
|
45259
45335
|
var TIMEOUT_MS = 8e3;
|
|
45260
45336
|
var slisBnbFetcher = {
|
|
45261
45337
|
label: "SLISBNB",
|
|
45262
45338
|
fetch: async () => {
|
|
45263
|
-
const nowSec9 = Math.floor(Date.now() / 1e3);
|
|
45264
|
-
const url = `${HISTORY_URL}?name=slisBNBRate&cycle=1&startTime=${nowSec9 - LOOKBACK_SECONDS}&endTime=${nowSec9}`;
|
|
45265
45339
|
const controller = new AbortController();
|
|
45266
45340
|
const timer = setTimeout(() => controller.abort(), TIMEOUT_MS);
|
|
45267
45341
|
try {
|
|
45268
|
-
const res = await fetch(
|
|
45342
|
+
const res = await fetch(YIELD_APY_URL, {
|
|
45269
45343
|
method: "GET",
|
|
45270
45344
|
headers: { Accept: "application/json" },
|
|
45271
45345
|
signal: controller.signal
|
|
45272
45346
|
}).then((r) => r.json());
|
|
45273
|
-
const
|
|
45274
|
-
if (
|
|
45275
|
-
|
|
45276
|
-
(a, b) => b.chartTime > a.chartTime ? b : a
|
|
45277
|
-
);
|
|
45278
|
-
const apr = Number(latest.amount);
|
|
45279
|
-
return { [SLISBNB]: Number.isFinite(apr) && apr > 0 ? apr : 0 };
|
|
45347
|
+
const apy = Number(res.data?.staking?.month3Apy);
|
|
45348
|
+
if (!Number.isFinite(apy) || apy <= 0) return {};
|
|
45349
|
+
return { [SLISBNB]: apyToAprPercent(apy * 100) };
|
|
45280
45350
|
} finally {
|
|
45281
45351
|
clearTimeout(timer);
|
|
45282
45352
|
}
|
|
@@ -46038,7 +46108,7 @@ var fraxSavingsFetcher = {
|
|
|
46038
46108
|
};
|
|
46039
46109
|
|
|
46040
46110
|
// src/yields/intrinsic/fetchers/binance.ts
|
|
46041
|
-
var
|
|
46111
|
+
var HISTORY_URL = "https://www.binance.com/bapi/earn/v1/public/pos/cftoken/project/exchange-rate/history";
|
|
46042
46112
|
var WBETH = "Wrapped Binance Beacon ETH::wBETH";
|
|
46043
46113
|
var LLAMA_POOL = "80b8bf92-b953-4c20-98ea-c9653ef2bb98";
|
|
46044
46114
|
var DAY_MS = 864e5;
|
|
@@ -46048,7 +46118,7 @@ var wbethFetcher = {
|
|
|
46048
46118
|
label: "WBETH",
|
|
46049
46119
|
fetch: async () => {
|
|
46050
46120
|
const now = Date.now();
|
|
46051
|
-
const url = `${
|
|
46121
|
+
const url = `${HISTORY_URL}?startTime=${now - LOOKBACK_MS}&endTime=${now}`;
|
|
46052
46122
|
try {
|
|
46053
46123
|
const res = await fetch(url, {
|
|
46054
46124
|
method: "GET",
|
|
@@ -47994,7 +48064,7 @@ var HASTRA_TOKEN_KEYS = {
|
|
|
47994
48064
|
prime: HASTRA_PRIME_KEY,
|
|
47995
48065
|
auto: HASTRA_AUTO_KEY
|
|
47996
48066
|
};
|
|
47997
|
-
var
|
|
48067
|
+
var MAX_PLAUSIBLE_APR2 = 50;
|
|
47998
48068
|
function parseHastraPor(res) {
|
|
47999
48069
|
const tokens = res?.demo_prime_card?.tokens;
|
|
48000
48070
|
const out = {};
|
|
@@ -48003,7 +48073,7 @@ function parseHastraPor(res) {
|
|
|
48003
48073
|
const key3 = HASTRA_TOKEN_KEYS[String(t?.token ?? "").toLowerCase()];
|
|
48004
48074
|
if (!key3) continue;
|
|
48005
48075
|
const apr = Number(t?.effective_rate);
|
|
48006
|
-
if (Number.isFinite(apr) && apr > 0 && apr <
|
|
48076
|
+
if (Number.isFinite(apr) && apr > 0 && apr < MAX_PLAUSIBLE_APR2)
|
|
48007
48077
|
out[key3] = apr;
|
|
48008
48078
|
}
|
|
48009
48079
|
return out;
|
|
@@ -49160,6 +49230,22 @@ var ethZeroFetcher = {
|
|
|
49160
49230
|
return { [ethZero]: Number(res?.rewards[0]?.apr ?? 0) * 100 };
|
|
49161
49231
|
}
|
|
49162
49232
|
};
|
|
49233
|
+
var USUAL_TOKEN = "0xc4441c2be5d8fa8126822b9929ca0b81ea0de38e";
|
|
49234
|
+
var fetchBusd0UsualPerDay = async () => {
|
|
49235
|
+
try {
|
|
49236
|
+
const res = await fetch(USDZEROPLUS_URL, {
|
|
49237
|
+
method: "GET",
|
|
49238
|
+
headers: { Accept: "application/json" }
|
|
49239
|
+
}).then((r) => r.json());
|
|
49240
|
+
const leg = res?.rewards?.find(
|
|
49241
|
+
(r) => r.rewardToken?.toLowerCase() === USUAL_TOKEN
|
|
49242
|
+
);
|
|
49243
|
+
const rate = Number(leg?.rate);
|
|
49244
|
+
return Number.isFinite(rate) && rate >= 0 ? rate : void 0;
|
|
49245
|
+
} catch {
|
|
49246
|
+
return void 0;
|
|
49247
|
+
}
|
|
49248
|
+
};
|
|
49163
49249
|
var CHAIN_ID14 = Chain.ETHEREUM_MAINNET;
|
|
49164
49250
|
var HUMA_PST_FEED = "0x4be50be32db1510240d542f77c5b36ca0d0965e6";
|
|
49165
49251
|
var HUMA_PST_KEY = "HUMA::PST";
|
|
@@ -52517,7 +52603,8 @@ var SINGLE_CHAIN_ENTRIES = {
|
|
|
52517
52603
|
// so `solvency` stays unasserted and the reader clamps the rate to it.
|
|
52518
52604
|
//
|
|
52519
52605
|
// The rate is par and NEVER drifts: the yield is a USUAL reward stream
|
|
52520
|
-
// (Usual's `rewards/rates/USD0++` API, 5.
|
|
52606
|
+
// (Usual's `rewards/rates/USD0++` API, ~5.6 % at integration), published
|
|
52607
|
+
// as `rewardsRate` with `supplyRate` 0 (`yieldLeg: 'rewards'`). The
|
|
52521
52608
|
// interesting numbers are the early exits — `unlockUsd0ppFloorPrice` at
|
|
52522
52609
|
// `getFloorPrice()` (0.92 → `withdrawFeeBps` 800), `unlockUSD0ppWithUsual`
|
|
52523
52610
|
// at par for `calculateRequiredUsual` (2.147 USUAL per bUSD0 ≈ 2.6 % at
|
|
@@ -52547,6 +52634,32 @@ var SINGLE_CHAIN_ENTRIES = {
|
|
|
52547
52634
|
// USUAL
|
|
52548
52635
|
parUnlockTokenSymbol: "USUAL"
|
|
52549
52636
|
},
|
|
52637
|
+
// The yield is USUAL, paid outside the share price and claimed from
|
|
52638
|
+
// Usual's DistributionModule against an off-chain cumulative merkle.
|
|
52639
|
+
// `rewardsRate` is priced on the PAR basis from the per-day emission;
|
|
52640
|
+
// the API's market-basis `apr` (the `yieldFetcher`) is the fallback.
|
|
52641
|
+
yieldLeg: "rewards",
|
|
52642
|
+
rewardStream: {
|
|
52643
|
+
token: {
|
|
52644
|
+
address: "0xc4441c2be5d8fa8126822b9929ca0b81ea0de38e",
|
|
52645
|
+
chainId: "1",
|
|
52646
|
+
symbol: "USUAL",
|
|
52647
|
+
decimals: 18
|
|
52648
|
+
},
|
|
52649
|
+
source: {
|
|
52650
|
+
id: "usual:busd0",
|
|
52651
|
+
label: "Usual \xB7 bUSD0",
|
|
52652
|
+
link: "https://app.usual.money/rewards",
|
|
52653
|
+
platform: "usual",
|
|
52654
|
+
refs: {
|
|
52655
|
+
distribution: "usual-merkle",
|
|
52656
|
+
claimContract: "0x75cc0c0ddd2ccafe6ec415be686267588011e36a",
|
|
52657
|
+
proofApi: "https://app.usual.money/api/rewards/<account>"
|
|
52658
|
+
}
|
|
52659
|
+
},
|
|
52660
|
+
claim: "manual",
|
|
52661
|
+
emissionPerSharePerDay: fetchBusd0UsualPerDay
|
|
52662
|
+
},
|
|
52550
52663
|
yieldFetcher: usdZeroPlusFetcher,
|
|
52551
52664
|
yieldKey: BUSD0_KEY
|
|
52552
52665
|
},
|
|
@@ -55587,9 +55700,9 @@ function averageDataLastN(arr, n = 7) {
|
|
|
55587
55700
|
if (last.length === 0) return 0;
|
|
55588
55701
|
return last.reduce((sum3, x) => sum3 + x.data, 0) / last.length;
|
|
55589
55702
|
}
|
|
55590
|
-
var safeFetch = async (label,
|
|
55703
|
+
var safeFetch = async (label, fn2) => {
|
|
55591
55704
|
try {
|
|
55592
|
-
return await
|
|
55705
|
+
return await fn2();
|
|
55593
55706
|
} catch (e) {
|
|
55594
55707
|
console.error(`Error fetching ${label}:`, e);
|
|
55595
55708
|
return void 0;
|
|
@@ -55707,49 +55820,6 @@ var onycFetcher = {
|
|
|
55707
55820
|
}
|
|
55708
55821
|
};
|
|
55709
55822
|
|
|
55710
|
-
// src/yields/intrinsic/fetchers/sanctum.ts
|
|
55711
|
-
var KAMINO_STAKING_YIELDS = "https://api.kamino.finance/staking-yields/tokens";
|
|
55712
|
-
var INF_MINT = "5oVNBeEEQvYi1cX3ir8Dx5n1P7pdxydbGF2X4TxVusJm";
|
|
55713
|
-
var INF_LLAMA_POOL = "3075a746-bdd1-4aac-bcd5-b035abee2622";
|
|
55714
|
-
var INF_KEY = "Infinity::INF::solana";
|
|
55715
|
-
var INF_EPOCHS = 10;
|
|
55716
|
-
var MAX_PLAUSIBLE_APY = 0.3;
|
|
55717
|
-
function meanEpochApy(rows, n = INF_EPOCHS) {
|
|
55718
|
-
if (!Array.isArray(rows)) return void 0;
|
|
55719
|
-
const ok2 = rows.map((r) => ({ epoch: Number(r?.epoch), apy: Number(r?.apy) })).filter(
|
|
55720
|
-
(r) => Number.isFinite(r.epoch) && Number.isFinite(r.apy) && r.apy > 0 && r.apy < MAX_PLAUSIBLE_APY
|
|
55721
|
-
).sort((a, b) => b.epoch - a.epoch).slice(0, n);
|
|
55722
|
-
if (ok2.length === 0) return void 0;
|
|
55723
|
-
return ok2.reduce((s, r) => s + r.apy, 0) / ok2.length;
|
|
55724
|
-
}
|
|
55725
|
-
async function kaminoInfApy() {
|
|
55726
|
-
const end = /* @__PURE__ */ new Date();
|
|
55727
|
-
const start = new Date(end.getTime() - 30 * 864e5);
|
|
55728
|
-
const d = (x) => x.toISOString().slice(0, 10);
|
|
55729
|
-
const res = await fetch(
|
|
55730
|
-
`${KAMINO_STAKING_YIELDS}/${INF_MINT}/history?start=${d(start)}&end=${d(end)}`,
|
|
55731
|
-
{
|
|
55732
|
-
headers: { accept: "application/json" },
|
|
55733
|
-
signal: AbortSignal.timeout(8e3)
|
|
55734
|
-
}
|
|
55735
|
-
);
|
|
55736
|
-
if (!res.ok) throw new Error(`Kamino staking-yields HTTP ${res.status}`);
|
|
55737
|
-
return meanEpochApy(await res.json());
|
|
55738
|
-
}
|
|
55739
|
-
var infFetcher = {
|
|
55740
|
-
label: "SANCTUM_INF",
|
|
55741
|
-
fetch: async () => {
|
|
55742
|
-
const apy = await kaminoInfApy().catch((e) => {
|
|
55743
|
-
console.warn(`[sanctum] Kamino INF history unavailable: ${e.message}`);
|
|
55744
|
-
return void 0;
|
|
55745
|
-
});
|
|
55746
|
-
if (apy !== void 0) return { [INF_KEY]: apyToAprPercent(apy * 100) };
|
|
55747
|
-
const llama = await fetchDefiLlamaApy(INF_LLAMA_POOL);
|
|
55748
|
-
if (!(llama > 0) || llama >= MAX_PLAUSIBLE_APY * 100) return {};
|
|
55749
|
-
return { [INF_KEY]: apyToAprPercent(llama) };
|
|
55750
|
-
}
|
|
55751
|
-
};
|
|
55752
|
-
|
|
55753
55823
|
// src/yields/intrinsic/fetchers/exponentTranching.ts
|
|
55754
55824
|
var EXPONENT_APP_API = "https://app.exponent.finance/api/tranching-markets";
|
|
55755
55825
|
var EXPONENT_SENIOR_GROUPS = {
|
|
@@ -56567,6 +56637,9 @@ var LENDING_ONLY_FETCHERS = [
|
|
|
56567
56637
|
// pool, collateral on Kamino / Jupiter Lend / Project 0 / Save. Its earn
|
|
56568
56638
|
// row lives in margin-fetcher-sol, so it is lending-only here.
|
|
56569
56639
|
infFetcher,
|
|
56640
|
+
// ezSOL (Renzo, Solana): a Jito Restaking VRT over JitoSOL, Kamino
|
|
56641
|
+
// collateral. Its earn row lives in margin-fetcher-sol (`jito-vault`).
|
|
56642
|
+
ezsolFetcher,
|
|
56570
56643
|
// Exponent senior tranches (srEHYUSD / srAUTO / srONyc / srnOPAL, Solana):
|
|
56571
56644
|
// Loopscale loop collateral, no earn row.
|
|
56572
56645
|
exponentSeniorFetcher,
|
|
@@ -60934,9 +61007,9 @@ function countFailures(data, offset, count) {
|
|
|
60934
61007
|
}
|
|
60935
61008
|
return failures;
|
|
60936
61009
|
}
|
|
60937
|
-
function safeGetCalls(fetcherName,
|
|
61010
|
+
function safeGetCalls(fetcherName, fn2, errors) {
|
|
60938
61011
|
try {
|
|
60939
|
-
return
|
|
61012
|
+
return fn2();
|
|
60940
61013
|
} catch (e) {
|
|
60941
61014
|
errors[fetcherName] = e instanceof Error ? e.message : String(e);
|
|
60942
61015
|
return [];
|
|
@@ -63624,8 +63697,6 @@ var MORPHO_STUB_VAULTS = {
|
|
|
63624
63697
|
// Pharos
|
|
63625
63698
|
"1868": ["0x94665e0df3c8c25119d80b2e3c703ccd127bf37e"],
|
|
63626
63699
|
// Soneium
|
|
63627
|
-
"2741": ["0x225c6e63970bb04d0780b3abb047dba659ad3cec"],
|
|
63628
|
-
// Abstract
|
|
63629
63700
|
"2818": ["0x7cf2c1a184c2f17e0413a13b21b1fdafd51df08c"],
|
|
63630
63701
|
// Morph
|
|
63631
63702
|
"4114": ["0xc063aca30b0d56ff0a9e446a94f8cdb421ab89fb"],
|
|
@@ -65301,14 +65372,14 @@ function mapApiDetail(d, chainId, prices, tokenList, shareDecimalsByVault, entit
|
|
|
65301
65372
|
liquidityUsd
|
|
65302
65373
|
};
|
|
65303
65374
|
}
|
|
65304
|
-
async function mapWithConcurrency(items, limit,
|
|
65375
|
+
async function mapWithConcurrency(items, limit, fn2) {
|
|
65305
65376
|
const out = new Array(items.length);
|
|
65306
65377
|
let cursor = 0;
|
|
65307
65378
|
const worker = async () => {
|
|
65308
65379
|
while (true) {
|
|
65309
65380
|
const i = cursor++;
|
|
65310
65381
|
if (i >= items.length) break;
|
|
65311
|
-
out[i] = await
|
|
65382
|
+
out[i] = await fn2(items[i]);
|
|
65312
65383
|
}
|
|
65313
65384
|
};
|
|
65314
65385
|
await Promise.all(
|
|
@@ -73383,19 +73454,64 @@ var bitfiExitRoutes = (exit, waitSeconds) => {
|
|
|
73383
73454
|
}
|
|
73384
73455
|
return routes2;
|
|
73385
73456
|
};
|
|
73457
|
+
var resolveRewardEmissions = async (entries) => {
|
|
73458
|
+
const byFn = /* @__PURE__ */ new Map();
|
|
73459
|
+
const out = /* @__PURE__ */ new Map();
|
|
73460
|
+
await Promise.all(
|
|
73461
|
+
entries.map(async (e) => {
|
|
73462
|
+
const fn2 = e.rewardStream?.emissionPerSharePerDay;
|
|
73463
|
+
if (!fn2) return;
|
|
73464
|
+
if (!byFn.has(fn2))
|
|
73465
|
+
byFn.set(
|
|
73466
|
+
fn2,
|
|
73467
|
+
fn2().catch(() => void 0)
|
|
73468
|
+
);
|
|
73469
|
+
out.set(e.address.toLowerCase(), await byFn.get(fn2));
|
|
73470
|
+
})
|
|
73471
|
+
);
|
|
73472
|
+
return out;
|
|
73473
|
+
};
|
|
73474
|
+
var rewardsLeg = (entry, i) => {
|
|
73475
|
+
const cfg = entry.rewardStream;
|
|
73476
|
+
const tokenPrice = cfg ? i.prices[cfg.token.address.toLowerCase()] : void 0;
|
|
73477
|
+
const redeemUsd = i.underlyingPriceUsd !== void 0 ? Number(i.exchangeRate) / 1e18 * i.underlyingPriceUsd : void 0;
|
|
73478
|
+
const parApr = i.perSharePerDay !== void 0 && tokenPrice !== void 0 && redeemUsd !== void 0 && redeemUsd > 0 ? i.perSharePerDay * 365 * tokenPrice / redeemUsd * 100 : void 0;
|
|
73479
|
+
const apr = parApr ?? i.fetcherApr ?? 0;
|
|
73480
|
+
if (!cfg) return { apr };
|
|
73481
|
+
return {
|
|
73482
|
+
apr,
|
|
73483
|
+
streams: [
|
|
73484
|
+
{
|
|
73485
|
+
side: "deposit",
|
|
73486
|
+
apr,
|
|
73487
|
+
kind: "token",
|
|
73488
|
+
token: { ...cfg.token, priceUsd: tokenPrice },
|
|
73489
|
+
source: {
|
|
73490
|
+
...cfg.source,
|
|
73491
|
+
refs: {
|
|
73492
|
+
...cfg.source.refs ?? {},
|
|
73493
|
+
aprBasis: parApr !== void 0 ? "redemption-value" : i.fetcherApr !== void 0 ? "source" : "unknown"
|
|
73494
|
+
}
|
|
73495
|
+
},
|
|
73496
|
+
claim: cfg.claim
|
|
73497
|
+
}
|
|
73498
|
+
]
|
|
73499
|
+
};
|
|
73500
|
+
};
|
|
73386
73501
|
var fetchSavingsVaults = async (chainId, multicallRetry, prices = {}, tokenList = {}) => {
|
|
73387
73502
|
const entries = getSavingsRegistry(chainId);
|
|
73388
73503
|
if (entries.length === 0) return {};
|
|
73389
73504
|
const readers = entries.map(buildReader2);
|
|
73390
73505
|
const allCalls = readers.flatMap((r) => r.calls);
|
|
73391
73506
|
const allAbis = readers.flatMap((r) => r.abis);
|
|
73392
|
-
const [rawResults, aprByAddress] = await Promise.all([
|
|
73507
|
+
const [rawResults, aprByAddress, emissionByAddress] = await Promise.all([
|
|
73393
73508
|
allCalls.length > 0 ? multicallRetry({
|
|
73394
73509
|
chain: chainId,
|
|
73395
73510
|
calls: allCalls,
|
|
73396
73511
|
abi: allAbis
|
|
73397
73512
|
}) : Promise.resolve([]),
|
|
73398
|
-
resolveYieldApr2(entries)
|
|
73513
|
+
resolveYieldApr2(entries),
|
|
73514
|
+
resolveRewardEmissions(entries)
|
|
73399
73515
|
]);
|
|
73400
73516
|
const out = {};
|
|
73401
73517
|
let cursor = 0;
|
|
@@ -73410,8 +73526,16 @@ var fetchSavingsVaults = async (chainId, multicallRetry, prices = {}, tokenList
|
|
|
73410
73526
|
const underlyingLc = entry.underlying.toLowerCase();
|
|
73411
73527
|
const asset = tokenList[underlyingLc];
|
|
73412
73528
|
const priceUsd = prices[underlyingLc];
|
|
73413
|
-
const
|
|
73414
|
-
const
|
|
73529
|
+
const fetcherApr = aprByAddress[addressLc];
|
|
73530
|
+
const rewards = entry.yieldLeg === "rewards" ? rewardsLeg(entry, {
|
|
73531
|
+
perSharePerDay: emissionByAddress.get(addressLc),
|
|
73532
|
+
fetcherApr,
|
|
73533
|
+
exchangeRate: state.exchangeRate,
|
|
73534
|
+
underlyingPriceUsd: priceUsd,
|
|
73535
|
+
prices
|
|
73536
|
+
}) : void 0;
|
|
73537
|
+
const supplyRate = state.supplyRate ?? (rewards ? 0 : fetcherApr ?? 0);
|
|
73538
|
+
const rewardsRate = rewards?.apr ?? 0;
|
|
73415
73539
|
const depositRate = supplyRate + rewardsRate;
|
|
73416
73540
|
const shareDec = entry.decimals;
|
|
73417
73541
|
const underlyingDec = entry.underlyingDecimals ?? entry.decimals;
|
|
@@ -73480,6 +73604,9 @@ var fetchSavingsVaults = async (chainId, multicallRetry, prices = {}, tokenList
|
|
|
73480
73604
|
supplyRate,
|
|
73481
73605
|
rewardsRate,
|
|
73482
73606
|
depositRate,
|
|
73607
|
+
// What `rewardsRate` is paid in and how it is claimed — only on
|
|
73608
|
+
// `yieldLeg: 'rewards'` entries.
|
|
73609
|
+
rewardStreams: rewards?.streams,
|
|
73483
73610
|
// NOT part of `depositRate` — it is the incentive the vault's position
|
|
73484
73611
|
// earns and the depositor does not. See the field's docstring.
|
|
73485
73612
|
strandedRewardsRate: state.strandedRewardsRate,
|
|
@@ -73592,6 +73719,143 @@ var fetchSavingsVaults = async (chainId, multicallRetry, prices = {}, tokenList
|
|
|
73592
73719
|
return out;
|
|
73593
73720
|
};
|
|
73594
73721
|
|
|
73722
|
+
// src/vaults/savings/usualRewards.ts
|
|
73723
|
+
var USUAL_DISTRIBUTION_MODULE = "0x75cc0c0ddd2ccafe6ec415be686267588011e36a";
|
|
73724
|
+
var USUAL_REWARDS_API = "https://app.usual.money/api/rewards";
|
|
73725
|
+
var ZERO7 = "0x0000000000000000000000000000000000000000";
|
|
73726
|
+
var fn = (name, inputs, outputs) => ({ name, type: "function", stateMutability: "view", inputs, outputs });
|
|
73727
|
+
var acct = [{ name: "account", type: "address" }];
|
|
73728
|
+
var UsualDistributionModuleReadAbi = [
|
|
73729
|
+
fn(
|
|
73730
|
+
"getOffChainDistributionData",
|
|
73731
|
+
[],
|
|
73732
|
+
[
|
|
73733
|
+
{ name: "timestamp", type: "uint256" },
|
|
73734
|
+
{ name: "merkleRoot", type: "bytes32" }
|
|
73735
|
+
]
|
|
73736
|
+
),
|
|
73737
|
+
fn("getOffChainTokensClaimed", acct, [{ name: "", type: "uint256" }]),
|
|
73738
|
+
fn("getClaimOnlySelf", acct, [{ name: "", type: "bool" }]),
|
|
73739
|
+
fn("getRedirectedAccount", acct, [{ name: "", type: "address" }]),
|
|
73740
|
+
fn("paused", [], [{ name: "", type: "bool" }]),
|
|
73741
|
+
fn("getOffChainDistributionMintCap", [], [{ name: "", type: "uint256" }])
|
|
73742
|
+
];
|
|
73743
|
+
var isHex32 = (v) => typeof v === "string" && /^0x[0-9a-fA-F]{64}$/.test(v);
|
|
73744
|
+
var selectUsualRewardEntry = (entries, onchainRoot) => {
|
|
73745
|
+
if (!Array.isArray(entries))
|
|
73746
|
+
return {
|
|
73747
|
+
status: "unknown",
|
|
73748
|
+
reason: "Usual rewards API reply is not a list"
|
|
73749
|
+
};
|
|
73750
|
+
if (entries.length === 0)
|
|
73751
|
+
return { status: "ok", cumulative: 0n, proof: [], pending: 0n };
|
|
73752
|
+
const parsed = [];
|
|
73753
|
+
for (const e of entries) {
|
|
73754
|
+
try {
|
|
73755
|
+
if (!isHex32(e?.merkleRoot) || !Array.isArray(e.merkleProof)) continue;
|
|
73756
|
+
if (!e.merkleProof.every(isHex32)) continue;
|
|
73757
|
+
parsed.push({
|
|
73758
|
+
root: e.merkleRoot.toLowerCase(),
|
|
73759
|
+
value: BigInt(e.value),
|
|
73760
|
+
proof: e.merkleProof,
|
|
73761
|
+
block: Number(e.blockNumber)
|
|
73762
|
+
});
|
|
73763
|
+
} catch {
|
|
73764
|
+
}
|
|
73765
|
+
}
|
|
73766
|
+
const root = onchainRoot.toLowerCase();
|
|
73767
|
+
const match = parsed.find((p) => p.root === root);
|
|
73768
|
+
if (!match)
|
|
73769
|
+
return {
|
|
73770
|
+
status: "unknown",
|
|
73771
|
+
reason: `Usual rewards API has no entry for the approved on-chain root ${onchainRoot} (it lists ${parsed.length} other root(s)) \u2014 the API and the chain are out of step`
|
|
73772
|
+
};
|
|
73773
|
+
const newest = parsed.reduce((a, b) => b.block > a.block ? b : a, match);
|
|
73774
|
+
const pending = newest.value > match.value ? newest.value - match.value : 0n;
|
|
73775
|
+
return {
|
|
73776
|
+
status: "ok",
|
|
73777
|
+
cumulative: match.value,
|
|
73778
|
+
proof: match.proof,
|
|
73779
|
+
pending
|
|
73780
|
+
};
|
|
73781
|
+
};
|
|
73782
|
+
var fetchUsualRewardsClaimData = async (account, multicallRetry, opts = {}) => {
|
|
73783
|
+
const dm = (opts.distributionModule ?? USUAL_DISTRIBUTION_MODULE).toLowerCase();
|
|
73784
|
+
const who = account.toLowerCase();
|
|
73785
|
+
let res;
|
|
73786
|
+
try {
|
|
73787
|
+
res = await multicallRetry({
|
|
73788
|
+
chain: "1",
|
|
73789
|
+
calls: [
|
|
73790
|
+
{ address: dm, name: "getOffChainDistributionData", params: [] },
|
|
73791
|
+
{ address: dm, name: "getOffChainTokensClaimed", params: [who] },
|
|
73792
|
+
{ address: dm, name: "getClaimOnlySelf", params: [who] },
|
|
73793
|
+
{ address: dm, name: "getRedirectedAccount", params: [who] },
|
|
73794
|
+
{ address: dm, name: "paused", params: [] },
|
|
73795
|
+
{ address: dm, name: "getOffChainDistributionMintCap", params: [] }
|
|
73796
|
+
],
|
|
73797
|
+
abi: UsualDistributionModuleReadAbi,
|
|
73798
|
+
allowFailure: true
|
|
73799
|
+
});
|
|
73800
|
+
} catch (e) {
|
|
73801
|
+
return {
|
|
73802
|
+
status: "unknown",
|
|
73803
|
+
account: who,
|
|
73804
|
+
reason: `DistributionModule read failed: ${e?.message ?? e}`
|
|
73805
|
+
};
|
|
73806
|
+
}
|
|
73807
|
+
const [data, claimedRaw, onlySelf, redirect, paused, cap] = res;
|
|
73808
|
+
const tuple = Array.isArray(data) ? data : void 0;
|
|
73809
|
+
const root = tuple?.[1];
|
|
73810
|
+
const rootTs = tuple?.[0];
|
|
73811
|
+
if (!isHex32(root) || typeof rootTs !== "bigint" || typeof claimedRaw !== "bigint" || typeof onlySelf !== "boolean" || typeof paused !== "boolean")
|
|
73812
|
+
return {
|
|
73813
|
+
status: "unknown",
|
|
73814
|
+
account: who,
|
|
73815
|
+
reason: "DistributionModule read returned an unexpected shape"
|
|
73816
|
+
};
|
|
73817
|
+
let entries;
|
|
73818
|
+
try {
|
|
73819
|
+
const r = await (opts.fetchImpl ?? fetch)(
|
|
73820
|
+
`${opts.apiBase ?? USUAL_REWARDS_API}/${who}`,
|
|
73821
|
+
{ headers: { Accept: "application/json" } }
|
|
73822
|
+
);
|
|
73823
|
+
if (!r.ok)
|
|
73824
|
+
return {
|
|
73825
|
+
status: "unknown",
|
|
73826
|
+
account: who,
|
|
73827
|
+
reason: `Usual rewards API answered HTTP ${r.status}`
|
|
73828
|
+
};
|
|
73829
|
+
entries = await r.json();
|
|
73830
|
+
} catch (e) {
|
|
73831
|
+
return {
|
|
73832
|
+
status: "unknown",
|
|
73833
|
+
account: who,
|
|
73834
|
+
reason: `Usual rewards API unreachable: ${e?.message ?? e}`
|
|
73835
|
+
};
|
|
73836
|
+
}
|
|
73837
|
+
const sel = selectUsualRewardEntry(entries, root);
|
|
73838
|
+
if (sel.status !== "ok") return { ...sel, account: who };
|
|
73839
|
+
const claimable = sel.cumulative > claimedRaw ? sel.cumulative - claimedRaw : 0n;
|
|
73840
|
+
const redirectTo = typeof redirect === "string" && redirect.toLowerCase() !== ZERO7 ? redirect.toLowerCase() : who;
|
|
73841
|
+
return {
|
|
73842
|
+
status: "ok",
|
|
73843
|
+
account: who,
|
|
73844
|
+
distributionModule: dm,
|
|
73845
|
+
merkleRoot: root.toLowerCase(),
|
|
73846
|
+
rootTimestamp: Number(rootTs),
|
|
73847
|
+
cumulative: sel.cumulative,
|
|
73848
|
+
claimed: claimedRaw,
|
|
73849
|
+
claimable,
|
|
73850
|
+
pending: sel.pending,
|
|
73851
|
+
proof: sel.proof,
|
|
73852
|
+
recipient: redirectTo,
|
|
73853
|
+
claimOnlySelf: onlySelf,
|
|
73854
|
+
paused,
|
|
73855
|
+
exceedsMintCap: typeof cap === "bigint" ? claimable > cap : false
|
|
73856
|
+
};
|
|
73857
|
+
};
|
|
73858
|
+
|
|
73595
73859
|
// src/vaults/lagoon/api.ts
|
|
73596
73860
|
var LAGOON_API_URL = "https://api.lagoon.finance/query";
|
|
73597
73861
|
var LAGOON_CHAIN_IDS = /* @__PURE__ */ new Set([
|
|
@@ -75444,17 +75708,17 @@ var priceGlvVaults = async (chainId, multicallRetry, glvTokens, prices, marketIn
|
|
|
75444
75708
|
const sp = price(prices, short);
|
|
75445
75709
|
if (!lp || !sp) return;
|
|
75446
75710
|
const indexPrices = [];
|
|
75447
|
-
let
|
|
75711
|
+
let ok3 = true;
|
|
75448
75712
|
for (const m of markets) {
|
|
75449
75713
|
const idx = marketIndexToken.get(m.toLowerCase());
|
|
75450
75714
|
const ip = idx ? price(prices, idx) : void 0;
|
|
75451
75715
|
if (!ip) {
|
|
75452
|
-
|
|
75716
|
+
ok3 = false;
|
|
75453
75717
|
break;
|
|
75454
75718
|
}
|
|
75455
75719
|
indexPrices.push(ip);
|
|
75456
75720
|
}
|
|
75457
|
-
if (!
|
|
75721
|
+
if (!ok3) return;
|
|
75458
75722
|
calls.push({
|
|
75459
75723
|
address: c.glvReader,
|
|
75460
75724
|
name: "getGlvTokenPrice",
|
|
@@ -75742,7 +76006,7 @@ var getGmxUserPositions = async (chainId, account, multicallRetry, options) => {
|
|
|
75742
76006
|
};
|
|
75743
76007
|
const c = getGmxReadContracts(chainId);
|
|
75744
76008
|
if (!c) return empty;
|
|
75745
|
-
const
|
|
76009
|
+
const acct2 = account.toLowerCase();
|
|
75746
76010
|
const cap = BigInt(options?.cap ?? DEFAULT_CAP);
|
|
75747
76011
|
const tokens = options?.tokens ?? [];
|
|
75748
76012
|
const safe = async (p, fallback) => {
|
|
@@ -75759,7 +76023,7 @@ var getGmxUserPositions = async (chainId, account, multicallRetry, options) => {
|
|
|
75759
76023
|
calls: tokens.map((t) => ({
|
|
75760
76024
|
address: t.address,
|
|
75761
76025
|
name: "balanceOf",
|
|
75762
|
-
params: [
|
|
76026
|
+
params: [acct2]
|
|
75763
76027
|
})),
|
|
75764
76028
|
abi: GmxErc20BalanceAbi,
|
|
75765
76029
|
maxRetries: 3,
|
|
@@ -75774,12 +76038,12 @@ var getGmxUserPositions = async (chainId, account, multicallRetry, options) => {
|
|
|
75774
76038
|
{
|
|
75775
76039
|
address: c.glvReader,
|
|
75776
76040
|
name: "getAccountGlvDeposits",
|
|
75777
|
-
params: [c.dataStore,
|
|
76041
|
+
params: [c.dataStore, acct2, 0n, cap]
|
|
75778
76042
|
},
|
|
75779
76043
|
{
|
|
75780
76044
|
address: c.glvReader,
|
|
75781
76045
|
name: "getAccountGlvWithdrawals",
|
|
75782
|
-
params: [c.dataStore,
|
|
76046
|
+
params: [c.dataStore, acct2, 0n, cap]
|
|
75783
76047
|
}
|
|
75784
76048
|
],
|
|
75785
76049
|
abi: GmxGlvReaderAbi,
|
|
@@ -75795,12 +76059,12 @@ var getGmxUserPositions = async (chainId, account, multicallRetry, options) => {
|
|
|
75795
76059
|
{
|
|
75796
76060
|
address: c.dataStore,
|
|
75797
76061
|
name: "getBytes32ValuesAt",
|
|
75798
|
-
params: [accountDepositListKey(
|
|
76062
|
+
params: [accountDepositListKey(acct2), 0n, cap]
|
|
75799
76063
|
},
|
|
75800
76064
|
{
|
|
75801
76065
|
address: c.dataStore,
|
|
75802
76066
|
name: "getBytes32ValuesAt",
|
|
75803
|
-
params: [accountWithdrawalListKey(
|
|
76067
|
+
params: [accountWithdrawalListKey(acct2), 0n, cap]
|
|
75804
76068
|
}
|
|
75805
76069
|
],
|
|
75806
76070
|
abi: GmxDataStoreAbi,
|
|
@@ -75945,8 +76209,12 @@ var PENDLE_CHAIN_IDS = /* @__PURE__ */ new Set([
|
|
|
75945
76209
|
// Monad
|
|
75946
76210
|
"146",
|
|
75947
76211
|
// Sonic
|
|
76212
|
+
"196",
|
|
76213
|
+
// X Layer
|
|
75948
76214
|
"999",
|
|
75949
76215
|
// HyperEVM
|
|
76216
|
+
"4663",
|
|
76217
|
+
// Robinhood Chain
|
|
75950
76218
|
"5000",
|
|
75951
76219
|
// Mantle
|
|
75952
76220
|
"8453",
|
|
@@ -84606,6 +84874,14 @@ var SVM_EARN_VAULT_BUILDERS = {
|
|
|
84606
84874
|
verbs: ["deposit", "withdraw"],
|
|
84607
84875
|
nativeDeposit: true,
|
|
84608
84876
|
nativeWithdraw: true
|
|
84877
|
+
},
|
|
84878
|
+
// ezSOL (a Jito Restaking vault, served as `lst`): JitoSOL in (or SOL /
|
|
84879
|
+
// wSOL, minted to JitoSOL first), a ticket out after a 1–2 epoch
|
|
84880
|
+
// cooldown, the claim burns it into JitoSOL — no cancel exists
|
|
84881
|
+
"lst:Renzo": {
|
|
84882
|
+
verbs: ["deposit", "request-withdraw", "claim"],
|
|
84883
|
+
payAsset: true,
|
|
84884
|
+
nativeDeposit: true
|
|
84609
84885
|
}
|
|
84610
84886
|
};
|
|
84611
84887
|
var UNBUILT_REASONS = {
|
|
@@ -84623,7 +84899,7 @@ function svmEarnBuildability(venue, brand) {
|
|
|
84623
84899
|
return { ok: false, reason: "No Solana builder for this lender yet" };
|
|
84624
84900
|
}
|
|
84625
84901
|
const provider = venue.slice("vault.".length);
|
|
84626
|
-
const key3 = provider === "savings" ?
|
|
84902
|
+
const key3 = provider === "savings" || provider === "lst" ? `${provider}:${brand ?? ""}` : provider;
|
|
84627
84903
|
const builder = SVM_EARN_VAULT_BUILDERS[key3];
|
|
84628
84904
|
if (builder) return { ok: true, builder };
|
|
84629
84905
|
return {
|
|
@@ -85152,6 +85428,6 @@ function earnPositionTotals(items) {
|
|
|
85152
85428
|
};
|
|
85153
85429
|
}
|
|
85154
85430
|
|
|
85155
|
-
export { ApiBookSource, DEFAULT_MIDNIGHT_API, DEFAULT_OUTLIER_GUARD, DEFAULT_PROFILE_ID, DEFAULT_STALE_REJECT_SECONDS, DEFAULT_TERMMAX_API, DEFAULT_TERM_ORDER_STORE, DOLOMITE_ISO_ID_PREFIX, EARN_DESCRIPTIONS, EARN_LABELS, EARN_RATE_SOURCE_BY_PROVIDER, EMPTY_BALANCE, EXACTLY_LENDER_KEY, FLYING_TULIP_LENDER_KEY, FRACTION_RATE_PROVIDERS, GMX_API_HOSTS, GMX_READ_CONTRACTS, GMX_SUPPORTED_CHAINS, HYPERCORE_VAULT_REGISTRY, IDLE_MARKET_ID, INTERFACE_IDS, LAGOON_API_URL, LAGOON_CHAIN_IDS, MORPHO_LENS, MULTICALL_FAILURE, MaxParamThresholds, NON_EVM_VAULT_PROVIDERS, PASSTHROUGH_RATE_EPSILON, PENDLE_ASSETS_URL, PENDLE_CHAIN_IDS, PENDLE_MARKETS_URL, PREFIX_LENDERS, SDK_FRACTION_RATE_PROVIDERS, SPECTRA_NETWORKS, SPECTRA_RATE_MAX_PERCENT, SPECTRA_RATE_MIN_PERCENT, STABLECOIN_SYMBOLS, STCELO_MANAGER_ADDRESS, SVM_EARN_VAULT_BUILDERS, TELLER_CALLS_PER_BID, DECIMAL_BASE as TERMMAX_DECIMAL_BASE, TERMMAX_LIQUIDATION_PENALTY, TERMMAX_LIQUIDATION_WINDOW_SECS, TERMMAX_LIQUIDATOR_BONUS, TERMMAX_MARKETS_PER_CALL, TERMMAX_PARTIAL_CLOSE_FACTOR, TERMMAX_PARTIAL_LIQUIDATION_THRESHOLD_USD, TERM_ADAPTERS, TERM_PROFILES, TERM_SHEET_SCHEMA_VERSION, TermMaxApiSource, TermSubgraphSource, UPSHIFT_CHAIN_IDS, UPSHIFT_VAULTS_URL, VAULT_PROVIDERS, VAULT_PROVIDER_PROFILE, VAULT_PROVIDER_TRAITS, VAULT_SHARE_PRICE_PROBE, VAULT_VENUE_PREFIX, VOLATILE_VAULT_OVERRIDES, YEARN_CHAIN_IDS, YEARN_YDAEMON_BASE, __resetResupplyUserCaches, accountDepositListKey, accountWithdrawalListKey, appendSnapshot, applyEarnSanity, applyPositionDelta, attachImplications, attachPricesToFlashLiquidity, blockNumberFromTag, borrowDescription, borrowFindings, borrowHeadline, buildExposures2 as buildExposures, buildFluidFTokensCall, buildLendingPositionUid, buildLiquityUserCall, buildLoopResult, buildMorphoTypeCall, buildMorphoTypeUserCallWithLens, buildPortfolioTotals, buildQueriesFromMeta, buildSumerAccumulators, buildSummaries, buildTellerUserCall, buildTermMaxUserCall, buildTermSheet, buildTermSheetsForGroup, buildVaultEarnUid, buildVaultLookup, buildVaultTermSheet, calculateLeverage, calculateNetApr, calculateOverallNetApr, calculateWeightedAverage, classifyFreshness, classifyReliability, classifyVault, clearPendleMarketsCache, clearSpectraMarketsCache, collateralSymbolsByVenue, collectFeedObservations, computeBorrowDelta2 as computeBorrowDelta, computeCloseTradeDeltas, computeCollateralSwapDeltas, computeDebtSwapDeltas, computeDepositDelta2 as computeDepositDelta, computeEModeAnalysis, computeOpenTradeDeltas, computePostTradeMetrics, computeRepayDelta2 as computeRepayDelta, computeSumerBorrowDelta, computeSumerDepositDelta, computeSumerRepayDelta, computeSumerWaterfall, computeSumerWithdrawDelta, computeVaultApr, computeWithdrawDelta2 as computeWithdrawDelta, computeZapTradeDeltas, consensusReference, convertCoolerMarketsToResponse, convertDssMarketsToResponse, convertExactlyMarketsToResponse, convertFlyingTulipMarketsToResponse, convertFrankencoinMarketsToResponse, convertFraxlendPairsToResponse, convertInverseMarketsToResponse, convertLenderUserDataResult, convertLiquityMarketsToResponse, convertLlamaLendMarketsToResponse, convertResupplyMarketsToResponse, convertRiverMarketsToResponse, convertTellerMarketsToResponse, convertTermMarketsToResponse, convertTermMaxMarketsToResponse, convertUsddMarketsToResponse, createMarketUid, createMidnightBookSource, createMultiAccountTypeUserState, createMulticallRpcCall, createRawRpcCalls, createTermBookSource, createTermMaxDataSource, decodeListaMarkets, decodeMarkets, decodePackedListaUserDataset, decodePackedMorphoUserDataset, deriveBorrowTags, deriveSupplyTags, detectInterfaceKinds, dexResolverFor, disambiguateEarnNames, dolomiteVaultAddress, dssIlkBytes32, dssKeyParts, dssLenderKey, duration, earnDescription, earnLabel, earnMarketFromPool, earnMarketFromVault, earnMarketLabel, earnPositionFromLenderEntry, earnPositionFromVaultBalance, earnPositionTotals, earnRateAtMaturity, earnRowSubtitle, earnUidFromMarketUid, earnVaultTerms, earnVenueKind, emitterCoverage, encodeBalanceFetcherCalldata, enrichTermSheet, enrichmentIndexFromRows, enumerateEmitters, exactlyPairLtv, exactlyPenaltyRateToAprPercent, exactlyWadRateToPercent, feePhrase, feedKeyOf, feedStatKey, fetchCoolerMarkets, fetchDolomiteAccountNumbers, fetchDolomiteSubAccounts, fetchDssMarkets, fetchEulerEarnVaults, fetchEulerEarnVaultsFromSubgraph, fetchEulerSubAccountIndexes, fetchExactlyMarkets, fetchFlashLiquidityForChain, fetchFluidDexState, fetchFluidFTokens, fetchFlyingTulipMarkets, fetchFrankencoinMarkets, fetchFraxlendPairs, fetchGeneralYields, fetchGeneralYieldsByMarketUid, fetchGmxExecutionFees, fetchGmxTickerPrices, fetchGmxVaults, fetchHypercoreVaults, fetchInverseMarkets, fetchLagoonApiVaults, fetchLagoonVaults, fetchLiquityMarkets, fetchListaVaultsFromChain, fetchLlamaLendMarkets, fetchMorphoUserBalances, fetchMorphoUserPositionMarkets, fetchMorphoVaults, fetchMorphoVaultsFromApi, fetchMorphoVaultsFromChain, fetchOraclePrices, fetchPendleApiAssets, fetchPendleApiMarkets, fetchPendlePrices, fetchPendlePtMarkets, fetchResupplyMarkets, fetchRiverMarkets, fetchSiloVaults, fetchSpectraApiMarkets, fetchSpectraPtMarkets, fetchTellerMarkets, fetchTermMarkets, fetchTermMaxMarkets, fetchTermStoreOrders, fetchTokenBalances, fetchTokenMetadata, fetchUpshiftApiVaults, fetchUpshiftVaults, fetchUsddMarkets, fetchYearnApiVaults, fetchYearnVaults, fillableRemaining, filterActiveLenders, filterLenderMeta, filterLendersByProtocol, finalizeInfo, findingsFor, formatRaw, frankencoinKeyParts, frankencoinLenderKey, fraxlendAssetPerCollateral, fraxlendKeyParts, fraxlendLenderKey, fuseLenderData, generateLendingPools, getAavesForChain, getAssetConfig, getBalanceForMarketUid, getBorrowCapacity, getCachedFluidDexState, getCachedLiquityTroves, getCachedTellerBids, getCachedTermMaxDiscovery, getCachedTermMaxMarket, getCachedTermMaxMarkets, getCoreValidators, getFluidFTokensConverter, getGmxApiHost, getGmxReadContracts, getGmxUserPositions, getHealthFactor, getHypercoreUserPositions, getHypercoreVaultRegistry, getLenderAssets, getLenderPublicData, getLenderPublicDataAll, getLenderPublicDataViaApi, getLenderUserDataMulti, getLenderUserDataResult, getLendersForChain, getLstDelegation, getLstValidators, getLstWithdrawalRegistry, getLstWithdrawalRequests, getMaxAmountClose, getMaxAmountCollateralSwap, getMaxAmountDebtSwap, getMaxAmountOpen, getMergedUserData, getMorphoTypeMarketConverter, getReadFailurePolicy, getResolvedDolomiteAccountNumbers, getResolvedDolomiteSubAccounts, getStCeloValidatorGroups, getSubAccountAddress, getSubAccountIndex, getTermProfile, getVaultPublicDataAll, getVaultWithdrawalRequests, hasCritical, hasEulerEarnVaultSubgraph, hasLagoonVaults, hasMorphoPositionIndex, hasMorphoUserApi, hasMorphoUserSubgraph, hasPendleMarkets, hasSpectraMarkets, hasUpshiftVaults, hasYearnVaults, ilkToKeySegment, implausibleRatePercent, injectLenderInfoIntoEntries, inverseKeyParts, inverseLenderKey, isBoundNeed, isFailedCall, isIlliquid, isLenderVenueKey, isLendingPosition, isLiveMarket as isLivePendleMarket, isLiveSpectraMarket, isMaturedTerm, isSecondaryMarketOnly, isStablecoinSymbol, isUnearnableEarnRate, isUnrealizableEarnRate, isVaultPosition, isVaultVenue, isYearnV3, keySegmentToIlk, keysFromMaps, lenderApiOnly, lenderFamily, liquityCandidateTroveIds, liquityKeyParts, liquityLenderKey, llamaLendKeyParts, llamaLendLenderKey, marketKeysOf, meetsLiquidityFloor, mergeDeep, multicall3Abi2 as multicall3Abi, nanTo, needsLenderApproval, needsTokenApproval, noOpResult, normalizeToBytes, organizeUserQueries, parseBalanceFetcherResult, parseDolomiteSubAccountId, parseEarnUid, parseLenderKey, parseMergedResult, parseMulticallRpcResponses, parseExpirySeconds as parsePendleExpirySeconds, parseRawRpcBatchResponses, parseRawRpcResponses, parseCurveFee as parseSpectraCurveFee, parsePtRate as parseSpectraPtRate, parseTermMaxLtv, parseTokenBalanceResult, pct, assetKey as pendleAssetKey, pickPool as pickSpectraPool, positivePart2 as positivePart, predictInverseEscrow, prepareLenderUserDataRpcCalls, prepareMergedMulticallParams, prepareMergedRpcCalls, prepareMulticallInputs, prepareTokenBalanceRpcCalls, priceGlvVaults, priceGmMarkets, probeAaveFeedTimestamps, pruneFeedStats, rankFindings, ratePercent, readUserPositions, readVaultSharePrices, rejectOutliers as rejectPriceOutliers, repairImpossibleTvl, resolveAdapter, resolveDerivation, resolveDolomiteRowIdentity, resolveEarnIdentity, resolveModeConfig, resolveStCeloDepositGroup, resolveVaultProfileId, resupplyKeyParts, resupplyLenderKey, resupplyMarketLabel, riverKeyParts, riverLenderKey, sanePercent as saneSpectraPercent, savingsAddresses, savingsBalanceKind, secondaryMarketVault, selectAssetGroupPrices, setMysticApiKey, shortDate, spectraAddress, spectraNetwork, spectraPoolsUrl, splitChainScopedAddress as splitPendleChainScopedAddress, stampCapabilities, stampEarnSubtitles, stampVaultClassification, stampVaultTermSheets, stripLeadingBrand, subAccountsOf, supplyDescription, supplyFindings, supplyHeadline, svmEarnBuildability, swapRoutedProvidersArePriceConsistent, tellerBpsToPercent, tellerImpliedLtv, tellerLenderKey, tellerPoolFromLenderKey, termApiBaseUrl, termLenderKey, termMaxApiBase, borrowNif as termMaxBorrowNif, curveApr as termMaxCurveApr, curveAprNumber as termMaxCurveAprNumber, daysToMaturity as termMaxDaysToMaturity, lendNif as termMaxLendNif, mintGtFeeRatio as termMaxMintGtFeeRatio, ratioToNumber as termMaxRatioToNumber, ratioToPercent as termMaxRatioToPercent, termOfferRateToAprPct, termOrderStoreBaseUrl, tickToAprNumber, tickToPrice, toDigest, toDolomiteSubAccountId, toTermFillNow, toTermSheetInput, toVaultTermInput, trancheFromCounterparty, tryParseEarnUid, unflattenLenderData, updateFeedStats, usdValue, usddIlkBytes32, usddKeyParts, usddLenderKey, validateTermSheet, validateTermSheets, validateUserData, vaultSharesToAssets, vaultTermInputFromEarnMarket, vaultTermInputFromSourceRow, vaultTraits, vaultVenue, venueBrand, venueBrandKey, withMaturityLabel, withTrancheLabel };
|
|
85431
|
+
export { ApiBookSource, DEFAULT_MIDNIGHT_API, DEFAULT_OUTLIER_GUARD, DEFAULT_PROFILE_ID, DEFAULT_STALE_REJECT_SECONDS, DEFAULT_TERMMAX_API, DEFAULT_TERM_ORDER_STORE, DOLOMITE_ISO_ID_PREFIX, EARN_DESCRIPTIONS, EARN_LABELS, EARN_RATE_SOURCE_BY_PROVIDER, EMPTY_BALANCE, EXACTLY_LENDER_KEY, FLYING_TULIP_LENDER_KEY, FRACTION_RATE_PROVIDERS, GMX_API_HOSTS, GMX_READ_CONTRACTS, GMX_SUPPORTED_CHAINS, HYPERCORE_VAULT_REGISTRY, IDLE_MARKET_ID, INTERFACE_IDS, LAGOON_API_URL, LAGOON_CHAIN_IDS, MORPHO_LENS, MULTICALL_FAILURE, MaxParamThresholds, NON_EVM_VAULT_PROVIDERS, PASSTHROUGH_RATE_EPSILON, PENDLE_ASSETS_URL, PENDLE_CHAIN_IDS, PENDLE_MARKETS_URL, PREFIX_LENDERS, SDK_FRACTION_RATE_PROVIDERS, SPECTRA_NETWORKS, SPECTRA_RATE_MAX_PERCENT, SPECTRA_RATE_MIN_PERCENT, STABLECOIN_SYMBOLS, STCELO_MANAGER_ADDRESS, SVM_EARN_VAULT_BUILDERS, TELLER_CALLS_PER_BID, DECIMAL_BASE as TERMMAX_DECIMAL_BASE, TERMMAX_LIQUIDATION_PENALTY, TERMMAX_LIQUIDATION_WINDOW_SECS, TERMMAX_LIQUIDATOR_BONUS, TERMMAX_MARKETS_PER_CALL, TERMMAX_PARTIAL_CLOSE_FACTOR, TERMMAX_PARTIAL_LIQUIDATION_THRESHOLD_USD, TERM_ADAPTERS, TERM_PROFILES, TERM_SHEET_SCHEMA_VERSION, TermMaxApiSource, TermSubgraphSource, UPSHIFT_CHAIN_IDS, UPSHIFT_VAULTS_URL, VAULT_PROVIDERS, VAULT_PROVIDER_PROFILE, VAULT_PROVIDER_TRAITS, VAULT_SHARE_PRICE_PROBE, VAULT_VENUE_PREFIX, VOLATILE_VAULT_OVERRIDES, YEARN_CHAIN_IDS, YEARN_YDAEMON_BASE, __resetResupplyUserCaches, accountDepositListKey, accountWithdrawalListKey, appendSnapshot, applyEarnSanity, applyPositionDelta, attachImplications, attachPricesToFlashLiquidity, blockNumberFromTag, borrowDescription, borrowFindings, borrowHeadline, buildExposures2 as buildExposures, buildFluidFTokensCall, buildLendingPositionUid, buildLiquityUserCall, buildLoopResult, buildMorphoTypeCall, buildMorphoTypeUserCallWithLens, buildPortfolioTotals, buildQueriesFromMeta, buildSumerAccumulators, buildSummaries, buildTellerUserCall, buildTermMaxUserCall, buildTermSheet, buildTermSheetsForGroup, buildVaultEarnUid, buildVaultLookup, buildVaultTermSheet, calculateLeverage, calculateNetApr, calculateOverallNetApr, calculateWeightedAverage, classifyFreshness, classifyReliability, classifyVault, clearPendleMarketsCache, clearSpectraMarketsCache, collateralSymbolsByVenue, collectFeedObservations, computeBorrowDelta2 as computeBorrowDelta, computeCloseTradeDeltas, computeCollateralSwapDeltas, computeDebtSwapDeltas, computeDepositDelta2 as computeDepositDelta, computeEModeAnalysis, computeOpenTradeDeltas, computePostTradeMetrics, computeRepayDelta2 as computeRepayDelta, computeSumerBorrowDelta, computeSumerDepositDelta, computeSumerRepayDelta, computeSumerWaterfall, computeSumerWithdrawDelta, computeVaultApr, computeWithdrawDelta2 as computeWithdrawDelta, computeZapTradeDeltas, consensusReference, convertCoolerMarketsToResponse, convertDssMarketsToResponse, convertExactlyMarketsToResponse, convertFlyingTulipMarketsToResponse, convertFrankencoinMarketsToResponse, convertFraxlendPairsToResponse, convertInverseMarketsToResponse, convertLenderUserDataResult, convertLiquityMarketsToResponse, convertLlamaLendMarketsToResponse, convertResupplyMarketsToResponse, convertRiverMarketsToResponse, convertTellerMarketsToResponse, convertTermMarketsToResponse, convertTermMaxMarketsToResponse, convertUsddMarketsToResponse, createMarketUid, createMidnightBookSource, createMultiAccountTypeUserState, createMulticallRpcCall, createRawRpcCalls, createTermBookSource, createTermMaxDataSource, decodeListaMarkets, decodeMarkets, decodePackedListaUserDataset, decodePackedMorphoUserDataset, deriveBorrowTags, deriveSupplyTags, detectInterfaceKinds, dexResolverFor, disambiguateEarnNames, dolomiteVaultAddress, dssIlkBytes32, dssKeyParts, dssLenderKey, duration, earnDescription, earnLabel, earnMarketFromPool, earnMarketFromVault, earnMarketLabel, earnPositionFromLenderEntry, earnPositionFromVaultBalance, earnPositionTotals, earnRateAtMaturity, earnRowSubtitle, earnUidFromMarketUid, earnVaultTerms, earnVenueKind, emitterCoverage, encodeBalanceFetcherCalldata, enrichTermSheet, enrichmentIndexFromRows, enumerateEmitters, exactlyPairLtv, exactlyPenaltyRateToAprPercent, exactlyWadRateToPercent, feePhrase, feedKeyOf, feedStatKey, fetchCoolerMarkets, fetchDolomiteAccountNumbers, fetchDolomiteSubAccounts, fetchDssMarkets, fetchEulerEarnVaults, fetchEulerEarnVaultsFromSubgraph, fetchEulerSubAccountIndexes, fetchExactlyMarkets, fetchFlashLiquidityForChain, fetchFluidDexState, fetchFluidFTokens, fetchFlyingTulipMarkets, fetchFrankencoinMarkets, fetchFraxlendPairs, fetchGeneralYields, fetchGeneralYieldsByMarketUid, fetchGmxExecutionFees, fetchGmxTickerPrices, fetchGmxVaults, fetchHypercoreVaults, fetchInverseMarkets, fetchLagoonApiVaults, fetchLagoonVaults, fetchLiquityMarkets, fetchListaVaultsFromChain, fetchLlamaLendMarkets, fetchMorphoUserBalances, fetchMorphoUserPositionMarkets, fetchMorphoVaults, fetchMorphoVaultsFromApi, fetchMorphoVaultsFromChain, fetchOraclePrices, fetchPendleApiAssets, fetchPendleApiMarkets, fetchPendlePrices, fetchPendlePtMarkets, fetchResupplyMarkets, fetchRiverMarkets, fetchSiloVaults, fetchSpectraApiMarkets, fetchSpectraPtMarkets, fetchTellerMarkets, fetchTermMarkets, fetchTermMaxMarkets, fetchTermStoreOrders, fetchTokenBalances, fetchTokenMetadata, fetchUpshiftApiVaults, fetchUpshiftVaults, fetchUsddMarkets, fetchUsualRewardsClaimData, fetchYearnApiVaults, fetchYearnVaults, fillableRemaining, filterActiveLenders, filterLenderMeta, filterLendersByProtocol, finalizeInfo, findingsFor, formatRaw, frankencoinKeyParts, frankencoinLenderKey, fraxlendAssetPerCollateral, fraxlendKeyParts, fraxlendLenderKey, fuseLenderData, generateLendingPools, getAavesForChain, getAssetConfig, getBalanceForMarketUid, getBorrowCapacity, getCachedFluidDexState, getCachedLiquityTroves, getCachedTellerBids, getCachedTermMaxDiscovery, getCachedTermMaxMarket, getCachedTermMaxMarkets, getCoreValidators, getFluidFTokensConverter, getGmxApiHost, getGmxReadContracts, getGmxUserPositions, getHealthFactor, getHypercoreUserPositions, getHypercoreVaultRegistry, getLenderAssets, getLenderPublicData, getLenderPublicDataAll, getLenderPublicDataViaApi, getLenderUserDataMulti, getLenderUserDataResult, getLendersForChain, getLstDelegation, getLstValidators, getLstWithdrawalRegistry, getLstWithdrawalRequests, getMaxAmountClose, getMaxAmountCollateralSwap, getMaxAmountDebtSwap, getMaxAmountOpen, getMergedUserData, getMorphoTypeMarketConverter, getReadFailurePolicy, getResolvedDolomiteAccountNumbers, getResolvedDolomiteSubAccounts, getStCeloValidatorGroups, getSubAccountAddress, getSubAccountIndex, getTermProfile, getVaultPublicDataAll, getVaultWithdrawalRequests, hasCritical, hasEulerEarnVaultSubgraph, hasLagoonVaults, hasMorphoPositionIndex, hasMorphoUserApi, hasMorphoUserSubgraph, hasPendleMarkets, hasSpectraMarkets, hasUpshiftVaults, hasYearnVaults, ilkToKeySegment, implausibleRatePercent, injectLenderInfoIntoEntries, inverseKeyParts, inverseLenderKey, isBoundNeed, isFailedCall, isIlliquid, isLenderVenueKey, isLendingPosition, isLiveMarket as isLivePendleMarket, isLiveSpectraMarket, isMaturedTerm, isSecondaryMarketOnly, isStablecoinSymbol, isUnearnableEarnRate, isUnrealizableEarnRate, isVaultPosition, isVaultVenue, isYearnV3, keySegmentToIlk, keysFromMaps, lenderApiOnly, lenderFamily, liquityCandidateTroveIds, liquityKeyParts, liquityLenderKey, llamaLendKeyParts, llamaLendLenderKey, marketKeysOf, meetsLiquidityFloor, mergeDeep, multicall3Abi2 as multicall3Abi, nanTo, needsLenderApproval, needsTokenApproval, noOpResult, normalizeToBytes, organizeUserQueries, parseBalanceFetcherResult, parseDolomiteSubAccountId, parseEarnUid, parseLenderKey, parseMergedResult, parseMulticallRpcResponses, parseExpirySeconds as parsePendleExpirySeconds, parseRawRpcBatchResponses, parseRawRpcResponses, parseCurveFee as parseSpectraCurveFee, parsePtRate as parseSpectraPtRate, parseTermMaxLtv, parseTokenBalanceResult, pct, assetKey as pendleAssetKey, pickPool as pickSpectraPool, positivePart2 as positivePart, predictInverseEscrow, prepareLenderUserDataRpcCalls, prepareMergedMulticallParams, prepareMergedRpcCalls, prepareMulticallInputs, prepareTokenBalanceRpcCalls, priceGlvVaults, priceGmMarkets, probeAaveFeedTimestamps, pruneFeedStats, rankFindings, ratePercent, readUserPositions, readVaultSharePrices, rejectOutliers as rejectPriceOutliers, repairImpossibleTvl, resolveAdapter, resolveDerivation, resolveDolomiteRowIdentity, resolveEarnIdentity, resolveModeConfig, resolveStCeloDepositGroup, resolveVaultProfileId, resupplyKeyParts, resupplyLenderKey, resupplyMarketLabel, riverKeyParts, riverLenderKey, sanePercent as saneSpectraPercent, savingsAddresses, savingsBalanceKind, secondaryMarketVault, selectAssetGroupPrices, selectUsualRewardEntry, setMysticApiKey, shortDate, spectraAddress, spectraNetwork, spectraPoolsUrl, splitChainScopedAddress as splitPendleChainScopedAddress, stampCapabilities, stampEarnSubtitles, stampVaultClassification, stampVaultTermSheets, stripLeadingBrand, subAccountsOf, supplyDescription, supplyFindings, supplyHeadline, svmEarnBuildability, swapRoutedProvidersArePriceConsistent, tellerBpsToPercent, tellerImpliedLtv, tellerLenderKey, tellerPoolFromLenderKey, termApiBaseUrl, termLenderKey, termMaxApiBase, borrowNif as termMaxBorrowNif, curveApr as termMaxCurveApr, curveAprNumber as termMaxCurveAprNumber, daysToMaturity as termMaxDaysToMaturity, lendNif as termMaxLendNif, mintGtFeeRatio as termMaxMintGtFeeRatio, ratioToNumber as termMaxRatioToNumber, ratioToPercent as termMaxRatioToPercent, termOfferRateToAprPct, termOrderStoreBaseUrl, tickToAprNumber, tickToPrice, toDigest, toDolomiteSubAccountId, toTermFillNow, toTermSheetInput, toVaultTermInput, trancheFromCounterparty, tryParseEarnUid, unflattenLenderData, updateFeedStats, usdValue, usddIlkBytes32, usddKeyParts, usddLenderKey, validateTermSheet, validateTermSheets, validateUserData, vaultSharesToAssets, vaultTermInputFromEarnMarket, vaultTermInputFromSourceRow, vaultTraits, vaultVenue, venueBrand, venueBrandKey, withMaturityLabel, withTrancheLabel };
|
|
85156
85432
|
//# sourceMappingURL=index.js.map
|
|
85157
85433
|
//# sourceMappingURL=index.js.map
|