@1delta/margin-fetcher 0.0.266 → 0.0.268
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 +1215 -84
- package/dist/index.js.map +1 -1
- package/dist/lending/dolomite-subgraph.d.ts +11 -0
- package/dist/lending/dolomite-subgraph.d.ts.map +1 -0
- package/dist/lending/public-data/dolomite/emodeConfig.d.ts +45 -0
- package/dist/lending/public-data/dolomite/emodeConfig.d.ts.map +1 -0
- package/dist/lending/public-data/dolomite/fetchFromSubgraph.d.ts +56 -0
- package/dist/lending/public-data/dolomite/fetchFromSubgraph.d.ts.map +1 -0
- package/dist/lending/public-data/dolomite/publicCallBuild.d.ts +19 -0
- package/dist/lending/public-data/dolomite/publicCallBuild.d.ts.map +1 -0
- package/dist/lending/public-data/dolomite/publicCallParse.d.ts +23 -0
- package/dist/lending/public-data/dolomite/publicCallParse.d.ts.map +1 -0
- package/dist/lending/public-data/fetchLender.d.ts.map +1 -1
- package/dist/lending/public-data/fetchLenderAll.d.ts.map +1 -1
- package/dist/lending/public-data/fetchLenderExt.d.ts.map +1 -1
- package/dist/lending/user-data/abis.d.ts.map +1 -1
- package/dist/lending/user-data/dolomite/userCallBuild.d.ts +21 -0
- package/dist/lending/user-data/dolomite/userCallBuild.d.ts.map +1 -0
- package/dist/lending/user-data/dolomite/userCallParse.d.ts +15 -0
- package/dist/lending/user-data/dolomite/userCallParse.d.ts.map +1 -0
- package/dist/lending/user-data/fetch-balances/parse.d.ts.map +1 -1
- package/dist/lending/user-data/fetch-balances/prepare.d.ts.map +1 -1
- package/dist/prices/oracle-prices/fetchOraclePrices.d.ts.map +1 -1
- package/dist/prices/oracle-prices/fetchers/dolomite.d.ts +297 -0
- package/dist/prices/oracle-prices/fetchers/dolomite.d.ts.map +1 -0
- package/dist/prices/oracle-prices/fetchers/index.d.ts +1 -0
- package/dist/prices/oracle-prices/fetchers/index.d.ts.map +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/marketName.d.ts.map +1 -1
- package/dist/vaults/lst/abis/core.d.ts +27 -0
- package/dist/vaults/lst/abis/core.d.ts.map +1 -0
- package/dist/vaults/lst/abis/index.d.ts +2 -0
- package/dist/vaults/lst/abis/index.d.ts.map +1 -1
- package/dist/vaults/lst/abis/stella.d.ts +30 -0
- package/dist/vaults/lst/abis/stella.d.ts.map +1 -0
- package/dist/vaults/lst/coreValidators.d.ts +16 -0
- package/dist/vaults/lst/coreValidators.d.ts.map +1 -0
- package/dist/vaults/lst/fetchPublic.d.ts.map +1 -1
- package/dist/vaults/lst/index.d.ts +1 -0
- package/dist/vaults/lst/index.d.ts.map +1 -1
- package/dist/vaults/lst/readers/core.d.ts +22 -0
- package/dist/vaults/lst/readers/core.d.ts.map +1 -0
- package/dist/vaults/lst/readers/index.d.ts.map +1 -1
- package/dist/vaults/lst/readers/stella.d.ts +18 -0
- package/dist/vaults/lst/readers/stella.d.ts.map +1 -0
- package/dist/vaults/lst/registry.d.ts +11 -1
- package/dist/vaults/lst/registry.d.ts.map +1 -1
- package/dist/vaults/lst/types.d.ts +10 -1
- package/dist/vaults/lst/types.d.ts.map +1 -1
- package/dist/vaults/lst/withdrawals/abis/stella.d.ts +25 -0
- package/dist/vaults/lst/withdrawals/abis/stella.d.ts.map +1 -0
- package/dist/vaults/lst/withdrawals/readers/index.d.ts.map +1 -1
- package/dist/vaults/lst/withdrawals/readers/stella.d.ts +17 -0
- package/dist/vaults/lst/withdrawals/readers/stella.d.ts.map +1 -0
- package/dist/vaults/lst/withdrawals/registry.d.ts.map +1 -1
- package/dist/vaults/lst/withdrawals/types.d.ts +1 -1
- package/dist/vaults/lst/withdrawals/types.d.ts.map +1 -1
- package/dist/yields/intrinsic/fetchers/core.d.ts +3 -0
- package/dist/yields/intrinsic/fetchers/core.d.ts.map +1 -0
- package/dist/yields/intrinsic/fetchers/stella.d.ts +3 -0
- package/dist/yields/intrinsic/fetchers/stella.d.ts.map +1 -0
- package/dist/yields/intrinsic/index.d.ts.map +1 -1
- package/package.json +5 -5
package/dist/index.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { parseAbi, keccak256, encodeAbiParameters, formatEther, BaseError, encodeFunctionData, formatUnits, decodeFunctionResult, decodeAbiParameters, AbiEncodingLengthMismatchError, concatHex, pad, isAddress, InvalidAddressError, stringToHex, boolToHex, integerRegex, numberToHex, bytesRegex, BytesSizeMismatchError, arrayRegex, UnsupportedPackedAbiType } from './chunk-H6U3H7VY.js';
|
|
2
2
|
import './chunk-BYTNVMX7.js';
|
|
3
3
|
import './chunk-PR4QN5HX.js';
|
|
4
|
-
import { Lender, isAaveType, isCompoundV3, isMultiMarket, isSiloV2Type, isSiloV3Type, isAaveV4Type, isInit, isMorphoType, isCompoundV2Type, isVenusType, isSumerType, AAVE_V3_LENDERS, AAVE_V2_LENDERS, isAaveV2Type, isAaveV32Type, isAaveV3Type, isEulerType, isFluid, isGearboxV3, isYLDR, isCompoundV3Type, isLista, isTectonicType, isKineticType, isBenqiType } from '@1delta/lender-registry';
|
|
4
|
+
import { Lender, isAaveType, isCompoundV3, isMultiMarket, isSiloV2Type, isSiloV3Type, isDolomite, isAaveV4Type, isInit, isMorphoType, isCompoundV2Type, isVenusType, isSumerType, AAVE_V3_LENDERS, AAVE_V2_LENDERS, isAaveV2Type, isAaveV32Type, isAaveV3Type, isEulerType, isFluid, isGearboxV3, isYLDR, isCompoundV3Type, isLista, isTectonicType, isKineticType, isBenqiType } from '@1delta/lender-registry';
|
|
5
5
|
export { isAaveType, isAaveV2Type, isAaveV32Type, isAaveV3Type, isCompoundV3, isCompoundV3Type, isInit, isMorphoType, isMultiMarket, isYLDR } from '@1delta/lender-registry';
|
|
6
6
|
import lodash from 'lodash';
|
|
7
7
|
import { getEvmChain, getEvmClient, getEvmClientUniversal, multicallRetryUniversal, getEvmClientWithCustomRpcsUniversal } from '@1delta/providers';
|
|
8
|
-
import { FluidLendingResolverAbi, MetaMorphoAbi, MoolahVaultAbi, MorphoLensAbi, AaveV4SpokeAbi, AaveV4OracleAbi, AaveV4HubAbi, FluidVaultResolverAbi, GearboxMarketCompressorV310Abi, MorphoBlueAbi, GearboxCreditAccountCompressorV310Abi } from '@1delta/abis';
|
|
8
|
+
import { FluidLendingResolverAbi, MetaMorphoAbi, MoolahVaultAbi, MorphoLensAbi, AaveV4SpokeAbi, AaveV4OracleAbi, AaveV4HubAbi, FluidVaultResolverAbi, DolomiteMarginAbi, GearboxMarketCompressorV310Abi, MorphoBlueAbi, GearboxCreditAccountCompressorV310Abi } from '@1delta/abis';
|
|
9
9
|
export { MorphoLensAbi } from '@1delta/abis';
|
|
10
|
-
import { prepareDebitDataMulticall, prepareLenderDebitMulticall, parseDebitDataResult, parseLenderDebitResult, getPermit2ContractAddress, getCompoundV3CometAddress as getCompoundV3CometAddress$1, getMorphoAddress, getAaveCollateralTokenAddress, getSiloHalfForUnderlying, InitMarginAddresses } from '@1delta/calldata-sdk';
|
|
10
|
+
import { prepareDebitDataMulticall, prepareLenderDebitMulticall, parseDebitDataResult, parseLenderDebitResult, getPermit2ContractAddress, getCompoundV3CometAddress as getCompoundV3CometAddress$1, getMorphoAddress, getAaveCollateralTokenAddress, getSiloHalfForUnderlying, InitMarginAddresses, getLstAcceptedInputs } from '@1delta/calldata-sdk';
|
|
11
11
|
import { proxyNativeFetch } from '@1delta/proxy-fetch';
|
|
12
12
|
import { BALANCER_V2_FORKS, BALANCER_V3_FORKS, UNISWAP_V4_FORKS, isFlashLoanSourceExcluded, FLASH_LOAN_IDS } from '@1delta/dex-registry';
|
|
13
13
|
|
|
@@ -6278,6 +6278,8 @@ globalThis[GLOBAL_LENDER_DATA_KEY] = {
|
|
|
6278
6278
|
compoundV3Bulker: {},
|
|
6279
6279
|
eulerConfigs: {},
|
|
6280
6280
|
eulerVaults: {},
|
|
6281
|
+
dolomiteConfigs: {},
|
|
6282
|
+
dolomiteEmode: {},
|
|
6281
6283
|
aaveV4Spokes: {},
|
|
6282
6284
|
aaveV4Oracles: {},
|
|
6283
6285
|
aaveV4Peripherals: {},
|
|
@@ -6317,6 +6319,8 @@ var aaveOraclesConfig = () => getGlobalData2()?.aaveOraclesConfig;
|
|
|
6317
6319
|
var compoundV2OraclesConfig = () => getGlobalData2()?.compoundV2OraclesConfig;
|
|
6318
6320
|
var eulerConfigs = () => getGlobalData2()?.eulerConfigs;
|
|
6319
6321
|
var eulerVaults = () => getGlobalData2()?.eulerVaults;
|
|
6322
|
+
var dolomiteConfigs = () => getGlobalData2()?.dolomiteConfigs;
|
|
6323
|
+
var dolomiteEmode = () => getGlobalData2()?.dolomiteEmode;
|
|
6320
6324
|
var aaveV4Spokes = () => getGlobalData2()?.aaveV4Spokes;
|
|
6321
6325
|
var aaveV4Oracles = () => getGlobalData2()?.aaveV4Oracles;
|
|
6322
6326
|
var siloMarkets = () => getGlobalData2()?.siloMarkets;
|
|
@@ -6428,6 +6432,7 @@ var LENDER_SHORT_NAMES = {
|
|
|
6428
6432
|
[Lender.COMPOUND_V3_WETH]: "Comp. WETH",
|
|
6429
6433
|
[Lender.COMPOUND_V3_WSTETH]: "Comp. wstETH",
|
|
6430
6434
|
[Lender.EULER_V2]: "Euler V2",
|
|
6435
|
+
[Lender.DOLOMITE]: "Dolomite",
|
|
6431
6436
|
[Lender.FLUID]: "Fluid",
|
|
6432
6437
|
[Lender.FLUX_FINANCE]: "Flux",
|
|
6433
6438
|
[Lender.GEARBOX_V3]: "Gearbox V3",
|
|
@@ -7650,6 +7655,9 @@ var getLendersForChain = (c) => {
|
|
|
7650
7655
|
if (gearboxResolvers()?.chains?.[c]?.marketConfigurators) {
|
|
7651
7656
|
lenders.push(Lender.GEARBOX_V3);
|
|
7652
7657
|
}
|
|
7658
|
+
if (dolomiteConfigs()?.[c]?.dolomiteMargin) {
|
|
7659
|
+
lenders.push(Lender.DOLOMITE);
|
|
7660
|
+
}
|
|
7653
7661
|
return lenders.filter((l) => !isExcludedLender(l));
|
|
7654
7662
|
};
|
|
7655
7663
|
var filterLendersByProtocol = (allLenders, protocolList) => {
|
|
@@ -7660,8 +7668,9 @@ var filterLendersByProtocol = (allLenders, protocolList) => {
|
|
|
7660
7668
|
const hasMoolah = protocolList.includes(Lender.LISTA_DAO);
|
|
7661
7669
|
const hasFluid = protocolList.includes(Lender.FLUID);
|
|
7662
7670
|
const hasGearboxV3 = protocolList.includes(Lender.GEARBOX_V3);
|
|
7671
|
+
const hasDolomite = protocolList.includes(Lender.DOLOMITE);
|
|
7663
7672
|
return allLenders.filter(
|
|
7664
|
-
(lender) => protocolList.includes(lender) || hasMorpho && lender?.startsWith("MORPHO_BLUE") || hasMoolah && lender?.startsWith("LISTA_DAO") || hasFluid && lender?.startsWith("FLUID") || hasGearboxV3 && lender?.startsWith("GEARBOX_V3")
|
|
7673
|
+
(lender) => protocolList.includes(lender) || hasMorpho && lender?.startsWith("MORPHO_BLUE") || hasMoolah && lender?.startsWith("LISTA_DAO") || hasFluid && lender?.startsWith("FLUID") || hasGearboxV3 && lender?.startsWith("GEARBOX_V3") || hasDolomite && lender?.startsWith("DOLOMITE")
|
|
7665
7674
|
);
|
|
7666
7675
|
};
|
|
7667
7676
|
var getAavesForChain = () => {
|
|
@@ -19721,6 +19730,184 @@ function parseVault(vault, chainId, prices, additionalYields, tokenList) {
|
|
|
19721
19730
|
};
|
|
19722
19731
|
}
|
|
19723
19732
|
|
|
19733
|
+
// src/lending/public-data/dolomite/publicCallBuild.ts
|
|
19734
|
+
var getDolomiteMarketIds = (chainId) => {
|
|
19735
|
+
const markets = dolomiteConfigs()?.[chainId]?.markets;
|
|
19736
|
+
return markets ? Object.keys(markets) : [];
|
|
19737
|
+
};
|
|
19738
|
+
var DOLOMITE_MARKET_FNS = [
|
|
19739
|
+
"getMarketTokenAddress",
|
|
19740
|
+
"getMarketIsClosing",
|
|
19741
|
+
"getMarketTotalPar",
|
|
19742
|
+
"getMarketCurrentIndex",
|
|
19743
|
+
"getMarketPrice",
|
|
19744
|
+
"getMarketMarginPremium",
|
|
19745
|
+
"getMarketInterestRate"
|
|
19746
|
+
];
|
|
19747
|
+
var DOLOMITE_GLOBAL_FNS = ["getMarginRatio", "getEarningsRate"];
|
|
19748
|
+
var buildDolomiteCall = (chainId, _lender) => {
|
|
19749
|
+
const margin = dolomiteConfigs()?.[chainId]?.dolomiteMargin;
|
|
19750
|
+
const marketIds = getDolomiteMarketIds(chainId);
|
|
19751
|
+
if (!margin || marketIds.length === 0) return [];
|
|
19752
|
+
const calls = DOLOMITE_GLOBAL_FNS.map((name) => ({
|
|
19753
|
+
address: margin,
|
|
19754
|
+
name,
|
|
19755
|
+
params: []
|
|
19756
|
+
}));
|
|
19757
|
+
for (const marketId of marketIds) {
|
|
19758
|
+
for (const name of DOLOMITE_MARKET_FNS) {
|
|
19759
|
+
calls.push({ address: margin, name, params: [marketId] });
|
|
19760
|
+
}
|
|
19761
|
+
}
|
|
19762
|
+
return calls;
|
|
19763
|
+
};
|
|
19764
|
+
|
|
19765
|
+
// src/lending/public-data/dolomite/emodeConfig.ts
|
|
19766
|
+
var DISABLED_BORROW_FACTOR = 3402823669209385e5;
|
|
19767
|
+
var dolomiteFactors = (p, R) => ({
|
|
19768
|
+
collateralFactor: 1 / (1 + p),
|
|
19769
|
+
borrowCollateralFactor: 1 / ((1 + R) * (1 + p)),
|
|
19770
|
+
borrowFactor: 1 + p
|
|
19771
|
+
});
|
|
19772
|
+
function buildDolomiteConfigs(marketId, marginPremium, R, isClosing, emode) {
|
|
19773
|
+
const borrowOnly = emode?.riskFeatures?.[marketId]?.feature === "BORROW_ONLY";
|
|
19774
|
+
const base = dolomiteFactors(marginPremium, R);
|
|
19775
|
+
const configs = {
|
|
19776
|
+
["0"]: {
|
|
19777
|
+
category: "0",
|
|
19778
|
+
label: "Cross-margin",
|
|
19779
|
+
...base,
|
|
19780
|
+
debtDisabled: isClosing,
|
|
19781
|
+
collateralDisabled: borrowOnly
|
|
19782
|
+
}
|
|
19783
|
+
};
|
|
19784
|
+
if (!emode?.categories) return configs;
|
|
19785
|
+
const marketCategory = emode.marketCategories?.[marketId];
|
|
19786
|
+
for (const [cat, param] of Object.entries(emode.categories)) {
|
|
19787
|
+
if (marketCategory === cat) {
|
|
19788
|
+
const f = dolomiteFactors(0, param.marginRatioOverride);
|
|
19789
|
+
configs[cat] = {
|
|
19790
|
+
category: cat,
|
|
19791
|
+
label: cat,
|
|
19792
|
+
...f,
|
|
19793
|
+
debtDisabled: isClosing,
|
|
19794
|
+
collateralDisabled: borrowOnly
|
|
19795
|
+
};
|
|
19796
|
+
} else {
|
|
19797
|
+
configs[cat] = {
|
|
19798
|
+
category: cat,
|
|
19799
|
+
label: cat,
|
|
19800
|
+
collateralFactor: 0,
|
|
19801
|
+
borrowCollateralFactor: 0,
|
|
19802
|
+
borrowFactor: DISABLED_BORROW_FACTOR,
|
|
19803
|
+
debtDisabled: true,
|
|
19804
|
+
collateralDisabled: true
|
|
19805
|
+
};
|
|
19806
|
+
}
|
|
19807
|
+
}
|
|
19808
|
+
return configs;
|
|
19809
|
+
}
|
|
19810
|
+
function resolveDolomiteMode(heldMarketIds, emode) {
|
|
19811
|
+
if (!emode?.marketCategories || heldMarketIds.length === 0) return "0";
|
|
19812
|
+
const cats = /* @__PURE__ */ new Set();
|
|
19813
|
+
for (const m of heldMarketIds) {
|
|
19814
|
+
const cat = emode.marketCategories[m];
|
|
19815
|
+
if (!cat) return "0";
|
|
19816
|
+
cats.add(cat);
|
|
19817
|
+
}
|
|
19818
|
+
return cats.size === 1 ? [...cats][0] : "0";
|
|
19819
|
+
}
|
|
19820
|
+
|
|
19821
|
+
// src/lending/public-data/dolomite/publicCallParse.ts
|
|
19822
|
+
var BASE = 10n ** 18n;
|
|
19823
|
+
var SECONDS_PER_YEAR5 = 31536e3;
|
|
19824
|
+
var MARKET_STRIDE = DOLOMITE_MARKET_FNS.length;
|
|
19825
|
+
var GLOBAL_COUNT = DOLOMITE_GLOBAL_FNS.length;
|
|
19826
|
+
var toBig = (v) => {
|
|
19827
|
+
try {
|
|
19828
|
+
return BigInt(v ?? 0);
|
|
19829
|
+
} catch {
|
|
19830
|
+
return 0n;
|
|
19831
|
+
}
|
|
19832
|
+
};
|
|
19833
|
+
var parToWei = (par, index) => toBig(par) * toBig(index) / BASE;
|
|
19834
|
+
var getDolomitePublicDataConverter = (lender, chainId, _prices, additionalYields, tokenList = {}) => {
|
|
19835
|
+
const marketIds = getDolomiteMarketIds(chainId);
|
|
19836
|
+
const expectedNumberOfCalls = GLOBAL_COUNT + MARKET_STRIDE * marketIds.length;
|
|
19837
|
+
return [
|
|
19838
|
+
(data) => {
|
|
19839
|
+
if (data.length !== expectedNumberOfCalls) return void 0;
|
|
19840
|
+
const R = Number(parseRawAmount(toBig(data[0]?.value), 18));
|
|
19841
|
+
const earningsRate = Number(parseRawAmount(toBig(data[1]?.value), 18));
|
|
19842
|
+
const emode = dolomiteEmode()?.[chainId];
|
|
19843
|
+
const result = {};
|
|
19844
|
+
marketIds.forEach((marketId, m) => {
|
|
19845
|
+
const base = GLOBAL_COUNT + MARKET_STRIDE * m;
|
|
19846
|
+
const token = data[base + 0 /* token */];
|
|
19847
|
+
if (!token) return;
|
|
19848
|
+
const underlying = String(token).toLowerCase();
|
|
19849
|
+
const meta = tokenList[underlying];
|
|
19850
|
+
const decimals = meta?.decimals ?? 18;
|
|
19851
|
+
const totalPar = data[base + 2 /* totalPar */];
|
|
19852
|
+
const currentIndex = data[base + 3 /* currentIndex */];
|
|
19853
|
+
const totalDeposits = parseRawAmount(
|
|
19854
|
+
parToWei(totalPar?.supply, currentIndex?.supply),
|
|
19855
|
+
decimals
|
|
19856
|
+
);
|
|
19857
|
+
const totalDebt = parseRawAmount(
|
|
19858
|
+
parToWei(totalPar?.borrow, currentIndex?.borrow),
|
|
19859
|
+
decimals
|
|
19860
|
+
);
|
|
19861
|
+
const price2 = Number(
|
|
19862
|
+
parseRawAmount(toBig(data[base + 4 /* price */]?.value), 36 - decimals)
|
|
19863
|
+
);
|
|
19864
|
+
const borrowRatePerSec = Number(
|
|
19865
|
+
parseRawAmount(toBig(data[base + 6 /* interestRate */]?.value), 18)
|
|
19866
|
+
);
|
|
19867
|
+
const variableBorrowRate = borrowRatePerSec * SECONDS_PER_YEAR5 * 100;
|
|
19868
|
+
const util = Number(totalDeposits) > 0 ? Number(totalDebt) / Number(totalDeposits) : 0;
|
|
19869
|
+
const depositRate = variableBorrowRate * util * earningsRate;
|
|
19870
|
+
const p = Number(
|
|
19871
|
+
parseRawAmount(toBig(data[base + 5 /* marginPremium */]?.value), 18)
|
|
19872
|
+
);
|
|
19873
|
+
const isClosing = Boolean(data[base + 1 /* isClosing */]);
|
|
19874
|
+
const config = buildDolomiteConfigs(marketId, p, R, isClosing, emode);
|
|
19875
|
+
const liquidity = Number(totalDeposits) - Number(totalDebt);
|
|
19876
|
+
const marketUid = createMarketUid(chainId, lender, underlying);
|
|
19877
|
+
result[underlying] = {
|
|
19878
|
+
marketUid,
|
|
19879
|
+
name: lenderShortName(lender) + " " + (meta?.symbol ?? ""),
|
|
19880
|
+
poolId: underlying,
|
|
19881
|
+
underlying,
|
|
19882
|
+
asset: meta,
|
|
19883
|
+
marketId,
|
|
19884
|
+
totalDeposits,
|
|
19885
|
+
totalDebt,
|
|
19886
|
+
totalDepositsUSD: price2 * Number(totalDeposits),
|
|
19887
|
+
totalDebtUSD: price2 * Number(totalDebt),
|
|
19888
|
+
totalLiquidity: liquidity,
|
|
19889
|
+
borrowLiquidity: liquidity,
|
|
19890
|
+
totalLiquidityUSD: liquidity * price2,
|
|
19891
|
+
borrowLiquidityUSD: liquidity * price2,
|
|
19892
|
+
utilization: computeUtilization(totalDeposits, totalDebt),
|
|
19893
|
+
price: price2,
|
|
19894
|
+
depositRate,
|
|
19895
|
+
variableBorrowRate,
|
|
19896
|
+
stableBorrowRate: 0,
|
|
19897
|
+
collateralActive: true,
|
|
19898
|
+
intrinsicYield: additionalYields?.intrinsicYields?.[underlying] ?? 0,
|
|
19899
|
+
rewards: [],
|
|
19900
|
+
config,
|
|
19901
|
+
borrowingEnabled: !isClosing,
|
|
19902
|
+
depositsEnabled: !isClosing
|
|
19903
|
+
};
|
|
19904
|
+
});
|
|
19905
|
+
return { data: result, chainId };
|
|
19906
|
+
},
|
|
19907
|
+
expectedNumberOfCalls
|
|
19908
|
+
];
|
|
19909
|
+
};
|
|
19910
|
+
|
|
19724
19911
|
// src/lending/public-data/gearbox/publicCallBuild.ts
|
|
19725
19912
|
var buildGearboxCall = (chainId, _lender) => {
|
|
19726
19913
|
const compressor = gearboxMarketCompressor();
|
|
@@ -19987,6 +20174,7 @@ function buildLenderCall(chainId, lender) {
|
|
|
19987
20174
|
if (isSiloV2Type(lender)) return buildSiloV2LenderReserveCall(chainId, lender);
|
|
19988
20175
|
if (isSiloV3Type(lender)) return buildSiloV3LenderReserveCall(chainId, lender);
|
|
19989
20176
|
if (isFluid(lender)) return buildFluidCall(chainId);
|
|
20177
|
+
if (isDolomite(lender)) return buildDolomiteCall(chainId);
|
|
19990
20178
|
if (isGearboxV3(lender)) return buildGearboxCall(chainId);
|
|
19991
20179
|
return [];
|
|
19992
20180
|
}
|
|
@@ -20088,6 +20276,14 @@ function getLenderDataConverter(lender, chainId, prices, additionalYields, token
|
|
|
20088
20276
|
additionalYields,
|
|
20089
20277
|
tokenList
|
|
20090
20278
|
);
|
|
20279
|
+
if (isDolomite(lender))
|
|
20280
|
+
return getDolomitePublicDataConverter(
|
|
20281
|
+
lender,
|
|
20282
|
+
chainId,
|
|
20283
|
+
prices,
|
|
20284
|
+
additionalYields,
|
|
20285
|
+
tokenList
|
|
20286
|
+
);
|
|
20091
20287
|
return [() => null, 0];
|
|
20092
20288
|
}
|
|
20093
20289
|
var getAbi = (lender) => {
|
|
@@ -20114,6 +20310,7 @@ var getAbi = (lender) => {
|
|
|
20114
20310
|
return [...SiloAbi, ...SiloLensAbi, ...InterestRateModelV2Abi];
|
|
20115
20311
|
if (isFluid(lender))
|
|
20116
20312
|
return [...FluidVaultResolverAbi];
|
|
20313
|
+
if (isDolomite(lender)) return [...DolomiteMarginAbi];
|
|
20117
20314
|
if (isGearboxV3(lender))
|
|
20118
20315
|
return [...GearboxMarketCompressorV310Abi];
|
|
20119
20316
|
if (isSumerType(lender)) return [...SumerLensAbi, ...SumerComptrollerAbi];
|
|
@@ -20639,6 +20836,133 @@ function bigintToLtv2(v) {
|
|
|
20639
20836
|
return Number.isFinite(n) ? n / 1e18 : 0;
|
|
20640
20837
|
}
|
|
20641
20838
|
}
|
|
20839
|
+
|
|
20840
|
+
// src/lending/dolomite-subgraph.ts
|
|
20841
|
+
var DOLO_KEY = "1301d2d1-7a9d-4be4-9e9a-061cb8611549";
|
|
20842
|
+
var DOLO_VER = "latest";
|
|
20843
|
+
var doloUrl = (slug) => `https://subgraph.api.dolomite.io/api/public/${DOLO_KEY}/subgraphs/dolomite-${slug}/${DOLO_VER}/gn`;
|
|
20844
|
+
var DOLOMITE_SUBGRAPH_URLS = {
|
|
20845
|
+
"1": doloUrl("ethereum"),
|
|
20846
|
+
// unlisted but live
|
|
20847
|
+
"56": doloUrl("bsc"),
|
|
20848
|
+
// unlisted but live (no markets yet)
|
|
20849
|
+
"196": doloUrl("x-layer"),
|
|
20850
|
+
"1101": doloUrl("polygon-zkevm"),
|
|
20851
|
+
"3637": doloUrl("botanix"),
|
|
20852
|
+
// unlisted but live
|
|
20853
|
+
"5000": doloUrl("mantle"),
|
|
20854
|
+
"8453": doloUrl("base"),
|
|
20855
|
+
"42161": doloUrl("arbitrum"),
|
|
20856
|
+
"80094": doloUrl("berachain-mainnet")
|
|
20857
|
+
};
|
|
20858
|
+
var dolomiteSubgraphUrl = (chainId) => DOLOMITE_SUBGRAPH_URLS[chainId];
|
|
20859
|
+
var hasDolomiteSubgraph = (chainId) => chainId in DOLOMITE_SUBGRAPH_URLS;
|
|
20860
|
+
|
|
20861
|
+
// src/lending/public-data/dolomite/fetchFromSubgraph.ts
|
|
20862
|
+
var LENDER = "DOLOMITE";
|
|
20863
|
+
var SUBGRAPH_TIMEOUT_MS = 12e3;
|
|
20864
|
+
async function fetchDolomiteMarketsFromSubgraph(chainId) {
|
|
20865
|
+
const url = dolomiteSubgraphUrl(chainId);
|
|
20866
|
+
if (!url) return null;
|
|
20867
|
+
const query3 = `{
|
|
20868
|
+
dolomiteMargins(first: 1) { liquidationRatio }
|
|
20869
|
+
marketRiskInfos(first: 1000) {
|
|
20870
|
+
marginPremium
|
|
20871
|
+
isBorrowingDisabled
|
|
20872
|
+
token { id symbol decimals marketId supplyLiquidity borrowLiquidity }
|
|
20873
|
+
}
|
|
20874
|
+
interestRates(first: 1000) {
|
|
20875
|
+
token { id }
|
|
20876
|
+
supplyInterestRate
|
|
20877
|
+
borrowInterestRate
|
|
20878
|
+
}
|
|
20879
|
+
}`;
|
|
20880
|
+
const controller = new AbortController();
|
|
20881
|
+
const timeout = setTimeout(() => controller.abort(), SUBGRAPH_TIMEOUT_MS);
|
|
20882
|
+
try {
|
|
20883
|
+
const response = await fetch(url, {
|
|
20884
|
+
method: "POST",
|
|
20885
|
+
headers: { "Content-Type": "application/json" },
|
|
20886
|
+
body: JSON.stringify({ query: query3 }),
|
|
20887
|
+
signal: controller.signal
|
|
20888
|
+
});
|
|
20889
|
+
if (!response.ok) return null;
|
|
20890
|
+
const json = await response.json();
|
|
20891
|
+
const d = json?.data;
|
|
20892
|
+
if (!d?.marketRiskInfos?.length) return null;
|
|
20893
|
+
const rates = {};
|
|
20894
|
+
for (const r of d.interestRates ?? []) {
|
|
20895
|
+
rates[r.token.id.toLowerCase()] = {
|
|
20896
|
+
supply: Number(r.supplyInterestRate),
|
|
20897
|
+
borrow: Number(r.borrowInterestRate)
|
|
20898
|
+
};
|
|
20899
|
+
}
|
|
20900
|
+
return {
|
|
20901
|
+
liquidationRatio: Number(d.dolomiteMargins?.[0]?.liquidationRatio ?? 0),
|
|
20902
|
+
riskInfos: d.marketRiskInfos,
|
|
20903
|
+
rates
|
|
20904
|
+
};
|
|
20905
|
+
} catch {
|
|
20906
|
+
return null;
|
|
20907
|
+
} finally {
|
|
20908
|
+
clearTimeout(timeout);
|
|
20909
|
+
}
|
|
20910
|
+
}
|
|
20911
|
+
function convertDolomiteSubgraphMarkets(raw, chainId, prices, additionalYields, tokenList = {}) {
|
|
20912
|
+
const R = raw.liquidationRatio > 0 ? raw.liquidationRatio - 1 : 0;
|
|
20913
|
+
const emode = dolomiteEmode()?.[chainId];
|
|
20914
|
+
const result = {};
|
|
20915
|
+
for (const info of raw.riskInfos) {
|
|
20916
|
+
const underlying = info.token.id.toLowerCase();
|
|
20917
|
+
const meta = tokenList[underlying];
|
|
20918
|
+
const oracleKey = toOracleKey(meta?.assetGroup) ?? toGenericPriceKey(underlying, chainId);
|
|
20919
|
+
const price2 = prices[underlying] ?? prices[oracleKey] ?? 0;
|
|
20920
|
+
const totalDeposits = info.token.supplyLiquidity ?? "0";
|
|
20921
|
+
const totalDebt = info.token.borrowLiquidity ?? "0";
|
|
20922
|
+
const liquidity = Number(totalDeposits) - Number(totalDebt);
|
|
20923
|
+
const rate = raw.rates[underlying] ?? { supply: 0, borrow: 0 };
|
|
20924
|
+
const depositRate = rate.supply * 100;
|
|
20925
|
+
const variableBorrowRate = rate.borrow * 100;
|
|
20926
|
+
const p = Number(info.marginPremium) || 0;
|
|
20927
|
+
const isClosing = Boolean(info.isBorrowingDisabled);
|
|
20928
|
+
const config = buildDolomiteConfigs(
|
|
20929
|
+
info.token.marketId,
|
|
20930
|
+
p,
|
|
20931
|
+
R,
|
|
20932
|
+
isClosing,
|
|
20933
|
+
emode
|
|
20934
|
+
);
|
|
20935
|
+
const marketUid = createMarketUid(chainId, LENDER, underlying);
|
|
20936
|
+
result[underlying] = {
|
|
20937
|
+
marketUid,
|
|
20938
|
+
name: lenderShortName(LENDER) + " " + (meta?.symbol ?? info.token.symbol ?? ""),
|
|
20939
|
+
poolId: underlying,
|
|
20940
|
+
underlying,
|
|
20941
|
+
asset: meta,
|
|
20942
|
+
marketId: info.token.marketId,
|
|
20943
|
+
totalDeposits,
|
|
20944
|
+
totalDebt,
|
|
20945
|
+
totalDepositsUSD: price2 * Number(totalDeposits),
|
|
20946
|
+
totalDebtUSD: price2 * Number(totalDebt),
|
|
20947
|
+
totalLiquidity: liquidity,
|
|
20948
|
+
borrowLiquidity: liquidity,
|
|
20949
|
+
totalLiquidityUSD: liquidity * price2,
|
|
20950
|
+
borrowLiquidityUSD: liquidity * price2,
|
|
20951
|
+
utilization: computeUtilization(totalDeposits, totalDebt),
|
|
20952
|
+
price: price2,
|
|
20953
|
+
depositRate,
|
|
20954
|
+
variableBorrowRate,
|
|
20955
|
+
stableBorrowRate: 0,
|
|
20956
|
+
collateralActive: true,
|
|
20957
|
+
intrinsicYield: additionalYields?.intrinsicYields?.[underlying] ?? 0,
|
|
20958
|
+
rewards: [],
|
|
20959
|
+
config,
|
|
20960
|
+
borrowingEnabled: !isClosing,
|
|
20961
|
+
depositsEnabled: !isClosing
|
|
20962
|
+
};
|
|
20963
|
+
}
|
|
20964
|
+
return { data: result, chainId };
|
|
20965
|
+
}
|
|
20642
20966
|
var warn = (...args) => {
|
|
20643
20967
|
};
|
|
20644
20968
|
async function getLenderDataFromApi(lender, chainId, prices, additionalYields, includeUnlisted = false) {
|
|
@@ -20656,8 +20980,9 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
|
|
|
20656
20980
|
}, includeUnlisted = false) => {
|
|
20657
20981
|
const siloV2Lenders = lenders.filter((l) => isSiloV2Type(l));
|
|
20658
20982
|
const siloV3Lenders = lenders.filter((l) => isSiloV3Type(l));
|
|
20983
|
+
const dolomiteLenders = lenders.filter((l) => isDolomite(l));
|
|
20659
20984
|
const otherLenders = lenders.filter(
|
|
20660
|
-
(l) => !isSiloV2Type(l) && !isSiloV3Type(l)
|
|
20985
|
+
(l) => !isSiloV2Type(l) && !isSiloV3Type(l) && !isDolomite(l)
|
|
20661
20986
|
);
|
|
20662
20987
|
const siloV2Promise = siloV2Lenders.length > 0 ? fetchSiloMarkets(chainId, { protocolVersion: "v2" }).then((items) => ({
|
|
20663
20988
|
__silo_items__: items
|
|
@@ -20677,11 +21002,13 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
|
|
|
20677
21002
|
)
|
|
20678
21003
|
);
|
|
20679
21004
|
}
|
|
21005
|
+
const dolomitePromise = dolomiteLenders.length > 0 ? fetchDolomiteMarketsFromSubgraph(chainId) : Promise.resolve(null);
|
|
20680
21006
|
const settled = await Promise.allSettled([
|
|
20681
21007
|
tokenList(),
|
|
20682
21008
|
siloV2Promise,
|
|
20683
21009
|
siloV3Promise,
|
|
20684
|
-
...promises
|
|
21010
|
+
...promises,
|
|
21011
|
+
dolomitePromise
|
|
20685
21012
|
]);
|
|
20686
21013
|
const listResult = settled[0];
|
|
20687
21014
|
const list = listResult.status === "fulfilled" ? listResult.value : {};
|
|
@@ -20783,6 +21110,31 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
|
|
|
20783
21110
|
} catch (e) {
|
|
20784
21111
|
}
|
|
20785
21112
|
}
|
|
21113
|
+
if (dolomiteLenders.length > 0) {
|
|
21114
|
+
const dolomiteResult = settled[settled.length - 1];
|
|
21115
|
+
if (dolomiteResult.status === "fulfilled" && dolomiteResult.value) {
|
|
21116
|
+
try {
|
|
21117
|
+
const converted = convertDolomiteSubgraphMarkets(
|
|
21118
|
+
dolomiteResult.value,
|
|
21119
|
+
chainId,
|
|
21120
|
+
prices,
|
|
21121
|
+
additionalYields,
|
|
21122
|
+
list
|
|
21123
|
+
);
|
|
21124
|
+
for (const lk of dolomiteLenders) lenderData[lk] = converted;
|
|
21125
|
+
} catch (e) {
|
|
21126
|
+
warn(
|
|
21127
|
+
`[lending] Dolomite subgraph convert failed on chain ${chainId}:`,
|
|
21128
|
+
e?.message ?? e
|
|
21129
|
+
);
|
|
21130
|
+
}
|
|
21131
|
+
} else if (dolomiteResult.status === "rejected") {
|
|
21132
|
+
warn(
|
|
21133
|
+
`[lending] Dolomite subgraph fetch failed on chain ${chainId}:`,
|
|
21134
|
+
dolomiteResult.reason?.message ?? dolomiteResult.reason
|
|
21135
|
+
);
|
|
21136
|
+
}
|
|
21137
|
+
}
|
|
20786
21138
|
return lenderData;
|
|
20787
21139
|
};
|
|
20788
21140
|
var warn2 = (...args) => {
|
|
@@ -20808,6 +21160,9 @@ function lenderApiWithOnChainFallback(lender, chainId) {
|
|
|
20808
21160
|
if (isSiloV2Type(lender) || isSiloV3Type(lender)) {
|
|
20809
21161
|
return SILO_API_SUPPORTED_CHAIN_IDS.has(chainId);
|
|
20810
21162
|
}
|
|
21163
|
+
if (isDolomite(lender)) {
|
|
21164
|
+
return hasDolomiteSubgraph(chainId);
|
|
21165
|
+
}
|
|
20811
21166
|
return false;
|
|
20812
21167
|
}
|
|
20813
21168
|
var getLenderPublicDataAll = async (chainId, lenders, prices, additionalYields, multicallRetry, tokenList, includeUnlistedMorphoMarkets = false) => {
|
|
@@ -21396,6 +21751,80 @@ var buildGearboxV3UserCall = (chainId, _lender, account) => {
|
|
|
21396
21751
|
];
|
|
21397
21752
|
};
|
|
21398
21753
|
|
|
21754
|
+
// src/lending/user-data/dolomite/userCallBuild.ts
|
|
21755
|
+
var SUBGRAPH_CACHE_TTL_MS2 = 3e4;
|
|
21756
|
+
var SUBGRAPH_TIMEOUT_MS2 = 1e4;
|
|
21757
|
+
var subgraphCache2 = /* @__PURE__ */ new Map();
|
|
21758
|
+
function fetchDolomiteAccountNumbers(chainId, owner) {
|
|
21759
|
+
const key = `${chainId}:${owner.toLowerCase()}`;
|
|
21760
|
+
const cached = subgraphCache2.get(key);
|
|
21761
|
+
if (cached) return cached.promise;
|
|
21762
|
+
const promise = fetchAccountNumbersFromSubgraph(chainId, owner).then((ns) => dedupeWithDefault(ns)).catch(() => ["0"]);
|
|
21763
|
+
const timer = setTimeout(() => subgraphCache2.delete(key), SUBGRAPH_CACHE_TTL_MS2);
|
|
21764
|
+
subgraphCache2.set(key, { promise, timer });
|
|
21765
|
+
return promise;
|
|
21766
|
+
}
|
|
21767
|
+
function dedupeWithDefault(numbers) {
|
|
21768
|
+
const set = new Set(numbers);
|
|
21769
|
+
set.add("0");
|
|
21770
|
+
return [...set];
|
|
21771
|
+
}
|
|
21772
|
+
async function fetchAccountNumbersFromSubgraph(chainId, owner) {
|
|
21773
|
+
const url = DOLOMITE_SUBGRAPH_URLS[chainId];
|
|
21774
|
+
if (!url) return ["0"];
|
|
21775
|
+
const query3 = `{
|
|
21776
|
+
marginAccounts(
|
|
21777
|
+
first: 1000
|
|
21778
|
+
where: { user: "${owner.toLowerCase()}", or: [{ hasSupplyValue: true }, { hasBorrowValue: true }] }
|
|
21779
|
+
) {
|
|
21780
|
+
accountNumber
|
|
21781
|
+
}
|
|
21782
|
+
}`;
|
|
21783
|
+
const controller = new AbortController();
|
|
21784
|
+
const timeout = setTimeout(() => controller.abort(), SUBGRAPH_TIMEOUT_MS2);
|
|
21785
|
+
try {
|
|
21786
|
+
const response = await fetch(url, {
|
|
21787
|
+
method: "POST",
|
|
21788
|
+
headers: { "Content-Type": "application/json" },
|
|
21789
|
+
body: JSON.stringify({ query: query3 }),
|
|
21790
|
+
signal: controller.signal
|
|
21791
|
+
});
|
|
21792
|
+
if (!response.ok) return ["0"];
|
|
21793
|
+
const data = await response.json();
|
|
21794
|
+
const accounts = data?.data?.marginAccounts;
|
|
21795
|
+
if (!accounts || accounts.length === 0) return ["0"];
|
|
21796
|
+
return accounts.map((a) => String(a.accountNumber));
|
|
21797
|
+
} finally {
|
|
21798
|
+
clearTimeout(timeout);
|
|
21799
|
+
}
|
|
21800
|
+
}
|
|
21801
|
+
var RESOLVED_STORE_TTL_MS2 = 6e4;
|
|
21802
|
+
var resolvedStore = /* @__PURE__ */ new Map();
|
|
21803
|
+
function getResolvedDolomiteAccountNumbers(chainId, account) {
|
|
21804
|
+
return resolvedStore.get(`${chainId}:${account.toLowerCase()}`)?.numbers;
|
|
21805
|
+
}
|
|
21806
|
+
function storeResolvedNumbers(chainId, account, numbers) {
|
|
21807
|
+
const key = `${chainId}:${account.toLowerCase()}`;
|
|
21808
|
+
const existing = resolvedStore.get(key);
|
|
21809
|
+
if (existing) clearTimeout(existing.timer);
|
|
21810
|
+
const timer = setTimeout(
|
|
21811
|
+
() => resolvedStore.delete(key),
|
|
21812
|
+
RESOLVED_STORE_TTL_MS2
|
|
21813
|
+
);
|
|
21814
|
+
resolvedStore.set(key, { numbers, timer });
|
|
21815
|
+
}
|
|
21816
|
+
var buildDolomiteUserCall = async (chainId, _lender, account, accountNumbers) => {
|
|
21817
|
+
const margin = dolomiteConfigs()?.[chainId]?.dolomiteMargin;
|
|
21818
|
+
if (!margin) return [];
|
|
21819
|
+
const numbers = accountNumbers ?? await fetchDolomiteAccountNumbers(chainId, account);
|
|
21820
|
+
storeResolvedNumbers(chainId, account, numbers);
|
|
21821
|
+
return numbers.map((number) => ({
|
|
21822
|
+
address: margin,
|
|
21823
|
+
name: "getAccountBalances",
|
|
21824
|
+
params: [{ owner: account, number }]
|
|
21825
|
+
}));
|
|
21826
|
+
};
|
|
21827
|
+
|
|
21399
21828
|
// src/lending/user-data/fetch-balances/prepare.ts
|
|
21400
21829
|
async function buildUserCall(chainId, lender, account, params) {
|
|
21401
21830
|
if (isAaveV4Type(lender)) return buildAaveV4UserCall(chainId, lender, account);
|
|
@@ -21418,6 +21847,8 @@ async function buildUserCall(chainId, lender, account, params) {
|
|
|
21418
21847
|
return buildFluidUserCall(chainId, lender, account);
|
|
21419
21848
|
if (isGearboxV3(lender))
|
|
21420
21849
|
return buildGearboxV3UserCall(chainId, lender, account);
|
|
21850
|
+
if (isDolomite(lender))
|
|
21851
|
+
return buildDolomiteUserCall(chainId, lender, account, params?.accountNumbers);
|
|
21421
21852
|
return [];
|
|
21422
21853
|
}
|
|
21423
21854
|
function organizeUserQueries(queries) {
|
|
@@ -23486,6 +23917,80 @@ var getGearboxV3UserDataConverter = (_lender, chainId, account, meta) => {
|
|
|
23486
23917
|
];
|
|
23487
23918
|
};
|
|
23488
23919
|
|
|
23920
|
+
// src/lending/user-data/dolomite/userCallParse.ts
|
|
23921
|
+
var getDolomiteUserDataConverter = (lender, chainId, account, metaMap) => {
|
|
23922
|
+
const numbers = getResolvedDolomiteAccountNumbers(chainId, account) ?? ["0"];
|
|
23923
|
+
const expectedNumberOfCalls = numbers.length;
|
|
23924
|
+
const emode = dolomiteEmode()?.[chainId];
|
|
23925
|
+
return [
|
|
23926
|
+
(_data) => {
|
|
23927
|
+
if (_data.length !== expectedNumberOfCalls) return void 0;
|
|
23928
|
+
const histData = {};
|
|
23929
|
+
const lendingPositions = {};
|
|
23930
|
+
const modes = {};
|
|
23931
|
+
_data.forEach((res, i) => {
|
|
23932
|
+
const id = numbers[i];
|
|
23933
|
+
histData[id] = { totalDebt24h: 0, totalDeposits24h: 0 };
|
|
23934
|
+
lendingPositions[id] = {};
|
|
23935
|
+
const marketIds = res?.[0 /* markets */] ?? [];
|
|
23936
|
+
const tokens = res?.[1 /* tokens */] ?? [];
|
|
23937
|
+
const weis = res?.[3 /* weis */] ?? [];
|
|
23938
|
+
modes[id] = resolveDolomiteMode(
|
|
23939
|
+
marketIds.map((m) => String(m)),
|
|
23940
|
+
emode
|
|
23941
|
+
);
|
|
23942
|
+
tokens.forEach((token, k) => {
|
|
23943
|
+
const wei = weis[k];
|
|
23944
|
+
if (!wei) return;
|
|
23945
|
+
const underlying = normalizeUnderlying3(token);
|
|
23946
|
+
const key = createMarketUid(chainId, lender, underlying);
|
|
23947
|
+
const meta = metaMap?.[key];
|
|
23948
|
+
if (!meta) return;
|
|
23949
|
+
const decimals = meta.asset?.decimals ?? 18;
|
|
23950
|
+
const amount = parseRawAmount(wei.value, decimals);
|
|
23951
|
+
const isSupply = wei.sign;
|
|
23952
|
+
const deposits = isSupply ? amount : "0";
|
|
23953
|
+
const debt = isSupply ? "0" : amount;
|
|
23954
|
+
const price2 = getDisplayPrice(meta);
|
|
23955
|
+
const oPrice = getOraclePrice(meta);
|
|
23956
|
+
const priceHist = meta?.price?.priceUsd24h ?? price2;
|
|
23957
|
+
histData[id].totalDeposits24h += Number(deposits) * priceHist;
|
|
23958
|
+
histData[id].totalDebt24h += Number(debt) * priceHist;
|
|
23959
|
+
lendingPositions[id][key] = {
|
|
23960
|
+
marketUid: key,
|
|
23961
|
+
underlying,
|
|
23962
|
+
deposits,
|
|
23963
|
+
debt,
|
|
23964
|
+
debtStable: "0",
|
|
23965
|
+
debtStableUSD: 0,
|
|
23966
|
+
depositsUSD: price2 * Number(deposits),
|
|
23967
|
+
debtUSD: price2 * Number(debt),
|
|
23968
|
+
depositsUSDOracle: oPrice * Number(deposits),
|
|
23969
|
+
debtStableUSDOracle: 0,
|
|
23970
|
+
debtUSDOracle: oPrice * Number(debt),
|
|
23971
|
+
collateralEnabled: true
|
|
23972
|
+
};
|
|
23973
|
+
});
|
|
23974
|
+
});
|
|
23975
|
+
const payload = {
|
|
23976
|
+
chainId,
|
|
23977
|
+
lendingPositions,
|
|
23978
|
+
modes,
|
|
23979
|
+
account
|
|
23980
|
+
};
|
|
23981
|
+
return createMultiAccountTypeUserState(payload, metaMap, histData);
|
|
23982
|
+
},
|
|
23983
|
+
expectedNumberOfCalls
|
|
23984
|
+
];
|
|
23985
|
+
};
|
|
23986
|
+
var WETH_BY_CHAIN = {
|
|
23987
|
+
// populated by the meta's native handling; kept as a hook. Default: identity.
|
|
23988
|
+
};
|
|
23989
|
+
function normalizeUnderlying3(token) {
|
|
23990
|
+
const lower = token.toLowerCase();
|
|
23991
|
+
return Object.values(WETH_BY_CHAIN).includes(lower) ? zeroAddress : lower;
|
|
23992
|
+
}
|
|
23993
|
+
|
|
23489
23994
|
// src/lending/user-data/fetch-balances/parse.ts
|
|
23490
23995
|
function getUserDataConverter(lender, chainId, account, params, meta) {
|
|
23491
23996
|
if (isAaveV4Type(lender))
|
|
@@ -23528,6 +24033,8 @@ function getUserDataConverter(lender, chainId, account, params, meta) {
|
|
|
23528
24033
|
return getFluidUserDataConverter(lender, chainId, account, meta);
|
|
23529
24034
|
if (isGearboxV3(lender))
|
|
23530
24035
|
return getGearboxV3UserDataConverter(lender, chainId, account, meta);
|
|
24036
|
+
if (isDolomite(lender))
|
|
24037
|
+
return getDolomiteUserDataConverter(lender, chainId, account, meta?.[lender]);
|
|
23531
24038
|
return getCompoundV2UserDataConverter(
|
|
23532
24039
|
lender,
|
|
23533
24040
|
chainId,
|
|
@@ -23663,9 +24170,9 @@ var MULTICALL_ADDRESS = {
|
|
|
23663
24170
|
// src/utils/multicall.ts
|
|
23664
24171
|
var { isArray } = lodash;
|
|
23665
24172
|
var maxRetries = 3;
|
|
23666
|
-
var multicallViemAbiArray = async (chainId, abi, calls,
|
|
24173
|
+
var multicallViemAbiArray = async (chainId, abi, calls, getEvmClient14, retry = true, providerId = 0, retries = maxRetries, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, logs = false) => {
|
|
23667
24174
|
try {
|
|
23668
|
-
const provider =
|
|
24175
|
+
const provider = getEvmClient14(chainId, providerId);
|
|
23669
24176
|
const abiIsArray = isArray(abi[0]);
|
|
23670
24177
|
const returnData = await provider.multicall({
|
|
23671
24178
|
allowFailure,
|
|
@@ -23691,7 +24198,7 @@ var multicallViemAbiArray = async (chainId, abi, calls, getEvmClient11, retry =
|
|
|
23691
24198
|
chainId,
|
|
23692
24199
|
abi,
|
|
23693
24200
|
calls,
|
|
23694
|
-
|
|
24201
|
+
getEvmClient14,
|
|
23695
24202
|
retry,
|
|
23696
24203
|
providerId,
|
|
23697
24204
|
retries,
|
|
@@ -28178,8 +28685,6 @@ var accountLensAbi = [
|
|
|
28178
28685
|
stateMutability: "view"
|
|
28179
28686
|
}
|
|
28180
28687
|
];
|
|
28181
|
-
|
|
28182
|
-
// src/lending/user-data/abis.ts
|
|
28183
28688
|
var getAbi2 = (lender) => {
|
|
28184
28689
|
if (isAaveV4Type(lender)) return [...AaveV4SpokeAbi];
|
|
28185
28690
|
if (isAaveV2Type(lender))
|
|
@@ -28212,6 +28717,7 @@ var getAbi2 = (lender) => {
|
|
|
28212
28717
|
if (isFluid(lender)) return [...FluidVaultResolverAbi];
|
|
28213
28718
|
if (isGearboxV3(lender))
|
|
28214
28719
|
return [...GearboxCreditAccountCompressorV310Abi];
|
|
28720
|
+
if (isDolomite(lender)) return [...DolomiteMarginAbi];
|
|
28215
28721
|
return [];
|
|
28216
28722
|
};
|
|
28217
28723
|
|
|
@@ -28315,7 +28821,7 @@ function unflattenLenderData(pools) {
|
|
|
28315
28821
|
}
|
|
28316
28822
|
return result;
|
|
28317
28823
|
}
|
|
28318
|
-
var getLenderUserDataResult = async (chainId, queriesRaw,
|
|
28824
|
+
var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient14, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, retries = 3, logs = false) => {
|
|
28319
28825
|
const queries = organizeUserQueries(queriesRaw);
|
|
28320
28826
|
const builtCalls = await Promise.all(
|
|
28321
28827
|
queries.map(async (query3) => {
|
|
@@ -28334,7 +28840,7 @@ var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient11, allowF
|
|
|
28334
28840
|
chainId,
|
|
28335
28841
|
calls.map((call) => call.abi),
|
|
28336
28842
|
calls.map((call) => call.call),
|
|
28337
|
-
|
|
28843
|
+
getEvmClient14,
|
|
28338
28844
|
true,
|
|
28339
28845
|
0,
|
|
28340
28846
|
retries,
|
|
@@ -31694,6 +32200,127 @@ var psxdcFetcher = {
|
|
|
31694
32200
|
return { psXDC: PRIME_STAKING_BASE_APY };
|
|
31695
32201
|
}
|
|
31696
32202
|
};
|
|
32203
|
+
var STCORE_KEY = "Liquid staked CORE::stCORE";
|
|
32204
|
+
var DUALCORE_KEY = "b14g dualCORE::DUALCORE";
|
|
32205
|
+
var SCORE_KEY = "StakedCore::SCORE";
|
|
32206
|
+
var YEAR_SECONDS6 = 365 * 24 * 60 * 60;
|
|
32207
|
+
var ONE_E184 = 10n ** 18n;
|
|
32208
|
+
var EARN = "0xf5fa1728babc3f8d2a617397fac2696c958c3409";
|
|
32209
|
+
var SCORE = "0xa20b3b97df3a02f9185175760300a06b4e0a2c05";
|
|
32210
|
+
var GET_EXCHANGE_RATES_ABI = [
|
|
32211
|
+
{
|
|
32212
|
+
name: "getExchangeRates",
|
|
32213
|
+
type: "function",
|
|
32214
|
+
stateMutability: "view",
|
|
32215
|
+
inputs: [{ type: "uint256", name: "count" }],
|
|
32216
|
+
outputs: [{ type: "uint256[]" }]
|
|
32217
|
+
}
|
|
32218
|
+
];
|
|
32219
|
+
var VIEW_U256 = (name) => [
|
|
32220
|
+
{
|
|
32221
|
+
name,
|
|
32222
|
+
type: "function",
|
|
32223
|
+
stateMutability: "view",
|
|
32224
|
+
inputs: [],
|
|
32225
|
+
outputs: [{ type: "uint256" }]
|
|
32226
|
+
}
|
|
32227
|
+
];
|
|
32228
|
+
var computeStCoreApr = async () => {
|
|
32229
|
+
for (let rpcId = 0; rpcId < 4; rpcId++) {
|
|
32230
|
+
try {
|
|
32231
|
+
const client = getEvmClient(Chain.CORE_BLOCKCHAIN_MAINNET, rpcId);
|
|
32232
|
+
const rates = await client.readContract({
|
|
32233
|
+
address: EARN,
|
|
32234
|
+
abi: GET_EXCHANGE_RATES_ABI,
|
|
32235
|
+
functionName: "getExchangeRates",
|
|
32236
|
+
args: [8n]
|
|
32237
|
+
});
|
|
32238
|
+
if (!rates || rates.length < 2) continue;
|
|
32239
|
+
const first = rates[0];
|
|
32240
|
+
const last = rates[rates.length - 1];
|
|
32241
|
+
const days = rates.length - 1;
|
|
32242
|
+
if (first <= 0n || last < first) continue;
|
|
32243
|
+
const growth = Number(last - first) / Number(first);
|
|
32244
|
+
const apr = growth * (YEAR_SECONDS6 / (days * 86400)) * 100;
|
|
32245
|
+
if (Number.isFinite(apr) && apr >= 0) return apr;
|
|
32246
|
+
} catch {
|
|
32247
|
+
}
|
|
32248
|
+
}
|
|
32249
|
+
throw new Error("stCORE APR: Earn.getExchangeRates unavailable");
|
|
32250
|
+
};
|
|
32251
|
+
var DUALCORE_LLAMA_POOL = "f183f1a4-5d17-4bfa-8270-32d861a13fd3";
|
|
32252
|
+
var fetchDualCoreApy = async () => {
|
|
32253
|
+
const res = await fetch(
|
|
32254
|
+
`https://yields.llama.fi/chart/${DUALCORE_LLAMA_POOL}`
|
|
32255
|
+
).then((r) => r.json());
|
|
32256
|
+
const series = res?.data ?? [];
|
|
32257
|
+
const latest = series[series.length - 1];
|
|
32258
|
+
const apy = Number(latest?.apy ?? latest?.apyBase);
|
|
32259
|
+
if (!Number.isFinite(apy) || apy < 0)
|
|
32260
|
+
throw new Error("dualCORE APY: bad DefiLlama value");
|
|
32261
|
+
return apy;
|
|
32262
|
+
};
|
|
32263
|
+
var computeScoreApr = async () => {
|
|
32264
|
+
const WINDOWS = [604800n, 259200n, 86400n];
|
|
32265
|
+
const rateAt = async (client, block) => {
|
|
32266
|
+
const opt = block !== void 0 ? { blockNumber: block } : {};
|
|
32267
|
+
const [staked, supply] = await Promise.all([
|
|
32268
|
+
client.readContract({
|
|
32269
|
+
address: SCORE,
|
|
32270
|
+
abi: VIEW_U256("totalStaked"),
|
|
32271
|
+
functionName: "totalStaked",
|
|
32272
|
+
...opt
|
|
32273
|
+
}),
|
|
32274
|
+
client.readContract({
|
|
32275
|
+
address: SCORE,
|
|
32276
|
+
abi: VIEW_U256("totalSupply"),
|
|
32277
|
+
functionName: "totalSupply",
|
|
32278
|
+
...opt
|
|
32279
|
+
})
|
|
32280
|
+
]);
|
|
32281
|
+
const sup = supply;
|
|
32282
|
+
if (sup <= 0n) return 0;
|
|
32283
|
+
return Number(staked * ONE_E184 / sup) / 1e18;
|
|
32284
|
+
};
|
|
32285
|
+
for (const window of WINDOWS) {
|
|
32286
|
+
for (let rpcId = 0; rpcId < 3; rpcId++) {
|
|
32287
|
+
try {
|
|
32288
|
+
const client = getEvmClient(Chain.CORE_BLOCKCHAIN_MAINNET, rpcId);
|
|
32289
|
+
const head = await client.getBlockNumber();
|
|
32290
|
+
if (head <= window) continue;
|
|
32291
|
+
const oldBlock = head - window;
|
|
32292
|
+
const [rNow, rOld, bNow, bOld] = await Promise.all([
|
|
32293
|
+
rateAt(client),
|
|
32294
|
+
rateAt(client, oldBlock),
|
|
32295
|
+
client.getBlock({ blockNumber: head }),
|
|
32296
|
+
client.getBlock({ blockNumber: oldBlock })
|
|
32297
|
+
]);
|
|
32298
|
+
const elapsed = Number(bNow.timestamp - bOld.timestamp);
|
|
32299
|
+
if (rOld <= 0 || rNow <= rOld || elapsed <= 0) continue;
|
|
32300
|
+
const apr = (rNow - rOld) / rOld * (YEAR_SECONDS6 / elapsed) * 100;
|
|
32301
|
+
if (Number.isFinite(apr) && apr > 0) return apr;
|
|
32302
|
+
} catch {
|
|
32303
|
+
}
|
|
32304
|
+
}
|
|
32305
|
+
}
|
|
32306
|
+
return 0;
|
|
32307
|
+
};
|
|
32308
|
+
var coreLstFetcher = {
|
|
32309
|
+
label: "CORE_LST",
|
|
32310
|
+
fetch: async () => {
|
|
32311
|
+
const [stcore, dualcore, score] = await Promise.allSettled([
|
|
32312
|
+
computeStCoreApr(),
|
|
32313
|
+
fetchDualCoreApy(),
|
|
32314
|
+
computeScoreApr()
|
|
32315
|
+
]);
|
|
32316
|
+
const result = {};
|
|
32317
|
+
if (stcore.status === "fulfilled") result[STCORE_KEY] = stcore.value;
|
|
32318
|
+
if (dualcore.status === "fulfilled") result[DUALCORE_KEY] = dualcore.value;
|
|
32319
|
+
if (score.status === "fulfilled" && score.value > 0)
|
|
32320
|
+
result[SCORE_KEY] = score.value;
|
|
32321
|
+
return result;
|
|
32322
|
+
}
|
|
32323
|
+
};
|
|
31697
32324
|
|
|
31698
32325
|
// src/yields/intrinsic/index.ts
|
|
31699
32326
|
async function fetchIntrinsicYields() {
|
|
@@ -31762,7 +32389,8 @@ async function fetchIntrinsicYields() {
|
|
|
31762
32389
|
ibgtFetcher,
|
|
31763
32390
|
beraEthFetcher,
|
|
31764
32391
|
lbgtFetcher,
|
|
31765
|
-
psxdcFetcher
|
|
32392
|
+
psxdcFetcher,
|
|
32393
|
+
coreLstFetcher
|
|
31766
32394
|
];
|
|
31767
32395
|
const results = await Promise.all([
|
|
31768
32396
|
wstethPromise,
|
|
@@ -33329,7 +33957,7 @@ var siloV3Fetcher = {
|
|
|
33329
33957
|
getAbi: getSiloV3Abi
|
|
33330
33958
|
};
|
|
33331
33959
|
var FLUID_EEE_LOWER3 = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";
|
|
33332
|
-
var
|
|
33960
|
+
var normalizeUnderlying4 = (addr) => addr === FLUID_EEE_LOWER3 ? zeroAddress : addr;
|
|
33333
33961
|
function priceColInDebt(raw, colDec, debtDec) {
|
|
33334
33962
|
return formatMorphoPrice(raw, debtDec, colDec + 9);
|
|
33335
33963
|
}
|
|
@@ -33366,8 +33994,8 @@ function parseFluidResults(data, _meta, context) {
|
|
|
33366
33994
|
const rawCol = (constants.supplyToken?.token0 ?? constants.supplyToken ?? "").toString().toLowerCase();
|
|
33367
33995
|
const rawLoan = (constants.borrowToken?.token0 ?? constants.borrowToken ?? "").toString().toLowerCase();
|
|
33368
33996
|
if (!rawCol || !rawLoan) continue;
|
|
33369
|
-
const collateral =
|
|
33370
|
-
const loan =
|
|
33997
|
+
const collateral = normalizeUnderlying4(rawCol);
|
|
33998
|
+
const loan = normalizeUnderlying4(rawLoan);
|
|
33371
33999
|
const colDec = tokenList?.[collateral]?.decimals ?? 18;
|
|
33372
34000
|
const loanDec = tokenList?.[loan]?.decimals ?? 18;
|
|
33373
34001
|
const rawPrice = configs.oraclePriceOperate?.toString() ?? "0";
|
|
@@ -33483,6 +34111,56 @@ var gearboxV3Fetcher = {
|
|
|
33483
34111
|
parse: parseGearboxV3Results,
|
|
33484
34112
|
getAbi: getGearboxV3Abi
|
|
33485
34113
|
};
|
|
34114
|
+
var LENDER2 = "DOLOMITE";
|
|
34115
|
+
function getDolomiteCalls(chainId) {
|
|
34116
|
+
const cfg = dolomiteConfigs()?.[chainId];
|
|
34117
|
+
const margin = cfg?.dolomiteMargin;
|
|
34118
|
+
const marketsMap = cfg?.markets;
|
|
34119
|
+
if (!margin || !marketsMap) return [];
|
|
34120
|
+
const markets = Object.entries(marketsMap).map(([marketId, token]) => ({
|
|
34121
|
+
marketId,
|
|
34122
|
+
token: String(token).toLowerCase()
|
|
34123
|
+
}));
|
|
34124
|
+
if (markets.length === 0) return [];
|
|
34125
|
+
const calls = markets.map(({ marketId }) => ({
|
|
34126
|
+
address: margin,
|
|
34127
|
+
name: "getMarketPrice",
|
|
34128
|
+
params: [marketId]
|
|
34129
|
+
}));
|
|
34130
|
+
return [{ calls, meta: { markets }, lender: LENDER2 }];
|
|
34131
|
+
}
|
|
34132
|
+
function parseDolomiteResults(data, meta, context) {
|
|
34133
|
+
const { chainId, tokenList } = context;
|
|
34134
|
+
const entries = [];
|
|
34135
|
+
meta.markets.forEach((mkt, i) => {
|
|
34136
|
+
const raw = data[i];
|
|
34137
|
+
if (raw === void 0 || raw === "0x") return;
|
|
34138
|
+
const asset = mkt.token;
|
|
34139
|
+
const decimals = tokenList?.[asset]?.decimals ?? 18;
|
|
34140
|
+
try {
|
|
34141
|
+
const value = BigInt((raw?.value ?? raw).toString());
|
|
34142
|
+
const priceUSD = Number(formatUnits(value, 36 - decimals));
|
|
34143
|
+
if (!isFinite(priceUSD) || priceUSD === 0) return;
|
|
34144
|
+
entries.push({
|
|
34145
|
+
asset,
|
|
34146
|
+
price: priceUSD,
|
|
34147
|
+
priceUSD,
|
|
34148
|
+
marketUid: createMarketUid(chainId, LENDER2, asset),
|
|
34149
|
+
targetLender: LENDER2
|
|
34150
|
+
});
|
|
34151
|
+
} catch {
|
|
34152
|
+
}
|
|
34153
|
+
});
|
|
34154
|
+
return entries;
|
|
34155
|
+
}
|
|
34156
|
+
function getDolomiteAbi() {
|
|
34157
|
+
return DolomiteMarginAbi;
|
|
34158
|
+
}
|
|
34159
|
+
var dolomiteFetcher = {
|
|
34160
|
+
getCalls: getDolomiteCalls,
|
|
34161
|
+
parse: parseDolomiteResults,
|
|
34162
|
+
getAbi: getDolomiteAbi
|
|
34163
|
+
};
|
|
33486
34164
|
|
|
33487
34165
|
// src/prices/oracle-prices/fetchers/siloV2Graphql.ts
|
|
33488
34166
|
async function fetchSiloV2GraphQLMarkets(chainId) {
|
|
@@ -34007,6 +34685,11 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
34007
34685
|
() => gearboxV3Fetcher.getCalls(chainId),
|
|
34008
34686
|
getCallsErrors
|
|
34009
34687
|
) : [];
|
|
34688
|
+
const dolomiteResults = isActive("dolomite") ? safeGetCalls(
|
|
34689
|
+
"dolomite",
|
|
34690
|
+
() => dolomiteFetcher.getCalls(chainId),
|
|
34691
|
+
getCallsErrors
|
|
34692
|
+
) : [];
|
|
34010
34693
|
const aaveGroup = buildGroup(
|
|
34011
34694
|
"aave",
|
|
34012
34695
|
aaveResults,
|
|
@@ -34073,6 +34756,12 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
34073
34756
|
gearboxV3Fetcher.parse,
|
|
34074
34757
|
getGearboxV3Abi()
|
|
34075
34758
|
);
|
|
34759
|
+
const dolomiteGroup = buildGroup(
|
|
34760
|
+
"dolomite",
|
|
34761
|
+
dolomiteResults,
|
|
34762
|
+
dolomiteFetcher.parse,
|
|
34763
|
+
getDolomiteAbi()
|
|
34764
|
+
);
|
|
34076
34765
|
const allGroups = [
|
|
34077
34766
|
aaveGroup,
|
|
34078
34767
|
compoundV2Group,
|
|
@@ -34084,7 +34773,8 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
34084
34773
|
siloV2Group,
|
|
34085
34774
|
siloV3Group,
|
|
34086
34775
|
fluidGroup,
|
|
34087
|
-
gearboxV3Group
|
|
34776
|
+
gearboxV3Group,
|
|
34777
|
+
dolomiteGroup
|
|
34088
34778
|
];
|
|
34089
34779
|
const totalCalls = allGroups.reduce((s, g) => s + g.calls.length, 0);
|
|
34090
34780
|
if (totalCalls === 0 && !isActive("morpho")) {
|
|
@@ -34114,6 +34804,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
34114
34804
|
aaveV4Data,
|
|
34115
34805
|
fluidData,
|
|
34116
34806
|
gearboxV3Data,
|
|
34807
|
+
dolomiteData,
|
|
34117
34808
|
morphoGqlEntries,
|
|
34118
34809
|
siloV2GqlEntries,
|
|
34119
34810
|
siloV3GqlEntries
|
|
@@ -34182,6 +34873,14 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
34182
34873
|
allowFailure,
|
|
34183
34874
|
rpcOverrides
|
|
34184
34875
|
),
|
|
34876
|
+
executeGroup(
|
|
34877
|
+
dolomiteGroup,
|
|
34878
|
+
chainId,
|
|
34879
|
+
chainBatchSize,
|
|
34880
|
+
retries,
|
|
34881
|
+
allowFailure,
|
|
34882
|
+
rpcOverrides
|
|
34883
|
+
),
|
|
34185
34884
|
morphoGqlPromise,
|
|
34186
34885
|
siloV2GqlPromise,
|
|
34187
34886
|
siloV3GqlPromise
|
|
@@ -34231,6 +34930,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
34231
34930
|
{ group: aaveV4Group, data: aaveV4Data },
|
|
34232
34931
|
{ group: fluidGroup, data: fluidData },
|
|
34233
34932
|
{ group: gearboxV3Group, data: gearboxV3Data },
|
|
34933
|
+
{ group: dolomiteGroup, data: dolomiteData },
|
|
34234
34934
|
...siloV2GqlEntries != null ? [] : [{ group: siloV2Group, data: siloV2Data }],
|
|
34235
34935
|
...siloV3GqlEntries != null ? [] : [{ group: siloV3Group, data: siloV3Data }],
|
|
34236
34936
|
// In hybrid mode the on-chain multicall ran too — surface its errors.
|
|
@@ -34320,6 +35020,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
34320
35020
|
);
|
|
34321
35021
|
parseTrackers(fluidGroup, fluidData.results, false);
|
|
34322
35022
|
parseTrackers(gearboxV3Group, gearboxV3Data.results, false);
|
|
35023
|
+
parseTrackers(dolomiteGroup, dolomiteData.results);
|
|
34323
35024
|
if (siloV2GqlEntries != null) {
|
|
34324
35025
|
const diag2 = {
|
|
34325
35026
|
lender: "SILO_V2 (GraphQL)",
|
|
@@ -34925,7 +35626,7 @@ var composeVaultDisplayName = (brand, curatorName, asset, fallbackName) => {
|
|
|
34925
35626
|
|
|
34926
35627
|
// src/vaults/fluid/publicCallParse.ts
|
|
34927
35628
|
var FLUID_EEE_LOWER4 = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";
|
|
34928
|
-
var
|
|
35629
|
+
var normalizeUnderlying5 = (addr) => addr === FLUID_EEE_LOWER4 ? zeroAddress : addr;
|
|
34929
35630
|
var FLUID_RATE_SCALE2 = 100;
|
|
34930
35631
|
var scaleFluidRate2 = (raw) => {
|
|
34931
35632
|
if (raw === void 0 || raw === null) return 0;
|
|
@@ -34947,7 +35648,7 @@ function parseFTokens(fTokens, chainId, prices, tokenList) {
|
|
|
34947
35648
|
for (const ft of fTokens) {
|
|
34948
35649
|
const rawAsset = (ft.asset ?? "").toString().toLowerCase();
|
|
34949
35650
|
if (!rawAsset) continue;
|
|
34950
|
-
const underlying =
|
|
35651
|
+
const underlying = normalizeUnderlying5(rawAsset);
|
|
34951
35652
|
const assetMeta = tokenList[underlying];
|
|
34952
35653
|
const decimals = Number(ft.decimals ?? assetMeta?.decimals ?? 18);
|
|
34953
35654
|
const totalAssetsFormatted = Number(
|
|
@@ -35032,7 +35733,7 @@ var buildGearboxV3PoolsCall = (chainId) => {
|
|
|
35032
35733
|
|
|
35033
35734
|
// src/vaults/gearbox/publicCallParse.ts
|
|
35034
35735
|
var WETH_MAINNET = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2";
|
|
35035
|
-
var
|
|
35736
|
+
var normalizeUnderlying6 = (addr, chainId) => {
|
|
35036
35737
|
const lower = addr.toLowerCase();
|
|
35037
35738
|
if (chainId === "1" && lower === WETH_MAINNET) return zeroAddress;
|
|
35038
35739
|
return lower;
|
|
@@ -35063,7 +35764,7 @@ function parseMarkets(markets, chainId, prices, tokenList) {
|
|
|
35063
35764
|
const rawAddress = (pool.baseParams?.addr ?? "").toString().toLowerCase();
|
|
35064
35765
|
const rawUnderlying = (pool.underlying ?? "").toString().toLowerCase();
|
|
35065
35766
|
if (!rawAddress || !rawUnderlying) continue;
|
|
35066
|
-
const underlying =
|
|
35767
|
+
const underlying = normalizeUnderlying6(rawUnderlying, chainId);
|
|
35067
35768
|
const assetMeta = tokenList[underlying];
|
|
35068
35769
|
const decimals = Number(assetMeta?.decimals ?? pool.decimals ?? 18);
|
|
35069
35770
|
const totalAssetsRaw = pool.expectedLiquidity?.toString() ?? "0";
|
|
@@ -36061,7 +36762,7 @@ var fetchEulerEarnVaults = async (chainId, prices = {}, tokenList = {}) => {
|
|
|
36061
36762
|
var CHAIN_ID4 = "1";
|
|
36062
36763
|
var SWBTC = "0x8db2350d78abc13f5673a411d4700bcf87864dde";
|
|
36063
36764
|
var ONE_E8 = 10n ** 8n;
|
|
36064
|
-
var
|
|
36765
|
+
var YEAR_SECONDS7 = 365 * 24 * 60 * 60;
|
|
36065
36766
|
var WINDOW_SECONDS4 = 7 * 24 * 60 * 60;
|
|
36066
36767
|
var BLOCK_TIME_SECONDS3 = 12;
|
|
36067
36768
|
var WINDOW_BLOCKS3 = BigInt(Math.floor(WINDOW_SECONDS4 / BLOCK_TIME_SECONDS3));
|
|
@@ -36103,7 +36804,7 @@ var computeApr4 = async () => {
|
|
|
36103
36804
|
const elapsed = Number(headBlock.timestamp - thenBlock.timestamp);
|
|
36104
36805
|
if (elapsed <= 0) throw new Error(`bad elapsed ${elapsed}`);
|
|
36105
36806
|
const growth = Number(rateNow) / Number(rateThen) - 1;
|
|
36106
|
-
const apr = growth * (
|
|
36807
|
+
const apr = growth * (YEAR_SECONDS7 / elapsed) * 100;
|
|
36107
36808
|
if (!Number.isFinite(apr) || apr < 0) throw new Error(`bad apr ${apr}`);
|
|
36108
36809
|
return apr;
|
|
36109
36810
|
} catch (e) {
|
|
@@ -36126,8 +36827,8 @@ var swBtcFetcher = {
|
|
|
36126
36827
|
};
|
|
36127
36828
|
var CHAIN_ID5 = "42220";
|
|
36128
36829
|
var MANAGER = "0x0239b96d10a434a56cc9e09383077a0490cf9398";
|
|
36129
|
-
var
|
|
36130
|
-
var
|
|
36830
|
+
var ONE_E185 = 10n ** 18n;
|
|
36831
|
+
var YEAR_SECONDS8 = 365 * 24 * 60 * 60;
|
|
36131
36832
|
var WINDOW_SECONDS5 = 7 * 24 * 60 * 60;
|
|
36132
36833
|
var BLOCK_TIME_SECONDS4 = 1;
|
|
36133
36834
|
var WINDOW_BLOCKS4 = BigInt(Math.floor(WINDOW_SECONDS5 / BLOCK_TIME_SECONDS4));
|
|
@@ -36145,7 +36846,7 @@ var readRateAt4 = (client, blockNumber) => client.readContract({
|
|
|
36145
36846
|
address: MANAGER,
|
|
36146
36847
|
abi: TO_CELO_ABI,
|
|
36147
36848
|
functionName: "toCelo",
|
|
36148
|
-
args: [
|
|
36849
|
+
args: [ONE_E185],
|
|
36149
36850
|
...blockNumber !== void 0 ? { blockNumber } : {}
|
|
36150
36851
|
});
|
|
36151
36852
|
var computeApr5 = async () => {
|
|
@@ -36161,7 +36862,7 @@ var computeApr5 = async () => {
|
|
|
36161
36862
|
client.getBlock({ blockNumber: head }),
|
|
36162
36863
|
client.getBlock({ blockNumber: pastBlock })
|
|
36163
36864
|
]);
|
|
36164
|
-
if (rateNow <
|
|
36865
|
+
if (rateNow < ONE_E185 || rateThen < ONE_E185 || rateNow < rateThen) {
|
|
36165
36866
|
throw new Error(
|
|
36166
36867
|
`non-archival or invalid rates (now=${rateNow}, then=${rateThen})`
|
|
36167
36868
|
);
|
|
@@ -36169,7 +36870,7 @@ var computeApr5 = async () => {
|
|
|
36169
36870
|
const elapsed = Number(headBlock.timestamp - thenBlock.timestamp);
|
|
36170
36871
|
if (elapsed <= 0) throw new Error("non-positive elapsed window");
|
|
36171
36872
|
const growth = Number(rateNow - rateThen) / Number(rateThen);
|
|
36172
|
-
const apr = growth * (
|
|
36873
|
+
const apr = growth * (YEAR_SECONDS8 / elapsed) * 100;
|
|
36173
36874
|
if (!Number.isFinite(apr) || apr < 0) throw new Error(`bad apr ${apr}`);
|
|
36174
36875
|
return apr;
|
|
36175
36876
|
} catch (e) {
|
|
@@ -36200,6 +36901,69 @@ var lombardLbtcFetcher = {
|
|
|
36200
36901
|
return { LBTC: Number.isFinite(frac) ? frac * 100 : 0 };
|
|
36201
36902
|
}
|
|
36202
36903
|
};
|
|
36904
|
+
var CHAIN_ID6 = "1284";
|
|
36905
|
+
var STDOT = "0xbc7e02c4178a7df7d3e564323a5c359dc96c4db4";
|
|
36906
|
+
var ONE_E186 = 10n ** 18n;
|
|
36907
|
+
var YEAR_SECONDS9 = 365 * 24 * 60 * 60;
|
|
36908
|
+
var WINDOW_SECONDS6 = 180 * 24 * 60 * 60;
|
|
36909
|
+
var BLOCK_TIME_SECONDS5 = 6;
|
|
36910
|
+
var WINDOW_BLOCKS5 = BigInt(Math.floor(WINDOW_SECONDS6 / BLOCK_TIME_SECONDS5));
|
|
36911
|
+
var MAX_RPC_TRIES5 = 5;
|
|
36912
|
+
var POOLED_BY_SHARES_ABI = [
|
|
36913
|
+
{
|
|
36914
|
+
name: "getPooledTokenByShares",
|
|
36915
|
+
type: "function",
|
|
36916
|
+
stateMutability: "view",
|
|
36917
|
+
inputs: [{ type: "uint256", name: "_sharesAmount" }],
|
|
36918
|
+
outputs: [{ type: "uint256" }]
|
|
36919
|
+
}
|
|
36920
|
+
];
|
|
36921
|
+
var readRateAt5 = (client, blockNumber) => client.readContract({
|
|
36922
|
+
address: STDOT,
|
|
36923
|
+
abi: POOLED_BY_SHARES_ABI,
|
|
36924
|
+
functionName: "getPooledTokenByShares",
|
|
36925
|
+
args: [ONE_E186],
|
|
36926
|
+
...blockNumber !== void 0 ? { blockNumber } : {}
|
|
36927
|
+
});
|
|
36928
|
+
var computeApr6 = async () => {
|
|
36929
|
+
let lastErr;
|
|
36930
|
+
for (let rpcId = 0; rpcId < MAX_RPC_TRIES5; rpcId++) {
|
|
36931
|
+
try {
|
|
36932
|
+
const client = getEvmClient(CHAIN_ID6, rpcId);
|
|
36933
|
+
const head = await client.getBlockNumber();
|
|
36934
|
+
const pastBlock = head > WINDOW_BLOCKS5 ? head - WINDOW_BLOCKS5 : 0n;
|
|
36935
|
+
const [rateNow, rateThen, headBlock, thenBlock] = await Promise.all([
|
|
36936
|
+
readRateAt5(client),
|
|
36937
|
+
readRateAt5(client, pastBlock),
|
|
36938
|
+
client.getBlock({ blockNumber: head }),
|
|
36939
|
+
client.getBlock({ blockNumber: pastBlock })
|
|
36940
|
+
]);
|
|
36941
|
+
if (rateNow < ONE_E186 || rateThen < ONE_E186 || rateNow < rateThen) {
|
|
36942
|
+
throw new Error(
|
|
36943
|
+
`non-archival or invalid rates (now=${rateNow}, then=${rateThen})`
|
|
36944
|
+
);
|
|
36945
|
+
}
|
|
36946
|
+
const elapsed = Number(headBlock.timestamp - thenBlock.timestamp);
|
|
36947
|
+
if (elapsed <= 0) throw new Error("non-positive elapsed window");
|
|
36948
|
+
const growth = Number(rateNow - rateThen) / Number(rateThen);
|
|
36949
|
+
const apr = growth * (YEAR_SECONDS9 / elapsed) * 100;
|
|
36950
|
+
if (!Number.isFinite(apr) || apr < 0) throw new Error(`bad apr ${apr}`);
|
|
36951
|
+
return apr;
|
|
36952
|
+
} catch (e) {
|
|
36953
|
+
lastErr = e;
|
|
36954
|
+
}
|
|
36955
|
+
}
|
|
36956
|
+
throw new Error(
|
|
36957
|
+
`stDOT APR: no archival Moonbeam RPC returned valid historical state (${String(lastErr)})`
|
|
36958
|
+
);
|
|
36959
|
+
};
|
|
36960
|
+
var stDotFetcher = {
|
|
36961
|
+
label: "STDOT",
|
|
36962
|
+
fetch: async () => {
|
|
36963
|
+
const apr = await computeApr6();
|
|
36964
|
+
return { STDOT: apr };
|
|
36965
|
+
}
|
|
36966
|
+
};
|
|
36203
36967
|
|
|
36204
36968
|
// src/yields/intrinsic/fetchers/solv.ts
|
|
36205
36969
|
var BTCPLUS_STATS_URL = "https://api.solvprotocol.org/btcplus/stats";
|
|
@@ -36682,6 +37446,32 @@ var LST_REGISTRY = {
|
|
|
36682
37446
|
mintInputAsset: "0x004e9c3ef86bc1ca1f0bb5c7662861ee93350568",
|
|
36683
37447
|
withdrawalMode: "queued"
|
|
36684
37448
|
},
|
|
37449
|
+
{
|
|
37450
|
+
// PumpBTC pumpBTC — flat 1:1 (no on-chain rate; verified
|
|
37451
|
+
// 2026-06-03 — `asset()`/`getRate()`/`exchangeRate()`/
|
|
37452
|
+
// `convertToAssets()`/`pricePerShare()` all revert, exactly like
|
|
37453
|
+
// uniBTC/brBTC). Babylon BTC liquid staking; yield is off-chain
|
|
37454
|
+
// (points / BABY airdrops), no public APR feed → no yieldFetcher.
|
|
37455
|
+
// Minted 1:1 from WBTC via the WBTC `PumpStaking` proxy
|
|
37456
|
+
// `stake(amount)` (0x1fcca65f…, `pumpBTC()`==this token verified).
|
|
37457
|
+
// Separate per-collateral staking contracts exist
|
|
37458
|
+
// (FBTC 0x3d9bcca8…, cbBTC 0xc0c687a1…). Exit is a queue:
|
|
37459
|
+
// `unstakeRequest`→`claimSlot/claimAll` (~10-day T+10) or
|
|
37460
|
+
// `unstakeInstant` (currently 2% fee) — withdrawal reader deferred.
|
|
37461
|
+
address: "0xf469fbd2abcd6b9de8e169d128226c0fc90a012e",
|
|
37462
|
+
underlying: "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599",
|
|
37463
|
+
symbol: "pumpBTC",
|
|
37464
|
+
brand: "PumpBTC",
|
|
37465
|
+
decimals: 8,
|
|
37466
|
+
reader: "offChain",
|
|
37467
|
+
isErc4626: false,
|
|
37468
|
+
isRebasing: false,
|
|
37469
|
+
isMintable: true,
|
|
37470
|
+
isNativeUnderlying: false,
|
|
37471
|
+
mintContract: "0x1fcca65fb6ae3b2758b9b2b394cb227eae404e1e",
|
|
37472
|
+
mintInputAsset: "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599",
|
|
37473
|
+
withdrawalMode: "queued"
|
|
37474
|
+
},
|
|
36685
37475
|
{
|
|
36686
37476
|
// Solv SolvBTC — 1:1 BTC reserve token (18-dec, no direct yield).
|
|
36687
37477
|
// The base/mint input for xSolvBTC. Mint/redeem via SolvBTCRouter
|
|
@@ -37259,6 +38049,141 @@ var LST_REGISTRY = {
|
|
|
37259
38049
|
yieldFetcher: psxdcFetcher,
|
|
37260
38050
|
yieldKey: "psXDC"
|
|
37261
38051
|
}
|
|
38052
|
+
],
|
|
38053
|
+
"1116": [
|
|
38054
|
+
{
|
|
38055
|
+
// Core DAO stCORE — official liquid staking. The rate getter lives
|
|
38056
|
+
// on the `Earn` contract (`stCORE.earn()`), not the token:
|
|
38057
|
+
// `getCurrentExchangeRate()` is 1e6-scaled CORE-per-stCORE. Mint via
|
|
38058
|
+
// `Earn.mint(validator)` (native CORE); exit via `redeem` → `withdraw`
|
|
38059
|
+
// (queued — Core round-based unbond).
|
|
38060
|
+
address: "0xb3a8f0f0da9ffc65318aa39e55079796093029ad",
|
|
38061
|
+
underlying: "0x0000000000000000000000000000000000000000",
|
|
38062
|
+
symbol: "stCORE",
|
|
38063
|
+
brand: "Core",
|
|
38064
|
+
decimals: 18,
|
|
38065
|
+
reader: "coreEarnRate",
|
|
38066
|
+
isErc4626: false,
|
|
38067
|
+
isRebasing: false,
|
|
38068
|
+
isMintable: true,
|
|
38069
|
+
isNativeUnderlying: true,
|
|
38070
|
+
mintContract: "0xf5fa1728babc3f8d2a617397fac2696c958c3409",
|
|
38071
|
+
mintInputAsset: "native",
|
|
38072
|
+
withdrawalMode: "queued",
|
|
38073
|
+
yieldFetcher: coreLstFetcher,
|
|
38074
|
+
yieldKey: "Liquid staked CORE::stCORE",
|
|
38075
|
+
readerExtras: {
|
|
38076
|
+
coreEarn: "0xf5fa1728babc3f8d2a617397fac2696c958c3409"
|
|
38077
|
+
}
|
|
38078
|
+
},
|
|
38079
|
+
{
|
|
38080
|
+
// b14g dualCORE — liquid dual-staking (CORE matched with staked BTC).
|
|
38081
|
+
// Value-accruing share token; backing CORE is `coreVault.totalStaked()`
|
|
38082
|
+
// (`dualCORE.coreVault()`) over the share supply. Deposit via
|
|
38083
|
+
// `coreVault.stake()` (native CORE); exit via `unbond(amount, instant)`
|
|
38084
|
+
// — 1-day unbond (0% fee) or instant (fee).
|
|
38085
|
+
address: "0xc5555ea27e63cd89f8b227dece2a3916800c0f4f",
|
|
38086
|
+
underlying: "0x0000000000000000000000000000000000000000",
|
|
38087
|
+
symbol: "dualCORE",
|
|
38088
|
+
brand: "b14g",
|
|
38089
|
+
decimals: 18,
|
|
38090
|
+
reader: "coreStakedRatio",
|
|
38091
|
+
isErc4626: false,
|
|
38092
|
+
isRebasing: false,
|
|
38093
|
+
isMintable: true,
|
|
38094
|
+
isNativeUnderlying: true,
|
|
38095
|
+
mintContract: "0xee21ab613d30330823d35cf91a84ce964808b83f",
|
|
38096
|
+
mintInputAsset: "native",
|
|
38097
|
+
withdrawalMode: "fee-or-queued",
|
|
38098
|
+
yieldFetcher: coreLstFetcher,
|
|
38099
|
+
yieldKey: "b14g dualCORE::DUALCORE",
|
|
38100
|
+
readerExtras: {
|
|
38101
|
+
coreStakeContract: "0xee21ab613d30330823d35cf91a84ce964808b83f"
|
|
38102
|
+
}
|
|
38103
|
+
},
|
|
38104
|
+
{
|
|
38105
|
+
// StakedCore SCORE — small liquid staking token that is its own
|
|
38106
|
+
// staking contract: `totalStaked()/totalSupply()` is the rate. Mint
|
|
38107
|
+
// via `deposit(validator)` (native CORE); exit via `withdraw(amount)`.
|
|
38108
|
+
address: "0xa20b3b97df3a02f9185175760300a06b4e0a2c05",
|
|
38109
|
+
underlying: "0x0000000000000000000000000000000000000000",
|
|
38110
|
+
symbol: "SCORE",
|
|
38111
|
+
brand: "StakedCore",
|
|
38112
|
+
decimals: 18,
|
|
38113
|
+
reader: "coreStakedRatio",
|
|
38114
|
+
isErc4626: false,
|
|
38115
|
+
isRebasing: false,
|
|
38116
|
+
isMintable: true,
|
|
38117
|
+
isNativeUnderlying: true,
|
|
38118
|
+
mintContract: "0xa20b3b97df3a02f9185175760300a06b4e0a2c05",
|
|
38119
|
+
mintInputAsset: "native",
|
|
38120
|
+
withdrawalMode: "queued",
|
|
38121
|
+
yieldFetcher: coreLstFetcher,
|
|
38122
|
+
yieldKey: "StakedCore::SCORE"
|
|
38123
|
+
},
|
|
38124
|
+
{
|
|
38125
|
+
// PumpBTC pumpBTC on Core — the BTC LST (8-dec), distinct from the
|
|
38126
|
+
// native-CORE LSTs above. Flat 1:1 (verified on-chain 2026-06-03:
|
|
38127
|
+
// `asset()`/`getRate()` revert), same as Ethereum pumpBTC. Here it
|
|
38128
|
+
// is a **bridged** token — there is no local `PumpStaking`
|
|
38129
|
+
// (canonical mint is on Ethereum/BNB; the on-chain minters are
|
|
38130
|
+
// small bridge proxies, not the staking interface, and supply is
|
|
38131
|
+
// negligible), so it is non-mintable on Core and exits via DEX.
|
|
38132
|
+
// `underlying` is SolvBTC.CORE (0x9410…f2aa) as the BTC price
|
|
38133
|
+
// reference (no plain WBTC exists on Core). Off-chain yield (points)
|
|
38134
|
+
// → no yieldFetcher.
|
|
38135
|
+
address: "0x5a2aa871954ebdf89b1547e75d032598356caad5",
|
|
38136
|
+
underlying: "0x9410e8052bc661041e5cb27fdf7d9e9e842af2aa",
|
|
38137
|
+
symbol: "pumpBTC",
|
|
38138
|
+
brand: "PumpBTC",
|
|
38139
|
+
decimals: 8,
|
|
38140
|
+
reader: "offChain",
|
|
38141
|
+
isErc4626: false,
|
|
38142
|
+
isRebasing: false,
|
|
38143
|
+
isMintable: false,
|
|
38144
|
+
isNativeUnderlying: false,
|
|
38145
|
+
withdrawalMode: "dex-only"
|
|
38146
|
+
}
|
|
38147
|
+
],
|
|
38148
|
+
"1284": [
|
|
38149
|
+
{
|
|
38150
|
+
// StellaSwap stDOT (Moonbeam) — liquid-staked DOT, built on the
|
|
38151
|
+
// lido-dot-ksm architecture that StellaSwap operates. Non-rebasing,
|
|
38152
|
+
// value-accruing: `totalSupply()` is shares and the rate comes from
|
|
38153
|
+
// `getPooledTokenByShares(1e18)` (1e18-scaled DOT-per-share, verified
|
|
38154
|
+
// on-chain 2026-06-04 ≈ 1.3413). `getTotalPooledToken()` is total
|
|
38155
|
+
// pooled DOT. Underlying is xcDOT (the XC-20 DOT, 10-dec). Mint by
|
|
38156
|
+
// approving xcDOT then `deposit(amount)` on the token (proxy impl
|
|
38157
|
+
// `0x0d54…efd3`). Exit: `redeem(amount)` → ~28-day Polkadot unbond →
|
|
38158
|
+
// `claimUnbonded()` (`getUnbonded(holder)` tracks waiting/unbonded);
|
|
38159
|
+
// instant exit only via the Pulsar V3 pool. `getCurrentAPY()` is not
|
|
38160
|
+
// exposed on-chain and there is no public APR API → no yieldFetcher
|
|
38161
|
+
// yet (APR best derived from an on-chain rate-delta like stCELO).
|
|
38162
|
+
// NB: a legacy Lido rebasing stDOT (`0xfa36…a108`, "KSM"-named getters)
|
|
38163
|
+
// also exists — this `0xbc7e…4db4` is the StellaSwap one.
|
|
38164
|
+
address: "0xbc7e02c4178a7df7d3e564323a5c359dc96c4db4",
|
|
38165
|
+
underlying: "0xffffffff1fcacbd218edc0eba20fc2308c778080",
|
|
38166
|
+
symbol: "stDOT",
|
|
38167
|
+
brand: "StellaSwap",
|
|
38168
|
+
decimals: 10,
|
|
38169
|
+
reader: "stellaStDot",
|
|
38170
|
+
isErc4626: false,
|
|
38171
|
+
isRebasing: false,
|
|
38172
|
+
isMintable: true,
|
|
38173
|
+
isNativeUnderlying: false,
|
|
38174
|
+
mintContract: "0xbc7e02c4178a7df7d3e564323a5c359dc96c4db4",
|
|
38175
|
+
mintInputAsset: "0xffffffff1fcacbd218edc0eba20fc2308c778080",
|
|
38176
|
+
withdrawalMode: "fixed-cooldown",
|
|
38177
|
+
// Polkadot unbonding is 28 eras (~28 days).
|
|
38178
|
+
withdrawalCooldownSeconds: 28 * 86400,
|
|
38179
|
+
// No on-chain `getCurrentAPY()` / public API → APR derived from the
|
|
38180
|
+
// on-chain rate-delta (`getPooledTokenByShares(1e18)` growth). The
|
|
38181
|
+
// rate steps in infrequent lumps, so the fetcher uses a 180-day
|
|
38182
|
+
// window to smooth to the realised ~9% (public Moonbeam RPCs serve
|
|
38183
|
+
// the deep archival reads; falls back to 0 if none do).
|
|
38184
|
+
yieldFetcher: stDotFetcher,
|
|
38185
|
+
yieldKey: "STDOT"
|
|
38186
|
+
}
|
|
37262
38187
|
]
|
|
37263
38188
|
};
|
|
37264
38189
|
var getLstRegistry = (chainId) => LST_REGISTRY[chainId] ?? [];
|
|
@@ -37325,7 +38250,7 @@ var Erc4626PreviewRedeemAbi = [
|
|
|
37325
38250
|
];
|
|
37326
38251
|
|
|
37327
38252
|
// src/vaults/lst/readers/shared.ts
|
|
37328
|
-
var
|
|
38253
|
+
var ONE_E187 = 10n ** 18n;
|
|
37329
38254
|
var toBigInt10 = (v) => {
|
|
37330
38255
|
if (v === void 0 || v === null) return void 0;
|
|
37331
38256
|
if (typeof v === "bigint") return v;
|
|
@@ -37357,7 +38282,7 @@ var readerBeetsStS = (entry) => ({
|
|
|
37357
38282
|
}
|
|
37358
38283
|
const liquidity = toBigInt10(pool);
|
|
37359
38284
|
return {
|
|
37360
|
-
totalAssets: totalSupply * exchangeRate /
|
|
38285
|
+
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
37361
38286
|
totalSupply,
|
|
37362
38287
|
exchangeRate,
|
|
37363
38288
|
liquidity
|
|
@@ -37390,7 +38315,7 @@ var readerBenqiSavax = (entry) => ({
|
|
|
37390
38315
|
{
|
|
37391
38316
|
address: entry.address,
|
|
37392
38317
|
name: "getPooledAvaxByShares",
|
|
37393
|
-
params: [
|
|
38318
|
+
params: [ONE_E187]
|
|
37394
38319
|
},
|
|
37395
38320
|
{ address: entry.address, name: "totalPooledAvax", params: [] }
|
|
37396
38321
|
],
|
|
@@ -37401,7 +38326,7 @@ var readerBenqiSavax = (entry) => ({
|
|
|
37401
38326
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
37402
38327
|
return void 0;
|
|
37403
38328
|
}
|
|
37404
|
-
const totalAssets = toBigInt10(totalPooled) ?? totalSupply * exchangeRate /
|
|
38329
|
+
const totalAssets = toBigInt10(totalPooled) ?? totalSupply * exchangeRate / ONE_E187;
|
|
37405
38330
|
return {
|
|
37406
38331
|
totalAssets,
|
|
37407
38332
|
totalSupply,
|
|
@@ -37420,7 +38345,7 @@ var readerBgtWrapper1to1 = (entry) => ({
|
|
|
37420
38345
|
return {
|
|
37421
38346
|
totalAssets: totalSupply,
|
|
37422
38347
|
totalSupply,
|
|
37423
|
-
exchangeRate:
|
|
38348
|
+
exchangeRate: ONE_E187
|
|
37424
38349
|
};
|
|
37425
38350
|
}
|
|
37426
38351
|
});
|
|
@@ -37450,7 +38375,7 @@ var readerDineroBeraEth = (entry) => ({
|
|
|
37450
38375
|
return void 0;
|
|
37451
38376
|
}
|
|
37452
38377
|
return {
|
|
37453
|
-
totalAssets: totalSupply * exchangeRate /
|
|
38378
|
+
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
37454
38379
|
totalSupply,
|
|
37455
38380
|
exchangeRate
|
|
37456
38381
|
};
|
|
@@ -37462,7 +38387,7 @@ var readerErc4626 = (entry) => ({
|
|
|
37462
38387
|
calls: [
|
|
37463
38388
|
{ address: entry.address, name: "totalAssets", params: [] },
|
|
37464
38389
|
{ address: entry.address, name: "totalSupply", params: [] },
|
|
37465
|
-
{ address: entry.address, name: "convertToAssets", params: [
|
|
38390
|
+
{ address: entry.address, name: "convertToAssets", params: [ONE_E187] }
|
|
37466
38391
|
],
|
|
37467
38392
|
abis: [Erc4626ReadAbi, TotalSupplyAbi, Erc4626ReadAbi],
|
|
37468
38393
|
parse: ([assets, supply, rate]) => {
|
|
@@ -37479,7 +38404,7 @@ var readerErc4626PreviewRedeem = (entry) => ({
|
|
|
37479
38404
|
calls: [
|
|
37480
38405
|
{ address: entry.address, name: "totalAssets", params: [] },
|
|
37481
38406
|
{ address: entry.address, name: "totalSupply", params: [] },
|
|
37482
|
-
{ address: entry.address, name: "previewRedeem", params: [
|
|
38407
|
+
{ address: entry.address, name: "previewRedeem", params: [ONE_E187] }
|
|
37483
38408
|
],
|
|
37484
38409
|
abis: [Erc4626PreviewRedeemAbi, TotalSupplyAbi, Erc4626PreviewRedeemAbi],
|
|
37485
38410
|
parse: ([assets, supply, rate]) => {
|
|
@@ -37536,7 +38461,7 @@ var readerEtherFiWeEth = (entry) => {
|
|
|
37536
38461
|
}
|
|
37537
38462
|
const liquidity = lp ? toBigInt10(slice[2]) : void 0;
|
|
37538
38463
|
return {
|
|
37539
|
-
totalAssets: totalSupply * exchangeRate /
|
|
38464
|
+
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
37540
38465
|
totalSupply,
|
|
37541
38466
|
exchangeRate,
|
|
37542
38467
|
liquidity
|
|
@@ -37569,7 +38494,7 @@ var readerHyperbeatBeHype = (entry) => {
|
|
|
37569
38494
|
return {
|
|
37570
38495
|
totalAssets: totalSupply,
|
|
37571
38496
|
totalSupply,
|
|
37572
|
-
exchangeRate:
|
|
38497
|
+
exchangeRate: ONE_E187
|
|
37573
38498
|
};
|
|
37574
38499
|
}
|
|
37575
38500
|
};
|
|
@@ -37577,7 +38502,7 @@ var readerHyperbeatBeHype = (entry) => {
|
|
|
37577
38502
|
return {
|
|
37578
38503
|
calls: [
|
|
37579
38504
|
{ address: entry.address, name: "totalSupply", params: [] },
|
|
37580
|
-
{ address: stakingCore, name: "BeHYPEToHYPE", params: [
|
|
38505
|
+
{ address: stakingCore, name: "BeHYPEToHYPE", params: [ONE_E187] }
|
|
37581
38506
|
],
|
|
37582
38507
|
abis: [TotalSupplyAbi, HyperbeatStakingCoreAbi],
|
|
37583
38508
|
parse: ([supply, rate]) => {
|
|
@@ -37587,7 +38512,7 @@ var readerHyperbeatBeHype = (entry) => {
|
|
|
37587
38512
|
return void 0;
|
|
37588
38513
|
}
|
|
37589
38514
|
return {
|
|
37590
|
-
totalAssets: totalSupply * exchangeRate /
|
|
38515
|
+
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
37591
38516
|
totalSupply,
|
|
37592
38517
|
exchangeRate
|
|
37593
38518
|
};
|
|
@@ -37619,7 +38544,7 @@ var readerKelpRsEth = (entry) => {
|
|
|
37619
38544
|
return {
|
|
37620
38545
|
totalAssets: totalSupply,
|
|
37621
38546
|
totalSupply,
|
|
37622
|
-
exchangeRate:
|
|
38547
|
+
exchangeRate: ONE_E187
|
|
37623
38548
|
};
|
|
37624
38549
|
}
|
|
37625
38550
|
};
|
|
@@ -37637,7 +38562,7 @@ var readerKelpRsEth = (entry) => {
|
|
|
37637
38562
|
return void 0;
|
|
37638
38563
|
}
|
|
37639
38564
|
return {
|
|
37640
|
-
totalAssets: totalSupply * exchangeRate /
|
|
38565
|
+
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
37641
38566
|
totalSupply,
|
|
37642
38567
|
exchangeRate
|
|
37643
38568
|
};
|
|
@@ -37669,7 +38594,7 @@ var readerKinetiqKHype = (entry) => {
|
|
|
37669
38594
|
return {
|
|
37670
38595
|
totalAssets: totalSupply,
|
|
37671
38596
|
totalSupply,
|
|
37672
|
-
exchangeRate:
|
|
38597
|
+
exchangeRate: ONE_E187
|
|
37673
38598
|
};
|
|
37674
38599
|
}
|
|
37675
38600
|
};
|
|
@@ -37677,7 +38602,7 @@ var readerKinetiqKHype = (entry) => {
|
|
|
37677
38602
|
return {
|
|
37678
38603
|
calls: [
|
|
37679
38604
|
{ address: entry.address, name: "totalSupply", params: [] },
|
|
37680
|
-
{ address: accountant, name: "kHYPEToHYPE", params: [
|
|
38605
|
+
{ address: accountant, name: "kHYPEToHYPE", params: [ONE_E187] }
|
|
37681
38606
|
],
|
|
37682
38607
|
abis: [TotalSupplyAbi, KinetiqStakingAccountantAbi],
|
|
37683
38608
|
parse: ([supply, rate]) => {
|
|
@@ -37687,7 +38612,7 @@ var readerKinetiqKHype = (entry) => {
|
|
|
37687
38612
|
return void 0;
|
|
37688
38613
|
}
|
|
37689
38614
|
return {
|
|
37690
|
-
totalAssets: totalSupply * exchangeRate /
|
|
38615
|
+
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
37691
38616
|
totalSupply,
|
|
37692
38617
|
exchangeRate
|
|
37693
38618
|
};
|
|
@@ -37727,7 +38652,7 @@ var readerLairStKaia = (entry) => ({
|
|
|
37727
38652
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
37728
38653
|
return void 0;
|
|
37729
38654
|
}
|
|
37730
|
-
const totalAssets = toBigInt10(totalStaking) ?? totalSupply * exchangeRate /
|
|
38655
|
+
const totalAssets = toBigInt10(totalStaking) ?? totalSupply * exchangeRate / ONE_E187;
|
|
37731
38656
|
return {
|
|
37732
38657
|
totalAssets,
|
|
37733
38658
|
totalSupply,
|
|
@@ -37761,7 +38686,7 @@ var readerLidoWstEth = (entry) => ({
|
|
|
37761
38686
|
return void 0;
|
|
37762
38687
|
}
|
|
37763
38688
|
return {
|
|
37764
|
-
totalAssets: totalSupply * exchangeRate /
|
|
38689
|
+
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
37765
38690
|
totalSupply,
|
|
37766
38691
|
exchangeRate
|
|
37767
38692
|
};
|
|
@@ -37799,7 +38724,7 @@ var readerListaSlisBnb = (entry) => {
|
|
|
37799
38724
|
return {
|
|
37800
38725
|
totalAssets: totalSupply,
|
|
37801
38726
|
totalSupply,
|
|
37802
|
-
exchangeRate:
|
|
38727
|
+
exchangeRate: ONE_E187
|
|
37803
38728
|
};
|
|
37804
38729
|
}
|
|
37805
38730
|
};
|
|
@@ -37807,7 +38732,7 @@ var readerListaSlisBnb = (entry) => {
|
|
|
37807
38732
|
return {
|
|
37808
38733
|
calls: [
|
|
37809
38734
|
{ address: entry.address, name: "totalSupply", params: [] },
|
|
37810
|
-
{ address: manager, name: "convertSnBnbToBnb", params: [
|
|
38735
|
+
{ address: manager, name: "convertSnBnbToBnb", params: [ONE_E187] },
|
|
37811
38736
|
{ address: manager, name: "getTotalPooledBnb", params: [] }
|
|
37812
38737
|
],
|
|
37813
38738
|
abis: [TotalSupplyAbi, ListaStakeManagerReadAbi, ListaStakeManagerReadAbi],
|
|
@@ -37818,7 +38743,7 @@ var readerListaSlisBnb = (entry) => {
|
|
|
37818
38743
|
return void 0;
|
|
37819
38744
|
}
|
|
37820
38745
|
const pooledBnb = toBigInt10(pooled);
|
|
37821
|
-
const totalAssets = pooledBnb ?? totalSupply * exchangeRate /
|
|
38746
|
+
const totalAssets = pooledBnb ?? totalSupply * exchangeRate / ONE_E187;
|
|
37822
38747
|
return { totalAssets, totalSupply, exchangeRate };
|
|
37823
38748
|
}
|
|
37824
38749
|
};
|
|
@@ -37848,7 +38773,7 @@ var readerMantleMEth = (entry) => {
|
|
|
37848
38773
|
return {
|
|
37849
38774
|
totalAssets: totalSupply,
|
|
37850
38775
|
totalSupply,
|
|
37851
|
-
exchangeRate:
|
|
38776
|
+
exchangeRate: ONE_E187
|
|
37852
38777
|
};
|
|
37853
38778
|
}
|
|
37854
38779
|
};
|
|
@@ -37856,7 +38781,7 @@ var readerMantleMEth = (entry) => {
|
|
|
37856
38781
|
return {
|
|
37857
38782
|
calls: [
|
|
37858
38783
|
{ address: entry.address, name: "totalSupply", params: [] },
|
|
37859
|
-
{ address: staking, name: "mETHToETH", params: [
|
|
38784
|
+
{ address: staking, name: "mETHToETH", params: [ONE_E187] }
|
|
37860
38785
|
],
|
|
37861
38786
|
abis: [TotalSupplyAbi, MantleStakingAbi],
|
|
37862
38787
|
parse: ([supply, rate]) => {
|
|
@@ -37866,7 +38791,7 @@ var readerMantleMEth = (entry) => {
|
|
|
37866
38791
|
return void 0;
|
|
37867
38792
|
}
|
|
37868
38793
|
return {
|
|
37869
|
-
totalAssets: totalSupply * exchangeRate /
|
|
38794
|
+
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
37870
38795
|
totalSupply,
|
|
37871
38796
|
exchangeRate
|
|
37872
38797
|
};
|
|
@@ -37881,7 +38806,7 @@ var readerOffChain = (entry) => ({
|
|
|
37881
38806
|
parse: ([supply]) => {
|
|
37882
38807
|
const totalSupply = toBigInt10(supply);
|
|
37883
38808
|
if (totalSupply === void 0) return void 0;
|
|
37884
|
-
return { totalAssets: totalSupply, totalSupply, exchangeRate:
|
|
38809
|
+
return { totalAssets: totalSupply, totalSupply, exchangeRate: ONE_E187 };
|
|
37885
38810
|
}
|
|
37886
38811
|
});
|
|
37887
38812
|
|
|
@@ -37913,7 +38838,7 @@ var readerRenzoEzEth = (entry) => {
|
|
|
37913
38838
|
return {
|
|
37914
38839
|
totalAssets: totalSupply,
|
|
37915
38840
|
totalSupply,
|
|
37916
|
-
exchangeRate:
|
|
38841
|
+
exchangeRate: ONE_E187
|
|
37917
38842
|
};
|
|
37918
38843
|
}
|
|
37919
38844
|
};
|
|
@@ -37932,7 +38857,7 @@ var readerRenzoEzEth = (entry) => {
|
|
|
37932
38857
|
return {
|
|
37933
38858
|
totalAssets: totalTvl,
|
|
37934
38859
|
totalSupply,
|
|
37935
|
-
exchangeRate: totalTvl *
|
|
38860
|
+
exchangeRate: totalTvl * ONE_E187 / totalSupply
|
|
37936
38861
|
};
|
|
37937
38862
|
}
|
|
37938
38863
|
};
|
|
@@ -37988,7 +38913,7 @@ var readerRocketReth = (entry) => {
|
|
|
37988
38913
|
}
|
|
37989
38914
|
const liquidity = depositPool ? toBigInt10(slice[2]) : void 0;
|
|
37990
38915
|
return {
|
|
37991
|
-
totalAssets: totalSupply * exchangeRate /
|
|
38916
|
+
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
37992
38917
|
totalSupply,
|
|
37993
38918
|
exchangeRate,
|
|
37994
38919
|
liquidity
|
|
@@ -38030,7 +38955,7 @@ var readerStaderEthx = (entry) => {
|
|
|
38030
38955
|
return {
|
|
38031
38956
|
totalAssets: totalSupply,
|
|
38032
38957
|
totalSupply,
|
|
38033
|
-
exchangeRate:
|
|
38958
|
+
exchangeRate: ONE_E187
|
|
38034
38959
|
};
|
|
38035
38960
|
}
|
|
38036
38961
|
};
|
|
@@ -38048,7 +38973,7 @@ var readerStaderEthx = (entry) => {
|
|
|
38048
38973
|
return void 0;
|
|
38049
38974
|
}
|
|
38050
38975
|
return {
|
|
38051
|
-
totalAssets: totalSupply * exchangeRate /
|
|
38976
|
+
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
38052
38977
|
totalSupply,
|
|
38053
38978
|
exchangeRate
|
|
38054
38979
|
};
|
|
@@ -38065,7 +38990,7 @@ var readerStaderMaticX = (entry) => {
|
|
|
38065
38990
|
{
|
|
38066
38991
|
address: rateAddress,
|
|
38067
38992
|
name: "convertMaticXToMatic",
|
|
38068
|
-
params: [
|
|
38993
|
+
params: [ONE_E187],
|
|
38069
38994
|
chainId: homeChainId
|
|
38070
38995
|
}
|
|
38071
38996
|
],
|
|
@@ -38080,7 +39005,7 @@ var readerStaderMaticX = (entry) => {
|
|
|
38080
39005
|
}
|
|
38081
39006
|
const isCrossChain = homeContract !== void 0;
|
|
38082
39007
|
return {
|
|
38083
|
-
totalAssets: isCrossChain ? totalSupply * amountInMatic /
|
|
39008
|
+
totalAssets: isCrossChain ? totalSupply * amountInMatic / ONE_E187 : totalPooledMatic ?? totalSupply * amountInMatic / ONE_E187,
|
|
38084
39009
|
totalSupply,
|
|
38085
39010
|
exchangeRate: amountInMatic
|
|
38086
39011
|
};
|
|
@@ -38112,7 +39037,7 @@ var readerStakeWiseOsEth = (entry) => {
|
|
|
38112
39037
|
return {
|
|
38113
39038
|
totalAssets: totalSupply,
|
|
38114
39039
|
totalSupply,
|
|
38115
|
-
exchangeRate:
|
|
39040
|
+
exchangeRate: ONE_E187
|
|
38116
39041
|
};
|
|
38117
39042
|
}
|
|
38118
39043
|
};
|
|
@@ -38120,7 +39045,7 @@ var readerStakeWiseOsEth = (entry) => {
|
|
|
38120
39045
|
return {
|
|
38121
39046
|
calls: [
|
|
38122
39047
|
{ address: entry.address, name: "totalSupply", params: [] },
|
|
38123
|
-
{ address: controller, name: "convertToAssets", params: [
|
|
39048
|
+
{ address: controller, name: "convertToAssets", params: [ONE_E187] }
|
|
38124
39049
|
],
|
|
38125
39050
|
abis: [TotalSupplyAbi, StakeWiseOsTokenAbi],
|
|
38126
39051
|
parse: ([supply, rate]) => {
|
|
@@ -38130,7 +39055,7 @@ var readerStakeWiseOsEth = (entry) => {
|
|
|
38130
39055
|
return void 0;
|
|
38131
39056
|
}
|
|
38132
39057
|
return {
|
|
38133
|
-
totalAssets: totalSupply * exchangeRate /
|
|
39058
|
+
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
38134
39059
|
totalSupply,
|
|
38135
39060
|
exchangeRate
|
|
38136
39061
|
};
|
|
@@ -38162,7 +39087,7 @@ var readerStCelo = (entry) => {
|
|
|
38162
39087
|
return {
|
|
38163
39088
|
totalAssets: totalSupply,
|
|
38164
39089
|
totalSupply,
|
|
38165
|
-
exchangeRate:
|
|
39090
|
+
exchangeRate: ONE_E187
|
|
38166
39091
|
};
|
|
38167
39092
|
}
|
|
38168
39093
|
};
|
|
@@ -38170,7 +39095,7 @@ var readerStCelo = (entry) => {
|
|
|
38170
39095
|
return {
|
|
38171
39096
|
calls: [
|
|
38172
39097
|
{ address: entry.address, name: "totalSupply", params: [] },
|
|
38173
|
-
{ address: manager, name: "toCelo", params: [
|
|
39098
|
+
{ address: manager, name: "toCelo", params: [ONE_E187] }
|
|
38174
39099
|
],
|
|
38175
39100
|
abis: [TotalSupplyAbi, StCeloManagerAbi],
|
|
38176
39101
|
parse: ([supply, rate]) => {
|
|
@@ -38180,7 +39105,7 @@ var readerStCelo = (entry) => {
|
|
|
38180
39105
|
return void 0;
|
|
38181
39106
|
}
|
|
38182
39107
|
return {
|
|
38183
|
-
totalAssets: totalSupply * exchangeRate /
|
|
39108
|
+
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
38184
39109
|
totalSupply,
|
|
38185
39110
|
exchangeRate
|
|
38186
39111
|
};
|
|
@@ -38213,7 +39138,7 @@ var readerSwellGetRate = (entry) => ({
|
|
|
38213
39138
|
return void 0;
|
|
38214
39139
|
}
|
|
38215
39140
|
return {
|
|
38216
|
-
totalAssets: totalSupply * exchangeRate /
|
|
39141
|
+
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
38217
39142
|
totalSupply,
|
|
38218
39143
|
exchangeRate
|
|
38219
39144
|
};
|
|
@@ -38244,7 +39169,7 @@ var readerValantisWstHype = (entry) => {
|
|
|
38244
39169
|
return {
|
|
38245
39170
|
totalAssets: totalSupply,
|
|
38246
39171
|
totalSupply,
|
|
38247
|
-
exchangeRate:
|
|
39172
|
+
exchangeRate: ONE_E187
|
|
38248
39173
|
};
|
|
38249
39174
|
}
|
|
38250
39175
|
};
|
|
@@ -38262,7 +39187,7 @@ var readerValantisWstHype = (entry) => {
|
|
|
38262
39187
|
return void 0;
|
|
38263
39188
|
}
|
|
38264
39189
|
return {
|
|
38265
|
-
totalAssets: totalSupply * exchangeRate /
|
|
39190
|
+
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
38266
39191
|
totalSupply,
|
|
38267
39192
|
exchangeRate
|
|
38268
39193
|
};
|
|
@@ -38291,7 +39216,7 @@ var readerVedaAccountant = (entry) => {
|
|
|
38291
39216
|
parse: ([supply]) => {
|
|
38292
39217
|
const totalSupply = toBigInt10(supply);
|
|
38293
39218
|
if (totalSupply === void 0) return void 0;
|
|
38294
|
-
return { totalAssets: totalSupply, totalSupply, exchangeRate:
|
|
39219
|
+
return { totalAssets: totalSupply, totalSupply, exchangeRate: ONE_E187 };
|
|
38295
39220
|
}
|
|
38296
39221
|
};
|
|
38297
39222
|
}
|
|
@@ -38308,7 +39233,7 @@ var readerVedaAccountant = (entry) => {
|
|
|
38308
39233
|
if (totalSupply === void 0 || rawRate === void 0) return void 0;
|
|
38309
39234
|
const exchangeRate = rawRate * scale;
|
|
38310
39235
|
return {
|
|
38311
|
-
totalAssets: totalSupply * exchangeRate /
|
|
39236
|
+
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
38312
39237
|
totalSupply,
|
|
38313
39238
|
exchangeRate
|
|
38314
39239
|
};
|
|
@@ -38341,9 +39266,121 @@ var readerAnkrRatio = (entry) => ({
|
|
|
38341
39266
|
return void 0;
|
|
38342
39267
|
}
|
|
38343
39268
|
return {
|
|
38344
|
-
totalAssets: totalSupply *
|
|
39269
|
+
totalAssets: totalSupply * ONE_E187 / r,
|
|
38345
39270
|
totalSupply,
|
|
38346
|
-
exchangeRate:
|
|
39271
|
+
exchangeRate: ONE_E187 * ONE_E187 / r
|
|
39272
|
+
};
|
|
39273
|
+
}
|
|
39274
|
+
});
|
|
39275
|
+
|
|
39276
|
+
// src/vaults/lst/abis/core.ts
|
|
39277
|
+
var CoreEarnRateAbi = [
|
|
39278
|
+
{
|
|
39279
|
+
name: "getCurrentExchangeRate",
|
|
39280
|
+
type: "function",
|
|
39281
|
+
stateMutability: "view",
|
|
39282
|
+
inputs: [],
|
|
39283
|
+
outputs: [{ type: "uint256" }]
|
|
39284
|
+
}
|
|
39285
|
+
];
|
|
39286
|
+
var CoreTotalStakedAbi = [
|
|
39287
|
+
{
|
|
39288
|
+
name: "totalStaked",
|
|
39289
|
+
type: "function",
|
|
39290
|
+
stateMutability: "view",
|
|
39291
|
+
inputs: [],
|
|
39292
|
+
outputs: [{ type: "uint256" }]
|
|
39293
|
+
}
|
|
39294
|
+
];
|
|
39295
|
+
|
|
39296
|
+
// src/vaults/lst/readers/core.ts
|
|
39297
|
+
var CORE_RATE_DENOM = 10n ** 6n;
|
|
39298
|
+
var readerCoreEarnRate = (entry) => {
|
|
39299
|
+
const earn = entry.readerExtras?.coreEarn ?? entry.address;
|
|
39300
|
+
return {
|
|
39301
|
+
calls: [
|
|
39302
|
+
{ address: earn, name: "getCurrentExchangeRate", params: [] },
|
|
39303
|
+
{ address: entry.address, name: "totalSupply", params: [] }
|
|
39304
|
+
],
|
|
39305
|
+
abis: [CoreEarnRateAbi, TotalSupplyAbi],
|
|
39306
|
+
parse: ([rate, supply]) => {
|
|
39307
|
+
const r = toBigInt10(rate);
|
|
39308
|
+
const totalSupply = toBigInt10(supply);
|
|
39309
|
+
if (r === void 0 || r === 0n || totalSupply === void 0) {
|
|
39310
|
+
return void 0;
|
|
39311
|
+
}
|
|
39312
|
+
return {
|
|
39313
|
+
totalAssets: totalSupply * r / CORE_RATE_DENOM,
|
|
39314
|
+
totalSupply,
|
|
39315
|
+
exchangeRate: r * ONE_E187 / CORE_RATE_DENOM
|
|
39316
|
+
};
|
|
39317
|
+
}
|
|
39318
|
+
};
|
|
39319
|
+
};
|
|
39320
|
+
var readerCoreStakedRatio = (entry) => {
|
|
39321
|
+
const stakeContract = entry.readerExtras?.coreStakeContract ?? entry.address;
|
|
39322
|
+
return {
|
|
39323
|
+
calls: [
|
|
39324
|
+
{ address: stakeContract, name: "totalStaked", params: [] },
|
|
39325
|
+
{ address: entry.address, name: "totalSupply", params: [] }
|
|
39326
|
+
],
|
|
39327
|
+
abis: [CoreTotalStakedAbi, TotalSupplyAbi],
|
|
39328
|
+
parse: ([staked, supply]) => {
|
|
39329
|
+
const totalStaked = toBigInt10(staked);
|
|
39330
|
+
const totalSupply = toBigInt10(supply);
|
|
39331
|
+
if (totalStaked === void 0 || totalSupply === void 0 || totalSupply === 0n) {
|
|
39332
|
+
return void 0;
|
|
39333
|
+
}
|
|
39334
|
+
return {
|
|
39335
|
+
totalAssets: totalStaked,
|
|
39336
|
+
totalSupply,
|
|
39337
|
+
exchangeRate: totalStaked * ONE_E187 / totalSupply
|
|
39338
|
+
};
|
|
39339
|
+
}
|
|
39340
|
+
};
|
|
39341
|
+
};
|
|
39342
|
+
|
|
39343
|
+
// src/vaults/lst/abis/stella.ts
|
|
39344
|
+
var StellaStDotAbi = [
|
|
39345
|
+
{
|
|
39346
|
+
name: "getPooledTokenByShares",
|
|
39347
|
+
type: "function",
|
|
39348
|
+
stateMutability: "view",
|
|
39349
|
+
inputs: [{ type: "uint256", name: "_sharesAmount" }],
|
|
39350
|
+
outputs: [{ type: "uint256" }]
|
|
39351
|
+
},
|
|
39352
|
+
{
|
|
39353
|
+
name: "getTotalPooledToken",
|
|
39354
|
+
type: "function",
|
|
39355
|
+
stateMutability: "view",
|
|
39356
|
+
inputs: [],
|
|
39357
|
+
outputs: [{ type: "uint256" }]
|
|
39358
|
+
}
|
|
39359
|
+
];
|
|
39360
|
+
|
|
39361
|
+
// src/vaults/lst/readers/stella.ts
|
|
39362
|
+
var readerStellaStDot = (entry) => ({
|
|
39363
|
+
calls: [
|
|
39364
|
+
{ address: entry.address, name: "totalSupply", params: [] },
|
|
39365
|
+
{
|
|
39366
|
+
address: entry.address,
|
|
39367
|
+
name: "getPooledTokenByShares",
|
|
39368
|
+
params: [ONE_E187]
|
|
39369
|
+
},
|
|
39370
|
+
{ address: entry.address, name: "getTotalPooledToken", params: [] }
|
|
39371
|
+
],
|
|
39372
|
+
abis: [TotalSupplyAbi, StellaStDotAbi, StellaStDotAbi],
|
|
39373
|
+
parse: ([supply, rate, pooled]) => {
|
|
39374
|
+
const totalSupply = toBigInt10(supply);
|
|
39375
|
+
const exchangeRate = toBigInt10(rate);
|
|
39376
|
+
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
39377
|
+
return void 0;
|
|
39378
|
+
}
|
|
39379
|
+
const totalAssets = toBigInt10(pooled) ?? totalSupply * exchangeRate / ONE_E187;
|
|
39380
|
+
return {
|
|
39381
|
+
totalAssets,
|
|
39382
|
+
totalSupply,
|
|
39383
|
+
exchangeRate
|
|
38347
39384
|
};
|
|
38348
39385
|
}
|
|
38349
39386
|
});
|
|
@@ -38401,6 +39438,12 @@ var buildReader = (entry) => {
|
|
|
38401
39438
|
return readerOffChain(entry);
|
|
38402
39439
|
case "ankrRatio":
|
|
38403
39440
|
return readerAnkrRatio(entry);
|
|
39441
|
+
case "coreEarnRate":
|
|
39442
|
+
return readerCoreEarnRate(entry);
|
|
39443
|
+
case "coreStakedRatio":
|
|
39444
|
+
return readerCoreStakedRatio(entry);
|
|
39445
|
+
case "stellaStDot":
|
|
39446
|
+
return readerStellaStDot(entry);
|
|
38404
39447
|
}
|
|
38405
39448
|
};
|
|
38406
39449
|
|
|
@@ -38447,7 +39490,18 @@ var resolveYieldApr = async (entries) => {
|
|
|
38447
39490
|
};
|
|
38448
39491
|
|
|
38449
39492
|
// src/vaults/lst/fetchPublic.ts
|
|
38450
|
-
var
|
|
39493
|
+
var ONE_E188 = 10n ** 18n;
|
|
39494
|
+
var resolveAcceptedInputs = (chainId, shareToken, entry) => {
|
|
39495
|
+
const enriched = getLstAcceptedInputs(chainId, shareToken);
|
|
39496
|
+
if (enriched) return enriched;
|
|
39497
|
+
if (!entry.isMintable || entry.mintInputAsset === void 0) return [];
|
|
39498
|
+
return [
|
|
39499
|
+
{
|
|
39500
|
+
asset: entry.mintInputAsset === "native" ? "native" : entry.mintInputAsset.toLowerCase(),
|
|
39501
|
+
mode: "direct"
|
|
39502
|
+
}
|
|
39503
|
+
];
|
|
39504
|
+
};
|
|
38451
39505
|
var fetchLstShareTokens = async (chainId, multicallRetry, prices = {}, tokenList = {}) => {
|
|
38452
39506
|
const entries = getLstRegistry(chainId);
|
|
38453
39507
|
if (entries.length === 0) return {};
|
|
@@ -38503,7 +39557,7 @@ var fetchLstShareTokens = async (chainId, multicallRetry, prices = {}, tokenList
|
|
|
38503
39557
|
const totalAssetsFormatted = Number(state.totalAssets) / decimalsFactor;
|
|
38504
39558
|
const totalAssetsUsd = priceUsd !== void 0 ? totalAssetsFormatted * priceUsd : 0;
|
|
38505
39559
|
const convertToAssets = state.exchangeRate;
|
|
38506
|
-
const convertToShares = state.exchangeRate > 0n ?
|
|
39560
|
+
const convertToShares = state.exchangeRate > 0n ? ONE_E188 * ONE_E188 / state.exchangeRate : 0n;
|
|
38507
39561
|
const liquidity = state.liquidity;
|
|
38508
39562
|
const liquidityFormatted = liquidity !== void 0 ? Number(liquidity) / decimalsFactor : void 0;
|
|
38509
39563
|
const liquidityUsd = liquidityFormatted !== void 0 && priceUsd !== void 0 ? liquidityFormatted * priceUsd : liquidityFormatted !== void 0 ? 0 : void 0;
|
|
@@ -38539,6 +39593,7 @@ var fetchLstShareTokens = async (chainId, multicallRetry, prices = {}, tokenList
|
|
|
38539
39593
|
isNativeUnderlying: entry.isNativeUnderlying,
|
|
38540
39594
|
mintContract: entry.mintContract?.toLowerCase(),
|
|
38541
39595
|
mintInputAsset: entry.mintInputAsset === void 0 ? void 0 : entry.mintInputAsset === "native" ? "native" : entry.mintInputAsset.toLowerCase(),
|
|
39596
|
+
acceptedInputs: resolveAcceptedInputs(chainId, addressLc, entry),
|
|
38542
39597
|
withdrawalMode: entry.withdrawalMode,
|
|
38543
39598
|
withdrawalCooldownSeconds: entry.withdrawalCooldownSeconds,
|
|
38544
39599
|
asset,
|
|
@@ -40454,6 +41509,65 @@ var readerStCelo2 = {
|
|
|
40454
41509
|
}
|
|
40455
41510
|
};
|
|
40456
41511
|
|
|
41512
|
+
// src/vaults/lst/withdrawals/abis/stella.ts
|
|
41513
|
+
var StellaGetUnbondedAbi = [
|
|
41514
|
+
{
|
|
41515
|
+
name: "getUnbonded",
|
|
41516
|
+
type: "function",
|
|
41517
|
+
stateMutability: "view",
|
|
41518
|
+
inputs: [{ type: "address", name: "_holder" }],
|
|
41519
|
+
outputs: [
|
|
41520
|
+
{ type: "uint256", name: "waiting" },
|
|
41521
|
+
{ type: "uint256", name: "unbonded" }
|
|
41522
|
+
]
|
|
41523
|
+
}
|
|
41524
|
+
];
|
|
41525
|
+
|
|
41526
|
+
// src/vaults/lst/withdrawals/readers/stella.ts
|
|
41527
|
+
var readerStellaUnbond = {
|
|
41528
|
+
fetch: async (user, multicallRetry, chainId, entry) => {
|
|
41529
|
+
const res = await multicallRetry({
|
|
41530
|
+
chain: chainId,
|
|
41531
|
+
calls: [
|
|
41532
|
+
{ address: entry.lst, name: "getUnbonded", params: [user] }
|
|
41533
|
+
],
|
|
41534
|
+
abi: [StellaGetUnbondedAbi]
|
|
41535
|
+
});
|
|
41536
|
+
const cell = res[0];
|
|
41537
|
+
let waiting;
|
|
41538
|
+
let unbonded;
|
|
41539
|
+
if (Array.isArray(cell)) {
|
|
41540
|
+
waiting = toBigInt11(cell[0]);
|
|
41541
|
+
unbonded = toBigInt11(cell[1]);
|
|
41542
|
+
} else if (cell && typeof cell === "object") {
|
|
41543
|
+
waiting = toBigInt11(cell.waiting);
|
|
41544
|
+
unbonded = toBigInt11(cell.unbonded);
|
|
41545
|
+
}
|
|
41546
|
+
const out = [];
|
|
41547
|
+
if (unbonded && unbonded > 0n) {
|
|
41548
|
+
out.push({
|
|
41549
|
+
lst: entry.lst,
|
|
41550
|
+
brand: entry.brand,
|
|
41551
|
+
symbol: entry.symbol,
|
|
41552
|
+
requestId: "unbonded",
|
|
41553
|
+
amountUnderlying: unbonded.toString(),
|
|
41554
|
+
status: "claimable"
|
|
41555
|
+
});
|
|
41556
|
+
}
|
|
41557
|
+
if (waiting && waiting > 0n) {
|
|
41558
|
+
out.push({
|
|
41559
|
+
lst: entry.lst,
|
|
41560
|
+
brand: entry.brand,
|
|
41561
|
+
symbol: entry.symbol,
|
|
41562
|
+
requestId: "waiting",
|
|
41563
|
+
amountUnderlying: waiting.toString(),
|
|
41564
|
+
status: "pending"
|
|
41565
|
+
});
|
|
41566
|
+
}
|
|
41567
|
+
return out;
|
|
41568
|
+
}
|
|
41569
|
+
};
|
|
41570
|
+
|
|
40457
41571
|
// src/vaults/lst/withdrawals/abis/swell.ts
|
|
40458
41572
|
var SwellRswExitAbi = [
|
|
40459
41573
|
{
|
|
@@ -40888,6 +42002,8 @@ var buildWithdrawalReader = (entry) => {
|
|
|
40888
42002
|
return readerPrimeStaking;
|
|
40889
42003
|
case "berapawRedeemQueue":
|
|
40890
42004
|
return readerBeraPaw;
|
|
42005
|
+
case "stellaUnbondQueue":
|
|
42006
|
+
return readerStellaUnbond;
|
|
40891
42007
|
case "eventsOnly":
|
|
40892
42008
|
case "noQueue":
|
|
40893
42009
|
case "unverified":
|
|
@@ -41267,6 +42383,21 @@ var LST_WITHDRAWAL_REGISTRY = {
|
|
|
41267
42383
|
reader: "primeStakingQueue",
|
|
41268
42384
|
withdrawalContract: "0x98d916f5773ac0482b49856f2659d6c32114c4ba"
|
|
41269
42385
|
}
|
|
42386
|
+
],
|
|
42387
|
+
"1284": [
|
|
42388
|
+
{
|
|
42389
|
+
// StellaSwap stDOT (lido-dot-ksm). After `redeem(amount)` the
|
|
42390
|
+
// position enters Polkadot's ~28-day unbond; `getUnbonded(holder)`
|
|
42391
|
+
// returns the per-user aggregate as `(waiting, unbonded)` — no
|
|
42392
|
+
// per-request IDs. The reader emits up to two synthetic requests
|
|
42393
|
+
// (waiting→pending, unbonded→claimable via `claimUnbonded()`). The
|
|
42394
|
+
// stDOT token is its own withdrawal contract.
|
|
42395
|
+
lst: "0xbc7e02c4178a7df7d3e564323a5c359dc96c4db4",
|
|
42396
|
+
brand: "StellaSwap",
|
|
42397
|
+
symbol: "stDOT",
|
|
42398
|
+
reader: "stellaUnbondQueue",
|
|
42399
|
+
withdrawalContract: "0xbc7e02c4178a7df7d3e564323a5c359dc96c4db4"
|
|
42400
|
+
}
|
|
41270
42401
|
]
|
|
41271
42402
|
};
|
|
41272
42403
|
var getLstWithdrawalRegistry = (chainId, extraEntries) => {
|
|
@@ -41335,7 +42466,7 @@ var Erc4626ReadAbi2 = [
|
|
|
41335
42466
|
];
|
|
41336
42467
|
|
|
41337
42468
|
// src/vaults/savings/readers/shared.ts
|
|
41338
|
-
var
|
|
42469
|
+
var ONE_E189 = 10n ** 18n;
|
|
41339
42470
|
var toBigInt12 = (v) => {
|
|
41340
42471
|
if (v === void 0 || v === null) return void 0;
|
|
41341
42472
|
if (typeof v === "bigint") return v;
|
|
@@ -41376,7 +42507,7 @@ var readerErc46262 = (entry) => {
|
|
|
41376
42507
|
return {
|
|
41377
42508
|
totalAssets,
|
|
41378
42509
|
totalSupply,
|
|
41379
|
-
exchangeRate: convertToAssetsRaw *
|
|
42510
|
+
exchangeRate: convertToAssetsRaw * ONE_E189 / underlyingUnit
|
|
41380
42511
|
};
|
|
41381
42512
|
}
|
|
41382
42513
|
};
|
|
@@ -41718,7 +42849,7 @@ var resolveYieldApr2 = async (entries) => {
|
|
|
41718
42849
|
};
|
|
41719
42850
|
|
|
41720
42851
|
// src/vaults/savings/fetchPublic.ts
|
|
41721
|
-
var
|
|
42852
|
+
var ONE_E1810 = 10n ** 18n;
|
|
41722
42853
|
var fetchSavingsVaults = async (chainId, multicallRetry, prices = {}, tokenList = {}) => {
|
|
41723
42854
|
const entries = getSavingsRegistry(chainId);
|
|
41724
42855
|
if (entries.length === 0) return {};
|
|
@@ -41755,8 +42886,8 @@ var fetchSavingsVaults = async (chainId, multicallRetry, prices = {}, tokenList
|
|
|
41755
42886
|
const underlyingUnit = 10n ** BigInt(underlyingDec);
|
|
41756
42887
|
const totalAssetsFormatted = Number(state.totalAssets) / 10 ** underlyingDec;
|
|
41757
42888
|
const totalAssetsUsd = priceUsd !== void 0 ? totalAssetsFormatted * priceUsd : 0;
|
|
41758
|
-
const convertToAssets = state.exchangeRate * underlyingUnit /
|
|
41759
|
-
const convertToShares = state.exchangeRate > 0n ?
|
|
42889
|
+
const convertToAssets = state.exchangeRate * underlyingUnit / ONE_E1810;
|
|
42890
|
+
const convertToShares = state.exchangeRate > 0n ? ONE_E1810 * shareUnit / state.exchangeRate : 0n;
|
|
41760
42891
|
const displayName = composeVaultDisplayName(
|
|
41761
42892
|
entry.brand,
|
|
41762
42893
|
entry.brand,
|
|
@@ -43221,7 +44352,7 @@ var readVaultSharePrices = async (chainId, addresses, multicallRetry) => {
|
|
|
43221
44352
|
};
|
|
43222
44353
|
|
|
43223
44354
|
// src/vaults/yield/annualize.ts
|
|
43224
|
-
var
|
|
44355
|
+
var YEAR_SECONDS10 = 365 * 24 * 60 * 60;
|
|
43225
44356
|
var SCALE = 10n ** 18n;
|
|
43226
44357
|
var appendSnapshot = (points, snap, options) => {
|
|
43227
44358
|
const maxPoints = options?.maxPoints ?? 90;
|
|
@@ -43250,7 +44381,7 @@ var computeVaultApr = (points, options) => {
|
|
|
43250
44381
|
if (pThen === 0n) return void 0;
|
|
43251
44382
|
const ratioScaled = BigInt(now.p) * SCALE / pThen;
|
|
43252
44383
|
const ratio = Number(ratioScaled) / 1e18;
|
|
43253
|
-
const apr = (ratio - 1) * (
|
|
44384
|
+
const apr = (ratio - 1) * (YEAR_SECONDS10 / windowSeconds);
|
|
43254
44385
|
return {
|
|
43255
44386
|
apr,
|
|
43256
44387
|
sharePriceNow: now.p,
|