@1delta/margin-fetcher 5.0.111 → 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 +9 -1
- package/dist/index.js +117 -69
- package/dist/index.js.map +1 -1
- package/package.json +6 -6
package/dist/index.d.ts
CHANGED
|
@@ -13501,6 +13501,14 @@ interface EarnShareToken {
|
|
|
13501
13501
|
* Lagoon (18-decimal shares over 6-decimal USDC) — never assume they match.
|
|
13502
13502
|
*/
|
|
13503
13503
|
decimals: number;
|
|
13504
|
+
/**
|
|
13505
|
+
* The share's asset group in the token lists (`Nest BlackOpal LiquidStone II Vault::nOPAL`),
|
|
13506
|
+
* when they carry it — what an asset page asks for as "the vaults that mint this"
|
|
13507
|
+
* (`shareGroup=`). Absent when the lists do not know the share.
|
|
13508
|
+
*/
|
|
13509
|
+
assetGroup?: string;
|
|
13510
|
+
/** The share's own icon from the token lists, when they carry one. */
|
|
13511
|
+
logoURI?: string;
|
|
13504
13512
|
}
|
|
13505
13513
|
/**
|
|
13506
13514
|
* A position whose unit is a POOL POSITION over several tokens.
|
|
@@ -15556,7 +15564,7 @@ type SvmEarnBuildability = {
|
|
|
15556
15564
|
ok: false;
|
|
15557
15565
|
reason: string;
|
|
15558
15566
|
};
|
|
15559
|
-
/** Vault providers, and `savings` by brand (one provider, one builder per brand). */
|
|
15567
|
+
/** Vault providers, and `savings` / `lst` by brand (one provider, one builder per brand). */
|
|
15560
15568
|
declare const SVM_EARN_VAULT_BUILDERS: {
|
|
15561
15569
|
readonly [key: string]: SvmEarnBuilder;
|
|
15562
15570
|
};
|
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";
|
|
@@ -47986,7 +48064,7 @@ var HASTRA_TOKEN_KEYS = {
|
|
|
47986
48064
|
prime: HASTRA_PRIME_KEY,
|
|
47987
48065
|
auto: HASTRA_AUTO_KEY
|
|
47988
48066
|
};
|
|
47989
|
-
var
|
|
48067
|
+
var MAX_PLAUSIBLE_APR2 = 50;
|
|
47990
48068
|
function parseHastraPor(res) {
|
|
47991
48069
|
const tokens = res?.demo_prime_card?.tokens;
|
|
47992
48070
|
const out = {};
|
|
@@ -47995,7 +48073,7 @@ function parseHastraPor(res) {
|
|
|
47995
48073
|
const key3 = HASTRA_TOKEN_KEYS[String(t?.token ?? "").toLowerCase()];
|
|
47996
48074
|
if (!key3) continue;
|
|
47997
48075
|
const apr = Number(t?.effective_rate);
|
|
47998
|
-
if (Number.isFinite(apr) && apr > 0 && apr <
|
|
48076
|
+
if (Number.isFinite(apr) && apr > 0 && apr < MAX_PLAUSIBLE_APR2)
|
|
47999
48077
|
out[key3] = apr;
|
|
48000
48078
|
}
|
|
48001
48079
|
return out;
|
|
@@ -55742,49 +55820,6 @@ var onycFetcher = {
|
|
|
55742
55820
|
}
|
|
55743
55821
|
};
|
|
55744
55822
|
|
|
55745
|
-
// src/yields/intrinsic/fetchers/sanctum.ts
|
|
55746
|
-
var KAMINO_STAKING_YIELDS = "https://api.kamino.finance/staking-yields/tokens";
|
|
55747
|
-
var INF_MINT = "5oVNBeEEQvYi1cX3ir8Dx5n1P7pdxydbGF2X4TxVusJm";
|
|
55748
|
-
var INF_LLAMA_POOL = "3075a746-bdd1-4aac-bcd5-b035abee2622";
|
|
55749
|
-
var INF_KEY = "Infinity::INF::solana";
|
|
55750
|
-
var INF_EPOCHS = 10;
|
|
55751
|
-
var MAX_PLAUSIBLE_APY = 0.3;
|
|
55752
|
-
function meanEpochApy(rows, n = INF_EPOCHS) {
|
|
55753
|
-
if (!Array.isArray(rows)) return void 0;
|
|
55754
|
-
const ok2 = rows.map((r) => ({ epoch: Number(r?.epoch), apy: Number(r?.apy) })).filter(
|
|
55755
|
-
(r) => Number.isFinite(r.epoch) && Number.isFinite(r.apy) && r.apy > 0 && r.apy < MAX_PLAUSIBLE_APY
|
|
55756
|
-
).sort((a, b) => b.epoch - a.epoch).slice(0, n);
|
|
55757
|
-
if (ok2.length === 0) return void 0;
|
|
55758
|
-
return ok2.reduce((s, r) => s + r.apy, 0) / ok2.length;
|
|
55759
|
-
}
|
|
55760
|
-
async function kaminoInfApy() {
|
|
55761
|
-
const end = /* @__PURE__ */ new Date();
|
|
55762
|
-
const start = new Date(end.getTime() - 30 * 864e5);
|
|
55763
|
-
const d = (x) => x.toISOString().slice(0, 10);
|
|
55764
|
-
const res = await fetch(
|
|
55765
|
-
`${KAMINO_STAKING_YIELDS}/${INF_MINT}/history?start=${d(start)}&end=${d(end)}`,
|
|
55766
|
-
{
|
|
55767
|
-
headers: { accept: "application/json" },
|
|
55768
|
-
signal: AbortSignal.timeout(8e3)
|
|
55769
|
-
}
|
|
55770
|
-
);
|
|
55771
|
-
if (!res.ok) throw new Error(`Kamino staking-yields HTTP ${res.status}`);
|
|
55772
|
-
return meanEpochApy(await res.json());
|
|
55773
|
-
}
|
|
55774
|
-
var infFetcher = {
|
|
55775
|
-
label: "SANCTUM_INF",
|
|
55776
|
-
fetch: async () => {
|
|
55777
|
-
const apy = await kaminoInfApy().catch((e) => {
|
|
55778
|
-
console.warn(`[sanctum] Kamino INF history unavailable: ${e.message}`);
|
|
55779
|
-
return void 0;
|
|
55780
|
-
});
|
|
55781
|
-
if (apy !== void 0) return { [INF_KEY]: apyToAprPercent(apy * 100) };
|
|
55782
|
-
const llama = await fetchDefiLlamaApy(INF_LLAMA_POOL);
|
|
55783
|
-
if (!(llama > 0) || llama >= MAX_PLAUSIBLE_APY * 100) return {};
|
|
55784
|
-
return { [INF_KEY]: apyToAprPercent(llama) };
|
|
55785
|
-
}
|
|
55786
|
-
};
|
|
55787
|
-
|
|
55788
55823
|
// src/yields/intrinsic/fetchers/exponentTranching.ts
|
|
55789
55824
|
var EXPONENT_APP_API = "https://app.exponent.finance/api/tranching-markets";
|
|
55790
55825
|
var EXPONENT_SENIOR_GROUPS = {
|
|
@@ -56602,6 +56637,9 @@ var LENDING_ONLY_FETCHERS = [
|
|
|
56602
56637
|
// pool, collateral on Kamino / Jupiter Lend / Project 0 / Save. Its earn
|
|
56603
56638
|
// row lives in margin-fetcher-sol, so it is lending-only here.
|
|
56604
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,
|
|
56605
56643
|
// Exponent senior tranches (srEHYUSD / srAUTO / srONyc / srnOPAL, Solana):
|
|
56606
56644
|
// Loopscale loop collateral, no earn row.
|
|
56607
56645
|
exponentSeniorFetcher,
|
|
@@ -63659,8 +63697,6 @@ var MORPHO_STUB_VAULTS = {
|
|
|
63659
63697
|
// Pharos
|
|
63660
63698
|
"1868": ["0x94665e0df3c8c25119d80b2e3c703ccd127bf37e"],
|
|
63661
63699
|
// Soneium
|
|
63662
|
-
"2741": ["0x225c6e63970bb04d0780b3abb047dba659ad3cec"],
|
|
63663
|
-
// Abstract
|
|
63664
63700
|
"2818": ["0x7cf2c1a184c2f17e0413a13b21b1fdafd51df08c"],
|
|
63665
63701
|
// Morph
|
|
63666
63702
|
"4114": ["0xc063aca30b0d56ff0a9e446a94f8cdb421ab89fb"],
|
|
@@ -75672,17 +75708,17 @@ var priceGlvVaults = async (chainId, multicallRetry, glvTokens, prices, marketIn
|
|
|
75672
75708
|
const sp = price(prices, short);
|
|
75673
75709
|
if (!lp || !sp) return;
|
|
75674
75710
|
const indexPrices = [];
|
|
75675
|
-
let
|
|
75711
|
+
let ok3 = true;
|
|
75676
75712
|
for (const m of markets) {
|
|
75677
75713
|
const idx = marketIndexToken.get(m.toLowerCase());
|
|
75678
75714
|
const ip = idx ? price(prices, idx) : void 0;
|
|
75679
75715
|
if (!ip) {
|
|
75680
|
-
|
|
75716
|
+
ok3 = false;
|
|
75681
75717
|
break;
|
|
75682
75718
|
}
|
|
75683
75719
|
indexPrices.push(ip);
|
|
75684
75720
|
}
|
|
75685
|
-
if (!
|
|
75721
|
+
if (!ok3) return;
|
|
75686
75722
|
calls.push({
|
|
75687
75723
|
address: c.glvReader,
|
|
75688
75724
|
name: "getGlvTokenPrice",
|
|
@@ -76173,8 +76209,12 @@ var PENDLE_CHAIN_IDS = /* @__PURE__ */ new Set([
|
|
|
76173
76209
|
// Monad
|
|
76174
76210
|
"146",
|
|
76175
76211
|
// Sonic
|
|
76212
|
+
"196",
|
|
76213
|
+
// X Layer
|
|
76176
76214
|
"999",
|
|
76177
76215
|
// HyperEVM
|
|
76216
|
+
"4663",
|
|
76217
|
+
// Robinhood Chain
|
|
76178
76218
|
"5000",
|
|
76179
76219
|
// Mantle
|
|
76180
76220
|
"8453",
|
|
@@ -84834,6 +84874,14 @@ var SVM_EARN_VAULT_BUILDERS = {
|
|
|
84834
84874
|
verbs: ["deposit", "withdraw"],
|
|
84835
84875
|
nativeDeposit: true,
|
|
84836
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
|
|
84837
84885
|
}
|
|
84838
84886
|
};
|
|
84839
84887
|
var UNBUILT_REASONS = {
|
|
@@ -84851,7 +84899,7 @@ function svmEarnBuildability(venue, brand) {
|
|
|
84851
84899
|
return { ok: false, reason: "No Solana builder for this lender yet" };
|
|
84852
84900
|
}
|
|
84853
84901
|
const provider = venue.slice("vault.".length);
|
|
84854
|
-
const key3 = provider === "savings" ?
|
|
84902
|
+
const key3 = provider === "savings" || provider === "lst" ? `${provider}:${brand ?? ""}` : provider;
|
|
84855
84903
|
const builder = SVM_EARN_VAULT_BUILDERS[key3];
|
|
84856
84904
|
if (builder) return { ok: true, builder };
|
|
84857
84905
|
return {
|