@1delta/margin-fetcher 0.0.327 → 0.0.329
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +14 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2398 -258
- package/dist/index.js.map +1 -1
- package/dist/lending/public-data/exactly/convertPublic.d.ts +30 -0
- package/dist/lending/public-data/exactly/convertPublic.d.ts.map +1 -0
- package/dist/lending/public-data/exactly/convertPublic.test.d.ts +2 -0
- package/dist/lending/public-data/exactly/convertPublic.test.d.ts.map +1 -0
- package/dist/lending/public-data/exactly/fetchPublic.d.ts +13 -0
- package/dist/lending/public-data/exactly/fetchPublic.d.ts.map +1 -0
- package/dist/lending/public-data/exactly/index.d.ts +5 -0
- package/dist/lending/public-data/exactly/index.d.ts.map +1 -0
- package/dist/lending/public-data/exactly/math.d.ts +30 -0
- package/dist/lending/public-data/exactly/math.d.ts.map +1 -0
- package/dist/lending/public-data/exactly/types.d.ts +80 -0
- package/dist/lending/public-data/exactly/types.d.ts.map +1 -0
- 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/public-data/liquity/convertPublic.d.ts +42 -0
- package/dist/lending/public-data/liquity/convertPublic.d.ts.map +1 -0
- package/dist/lending/public-data/liquity/convertPublic.test.d.ts +2 -0
- package/dist/lending/public-data/liquity/convertPublic.test.d.ts.map +1 -0
- package/dist/lending/public-data/liquity/fetchPublic.d.ts +15 -0
- package/dist/lending/public-data/liquity/fetchPublic.d.ts.map +1 -0
- package/dist/lending/public-data/liquity/index.d.ts +4 -0
- package/dist/lending/public-data/liquity/index.d.ts.map +1 -0
- package/dist/lending/public-data/liquity/types.d.ts +33 -0
- package/dist/lending/public-data/liquity/types.d.ts.map +1 -0
- package/dist/lending/public-data/midnight/apiClient.d.ts +18 -0
- package/dist/lending/public-data/midnight/apiClient.d.ts.map +1 -1
- package/dist/lending/public-data/midnight/convertPublic.d.ts.map +1 -1
- package/dist/lending/public-data/midnight/fetchPublic.d.ts +6 -4
- package/dist/lending/public-data/midnight/fetchPublic.d.ts.map +1 -1
- package/dist/lending/public-data/midnight/types.d.ts +12 -0
- package/dist/lending/public-data/midnight/types.d.ts.map +1 -1
- package/dist/lending/public-data/river/convertPublic.d.ts +36 -0
- package/dist/lending/public-data/river/convertPublic.d.ts.map +1 -0
- package/dist/lending/public-data/river/convertPublic.test.d.ts +2 -0
- package/dist/lending/public-data/river/convertPublic.test.d.ts.map +1 -0
- package/dist/lending/public-data/river/fetchPublic.d.ts +11 -0
- package/dist/lending/public-data/river/fetchPublic.d.ts.map +1 -0
- package/dist/lending/public-data/river/index.d.ts +4 -0
- package/dist/lending/public-data/river/index.d.ts.map +1 -0
- package/dist/lending/public-data/river/types.d.ts +30 -0
- package/dist/lending/public-data/river/types.d.ts.map +1 -0
- package/dist/lending/public-data/term/apiClient.d.ts +36 -0
- package/dist/lending/public-data/term/apiClient.d.ts.map +1 -0
- package/dist/lending/public-data/term/convertPublic.d.ts +21 -0
- package/dist/lending/public-data/term/convertPublic.d.ts.map +1 -0
- package/dist/lending/public-data/term/convertPublic.test.d.ts +2 -0
- package/dist/lending/public-data/term/convertPublic.test.d.ts.map +1 -0
- package/dist/lending/public-data/term/fetchPublic.d.ts +14 -0
- package/dist/lending/public-data/term/fetchPublic.d.ts.map +1 -0
- package/dist/lending/public-data/term/index.d.ts +6 -0
- package/dist/lending/public-data/term/index.d.ts.map +1 -0
- package/dist/lending/public-data/term/math.d.ts +24 -0
- package/dist/lending/public-data/term/math.d.ts.map +1 -0
- package/dist/lending/public-data/term/types.d.ts +77 -0
- package/dist/lending/public-data/term/types.d.ts.map +1 -0
- package/dist/lending/user-data/abis.d.ts.map +1 -1
- package/dist/lending/user-data/exactly/userCallBuild.d.ts +10 -0
- package/dist/lending/user-data/exactly/userCallBuild.d.ts.map +1 -0
- package/dist/lending/user-data/exactly/userCallParse.d.ts +43 -0
- package/dist/lending/user-data/exactly/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/lending/user-data/liquity/userCall.test.d.ts +2 -0
- package/dist/lending/user-data/liquity/userCall.test.d.ts.map +1 -0
- package/dist/lending/user-data/liquity/userCallBuild.d.ts +30 -0
- package/dist/lending/user-data/liquity/userCallBuild.d.ts.map +1 -0
- package/dist/lending/user-data/liquity/userCallParse.d.ts +54 -0
- package/dist/lending/user-data/liquity/userCallParse.d.ts.map +1 -0
- package/dist/lending/user-data/river/userCall.test.d.ts +2 -0
- package/dist/lending/user-data/river/userCall.test.d.ts.map +1 -0
- package/dist/lending/user-data/river/userCallBuild.d.ts +16 -0
- package/dist/lending/user-data/river/userCallBuild.d.ts.map +1 -0
- package/dist/lending/user-data/river/userCallParse.d.ts +24 -0
- package/dist/lending/user-data/river/userCallParse.d.ts.map +1 -0
- package/dist/lending/user-data/term/userCall.test.d.ts +2 -0
- package/dist/lending/user-data/term/userCall.test.d.ts.map +1 -0
- package/dist/lending/user-data/term/userCallBuild.d.ts +21 -0
- package/dist/lending/user-data/term/userCallBuild.d.ts.map +1 -0
- package/dist/lending/user-data/term/userCallParse.d.ts +18 -0
- package/dist/lending/user-data/term/userCallParse.d.ts.map +1 -0
- package/dist/types/lender/morpho-types.d.ts +38 -1
- package/dist/types/lender/morpho-types.d.ts.map +1 -1
- package/dist/types/lenderTypes.d.ts +26 -6
- package/dist/types/lenderTypes.d.ts.map +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/package.json +8 -8
package/dist/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { parseAbi, keccak256, encodeAbiParameters, formatEther, BaseError, encodeFunctionData, formatUnits, isAddress, getAddress, decodeFunctionResult, decodeAbiParameters, AbiEncodingLengthMismatchError, concatHex, pad, InvalidAddressError, stringToHex, boolToHex, integerRegex, numberToHex, bytesRegex, BytesSizeMismatchError, arrayRegex, UnsupportedPackedAbiType } from './chunk-Z3MGRQJR.js';
|
|
2
2
|
import './chunk-BYTNVMX7.js';
|
|
3
3
|
import './chunk-PR4QN5HX.js';
|
|
4
|
-
import { Lender, isAaveType, isCompoundV3, isMultiMarket, isSiloV2Type, isSiloV3Type, isDolomite, isEulerType, isAaveV4Type, isInit, isMorphoType, isCompoundV2Type, isVenusType, isSumerType, AAVE_V3_LENDERS, AAVE_V2_LENDERS, isAaveV2Type, isAaveV32Type, isAaveV3Type, isFluid, isGearboxV3, isMidnight, isYLDR, isCompoundV3Type, isLista, isTectonicType, isKineticType, isBenqiType } from '@1delta/lender-registry';
|
|
4
|
+
import { Lender, LIQUITY_FAMILY_LENDERS, isAaveType, isCompoundV3, isMultiMarket, isSiloV2Type, isSiloV3Type, isDolomite, isEulerType, isAaveV4Type, isInit, isMorphoType, isCompoundV2Type, isVenusType, isSumerType, AAVE_V3_LENDERS, AAVE_V2_LENDERS, isAaveV2Type, isAaveV32Type, isAaveV3Type, isFluid, isGearboxV3, isMidnight, isTerm, isExactly, isLiquityFamily, isRiver, 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
|
-
import { fetchTokenLists, fetchTokenList, aavePools, compoundV3Pools, initConfig, morphoPools, compoundV2Pools, eulerVaults, siloMarkets, siloV2LenderKey, siloMarketsV3, siloV3LenderKey, aaveV4Spokes, aaveV4SpokeLenderKey, fluidResolvers, gearboxResolvers, dolomiteConfigs, midnightConfig, aaveReserves, compoundV3Reserves, morphoTypeMarkets, resolveMidnightApiBase, getSiloV2MarketEntry, getSiloV3MarketEntry, dolomiteEmode, aaveTokens, morphoTypeVaults, eulerConfigs, gearboxMarketCompressor, gearboxMarketConfigurators, gearboxV3LenderKey, midnightMarketsByChain, parseAaveV4SpokeLenderKey, gearboxAccountCompressor, compoundV2Tokens, aaveOracles, aaveOraclesConfig, compoundV2Oracles, compoundV2TokenArray, compoundV2OraclesConfig, compoundV3OraclesData, compoundV3BaseData, compoundV2Reserves, aaveV4Oracles } from '@1delta/data-sdk';
|
|
6
|
+
import { fetchTokenLists, fetchTokenList, aavePools, compoundV3Pools, initConfig, morphoPools, compoundV2Pools, eulerVaults, siloMarkets, siloV2LenderKey, siloMarketsV3, siloV3LenderKey, aaveV4Spokes, aaveV4SpokeLenderKey, fluidResolvers, gearboxResolvers, dolomiteConfigs, midnightConfig, exactlyConfig, liquityLendersByChain, riverLendersByChain, aaveReserves, compoundV3Reserves, termMarketsByChain, liquityConfigFor, liquityBranchesByChain, riverConfigFor, riverChainData, morphoTypeMarkets, resolveMidnightApiBase, resolveTermApiBase, getSiloV2MarketEntry, getSiloV3MarketEntry, dolomiteEmode, aaveTokens, morphoTypeVaults, eulerConfigs, gearboxMarketCompressor, gearboxMarketConfigurators, gearboxV3LenderKey, midnightMarketsByChain, parseAaveV4SpokeLenderKey, gearboxAccountCompressor, compoundV2Tokens, aaveOracles, aaveOraclesConfig, compoundV2Oracles, compoundV2TokenArray, compoundV2OraclesConfig, compoundV3OraclesData, compoundV3BaseData, compoundV2Reserves, aaveV4Oracles } from '@1delta/data-sdk';
|
|
7
7
|
import lodash from 'lodash';
|
|
8
|
-
import { getEvmClient, getEvmChain, getEvmClientUniversal
|
|
9
|
-
import { MetaMorphoAbi, FluidLendingResolverAbi, FluidVaultResolverAbi, FluidLiquidityResolverAbi, MoolahVaultAbi, MorphoLensAbi, AaveV4SpokeAbi, AaveV4OracleAbi, AaveV4HubAbi, DolomiteMarginAbi, GearboxMarketCompressorV310Abi, MorphoBlueAbi, MidnightAbi, GearboxCreditAccountCompressorV310Abi } from '@1delta/abis';
|
|
8
|
+
import { getEvmClient, multicallRetryUniversal, getEvmChain, getEvmClientUniversal } from '@1delta/providers';
|
|
9
|
+
import { LiquityTroveManagerAbi, LiquityActivePoolAbi, LiquityStabilityPoolAbi, LiquityPriceFeedAbi, LiquitySortedTrovesAbi, RiverTroveManagerAbi, RiverStabilityPoolAbi, MetaMorphoAbi, ExactlyPreviewerAbi, ExactlyAuditorAbi, FluidLendingResolverAbi, FluidVaultResolverAbi, FluidLiquidityResolverAbi, MoolahVaultAbi, MorphoLensAbi, AaveV4SpokeAbi, AaveV4OracleAbi, AaveV4HubAbi, DolomiteMarginAbi, GearboxMarketCompressorV310Abi, MorphoBlueAbi, MidnightAbi, TermRepoTokenAbi, TermRepoServicerAbi, TermRepoCollateralManagerAbi, LiquityTroveNFTAbi, LiquityCollSurplusPoolAbi, GearboxCreditAccountCompressorV310Abi } from '@1delta/abis';
|
|
10
10
|
export { MorphoLensAbi } from '@1delta/abis';
|
|
11
11
|
import { prepareDebitDataMulticall, prepareLenderDebitMulticall, parseDebitDataResult, parseLenderDebitResult, getPermit2ContractAddress, getCompoundV3CometAddress as getCompoundV3CometAddress$1, getMorphoAddress, getAaveCollateralTokenAddress, getSiloHalfForUnderlying, InitMarginAddresses, getLstAcceptedInputs } from '@1delta/calldata-sdk';
|
|
12
12
|
import { proxyNativeFetch } from '@1delta/proxy-fetch';
|
|
@@ -7504,6 +7504,15 @@ var getLendersForChain = (c) => {
|
|
|
7504
7504
|
if (midnightConfig()?.[c]?.midnight) {
|
|
7505
7505
|
lenders.push(Lender.MORPHO_MIDNIGHT);
|
|
7506
7506
|
}
|
|
7507
|
+
if (exactlyConfig()?.[c]?.previewer) {
|
|
7508
|
+
lenders.push(Lender.EXACTLY);
|
|
7509
|
+
}
|
|
7510
|
+
for (const l of liquityLendersByChain(c)) {
|
|
7511
|
+
lenders.push(l);
|
|
7512
|
+
}
|
|
7513
|
+
for (const l of riverLendersByChain(c)) {
|
|
7514
|
+
lenders.push(l);
|
|
7515
|
+
}
|
|
7507
7516
|
return lenders.filter((l) => !isExcludedLender(l));
|
|
7508
7517
|
};
|
|
7509
7518
|
var filterLendersByProtocol = (allLenders, protocolList) => {
|
|
@@ -7515,8 +7524,11 @@ var filterLendersByProtocol = (allLenders, protocolList) => {
|
|
|
7515
7524
|
const hasFluid = protocolList.includes(Lender.FLUID);
|
|
7516
7525
|
const hasGearboxV3 = protocolList.includes(Lender.GEARBOX_V3);
|
|
7517
7526
|
const hasDolomite = protocolList.includes(Lender.DOLOMITE);
|
|
7527
|
+
const liquityBases = LIQUITY_FAMILY_LENDERS.filter(
|
|
7528
|
+
(b) => protocolList.includes(b)
|
|
7529
|
+
);
|
|
7518
7530
|
return allLenders.filter(
|
|
7519
|
-
(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")
|
|
7531
|
+
(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") || liquityBases.some((b) => lender?.startsWith(b)) || protocolList.includes(Lender.RIVER) && lender?.startsWith("RIVER")
|
|
7520
7532
|
);
|
|
7521
7533
|
};
|
|
7522
7534
|
var getAavesForChain = () => {
|
|
@@ -11150,8 +11162,8 @@ async function fetchListaBrokerUserData(chainId, account, marketKeys, nowSecs =
|
|
|
11150
11162
|
const brokers = await resolveListaBrokers(chainId, marketKeys, getClient);
|
|
11151
11163
|
const ids = Object.keys(brokers);
|
|
11152
11164
|
const out = {};
|
|
11153
|
-
const
|
|
11154
|
-
BROKER_USER_CACHE[
|
|
11165
|
+
const cacheKey3 = `${chainId}:${account.toLowerCase()}`;
|
|
11166
|
+
BROKER_USER_CACHE[cacheKey3] = out;
|
|
11155
11167
|
if (ids.length === 0) return out;
|
|
11156
11168
|
try {
|
|
11157
11169
|
const client = getClient(chainId);
|
|
@@ -19612,7 +19624,7 @@ var getSiloV2ReservesDataConverter = (lender, chainId, prices, additionalYields,
|
|
|
19612
19624
|
{ self: market.silo0, other: market.silo1 },
|
|
19613
19625
|
{ self: market.silo1, other: market.silo0 }
|
|
19614
19626
|
];
|
|
19615
|
-
const
|
|
19627
|
+
const toBigInt16 = (v) => {
|
|
19616
19628
|
if (v === void 0 || v === null || v === "0x") return 0n;
|
|
19617
19629
|
if (typeof v === "bigint") return v;
|
|
19618
19630
|
try {
|
|
@@ -19624,8 +19636,8 @@ var getSiloV2ReservesDataConverter = (lender, chainId, prices, additionalYields,
|
|
|
19624
19636
|
for (let s = 0; s < 2; s++) {
|
|
19625
19637
|
const { self, other } = sides[s];
|
|
19626
19638
|
const slot = s * SILO_V2_CALLS_PER_SIDE;
|
|
19627
|
-
const totalAssetsRaw =
|
|
19628
|
-
const debtAssetsRaw =
|
|
19639
|
+
const totalAssetsRaw = toBigInt16(data[slot]);
|
|
19640
|
+
const debtAssetsRaw = toBigInt16(data[slot + 1]);
|
|
19629
19641
|
const irmConfigRaw = data[slot + 2];
|
|
19630
19642
|
const decimals = self.decimals;
|
|
19631
19643
|
const totalDeposits = Number(formatUnits(totalAssetsRaw, decimals));
|
|
@@ -19780,7 +19792,7 @@ var getSiloV3ReservesDataConverter = (lender, chainId, prices, additionalYields,
|
|
|
19780
19792
|
{ self: market.silo0, other: market.silo1 },
|
|
19781
19793
|
{ self: market.silo1, other: market.silo0 }
|
|
19782
19794
|
];
|
|
19783
|
-
const
|
|
19795
|
+
const toBigInt16 = (v) => {
|
|
19784
19796
|
if (v === void 0 || v === null || v === "0x") return 0n;
|
|
19785
19797
|
if (typeof v === "bigint") return v;
|
|
19786
19798
|
try {
|
|
@@ -19792,8 +19804,8 @@ var getSiloV3ReservesDataConverter = (lender, chainId, prices, additionalYields,
|
|
|
19792
19804
|
for (let s = 0; s < 2; s++) {
|
|
19793
19805
|
const { self, other } = sides[s];
|
|
19794
19806
|
const slot = s * SILO_V3_CALLS_PER_SIDE;
|
|
19795
|
-
const totalAssetsRaw =
|
|
19796
|
-
const debtAssetsRaw =
|
|
19807
|
+
const totalAssetsRaw = toBigInt16(data[slot]);
|
|
19808
|
+
const debtAssetsRaw = toBigInt16(data[slot + 1]);
|
|
19797
19809
|
const irmConfigRaw = data[slot + 2];
|
|
19798
19810
|
const decimals = self.decimals;
|
|
19799
19811
|
const totalDeposits = Number(formatUnits(totalAssetsRaw, decimals));
|
|
@@ -20853,6 +20865,7 @@ var getLenderPublicData = async (chainId, lenders, prices, additionalYields, mul
|
|
|
20853
20865
|
}
|
|
20854
20866
|
return lenderData;
|
|
20855
20867
|
};
|
|
20868
|
+
var DEFAULT_MIDNIGHT_API = "https://api.morpho.org/v0/midnight";
|
|
20856
20869
|
var warn = (...args) => {
|
|
20857
20870
|
};
|
|
20858
20871
|
function midnightApiBaseUrl(chainId) {
|
|
@@ -20904,12 +20917,12 @@ function reduceTop(bids, asks) {
|
|
|
20904
20917
|
};
|
|
20905
20918
|
}
|
|
20906
20919
|
var ApiBookSource = class {
|
|
20920
|
+
baseUrl;
|
|
20921
|
+
fetchImpl;
|
|
20907
20922
|
constructor(baseUrl, fetchImpl = fetch) {
|
|
20908
20923
|
this.baseUrl = baseUrl;
|
|
20909
|
-
this.fetchImpl = fetchImpl;
|
|
20924
|
+
this.fetchImpl = (input, init) => fetchImpl.call(globalThis, input, init);
|
|
20910
20925
|
}
|
|
20911
|
-
baseUrl;
|
|
20912
|
-
fetchImpl;
|
|
20913
20926
|
async getBookTop(marketId) {
|
|
20914
20927
|
const url = `${this.baseUrl}/books/${marketId}`;
|
|
20915
20928
|
try {
|
|
@@ -20954,40 +20967,121 @@ var ApiBookSource = class {
|
|
|
20954
20967
|
);
|
|
20955
20968
|
return { bids, asks };
|
|
20956
20969
|
} catch (e) {
|
|
20957
|
-
|
|
20970
|
+
console.error(
|
|
20971
|
+
`[midnight getBook] ${url} threw:`,
|
|
20972
|
+
e?.message ?? e
|
|
20973
|
+
);
|
|
20974
|
+
return null;
|
|
20975
|
+
}
|
|
20976
|
+
}
|
|
20977
|
+
/**
|
|
20978
|
+
* ONE fetch → the full-depth aggregate top + a bounded best-first ladder slice
|
|
20979
|
+
* (top `maxLevels` per side). Same `/books/{marketId}` call as `getBookTop`, so
|
|
20980
|
+
* the public batch captures a chunk of the book for free (no extra request).
|
|
20981
|
+
*/
|
|
20982
|
+
async getTopAndBook(marketId, maxLevels = 20) {
|
|
20983
|
+
const url = `${this.baseUrl}/books/${marketId}`;
|
|
20984
|
+
try {
|
|
20985
|
+
const res = await this.fetchImpl(url);
|
|
20986
|
+
if (!res.ok) {
|
|
20987
|
+
warn(`book ${marketId} \u2192 HTTP ${res.status}`);
|
|
20988
|
+
return null;
|
|
20989
|
+
}
|
|
20990
|
+
const json = await res.json();
|
|
20991
|
+
const raw = json?.data ?? json;
|
|
20992
|
+
const bids = (Array.isArray(raw?.bids) ? raw.bids.map(parseLevel) : []).filter((l) => l.units > 0n).sort(
|
|
20993
|
+
(a, b) => a.tick < b.tick ? 1 : a.tick > b.tick ? -1 : 0
|
|
20994
|
+
);
|
|
20995
|
+
const asks = (Array.isArray(raw?.asks) ? raw.asks.map(parseLevel) : []).filter((l) => l.units > 0n).sort(
|
|
20996
|
+
(a, b) => a.tick < b.tick ? -1 : a.tick > b.tick ? 1 : 0
|
|
20997
|
+
);
|
|
20998
|
+
const top = reduceTop(bids, asks);
|
|
20999
|
+
const book = {
|
|
21000
|
+
bids: bids.slice(0, maxLevels),
|
|
21001
|
+
asks: asks.slice(0, maxLevels)
|
|
21002
|
+
};
|
|
21003
|
+
return { top, book };
|
|
21004
|
+
} catch (e) {
|
|
21005
|
+
console.error(
|
|
21006
|
+
`[midnight getTopAndBook] ${url} threw:`,
|
|
21007
|
+
e?.message ?? e
|
|
21008
|
+
);
|
|
20958
21009
|
return null;
|
|
20959
21010
|
}
|
|
20960
21011
|
}
|
|
21012
|
+
/**
|
|
21013
|
+
* Maker addresses per price level, keyed by tick string. `getBook` levels are
|
|
21014
|
+
* aggregated by tick and carry NO maker (a level can be several makers), so
|
|
21015
|
+
* this reads the individual offers from the `{side}/quote` endpoint (which the
|
|
21016
|
+
* book endpoint lacks) and groups their makers by tick. `assets` should be the
|
|
21017
|
+
* book's total depth so the quote returns EVERY offer (it returns none when the
|
|
21018
|
+
* target exceeds depth). Best-effort: `{}` on any failure.
|
|
21019
|
+
*/
|
|
21020
|
+
async getOfferMakers(marketId, side, assets) {
|
|
21021
|
+
const map = {};
|
|
21022
|
+
const url = `${this.baseUrl}/books/${marketId}/${side}/quote?assets=${assets}`;
|
|
21023
|
+
try {
|
|
21024
|
+
const res = await this.fetchImpl(url);
|
|
21025
|
+
if (!res.ok) return map;
|
|
21026
|
+
const json = await res.json();
|
|
21027
|
+
const d = json?.data ?? json;
|
|
21028
|
+
const takeable = Array.isArray(d?.takeable_offers) ? d.takeable_offers : [];
|
|
21029
|
+
for (const t of takeable) {
|
|
21030
|
+
const offer = t?.offer ?? {};
|
|
21031
|
+
const tick = String(offer?.tick ?? "");
|
|
21032
|
+
const maker = String(offer?.maker ?? "").toLowerCase();
|
|
21033
|
+
if (!tick || !/^0x[0-9a-f]{40}$/.test(maker)) continue;
|
|
21034
|
+
(map[tick] ??= []).push(maker);
|
|
21035
|
+
}
|
|
21036
|
+
} catch {
|
|
21037
|
+
}
|
|
21038
|
+
return map;
|
|
21039
|
+
}
|
|
20961
21040
|
};
|
|
20962
21041
|
function createMidnightBookSource(chainId, fetchImpl = fetch) {
|
|
20963
21042
|
return new ApiBookSource(midnightApiBaseUrl(chainId), fetchImpl);
|
|
20964
21043
|
}
|
|
20965
21044
|
|
|
20966
21045
|
// src/lending/public-data/midnight/fetchPublic.ts
|
|
21046
|
+
var MIDNIGHT_BOOK_LEVELS = 20;
|
|
20967
21047
|
var LKG_TTL_SEC = 30 * 60;
|
|
20968
|
-
var
|
|
20969
|
-
async function
|
|
21048
|
+
var lastGood = /* @__PURE__ */ new Map();
|
|
21049
|
+
async function fetchTopAndBookWithFallback(source, chainId, marketId, nowSec5) {
|
|
20970
21050
|
const key = `${chainId}:${marketId}`;
|
|
20971
|
-
|
|
21051
|
+
let fresh = null;
|
|
21052
|
+
if (source.getTopAndBook) {
|
|
21053
|
+
fresh = await source.getTopAndBook(marketId, MIDNIGHT_BOOK_LEVELS).catch(() => null);
|
|
21054
|
+
} else {
|
|
21055
|
+
const top = await source.getBookTop(marketId).catch(() => null);
|
|
21056
|
+
if (top) fresh = { top, book: { bids: [], asks: [] } };
|
|
21057
|
+
}
|
|
20972
21058
|
if (fresh) {
|
|
20973
|
-
|
|
20974
|
-
return fresh;
|
|
21059
|
+
lastGood.set(key, { top: fresh.top, book: fresh.book, at: nowSec5 });
|
|
21060
|
+
return { top: fresh.top, book: fresh.book };
|
|
21061
|
+
}
|
|
21062
|
+
const cached = lastGood.get(key);
|
|
21063
|
+
if (cached && nowSec5 - cached.at <= LKG_TTL_SEC) {
|
|
21064
|
+
return { top: cached.top, book: cached.book };
|
|
20975
21065
|
}
|
|
20976
|
-
|
|
20977
|
-
if (cached && nowSec2 - cached.at <= LKG_TTL_SEC) return cached.top;
|
|
20978
|
-
return null;
|
|
21066
|
+
return { top: null, book: null };
|
|
20979
21067
|
}
|
|
20980
21068
|
async function fetchMidnightMarkets(chainId, source = createMidnightBookSource(chainId)) {
|
|
20981
21069
|
const markets = midnightMarketsByChain(chainId);
|
|
20982
21070
|
if (markets.length === 0) return [];
|
|
20983
|
-
const
|
|
21071
|
+
const nowSec5 = Math.floor(Date.now() / 1e3);
|
|
20984
21072
|
return Promise.all(
|
|
20985
|
-
markets.map(async (config) =>
|
|
20986
|
-
config
|
|
20987
|
-
|
|
20988
|
-
|
|
20989
|
-
|
|
20990
|
-
|
|
21073
|
+
markets.map(async (config) => {
|
|
21074
|
+
if (Number(config.maturity) <= nowSec5) {
|
|
21075
|
+
return { config, top: null, book: null };
|
|
21076
|
+
}
|
|
21077
|
+
const { top, book } = await fetchTopAndBookWithFallback(
|
|
21078
|
+
source,
|
|
21079
|
+
chainId,
|
|
21080
|
+
config.marketId,
|
|
21081
|
+
nowSec5
|
|
21082
|
+
);
|
|
21083
|
+
return { config, top, book };
|
|
21084
|
+
})
|
|
20991
21085
|
);
|
|
20992
21086
|
}
|
|
20993
21087
|
|
|
@@ -21106,7 +21200,7 @@ function convertMidnightMarketsToResponse(raw, chainId, prices = {}, _additional
|
|
|
21106
21200
|
}, tokens = {}) {
|
|
21107
21201
|
const out = {};
|
|
21108
21202
|
const now = nowSec();
|
|
21109
|
-
for (const { config, top } of raw) {
|
|
21203
|
+
for (const { config, top, book } of raw) {
|
|
21110
21204
|
if (!config?.marketId || !config.loanToken) continue;
|
|
21111
21205
|
const m = midnightLenderKey(config.marketId);
|
|
21112
21206
|
const maturity = Number(config.maturity);
|
|
@@ -21243,6 +21337,12 @@ function convertMidnightMarketsToResponse(raw, chainId, prices = {}, _additional
|
|
|
21243
21337
|
isFrozen: false
|
|
21244
21338
|
};
|
|
21245
21339
|
});
|
|
21340
|
+
const toLevels = (levels) => (levels ?? []).map((l) => ({
|
|
21341
|
+
apr: tickToAprNumber(l.tick, ttmBig) * 100,
|
|
21342
|
+
units: l.units.toString(),
|
|
21343
|
+
assets: formatNr(l.assets, config.loanDecimals)
|
|
21344
|
+
}));
|
|
21345
|
+
const marketBook = book && !matured ? { bids: toLevels(book.bids), asks: toLevels(book.asks) } : void 0;
|
|
21246
21346
|
const primaryCollateral = config.collateralParams[0];
|
|
21247
21347
|
entry.params = {
|
|
21248
21348
|
market: {
|
|
@@ -21284,7 +21384,9 @@ function convertMidnightMarketsToResponse(raw, chainId, prices = {}, _additional
|
|
|
21284
21384
|
},
|
|
21285
21385
|
enterGate: config.enterGate,
|
|
21286
21386
|
liquidatorGate: config.liquidatorGate,
|
|
21287
|
-
collateralParams: config.collateralParams
|
|
21387
|
+
collateralParams: config.collateralParams,
|
|
21388
|
+
// Bounded top-of-book slice (top-N levels/side) for later filtering.
|
|
21389
|
+
book: marketBook
|
|
21288
21390
|
}
|
|
21289
21391
|
};
|
|
21290
21392
|
entry.chainId = chainId;
|
|
@@ -21292,6 +21394,1175 @@ function convertMidnightMarketsToResponse(raw, chainId, prices = {}, _additional
|
|
|
21292
21394
|
}
|
|
21293
21395
|
return out;
|
|
21294
21396
|
}
|
|
21397
|
+
var WAD3 = 1e18;
|
|
21398
|
+
var TERM_SUBGRAPH_BY_CHAIN = {
|
|
21399
|
+
"1": "https://api.subgraph.ormilabs.com/api/public/05e9a4e2-103b-4163-a81e-3b1b038d0055/subgraphs/term-finance-mainnet/latest/gn",
|
|
21400
|
+
"43114": "https://api.subgraph.ormilabs.com/api/public/05e9a4e2-103b-4163-a81e-3b1b038d0055/subgraphs/term-finance-avalanche/latest/gn",
|
|
21401
|
+
"56": "https://api.subgraph.ormilabs.com/api/public/05e9a4e2-103b-4163-a81e-3b1b038d0055/subgraphs/term-finance-bnb/latest/gn",
|
|
21402
|
+
"8453": "https://api.subgraph.ormilabs.com/api/public/05e9a4e2-103b-4163-a81e-3b1b038d0055/subgraphs/term-finance-base/latest/gn",
|
|
21403
|
+
"42161": "https://api.subgraph.ormilabs.com/api/public/05e9a4e2-103b-4163-a81e-3b1b038d0055/subgraphs/term-finance-arbitrum/latest/gn"
|
|
21404
|
+
};
|
|
21405
|
+
var warn2 = (...args) => {
|
|
21406
|
+
};
|
|
21407
|
+
function termApiBaseUrl(chainId) {
|
|
21408
|
+
return resolveTermApiBase(chainId) || TERM_SUBGRAPH_BY_CHAIN[chainId] || "";
|
|
21409
|
+
}
|
|
21410
|
+
var toNum = (v) => {
|
|
21411
|
+
if (v == null || v === "") return 0;
|
|
21412
|
+
const n = typeof v === "number" ? v : Number(v);
|
|
21413
|
+
return Number.isFinite(n) ? n : 0;
|
|
21414
|
+
};
|
|
21415
|
+
var toBig3 = (v) => {
|
|
21416
|
+
try {
|
|
21417
|
+
return v == null ? 0n : BigInt(String(v));
|
|
21418
|
+
} catch {
|
|
21419
|
+
return 0n;
|
|
21420
|
+
}
|
|
21421
|
+
};
|
|
21422
|
+
var TermSubgraphSource = class {
|
|
21423
|
+
url;
|
|
21424
|
+
fetchImpl;
|
|
21425
|
+
constructor(url, fetchImpl = fetch) {
|
|
21426
|
+
this.url = url;
|
|
21427
|
+
this.fetchImpl = (input, init) => fetchImpl.call(globalThis, input, init);
|
|
21428
|
+
}
|
|
21429
|
+
async gql(query3, variables) {
|
|
21430
|
+
if (!this.url) return null;
|
|
21431
|
+
try {
|
|
21432
|
+
const res = await this.fetchImpl(this.url, {
|
|
21433
|
+
method: "POST",
|
|
21434
|
+
headers: { "content-type": "application/json" },
|
|
21435
|
+
body: JSON.stringify({ query: query3, variables })
|
|
21436
|
+
});
|
|
21437
|
+
if (!res.ok) {
|
|
21438
|
+
warn2(`HTTP ${res.status}`);
|
|
21439
|
+
return null;
|
|
21440
|
+
}
|
|
21441
|
+
const json = await res.json();
|
|
21442
|
+
if (json?.errors) {
|
|
21443
|
+
warn2("graphql errors", json.errors);
|
|
21444
|
+
return null;
|
|
21445
|
+
}
|
|
21446
|
+
return json?.data ?? null;
|
|
21447
|
+
} catch (e) {
|
|
21448
|
+
return null;
|
|
21449
|
+
}
|
|
21450
|
+
}
|
|
21451
|
+
async getBookTop(config) {
|
|
21452
|
+
return (await this.getTopAndBook(config))?.top ?? null;
|
|
21453
|
+
}
|
|
21454
|
+
/**
|
|
21455
|
+
* ONE query → the aggregate top (best APR + FULL depth) PLUS a bounded book
|
|
21456
|
+
* slice (top `maxLevels` open orders per side). `asks` = orders selling repo
|
|
21457
|
+
* tokens (the secondary LEND book); `bids` = the rest (borrow side, usually
|
|
21458
|
+
* empty — Term borrow is sealed-bid auction, not a continuous book). Term
|
|
21459
|
+
* secondary orders carry no per-order rate, so every level shares the market's
|
|
21460
|
+
* clearing APR; the levels expose per-order SIZE for filtering.
|
|
21461
|
+
*/
|
|
21462
|
+
async getTopAndBook(config, maxLevels = 20) {
|
|
21463
|
+
const id = config.termRepoId.toLowerCase();
|
|
21464
|
+
const repoToken = config.repoToken.toLowerCase();
|
|
21465
|
+
const data = await this.gql(
|
|
21466
|
+
`query Top($id: ID!, $repoId: Bytes!) {
|
|
21467
|
+
termRepo(id: $id) { termRepoTokenRedemptionRatio }
|
|
21468
|
+
termAuctions(where: { term: $id, auctionComplete: true }, orderBy: auctionEndTime, orderDirection: desc, first: 1) {
|
|
21469
|
+
auctionClearingPrice
|
|
21470
|
+
dayCountFractionMantissa
|
|
21471
|
+
}
|
|
21472
|
+
termOrders(where: { termRepoId: $repoId, orderCancelled: false }, first: 500) {
|
|
21473
|
+
makerToken
|
|
21474
|
+
originalOrderAmount
|
|
21475
|
+
filledAmount
|
|
21476
|
+
}
|
|
21477
|
+
}`,
|
|
21478
|
+
{ id, repoId: id }
|
|
21479
|
+
);
|
|
21480
|
+
if (!data) return null;
|
|
21481
|
+
const redemptionRatio = toBig3(data.termRepo?.termRepoTokenRedemptionRatio) || BigInt(WAD3);
|
|
21482
|
+
const auction = data.termAuctions?.[0];
|
|
21483
|
+
const clearingRate = toNum(auction?.auctionClearingPrice);
|
|
21484
|
+
const aprPct = clearingRate > 0 ? clearingRate / WAD3 * 100 : 0;
|
|
21485
|
+
const scale = Math.pow(10, config.loanDecimals);
|
|
21486
|
+
const toLoan = (repoUnits) => Number(repoUnits * redemptionRatio / BigInt(WAD3)) / scale;
|
|
21487
|
+
const orders = (data.termOrders ?? []).map((o) => ({
|
|
21488
|
+
remaining: toBig3(o.originalOrderAmount) - toBig3(o.filledAmount),
|
|
21489
|
+
isAsk: String(o.makerToken).toLowerCase() === repoToken
|
|
21490
|
+
})).filter((o) => o.remaining > 0n).sort(
|
|
21491
|
+
(a, b) => a.remaining < b.remaining ? 1 : a.remaining > b.remaining ? -1 : 0
|
|
21492
|
+
);
|
|
21493
|
+
let supplyUnits = 0n;
|
|
21494
|
+
let borrowUnits = 0n;
|
|
21495
|
+
const asks = [];
|
|
21496
|
+
const bids = [];
|
|
21497
|
+
for (const o of orders) {
|
|
21498
|
+
const arr = o.isAsk ? asks : bids;
|
|
21499
|
+
if (o.isAsk) supplyUnits += o.remaining;
|
|
21500
|
+
else borrowUnits += o.remaining;
|
|
21501
|
+
if (arr.length < maxLevels) {
|
|
21502
|
+
arr.push({
|
|
21503
|
+
apr: aprPct,
|
|
21504
|
+
units: o.remaining.toString(),
|
|
21505
|
+
assets: toLoan(o.remaining)
|
|
21506
|
+
});
|
|
21507
|
+
}
|
|
21508
|
+
}
|
|
21509
|
+
const top = {
|
|
21510
|
+
supplyAprPct: aprPct,
|
|
21511
|
+
borrowAprPct: aprPct,
|
|
21512
|
+
supplyLiquidity: toLoan(supplyUnits),
|
|
21513
|
+
borrowLiquidity: toLoan(borrowUnits)
|
|
21514
|
+
};
|
|
21515
|
+
return { top, book: { bids, asks } };
|
|
21516
|
+
}
|
|
21517
|
+
async getListings(config) {
|
|
21518
|
+
const id = config.termRepoId.toLowerCase();
|
|
21519
|
+
const repoToken = config.repoToken.toLowerCase();
|
|
21520
|
+
const data = await this.gql(
|
|
21521
|
+
`query Listings($repoId: Bytes!) {
|
|
21522
|
+
termOrders(where: { termRepoId: $repoId, orderCancelled: false }, first: 500) {
|
|
21523
|
+
id
|
|
21524
|
+
maker
|
|
21525
|
+
makerToken
|
|
21526
|
+
originalOrderAmount
|
|
21527
|
+
filledAmount
|
|
21528
|
+
}
|
|
21529
|
+
}`,
|
|
21530
|
+
{ repoId: id }
|
|
21531
|
+
);
|
|
21532
|
+
if (!data) return null;
|
|
21533
|
+
return (data.termOrders ?? []).filter((o) => String(o.makerToken).toLowerCase() === repoToken).map((o) => {
|
|
21534
|
+
const remaining = toBig3(o.originalOrderAmount) - toBig3(o.filledAmount);
|
|
21535
|
+
return {
|
|
21536
|
+
listingId: String(o.id),
|
|
21537
|
+
seller: String(o.maker),
|
|
21538
|
+
repoToken: config.repoToken,
|
|
21539
|
+
amount: remaining.toString()
|
|
21540
|
+
};
|
|
21541
|
+
}).filter((l) => toBig3(l.amount) > 0n);
|
|
21542
|
+
}
|
|
21543
|
+
};
|
|
21544
|
+
function createTermBookSource(chainId, fetchImpl = fetch) {
|
|
21545
|
+
return new TermSubgraphSource(termApiBaseUrl(chainId), fetchImpl);
|
|
21546
|
+
}
|
|
21547
|
+
|
|
21548
|
+
// src/lending/public-data/term/fetchPublic.ts
|
|
21549
|
+
var TERM_BOOK_LEVELS = 20;
|
|
21550
|
+
var LKG_TTL_SEC2 = 30 * 60;
|
|
21551
|
+
var lastGood2 = /* @__PURE__ */ new Map();
|
|
21552
|
+
async function fetchTopAndBookWithFallback2(source, chainId, config, nowSec5) {
|
|
21553
|
+
const key = `${chainId}:${config.termRepoId}`;
|
|
21554
|
+
let fresh = null;
|
|
21555
|
+
if (source.getTopAndBook) {
|
|
21556
|
+
fresh = await source.getTopAndBook(config, TERM_BOOK_LEVELS).catch(() => null);
|
|
21557
|
+
} else {
|
|
21558
|
+
const top = await source.getBookTop(config).catch(() => null);
|
|
21559
|
+
if (top) fresh = { top, book: { bids: [], asks: [] } };
|
|
21560
|
+
}
|
|
21561
|
+
if (fresh) {
|
|
21562
|
+
lastGood2.set(key, { top: fresh.top, book: fresh.book, at: nowSec5 });
|
|
21563
|
+
return { top: fresh.top, book: fresh.book };
|
|
21564
|
+
}
|
|
21565
|
+
const cached = lastGood2.get(key);
|
|
21566
|
+
if (cached && nowSec5 - cached.at <= LKG_TTL_SEC2) {
|
|
21567
|
+
return { top: cached.top, book: cached.book };
|
|
21568
|
+
}
|
|
21569
|
+
return { top: null, book: null };
|
|
21570
|
+
}
|
|
21571
|
+
async function fetchTermMarkets(chainId, source = createTermBookSource(chainId)) {
|
|
21572
|
+
const markets = termMarketsByChain(chainId);
|
|
21573
|
+
if (markets.length === 0) return [];
|
|
21574
|
+
const nowSec5 = Math.floor(Date.now() / 1e3);
|
|
21575
|
+
return Promise.all(
|
|
21576
|
+
markets.map(async (config) => {
|
|
21577
|
+
if (Number(config.maturity) <= nowSec5) {
|
|
21578
|
+
return { config, top: null, book: null };
|
|
21579
|
+
}
|
|
21580
|
+
const { top, book } = await fetchTopAndBookWithFallback2(
|
|
21581
|
+
source,
|
|
21582
|
+
chainId,
|
|
21583
|
+
config,
|
|
21584
|
+
nowSec5
|
|
21585
|
+
);
|
|
21586
|
+
return { config, top, book };
|
|
21587
|
+
})
|
|
21588
|
+
);
|
|
21589
|
+
}
|
|
21590
|
+
|
|
21591
|
+
// src/lending/public-data/term/math.ts
|
|
21592
|
+
var WAD4 = 1e18;
|
|
21593
|
+
function termMaintenanceRatioToLtv(maintenanceRatio) {
|
|
21594
|
+
if (!maintenanceRatio) return 0;
|
|
21595
|
+
let r;
|
|
21596
|
+
try {
|
|
21597
|
+
r = BigInt(maintenanceRatio);
|
|
21598
|
+
} catch {
|
|
21599
|
+
return 0;
|
|
21600
|
+
}
|
|
21601
|
+
if (r <= 0n) return 0;
|
|
21602
|
+
const ratio = Number(r) / WAD4;
|
|
21603
|
+
return ratio > 0 ? 1 / ratio : 0;
|
|
21604
|
+
}
|
|
21605
|
+
function termLiquidatedDamagesToPenalty(liquidatedDamages) {
|
|
21606
|
+
if (!liquidatedDamages) return 0;
|
|
21607
|
+
try {
|
|
21608
|
+
return Number(BigInt(liquidatedDamages)) / WAD4;
|
|
21609
|
+
} catch {
|
|
21610
|
+
return 0;
|
|
21611
|
+
}
|
|
21612
|
+
}
|
|
21613
|
+
|
|
21614
|
+
// src/lending/public-data/term/convertPublic.ts
|
|
21615
|
+
var nowSec2 = () => Math.floor(Date.now() / 1e3);
|
|
21616
|
+
function termLenderKey(termRepoId) {
|
|
21617
|
+
const body = termRepoId.startsWith("0x") ? termRepoId.slice(2) : termRepoId;
|
|
21618
|
+
return "TERM_FINANCE_" + body.toUpperCase();
|
|
21619
|
+
}
|
|
21620
|
+
function currencyFor2(address, decimals, tokens) {
|
|
21621
|
+
const lower = address.toLowerCase();
|
|
21622
|
+
return tokens[lower] ?? { address: lower, symbol: "", name: "", decimals };
|
|
21623
|
+
}
|
|
21624
|
+
function convertTermMarketsToResponse(raw, chainId, prices = {}, _additionalYields = { intrinsicYields: {}, lenderRewards: {}, loaded: true }, tokens = {}) {
|
|
21625
|
+
const out = {};
|
|
21626
|
+
const now = nowSec2();
|
|
21627
|
+
for (const { config, top, book } of raw) {
|
|
21628
|
+
if (!config?.termRepoId || !config.purchaseToken) continue;
|
|
21629
|
+
const m = termLenderKey(config.termRepoId);
|
|
21630
|
+
const maturity = Number(config.maturity);
|
|
21631
|
+
const ttm = maturity - now;
|
|
21632
|
+
const matured = ttm <= 0;
|
|
21633
|
+
const supplyAprPct = !matured ? top?.supplyAprPct ?? 0 : 0;
|
|
21634
|
+
const borrowAprPct = !matured ? top?.borrowAprPct ?? 0 : 0;
|
|
21635
|
+
const terms = borrowAprPct > 0 && !matured ? [
|
|
21636
|
+
{
|
|
21637
|
+
termId: 0,
|
|
21638
|
+
durationSecs: Math.max(0, ttm),
|
|
21639
|
+
durationDays: ttm / 86400,
|
|
21640
|
+
apr: borrowAprPct
|
|
21641
|
+
}
|
|
21642
|
+
] : void 0;
|
|
21643
|
+
const loanAddr = config.purchaseToken.toLowerCase();
|
|
21644
|
+
const loanAsset = tokens[loanAddr];
|
|
21645
|
+
const loanKey = toOracleKey(loanAsset?.assetGroup) || toGenericPriceKey(loanAddr, chainId);
|
|
21646
|
+
const loanPrice = prices[loanKey] ?? 0;
|
|
21647
|
+
const supplyLiquidity = top?.supplyLiquidity ?? 0;
|
|
21648
|
+
const borrowLiquidity = top?.borrowLiquidity ?? 0;
|
|
21649
|
+
const entry = { data: {} };
|
|
21650
|
+
const loanUid = createMarketUid(chainId, m, loanAddr);
|
|
21651
|
+
entry.data[loanUid] = {
|
|
21652
|
+
marketUid: loanUid,
|
|
21653
|
+
name: "Loan " + (tokens[loanAddr]?.symbol ?? ""),
|
|
21654
|
+
poolId: loanAddr,
|
|
21655
|
+
underlying: loanAddr,
|
|
21656
|
+
asset: currencyFor2(loanAddr, config.loanDecimals, tokens),
|
|
21657
|
+
totalDeposits: supplyLiquidity,
|
|
21658
|
+
totalDebtStable: 0,
|
|
21659
|
+
totalDebt: 0,
|
|
21660
|
+
totalLiquidity: borrowLiquidity,
|
|
21661
|
+
borrowLiquidity,
|
|
21662
|
+
totalLiquidityUSD: borrowLiquidity * loanPrice,
|
|
21663
|
+
borrowLiquidityUSD: borrowLiquidity * loanPrice,
|
|
21664
|
+
totalDepositsUSD: supplyLiquidity * loanPrice,
|
|
21665
|
+
totalDebtStableUSD: 0,
|
|
21666
|
+
totalDebtUSD: 0,
|
|
21667
|
+
utilization: 0,
|
|
21668
|
+
depositRate: supplyAprPct,
|
|
21669
|
+
variableBorrowRate: borrowAprPct,
|
|
21670
|
+
// Term is fixed-rate: mirror the fixed borrow APR on stableBorrowRate too.
|
|
21671
|
+
stableBorrowRate: borrowAprPct,
|
|
21672
|
+
intrinsicYield: 0,
|
|
21673
|
+
rewards: void 0,
|
|
21674
|
+
decimals: config.loanDecimals,
|
|
21675
|
+
config: {
|
|
21676
|
+
0: {
|
|
21677
|
+
category: 0,
|
|
21678
|
+
borrowCollateralFactor: 0,
|
|
21679
|
+
collateralFactor: 0,
|
|
21680
|
+
borrowFactor: 1,
|
|
21681
|
+
liquidationPenalty: 0,
|
|
21682
|
+
closeFactor: 1,
|
|
21683
|
+
collateralDisabled: true,
|
|
21684
|
+
debtDisabled: false
|
|
21685
|
+
}
|
|
21686
|
+
},
|
|
21687
|
+
closeFactor: 1,
|
|
21688
|
+
collateralActive: false,
|
|
21689
|
+
borrowingEnabled: !matured,
|
|
21690
|
+
depositsEnabled: !matured,
|
|
21691
|
+
hasStable: false,
|
|
21692
|
+
variableBorrowDisabled: false,
|
|
21693
|
+
isActive: true,
|
|
21694
|
+
isFrozen: false
|
|
21695
|
+
};
|
|
21696
|
+
config.collateralParams.forEach((c) => {
|
|
21697
|
+
const collAddr = c.token.toLowerCase();
|
|
21698
|
+
const ltv = termMaintenanceRatioToLtv(c.maintenanceRatio);
|
|
21699
|
+
const liquidationPenalty = termLiquidatedDamagesToPenalty(c.liquidatedDamages) || liquidationPenaltyFromLltv(ltv);
|
|
21700
|
+
const collUid = createMarketUid(chainId, m, collAddr);
|
|
21701
|
+
entry.data[collUid] = {
|
|
21702
|
+
marketUid: collUid,
|
|
21703
|
+
name: "Collateral " + (tokens[collAddr]?.symbol ?? ""),
|
|
21704
|
+
poolId: collAddr,
|
|
21705
|
+
underlying: collAddr,
|
|
21706
|
+
asset: currencyFor2(collAddr, c.decimals, tokens),
|
|
21707
|
+
totalDeposits: 0,
|
|
21708
|
+
totalDebtStable: 0,
|
|
21709
|
+
totalDebt: 0,
|
|
21710
|
+
totalLiquidity: 0,
|
|
21711
|
+
borrowLiquidity: 0,
|
|
21712
|
+
totalLiquidityUSD: 0,
|
|
21713
|
+
borrowLiquidityUSD: 0,
|
|
21714
|
+
totalDepositsUSD: 0,
|
|
21715
|
+
totalDebtStableUSD: 0,
|
|
21716
|
+
totalDebtUSD: 0,
|
|
21717
|
+
utilization: 0,
|
|
21718
|
+
depositRate: 0,
|
|
21719
|
+
variableBorrowRate: 0,
|
|
21720
|
+
stableBorrowRate: 0,
|
|
21721
|
+
intrinsicYield: 0,
|
|
21722
|
+
rewards: void 0,
|
|
21723
|
+
decimals: c.decimals,
|
|
21724
|
+
config: {
|
|
21725
|
+
0: {
|
|
21726
|
+
category: 0,
|
|
21727
|
+
borrowCollateralFactor: ltv,
|
|
21728
|
+
collateralFactor: ltv,
|
|
21729
|
+
borrowFactor: 1,
|
|
21730
|
+
liquidationPenalty,
|
|
21731
|
+
closeFactor: 1,
|
|
21732
|
+
collateralDisabled: false,
|
|
21733
|
+
debtDisabled: true
|
|
21734
|
+
}
|
|
21735
|
+
},
|
|
21736
|
+
closeFactor: 1,
|
|
21737
|
+
collateralActive: true,
|
|
21738
|
+
borrowingEnabled: false,
|
|
21739
|
+
depositsEnabled: !matured,
|
|
21740
|
+
hasStable: false,
|
|
21741
|
+
isActive: true,
|
|
21742
|
+
isFrozen: false
|
|
21743
|
+
};
|
|
21744
|
+
});
|
|
21745
|
+
const primaryCollateral = config.collateralParams[0];
|
|
21746
|
+
entry.params = {
|
|
21747
|
+
market: {
|
|
21748
|
+
lender: m,
|
|
21749
|
+
name: config.name,
|
|
21750
|
+
loanDecimals: config.loanDecimals,
|
|
21751
|
+
collateralDecimals: primaryCollateral?.decimals,
|
|
21752
|
+
id: config.termRepoId,
|
|
21753
|
+
lltv: primaryCollateral?.maintenanceRatio ?? "0",
|
|
21754
|
+
oracle: zeroAddress,
|
|
21755
|
+
irm: zeroAddress,
|
|
21756
|
+
collateralAddress: primaryCollateral?.token ?? zeroAddress,
|
|
21757
|
+
loanAddress: loanAddr,
|
|
21758
|
+
terms,
|
|
21759
|
+
// Term-specific extras (consumed by calldata / worker-api resolvers)
|
|
21760
|
+
maturity: config.maturity,
|
|
21761
|
+
redemptionTimestamp: config.redemptionTimestamp,
|
|
21762
|
+
endOfRepurchaseWindow: config.endOfRepurchaseWindow,
|
|
21763
|
+
redemptionValue: config.redemptionValue,
|
|
21764
|
+
servicingFee: config.servicingFee,
|
|
21765
|
+
// Canonical cross-protocol fixed-term descriptor. Term: single calendar
|
|
21766
|
+
// maturity, auction-cleared fixed rate, no early-repay penalty on the
|
|
21767
|
+
// lender (exit = sell the repo token on the secondary book).
|
|
21768
|
+
fixedTerm: {
|
|
21769
|
+
model: "term",
|
|
21770
|
+
maturity: Number(config.maturity),
|
|
21771
|
+
fees: {},
|
|
21772
|
+
earlyRepay: { kind: "none" },
|
|
21773
|
+
// Fixed rate is discovered by the periodic sealed-bid auction; the
|
|
21774
|
+
// per-repo servicer is the market-level venue reference.
|
|
21775
|
+
provider: { kind: "auction", address: config.servicer }
|
|
21776
|
+
},
|
|
21777
|
+
collateralParams: config.collateralParams,
|
|
21778
|
+
// Bounded book slice (top-N open orders/side) for later filtering. Term
|
|
21779
|
+
// levels are already rate+size normalized; pass through (empty when
|
|
21780
|
+
// matured or no book). `asks` = secondary lend orders, `bids` = borrow.
|
|
21781
|
+
book: !matured && book ? { bids: book.bids, asks: book.asks } : void 0
|
|
21782
|
+
}
|
|
21783
|
+
};
|
|
21784
|
+
entry.chainId = chainId;
|
|
21785
|
+
out[m] = entry;
|
|
21786
|
+
}
|
|
21787
|
+
return out;
|
|
21788
|
+
}
|
|
21789
|
+
async function fetchExactlyMarkets(chainId) {
|
|
21790
|
+
const cfg = exactlyConfig()?.[chainId];
|
|
21791
|
+
if (!cfg?.previewer || !cfg?.auditor) {
|
|
21792
|
+
return { markets: [], liquidationIncentive: null };
|
|
21793
|
+
}
|
|
21794
|
+
const client = getEvmClient(chainId);
|
|
21795
|
+
const [markets, liquidationIncentive] = await Promise.all([
|
|
21796
|
+
client.readContract({
|
|
21797
|
+
address: cfg.previewer,
|
|
21798
|
+
abi: ExactlyPreviewerAbi,
|
|
21799
|
+
functionName: "exactly",
|
|
21800
|
+
args: [zeroAddress]
|
|
21801
|
+
}).then((res) => res).catch(() => []),
|
|
21802
|
+
client.readContract({
|
|
21803
|
+
address: cfg.auditor,
|
|
21804
|
+
abi: ExactlyAuditorAbi,
|
|
21805
|
+
functionName: "liquidationIncentive"
|
|
21806
|
+
}).then((res) => ({
|
|
21807
|
+
liquidator: res[0],
|
|
21808
|
+
lenders: res[1]
|
|
21809
|
+
})).catch(() => null)
|
|
21810
|
+
]);
|
|
21811
|
+
return { markets: [...markets], liquidationIncentive };
|
|
21812
|
+
}
|
|
21813
|
+
|
|
21814
|
+
// src/lending/public-data/exactly/math.ts
|
|
21815
|
+
var WAD5 = 1e18;
|
|
21816
|
+
var YEAR_SECONDS = 31536e3;
|
|
21817
|
+
function exactlyWadRateToPercent(rate) {
|
|
21818
|
+
if (!rate) return 0;
|
|
21819
|
+
return Number(rate) / WAD5 * 100;
|
|
21820
|
+
}
|
|
21821
|
+
function exactlyUsdPrice(usdPrice) {
|
|
21822
|
+
if (!usdPrice) return 0;
|
|
21823
|
+
return Number(usdPrice) / WAD5;
|
|
21824
|
+
}
|
|
21825
|
+
function exactlyPenaltyRateToAprPercent(penaltyRatePerSecond) {
|
|
21826
|
+
if (!penaltyRatePerSecond) return 0;
|
|
21827
|
+
return Number(penaltyRatePerSecond) / WAD5 * YEAR_SECONDS * 100;
|
|
21828
|
+
}
|
|
21829
|
+
function exactlyFloatingDepositAprPercent(floatingBorrowRate, floatingDebt, floatingBackupBorrowed, floatingAssets) {
|
|
21830
|
+
if (!floatingBorrowRate || !floatingAssets) return 0;
|
|
21831
|
+
const lent = Number((floatingDebt ?? 0n) + (floatingBackupBorrowed ?? 0n));
|
|
21832
|
+
const assets = Number(floatingAssets);
|
|
21833
|
+
if (assets <= 0 || lent <= 0) return 0;
|
|
21834
|
+
return Number(floatingBorrowRate) / WAD5 * (lent / assets) * 100;
|
|
21835
|
+
}
|
|
21836
|
+
function exactlyPairLtv(collateralAdjustFactor, borrowAdjustFactor) {
|
|
21837
|
+
if (!collateralAdjustFactor || !borrowAdjustFactor) return 0;
|
|
21838
|
+
return Number(collateralAdjustFactor) / WAD5 * (Number(borrowAdjustFactor) / WAD5);
|
|
21839
|
+
}
|
|
21840
|
+
|
|
21841
|
+
// src/lending/public-data/exactly/convertPublic.ts
|
|
21842
|
+
var nowSec3 = () => Math.floor(Date.now() / 1e3);
|
|
21843
|
+
function exactlyLenderKey(market) {
|
|
21844
|
+
const body = market.startsWith("0x") ? market.slice(2) : market;
|
|
21845
|
+
return "EXACTLY_" + body.toUpperCase();
|
|
21846
|
+
}
|
|
21847
|
+
function exactlyMarketFromLenderKey(lender) {
|
|
21848
|
+
if (!lender.startsWith("EXACTLY_")) return void 0;
|
|
21849
|
+
const body = lender.slice("EXACTLY_".length);
|
|
21850
|
+
return body.length === 40 ? "0x" + body.toLowerCase() : void 0;
|
|
21851
|
+
}
|
|
21852
|
+
function toHuman(raw, decimals) {
|
|
21853
|
+
return Number(raw) / 10 ** decimals;
|
|
21854
|
+
}
|
|
21855
|
+
function currencyFor3(address, decimals, symbol, tokens) {
|
|
21856
|
+
const lower = address.toLowerCase();
|
|
21857
|
+
return tokens[lower] ?? { address: lower, symbol, name: symbol, decimals };
|
|
21858
|
+
}
|
|
21859
|
+
function convertExactlyMarketsToResponse(raw, chainId, prices = {}, _additionalYields = {
|
|
21860
|
+
intrinsicYields: {},
|
|
21861
|
+
lenderRewards: {},
|
|
21862
|
+
loaded: true
|
|
21863
|
+
}, tokens = {}) {
|
|
21864
|
+
const out = {};
|
|
21865
|
+
const now = nowSec3();
|
|
21866
|
+
const markets = raw?.markets ?? [];
|
|
21867
|
+
const liqBonus = raw?.liquidationIncentive ? Number(raw.liquidationIncentive.liquidator) / 1e18 : 0;
|
|
21868
|
+
for (const m of markets) {
|
|
21869
|
+
const lenderKey = exactlyLenderKey(m.market);
|
|
21870
|
+
const assetAddr = m.asset.toLowerCase();
|
|
21871
|
+
const decimals = m.decimals;
|
|
21872
|
+
const asset = tokens[assetAddr];
|
|
21873
|
+
const priceKey = toOracleKey(asset?.assetGroup) || toGenericPriceKey(assetAddr, chainId);
|
|
21874
|
+
const price2 = exactlyUsdPrice(m.usdPrice) || (prices[priceKey] ?? 0);
|
|
21875
|
+
const livePools = m.fixedPools.filter((p) => Number(p.maturity) > now);
|
|
21876
|
+
const terms = livePools.map((p) => {
|
|
21877
|
+
const maturity = Number(p.maturity);
|
|
21878
|
+
const ttm = maturity - now;
|
|
21879
|
+
return {
|
|
21880
|
+
termId: maturity,
|
|
21881
|
+
durationSecs: ttm,
|
|
21882
|
+
durationDays: ttm / 86400,
|
|
21883
|
+
apr: exactlyWadRateToPercent(p.minBorrowRate),
|
|
21884
|
+
depositApr: exactlyWadRateToPercent(p.depositRate),
|
|
21885
|
+
available: toHuman(p.available, decimals)
|
|
21886
|
+
};
|
|
21887
|
+
});
|
|
21888
|
+
const bestFixedBorrowApr = terms.length > 0 ? Math.min(...terms.map((t) => t.apr)) : 0;
|
|
21889
|
+
const fixedBorrowed = livePools.reduce(
|
|
21890
|
+
(acc, p) => acc + toHuman(p.borrowed, decimals),
|
|
21891
|
+
0
|
|
21892
|
+
);
|
|
21893
|
+
const fixedSupplied = livePools.reduce(
|
|
21894
|
+
(acc, p) => acc + toHuman(p.supplied, decimals),
|
|
21895
|
+
0
|
|
21896
|
+
);
|
|
21897
|
+
const totalDeposits = toHuman(m.totalFloatingDepositAssets, decimals) + fixedSupplied;
|
|
21898
|
+
const totalDebt = toHuman(m.totalFloatingBorrowAssets, decimals) + fixedBorrowed;
|
|
21899
|
+
const borrowLiquidity = toHuman(m.floatingAvailableAssets, decimals);
|
|
21900
|
+
const utilization = totalDeposits > 0 ? totalDebt / totalDeposits : 0;
|
|
21901
|
+
const selfLtv = exactlyPairLtv(m.adjustFactor, m.adjustFactor);
|
|
21902
|
+
const penaltyApr = exactlyPenaltyRateToAprPercent(m.penaltyRate);
|
|
21903
|
+
const entry = { data: {} };
|
|
21904
|
+
const loanUid = createMarketUid(chainId, lenderKey, assetAddr);
|
|
21905
|
+
entry.data[loanUid] = {
|
|
21906
|
+
marketUid: loanUid,
|
|
21907
|
+
name: m.assetSymbol,
|
|
21908
|
+
poolId: m.market.toLowerCase(),
|
|
21909
|
+
underlying: assetAddr,
|
|
21910
|
+
asset: currencyFor3(assetAddr, decimals, m.assetSymbol, tokens),
|
|
21911
|
+
totalDeposits,
|
|
21912
|
+
totalDebtStable: 0,
|
|
21913
|
+
totalDebt,
|
|
21914
|
+
totalLiquidity: borrowLiquidity,
|
|
21915
|
+
borrowLiquidity,
|
|
21916
|
+
totalLiquidityUSD: borrowLiquidity * price2,
|
|
21917
|
+
borrowLiquidityUSD: borrowLiquidity * price2,
|
|
21918
|
+
totalDepositsUSD: totalDeposits * price2,
|
|
21919
|
+
totalDebtStableUSD: 0,
|
|
21920
|
+
totalDebtUSD: totalDebt * price2,
|
|
21921
|
+
utilization,
|
|
21922
|
+
depositRate: exactlyFloatingDepositAprPercent(
|
|
21923
|
+
m.floatingBorrowRate,
|
|
21924
|
+
m.floatingDebt,
|
|
21925
|
+
m.floatingBackupBorrowed,
|
|
21926
|
+
m.floatingAssets
|
|
21927
|
+
),
|
|
21928
|
+
variableBorrowRate: exactlyWadRateToPercent(m.floatingBorrowRate),
|
|
21929
|
+
// Fixed-rate lender convention (Term/Lista): best fixed borrow APR on the
|
|
21930
|
+
// stable slot; the full per-maturity menu is params.market.terms.
|
|
21931
|
+
stableBorrowRate: bestFixedBorrowApr,
|
|
21932
|
+
intrinsicYield: 0,
|
|
21933
|
+
rewards: void 0,
|
|
21934
|
+
decimals,
|
|
21935
|
+
config: {
|
|
21936
|
+
0: {
|
|
21937
|
+
category: 0,
|
|
21938
|
+
borrowCollateralFactor: selfLtv,
|
|
21939
|
+
collateralFactor: selfLtv,
|
|
21940
|
+
borrowFactor: 1,
|
|
21941
|
+
liquidationPenalty: liqBonus,
|
|
21942
|
+
closeFactor: 1,
|
|
21943
|
+
collateralDisabled: false,
|
|
21944
|
+
debtDisabled: false
|
|
21945
|
+
}
|
|
21946
|
+
},
|
|
21947
|
+
closeFactor: 1,
|
|
21948
|
+
collateralActive: true,
|
|
21949
|
+
borrowingEnabled: true,
|
|
21950
|
+
depositsEnabled: true,
|
|
21951
|
+
hasStable: false,
|
|
21952
|
+
// Exactly DOES have a variable (floating) borrow side.
|
|
21953
|
+
variableBorrowDisabled: false,
|
|
21954
|
+
isActive: true,
|
|
21955
|
+
isFrozen: false
|
|
21956
|
+
};
|
|
21957
|
+
for (const c of markets) {
|
|
21958
|
+
if (c.market.toLowerCase() === m.market.toLowerCase()) continue;
|
|
21959
|
+
const collAddr = c.asset.toLowerCase();
|
|
21960
|
+
const ltv = exactlyPairLtv(c.adjustFactor, m.adjustFactor);
|
|
21961
|
+
const collUid = createMarketUid(chainId, lenderKey, collAddr);
|
|
21962
|
+
entry.data[collUid] = {
|
|
21963
|
+
marketUid: collUid,
|
|
21964
|
+
name: "Collateral " + c.assetSymbol,
|
|
21965
|
+
poolId: c.market.toLowerCase(),
|
|
21966
|
+
underlying: collAddr,
|
|
21967
|
+
asset: currencyFor3(collAddr, c.decimals, c.assetSymbol, tokens),
|
|
21968
|
+
totalDeposits: 0,
|
|
21969
|
+
totalDebtStable: 0,
|
|
21970
|
+
totalDebt: 0,
|
|
21971
|
+
totalLiquidity: 0,
|
|
21972
|
+
borrowLiquidity: 0,
|
|
21973
|
+
totalLiquidityUSD: 0,
|
|
21974
|
+
borrowLiquidityUSD: 0,
|
|
21975
|
+
totalDepositsUSD: 0,
|
|
21976
|
+
totalDebtStableUSD: 0,
|
|
21977
|
+
totalDebtUSD: 0,
|
|
21978
|
+
utilization: 0,
|
|
21979
|
+
depositRate: 0,
|
|
21980
|
+
variableBorrowRate: 0,
|
|
21981
|
+
stableBorrowRate: 0,
|
|
21982
|
+
intrinsicYield: 0,
|
|
21983
|
+
rewards: void 0,
|
|
21984
|
+
decimals: c.decimals,
|
|
21985
|
+
config: {
|
|
21986
|
+
0: {
|
|
21987
|
+
category: 0,
|
|
21988
|
+
borrowCollateralFactor: ltv,
|
|
21989
|
+
collateralFactor: ltv,
|
|
21990
|
+
borrowFactor: 1,
|
|
21991
|
+
liquidationPenalty: liqBonus,
|
|
21992
|
+
closeFactor: 1,
|
|
21993
|
+
collateralDisabled: false,
|
|
21994
|
+
debtDisabled: true
|
|
21995
|
+
}
|
|
21996
|
+
},
|
|
21997
|
+
closeFactor: 1,
|
|
21998
|
+
collateralActive: true,
|
|
21999
|
+
borrowingEnabled: false,
|
|
22000
|
+
depositsEnabled: true,
|
|
22001
|
+
hasStable: false,
|
|
22002
|
+
isActive: true,
|
|
22003
|
+
isFrozen: false
|
|
22004
|
+
};
|
|
22005
|
+
}
|
|
22006
|
+
entry.params = {
|
|
22007
|
+
market: {
|
|
22008
|
+
lender: lenderKey,
|
|
22009
|
+
name: "Exactly " + m.assetSymbol,
|
|
22010
|
+
loanDecimals: decimals,
|
|
22011
|
+
collateralDecimals: decimals,
|
|
22012
|
+
// Market address doubles as the market id (it IS the lender-key body).
|
|
22013
|
+
id: m.market.toLowerCase(),
|
|
22014
|
+
// Self-pair adjust factor (WAD string); pairwise LTVs live on the
|
|
22015
|
+
// per-collateral entries above.
|
|
22016
|
+
lltv: m.adjustFactor.toString(),
|
|
22017
|
+
oracle: zeroAddress,
|
|
22018
|
+
irm: zeroAddress,
|
|
22019
|
+
collateralAddress: assetAddr,
|
|
22020
|
+
loanAddress: assetAddr,
|
|
22021
|
+
terms: terms.length > 0 ? terms : void 0,
|
|
22022
|
+
// Canonical cross-protocol fixed-term descriptor. Exactly: MENU of
|
|
22023
|
+
// calendar maturities (terms[], termId = maturity), pool-fronted
|
|
22024
|
+
// utilization-curve rates, early repay = DISCOUNT (unassigned-earnings
|
|
22025
|
+
// rebate via previewRepayAtMaturity), late repay = per-second penalty.
|
|
22026
|
+
fixedTerm: {
|
|
22027
|
+
model: "exactly",
|
|
22028
|
+
fees: { latePenaltyApr: penaltyApr },
|
|
22029
|
+
earlyRepay: { kind: "discount" },
|
|
22030
|
+
provider: { kind: "pool", address: m.market.toLowerCase() }
|
|
22031
|
+
},
|
|
22032
|
+
// Exactly-specific extras (consumed by calldata / worker-api resolvers)
|
|
22033
|
+
penaltyRate: m.penaltyRate.toString(),
|
|
22034
|
+
adjustFactor: m.adjustFactor.toString(),
|
|
22035
|
+
maxFuturePools: m.maxFuturePools,
|
|
22036
|
+
usdPrice: m.usdPrice.toString()
|
|
22037
|
+
}
|
|
22038
|
+
};
|
|
22039
|
+
entry.chainId = chainId;
|
|
22040
|
+
out[lenderKey] = entry;
|
|
22041
|
+
}
|
|
22042
|
+
return out;
|
|
22043
|
+
}
|
|
22044
|
+
var READS_PER_BRANCH = 8;
|
|
22045
|
+
var LIQUITY_PUBLIC_READ_ABI = [
|
|
22046
|
+
...LiquityTroveManagerAbi,
|
|
22047
|
+
...LiquityActivePoolAbi,
|
|
22048
|
+
...LiquityStabilityPoolAbi,
|
|
22049
|
+
...LiquityPriceFeedAbi,
|
|
22050
|
+
...LiquitySortedTrovesAbi
|
|
22051
|
+
];
|
|
22052
|
+
async function fetchLiquityMarkets(lender, chainId) {
|
|
22053
|
+
const config = liquityConfigFor(lender, chainId);
|
|
22054
|
+
const branches = liquityBranchesByChain(lender, chainId);
|
|
22055
|
+
if (!config || branches.length === 0) {
|
|
22056
|
+
return { lender, config, branches: [] };
|
|
22057
|
+
}
|
|
22058
|
+
const calls = branches.flatMap((b) => [
|
|
22059
|
+
{ address: b.troveManager, name: "getEntireBranchDebt", params: [] },
|
|
22060
|
+
{ address: b.troveManager, name: "getEntireBranchColl", params: [] },
|
|
22061
|
+
{ address: b.troveManager, name: "shutdownTime", params: [] },
|
|
22062
|
+
{ address: b.activePool, name: "aggRecordedDebt", params: [] },
|
|
22063
|
+
{ address: b.activePool, name: "aggWeightedDebtSum", params: [] },
|
|
22064
|
+
{ address: b.stabilityPool, name: "getTotalBoldDeposits", params: [] },
|
|
22065
|
+
{ address: b.priceFeed, name: "lastGoodPrice", params: [] },
|
|
22066
|
+
{ address: b.sortedTroves, name: "getSize", params: [] }
|
|
22067
|
+
]);
|
|
22068
|
+
let results = [];
|
|
22069
|
+
try {
|
|
22070
|
+
results = await multicallRetryUniversal({
|
|
22071
|
+
chain: chainId,
|
|
22072
|
+
calls,
|
|
22073
|
+
abi: LIQUITY_PUBLIC_READ_ABI,
|
|
22074
|
+
allowFailure: true
|
|
22075
|
+
});
|
|
22076
|
+
} catch {
|
|
22077
|
+
return { lender, config, branches: [] };
|
|
22078
|
+
}
|
|
22079
|
+
const val = (i) => {
|
|
22080
|
+
const r = results[i];
|
|
22081
|
+
if (typeof r === "bigint") return r;
|
|
22082
|
+
if (typeof r === "number") return BigInt(r);
|
|
22083
|
+
return null;
|
|
22084
|
+
};
|
|
22085
|
+
const out = branches.map((branch, i) => {
|
|
22086
|
+
const base = i * READS_PER_BRANCH;
|
|
22087
|
+
return {
|
|
22088
|
+
branch,
|
|
22089
|
+
entireDebt: val(base),
|
|
22090
|
+
entireColl: val(base + 1),
|
|
22091
|
+
shutdownTime: val(base + 2),
|
|
22092
|
+
aggRecordedDebt: val(base + 3),
|
|
22093
|
+
aggWeightedDebtSum: val(base + 4),
|
|
22094
|
+
spDeposits: val(base + 5),
|
|
22095
|
+
collPrice: val(base + 6),
|
|
22096
|
+
troveCount: val(base + 7)
|
|
22097
|
+
};
|
|
22098
|
+
});
|
|
22099
|
+
return { lender, config, branches: out };
|
|
22100
|
+
}
|
|
22101
|
+
function liquityLenderKey(lender, collIndex) {
|
|
22102
|
+
return `${lender}_${collIndex}`;
|
|
22103
|
+
}
|
|
22104
|
+
function liquityKeyParts(key) {
|
|
22105
|
+
const base = LIQUITY_FAMILY_LENDERS.find((b) => key.startsWith(b));
|
|
22106
|
+
if (!base) return void 0;
|
|
22107
|
+
const suffix = key.slice(base.length + 1);
|
|
22108
|
+
if (!/^\d+$/.test(suffix)) return void 0;
|
|
22109
|
+
return { lender: base, collIndex: Number(suffix) };
|
|
22110
|
+
}
|
|
22111
|
+
var WAD6 = 1e18;
|
|
22112
|
+
function toHuman2(raw, decimals) {
|
|
22113
|
+
return Number(raw) / 10 ** decimals;
|
|
22114
|
+
}
|
|
22115
|
+
function currencyFor4(address, decimals, symbol, tokens) {
|
|
22116
|
+
const lower = address.toLowerCase();
|
|
22117
|
+
return tokens[lower] ?? { address: lower, symbol, name: symbol, decimals };
|
|
22118
|
+
}
|
|
22119
|
+
function convertLiquityMarketsToResponse(raw, chainId, prices = {}, _additionalYields = {
|
|
22120
|
+
intrinsicYields: {},
|
|
22121
|
+
lenderRewards: {},
|
|
22122
|
+
loaded: true
|
|
22123
|
+
}, tokens = {}) {
|
|
22124
|
+
const out = {};
|
|
22125
|
+
const cfg = raw?.config;
|
|
22126
|
+
if (!cfg) return out;
|
|
22127
|
+
const stableAddr = cfg.boldToken.toLowerCase();
|
|
22128
|
+
const stableDecimals = cfg.boldDecimals ?? 18;
|
|
22129
|
+
const stableToken = tokens[stableAddr];
|
|
22130
|
+
const stableSymbol = stableToken?.symbol ?? "BOLD";
|
|
22131
|
+
const stablePriceKey = toOracleKey(stableToken?.assetGroup) || toGenericPriceKey(stableAddr, chainId);
|
|
22132
|
+
const stablePrice = prices[stablePriceKey] || 1;
|
|
22133
|
+
const spYieldSplit = cfg.spYieldSplit ? Number(cfg.spYieldSplit) / WAD6 : 0.75;
|
|
22134
|
+
for (const b of raw.branches ?? []) {
|
|
22135
|
+
const branch = b.branch;
|
|
22136
|
+
const lenderKey = liquityLenderKey(raw.lender, branch.collIndex);
|
|
22137
|
+
const collAddr = branch.collToken.toLowerCase();
|
|
22138
|
+
const collDecimals = branch.collDecimals;
|
|
22139
|
+
const collToken = tokens[collAddr];
|
|
22140
|
+
const collSymbol = collToken?.symbol ?? branch.name?.split(" / ").pop() ?? "COLL";
|
|
22141
|
+
const marketName = branch.name ?? `${stableSymbol} / ${collSymbol}`;
|
|
22142
|
+
const collPriceKey = toOracleKey(collToken?.assetGroup) || toGenericPriceKey(collAddr, chainId);
|
|
22143
|
+
const collPrice = (b.collPrice !== null ? Number(b.collPrice) / WAD6 : 0) || (prices[collPriceKey] ?? 0);
|
|
22144
|
+
const entireDebt = b.entireDebt !== null ? toHuman2(b.entireDebt, stableDecimals) : 0;
|
|
22145
|
+
const entireColl = b.entireColl !== null ? toHuman2(b.entireColl, collDecimals) : 0;
|
|
22146
|
+
const spDeposits = b.spDeposits !== null ? toHuman2(b.spDeposits, stableDecimals) : 0;
|
|
22147
|
+
const shutdown = b.shutdownTime !== null && b.shutdownTime > 0n;
|
|
22148
|
+
const avgRate = b.aggWeightedDebtSum !== null && b.aggRecordedDebt !== null && b.aggRecordedDebt > 0n ? Number(b.aggWeightedDebtSum / b.aggRecordedDebt) / WAD6 : 0;
|
|
22149
|
+
const annualInterest = b.aggWeightedDebtSum !== null ? Number(b.aggWeightedDebtSum) / WAD6 / 10 ** stableDecimals : 0;
|
|
22150
|
+
const spApr = spDeposits > 0 ? spYieldSplit * annualInterest / spDeposits : 0;
|
|
22151
|
+
const mcr = Number(branch.mcr) / WAD6 || 1.1;
|
|
22152
|
+
const ltv = 1 / mcr;
|
|
22153
|
+
const liqPenalty = branch.liquidationPenaltySP ? Number(branch.liquidationPenaltySP) / WAD6 : 0.05;
|
|
22154
|
+
let borrowLiquidity = Math.max(
|
|
22155
|
+
0,
|
|
22156
|
+
entireColl * collPrice / mcr / stablePrice - entireDebt
|
|
22157
|
+
);
|
|
22158
|
+
if (branch.debtCap) {
|
|
22159
|
+
const cap = Number(branch.debtCap) / 10 ** stableDecimals;
|
|
22160
|
+
borrowLiquidity = Math.min(borrowLiquidity, Math.max(0, cap - entireDebt));
|
|
22161
|
+
}
|
|
22162
|
+
if (shutdown) borrowLiquidity = 0;
|
|
22163
|
+
const entry = { data: {} };
|
|
22164
|
+
const collUid = createMarketUid(chainId, lenderKey, collAddr);
|
|
22165
|
+
entry.data[collUid] = {
|
|
22166
|
+
marketUid: collUid,
|
|
22167
|
+
name: "Collateral " + collSymbol,
|
|
22168
|
+
poolId: branch.troveManager.toLowerCase(),
|
|
22169
|
+
underlying: collAddr,
|
|
22170
|
+
asset: currencyFor4(collAddr, collDecimals, collSymbol, tokens),
|
|
22171
|
+
totalDeposits: entireColl,
|
|
22172
|
+
totalDebtStable: 0,
|
|
22173
|
+
totalDebt: 0,
|
|
22174
|
+
totalLiquidity: entireColl,
|
|
22175
|
+
borrowLiquidity: 0,
|
|
22176
|
+
totalLiquidityUSD: entireColl * collPrice,
|
|
22177
|
+
borrowLiquidityUSD: 0,
|
|
22178
|
+
totalDepositsUSD: entireColl * collPrice,
|
|
22179
|
+
totalDebtStableUSD: 0,
|
|
22180
|
+
totalDebtUSD: 0,
|
|
22181
|
+
utilization: 0,
|
|
22182
|
+
depositRate: 0,
|
|
22183
|
+
variableBorrowRate: 0,
|
|
22184
|
+
stableBorrowRate: 0,
|
|
22185
|
+
intrinsicYield: 0,
|
|
22186
|
+
rewards: void 0,
|
|
22187
|
+
decimals: collDecimals,
|
|
22188
|
+
config: {
|
|
22189
|
+
0: {
|
|
22190
|
+
category: 0,
|
|
22191
|
+
borrowCollateralFactor: ltv,
|
|
22192
|
+
collateralFactor: ltv,
|
|
22193
|
+
borrowFactor: 1,
|
|
22194
|
+
liquidationPenalty: liqPenalty,
|
|
22195
|
+
closeFactor: 1,
|
|
22196
|
+
collateralDisabled: false,
|
|
22197
|
+
debtDisabled: true
|
|
22198
|
+
}
|
|
22199
|
+
},
|
|
22200
|
+
closeFactor: 1,
|
|
22201
|
+
collateralActive: true,
|
|
22202
|
+
borrowingEnabled: false,
|
|
22203
|
+
depositsEnabled: !shutdown,
|
|
22204
|
+
hasStable: false,
|
|
22205
|
+
isActive: !shutdown,
|
|
22206
|
+
isFrozen: shutdown
|
|
22207
|
+
};
|
|
22208
|
+
const loanUid = createMarketUid(chainId, lenderKey, stableAddr);
|
|
22209
|
+
entry.data[loanUid] = {
|
|
22210
|
+
marketUid: loanUid,
|
|
22211
|
+
name: stableSymbol,
|
|
22212
|
+
poolId: branch.stabilityPool.toLowerCase(),
|
|
22213
|
+
underlying: stableAddr,
|
|
22214
|
+
asset: currencyFor4(stableAddr, stableDecimals, stableSymbol, tokens),
|
|
22215
|
+
totalDeposits: spDeposits,
|
|
22216
|
+
totalDebtStable: 0,
|
|
22217
|
+
totalDebt: entireDebt,
|
|
22218
|
+
totalLiquidity: borrowLiquidity,
|
|
22219
|
+
borrowLiquidity,
|
|
22220
|
+
totalLiquidityUSD: borrowLiquidity * stablePrice,
|
|
22221
|
+
borrowLiquidityUSD: borrowLiquidity * stablePrice,
|
|
22222
|
+
totalDepositsUSD: spDeposits * stablePrice,
|
|
22223
|
+
totalDebtStableUSD: 0,
|
|
22224
|
+
totalDebtUSD: entireDebt * stablePrice,
|
|
22225
|
+
// Share of branch debt covered by its own Stability Pool.
|
|
22226
|
+
utilization: spDeposits > 0 ? Math.min(entireDebt / spDeposits, 1) : 0,
|
|
22227
|
+
depositRate: spApr * 100,
|
|
22228
|
+
variableBorrowRate: avgRate * 100,
|
|
22229
|
+
stableBorrowRate: 0,
|
|
22230
|
+
intrinsicYield: 0,
|
|
22231
|
+
rewards: void 0,
|
|
22232
|
+
decimals: stableDecimals,
|
|
22233
|
+
config: {
|
|
22234
|
+
0: {
|
|
22235
|
+
category: 0,
|
|
22236
|
+
borrowCollateralFactor: 0,
|
|
22237
|
+
collateralFactor: 0,
|
|
22238
|
+
borrowFactor: 1,
|
|
22239
|
+
liquidationPenalty: liqPenalty,
|
|
22240
|
+
closeFactor: 1,
|
|
22241
|
+
// SP deposits earn yield but never collateralize.
|
|
22242
|
+
collateralDisabled: true,
|
|
22243
|
+
debtDisabled: shutdown
|
|
22244
|
+
}
|
|
22245
|
+
},
|
|
22246
|
+
closeFactor: 1,
|
|
22247
|
+
collateralActive: false,
|
|
22248
|
+
borrowingEnabled: !shutdown,
|
|
22249
|
+
depositsEnabled: !shutdown,
|
|
22250
|
+
hasStable: false,
|
|
22251
|
+
variableBorrowDisabled: shutdown,
|
|
22252
|
+
isActive: !shutdown,
|
|
22253
|
+
isFrozen: shutdown
|
|
22254
|
+
};
|
|
22255
|
+
entry.params = {
|
|
22256
|
+
market: {
|
|
22257
|
+
lender: lenderKey,
|
|
22258
|
+
name: marketName,
|
|
22259
|
+
loanDecimals: stableDecimals,
|
|
22260
|
+
collateralDecimals: collDecimals,
|
|
22261
|
+
// TroveManager doubles as the branch/market id (marketUid address).
|
|
22262
|
+
id: branch.troveManager.toLowerCase(),
|
|
22263
|
+
lltv: branch.mcr,
|
|
22264
|
+
oracle: branch.priceFeed ?? zeroAddress,
|
|
22265
|
+
irm: zeroAddress,
|
|
22266
|
+
collateralAddress: collAddr,
|
|
22267
|
+
loanAddress: stableAddr,
|
|
22268
|
+
// --- Liquity-family descriptor (all values from metadata/on-chain;
|
|
22269
|
+
// consumed by calldata builders + worker-api resolvers) ---
|
|
22270
|
+
liquity: {
|
|
22271
|
+
collIndex: branch.collIndex,
|
|
22272
|
+
userSetRate: true,
|
|
22273
|
+
redemptionOrdered: true,
|
|
22274
|
+
minDebt: cfg.minDebt,
|
|
22275
|
+
minAnnualInterestRate: cfg.minAnnualInterestRate,
|
|
22276
|
+
maxAnnualInterestRate: cfg.maxAnnualInterestRate,
|
|
22277
|
+
avgBorrowRate: String(Math.round(avgRate * WAD6)),
|
|
22278
|
+
gasCompensation: cfg.gasCompensation,
|
|
22279
|
+
upfrontInterestPeriodSeconds: cfg.upfrontInterestPeriodSeconds,
|
|
22280
|
+
interestRateAdjCooldownSeconds: cfg.interestRateAdjCooldownSeconds,
|
|
22281
|
+
ccr: branch.ccr,
|
|
22282
|
+
mcr: branch.mcr,
|
|
22283
|
+
scr: branch.scr,
|
|
22284
|
+
bcr: branch.bcr,
|
|
22285
|
+
liquidationPenaltySP: branch.liquidationPenaltySP,
|
|
22286
|
+
liquidationPenaltyRedistribution: branch.liquidationPenaltyRedistribution,
|
|
22287
|
+
debtCap: branch.debtCap ?? void 0,
|
|
22288
|
+
collWrapper: branch.collWrapper ?? void 0,
|
|
22289
|
+
shutdown,
|
|
22290
|
+
troveCount: b.troveCount !== null ? Number(b.troveCount) : void 0,
|
|
22291
|
+
addresses: {
|
|
22292
|
+
borrowerOperations: branch.borrowerOperations,
|
|
22293
|
+
troveManager: branch.troveManager,
|
|
22294
|
+
troveNFT: branch.troveNFT,
|
|
22295
|
+
stabilityPool: branch.stabilityPool,
|
|
22296
|
+
sortedTroves: branch.sortedTroves,
|
|
22297
|
+
priceFeed: branch.priceFeed,
|
|
22298
|
+
collSurplusPool: branch.collSurplusPool,
|
|
22299
|
+
collateralRegistry: cfg.collateralRegistry,
|
|
22300
|
+
hintHelpers: cfg.hintHelpers,
|
|
22301
|
+
multiTroveGetter: cfg.multiTroveGetter,
|
|
22302
|
+
wethToken: cfg.wethToken
|
|
22303
|
+
}
|
|
22304
|
+
}
|
|
22305
|
+
}
|
|
22306
|
+
};
|
|
22307
|
+
entry.chainId = chainId;
|
|
22308
|
+
out[lenderKey] = entry;
|
|
22309
|
+
}
|
|
22310
|
+
return out;
|
|
22311
|
+
}
|
|
22312
|
+
var READS_PER_TM = 5;
|
|
22313
|
+
var RIVER_PUBLIC_READ_ABI = [
|
|
22314
|
+
...RiverTroveManagerAbi,
|
|
22315
|
+
...RiverStabilityPoolAbi
|
|
22316
|
+
];
|
|
22317
|
+
async function fetchRiverMarkets(lender, chainId) {
|
|
22318
|
+
const config = riverConfigFor(lender, chainId);
|
|
22319
|
+
const chainData = riverChainData(lender, chainId);
|
|
22320
|
+
const markets = chainData?.markets ?? [];
|
|
22321
|
+
if (!config || markets.length === 0) {
|
|
22322
|
+
return { lender, config, chainData, spDeposits: null, markets: [] };
|
|
22323
|
+
}
|
|
22324
|
+
const calls = [
|
|
22325
|
+
// Single per-chain StabilityPool (diamond facet) — the earn side.
|
|
22326
|
+
{ address: config.xapp, name: "getTotalDebtTokenDeposits", params: [] },
|
|
22327
|
+
...markets.flatMap((m) => [
|
|
22328
|
+
{ address: m.troveManager, name: "getEntireSystemDebt", params: [] },
|
|
22329
|
+
{ address: m.troveManager, name: "getEntireSystemColl", params: [] },
|
|
22330
|
+
{
|
|
22331
|
+
address: m.troveManager,
|
|
22332
|
+
name: "getBorrowingRateWithDecay",
|
|
22333
|
+
params: []
|
|
22334
|
+
},
|
|
22335
|
+
{ address: m.troveManager, name: "fetchPrice", params: [] },
|
|
22336
|
+
{ address: m.troveManager, name: "getTroveOwnersCount", params: [] }
|
|
22337
|
+
])
|
|
22338
|
+
];
|
|
22339
|
+
let results = [];
|
|
22340
|
+
try {
|
|
22341
|
+
results = await multicallRetryUniversal({
|
|
22342
|
+
chain: chainId,
|
|
22343
|
+
calls,
|
|
22344
|
+
abi: RIVER_PUBLIC_READ_ABI,
|
|
22345
|
+
allowFailure: true
|
|
22346
|
+
});
|
|
22347
|
+
} catch {
|
|
22348
|
+
return { lender, config, chainData, spDeposits: null, markets: [] };
|
|
22349
|
+
}
|
|
22350
|
+
const val = (i) => {
|
|
22351
|
+
const r = results[i];
|
|
22352
|
+
if (typeof r === "bigint") return r;
|
|
22353
|
+
if (typeof r === "number") return BigInt(r);
|
|
22354
|
+
return null;
|
|
22355
|
+
};
|
|
22356
|
+
const out = markets.map((market, i) => {
|
|
22357
|
+
const base = 1 + i * READS_PER_TM;
|
|
22358
|
+
return {
|
|
22359
|
+
market,
|
|
22360
|
+
entireDebt: val(base),
|
|
22361
|
+
entireColl: val(base + 1),
|
|
22362
|
+
mintFeeRate: val(base + 2),
|
|
22363
|
+
price: val(base + 3),
|
|
22364
|
+
troveCount: val(base + 4)
|
|
22365
|
+
};
|
|
22366
|
+
});
|
|
22367
|
+
return { lender, config, chainData, spDeposits: val(0), markets: out };
|
|
22368
|
+
}
|
|
22369
|
+
|
|
22370
|
+
// src/lending/public-data/river/convertPublic.ts
|
|
22371
|
+
function riverLenderKey(lender, index) {
|
|
22372
|
+
return `${lender}_${index}`;
|
|
22373
|
+
}
|
|
22374
|
+
function riverKeyParts(key) {
|
|
22375
|
+
if (!key.startsWith("RIVER_")) return void 0;
|
|
22376
|
+
const suffix = key.slice("RIVER_".length);
|
|
22377
|
+
if (!/^\d+$/.test(suffix)) return void 0;
|
|
22378
|
+
return { lender: "RIVER", index: Number(suffix) };
|
|
22379
|
+
}
|
|
22380
|
+
var WAD7 = 1e18;
|
|
22381
|
+
function toHuman3(raw, decimals) {
|
|
22382
|
+
return Number(raw) / 10 ** decimals;
|
|
22383
|
+
}
|
|
22384
|
+
function currencyFor5(address, decimals, symbol, tokens) {
|
|
22385
|
+
const lower = address.toLowerCase();
|
|
22386
|
+
return tokens[lower] ?? { address: lower, symbol, name: symbol, decimals };
|
|
22387
|
+
}
|
|
22388
|
+
function convertRiverMarketsToResponse(raw, chainId, prices = {}, _additionalYields = {
|
|
22389
|
+
intrinsicYields: {},
|
|
22390
|
+
lenderRewards: {},
|
|
22391
|
+
loaded: true
|
|
22392
|
+
}, tokens = {}) {
|
|
22393
|
+
const out = {};
|
|
22394
|
+
const cfg = raw?.config;
|
|
22395
|
+
const chainData = raw?.chainData;
|
|
22396
|
+
if (!cfg || !chainData) return out;
|
|
22397
|
+
const debtAddr = cfg.debtToken.toLowerCase();
|
|
22398
|
+
const debtDecimals = cfg.debtDecimals ?? 18;
|
|
22399
|
+
const debtToken = tokens[debtAddr];
|
|
22400
|
+
const debtSymbol = debtToken?.symbol ?? "satUSD";
|
|
22401
|
+
const debtPriceKey = toOracleKey(debtToken?.assetGroup) || toGenericPriceKey(debtAddr, chainId);
|
|
22402
|
+
const debtPrice = prices[debtPriceKey] || 1;
|
|
22403
|
+
const spDeposits = raw.spDeposits !== null ? toHuman3(raw.spDeposits, debtDecimals) : 0;
|
|
22404
|
+
for (const m of raw.markets ?? []) {
|
|
22405
|
+
const market = m.market;
|
|
22406
|
+
const lenderKey = riverLenderKey(raw.lender, market.index);
|
|
22407
|
+
const collAddr = market.collToken.toLowerCase();
|
|
22408
|
+
const collDecimals = market.collDecimals;
|
|
22409
|
+
const collToken = tokens[collAddr];
|
|
22410
|
+
const collSymbol = collToken?.symbol ?? market.name?.split(" / ").pop() ?? "COLL";
|
|
22411
|
+
const marketName = market.name ?? `${debtSymbol} / ${collSymbol}`;
|
|
22412
|
+
const collPriceKey = toOracleKey(collToken?.assetGroup) || toGenericPriceKey(collAddr, chainId);
|
|
22413
|
+
const collPrice = (m.price !== null ? Number(m.price) / WAD7 : 0) || (prices[collPriceKey] ?? 0);
|
|
22414
|
+
const entireDebt = m.entireDebt !== null ? toHuman3(m.entireDebt, debtDecimals) : 0;
|
|
22415
|
+
const entireColl = m.entireColl !== null ? toHuman3(m.entireColl, collDecimals) : 0;
|
|
22416
|
+
const halted = !!market.paused || !!market.sunsetting;
|
|
22417
|
+
const mcr = Number(market.mcr) / WAD7 || 1.1;
|
|
22418
|
+
const ltv = 1 / mcr;
|
|
22419
|
+
const liqPenalty = Math.max(mcr - 1, 0);
|
|
22420
|
+
let borrowLiquidity = Math.max(
|
|
22421
|
+
0,
|
|
22422
|
+
entireColl * collPrice / mcr / debtPrice - entireDebt
|
|
22423
|
+
);
|
|
22424
|
+
if (market.maxSystemDebt) {
|
|
22425
|
+
const cap = Number(market.maxSystemDebt) / 10 ** debtDecimals;
|
|
22426
|
+
borrowLiquidity = Math.min(borrowLiquidity, Math.max(0, cap - entireDebt));
|
|
22427
|
+
}
|
|
22428
|
+
if (halted) borrowLiquidity = 0;
|
|
22429
|
+
const spHere = market.index === 0 ? spDeposits : 0;
|
|
22430
|
+
const entry = { data: {} };
|
|
22431
|
+
const collUid = createMarketUid(chainId, lenderKey, collAddr);
|
|
22432
|
+
entry.data[collUid] = {
|
|
22433
|
+
marketUid: collUid,
|
|
22434
|
+
name: "Collateral " + collSymbol,
|
|
22435
|
+
poolId: market.troveManager.toLowerCase(),
|
|
22436
|
+
underlying: collAddr,
|
|
22437
|
+
asset: currencyFor5(collAddr, collDecimals, collSymbol, tokens),
|
|
22438
|
+
totalDeposits: entireColl,
|
|
22439
|
+
totalDebtStable: 0,
|
|
22440
|
+
totalDebt: 0,
|
|
22441
|
+
totalLiquidity: entireColl,
|
|
22442
|
+
borrowLiquidity: 0,
|
|
22443
|
+
totalLiquidityUSD: entireColl * collPrice,
|
|
22444
|
+
borrowLiquidityUSD: 0,
|
|
22445
|
+
totalDepositsUSD: entireColl * collPrice,
|
|
22446
|
+
totalDebtStableUSD: 0,
|
|
22447
|
+
totalDebtUSD: 0,
|
|
22448
|
+
utilization: 0,
|
|
22449
|
+
depositRate: 0,
|
|
22450
|
+
variableBorrowRate: 0,
|
|
22451
|
+
stableBorrowRate: 0,
|
|
22452
|
+
intrinsicYield: 0,
|
|
22453
|
+
rewards: void 0,
|
|
22454
|
+
decimals: collDecimals,
|
|
22455
|
+
config: {
|
|
22456
|
+
0: {
|
|
22457
|
+
category: 0,
|
|
22458
|
+
borrowCollateralFactor: ltv,
|
|
22459
|
+
collateralFactor: ltv,
|
|
22460
|
+
borrowFactor: 1,
|
|
22461
|
+
liquidationPenalty: liqPenalty,
|
|
22462
|
+
closeFactor: 1,
|
|
22463
|
+
collateralDisabled: false,
|
|
22464
|
+
debtDisabled: true
|
|
22465
|
+
}
|
|
22466
|
+
},
|
|
22467
|
+
closeFactor: 1,
|
|
22468
|
+
collateralActive: true,
|
|
22469
|
+
borrowingEnabled: false,
|
|
22470
|
+
depositsEnabled: !halted,
|
|
22471
|
+
hasStable: false,
|
|
22472
|
+
isActive: !halted,
|
|
22473
|
+
isFrozen: halted
|
|
22474
|
+
};
|
|
22475
|
+
const loanUid = createMarketUid(chainId, lenderKey, debtAddr);
|
|
22476
|
+
entry.data[loanUid] = {
|
|
22477
|
+
marketUid: loanUid,
|
|
22478
|
+
name: debtSymbol,
|
|
22479
|
+
poolId: cfg.xapp.toLowerCase(),
|
|
22480
|
+
underlying: debtAddr,
|
|
22481
|
+
asset: currencyFor5(debtAddr, debtDecimals, debtSymbol, tokens),
|
|
22482
|
+
totalDeposits: spHere,
|
|
22483
|
+
totalDebtStable: 0,
|
|
22484
|
+
totalDebt: entireDebt,
|
|
22485
|
+
totalLiquidity: borrowLiquidity,
|
|
22486
|
+
borrowLiquidity,
|
|
22487
|
+
totalLiquidityUSD: borrowLiquidity * debtPrice,
|
|
22488
|
+
borrowLiquidityUSD: borrowLiquidity * debtPrice,
|
|
22489
|
+
totalDepositsUSD: spHere * debtPrice,
|
|
22490
|
+
totalDebtStableUSD: 0,
|
|
22491
|
+
totalDebtUSD: entireDebt * debtPrice,
|
|
22492
|
+
utilization: 0,
|
|
22493
|
+
// No interest yield while the protocol rate is 0% — SP earns
|
|
22494
|
+
// liquidation gains + OSHI emissions only (not modeled here).
|
|
22495
|
+
depositRate: 0,
|
|
22496
|
+
variableBorrowRate: market.interestRate ? Number(market.interestRate) : 0,
|
|
22497
|
+
stableBorrowRate: 0,
|
|
22498
|
+
intrinsicYield: 0,
|
|
22499
|
+
rewards: void 0,
|
|
22500
|
+
decimals: debtDecimals,
|
|
22501
|
+
config: {
|
|
22502
|
+
0: {
|
|
22503
|
+
category: 0,
|
|
22504
|
+
borrowCollateralFactor: 0,
|
|
22505
|
+
collateralFactor: 0,
|
|
22506
|
+
borrowFactor: 1,
|
|
22507
|
+
liquidationPenalty: liqPenalty,
|
|
22508
|
+
closeFactor: 1,
|
|
22509
|
+
// SP deposits earn but never collateralize.
|
|
22510
|
+
collateralDisabled: true,
|
|
22511
|
+
debtDisabled: halted
|
|
22512
|
+
}
|
|
22513
|
+
},
|
|
22514
|
+
closeFactor: 1,
|
|
22515
|
+
collateralActive: false,
|
|
22516
|
+
borrowingEnabled: !halted,
|
|
22517
|
+
depositsEnabled: !halted,
|
|
22518
|
+
hasStable: false,
|
|
22519
|
+
variableBorrowDisabled: halted,
|
|
22520
|
+
isActive: !halted,
|
|
22521
|
+
isFrozen: halted
|
|
22522
|
+
};
|
|
22523
|
+
entry.params = {
|
|
22524
|
+
market: {
|
|
22525
|
+
lender: lenderKey,
|
|
22526
|
+
name: marketName,
|
|
22527
|
+
loanDecimals: debtDecimals,
|
|
22528
|
+
collateralDecimals: collDecimals,
|
|
22529
|
+
// TroveManager doubles as the market id (marketUid address).
|
|
22530
|
+
id: market.troveManager.toLowerCase(),
|
|
22531
|
+
lltv: market.mcr,
|
|
22532
|
+
oracle: zeroAddress,
|
|
22533
|
+
irm: zeroAddress,
|
|
22534
|
+
collateralAddress: collAddr,
|
|
22535
|
+
loanAddress: debtAddr,
|
|
22536
|
+
// --- River descriptor (verbatim metadata + live snapshot; consumed
|
|
22537
|
+
// by calldata builders + worker-api resolvers + yield-tracer) ---
|
|
22538
|
+
river: {
|
|
22539
|
+
index: market.index,
|
|
22540
|
+
minNetDebt: chainData.minNetDebt,
|
|
22541
|
+
debtGasCompensation: market.debtGasCompensation,
|
|
22542
|
+
mintFeeFloor: market.borrowingFeeFloor,
|
|
22543
|
+
mintFeeCap: market.maxBorrowingFee,
|
|
22544
|
+
/** Current decayed one-off mint-fee rate (WAD string). */
|
|
22545
|
+
mintFeeRate: m.mintFeeRate !== null ? m.mintFeeRate.toString() : void 0,
|
|
22546
|
+
interestRate: market.interestRate,
|
|
22547
|
+
maxSystemDebt: market.maxSystemDebt,
|
|
22548
|
+
paused: !!market.paused,
|
|
22549
|
+
sunsetting: !!market.sunsetting,
|
|
22550
|
+
troveCount: m.troveCount !== null ? Number(m.troveCount) : void 0,
|
|
22551
|
+
addresses: {
|
|
22552
|
+
xapp: cfg.xapp,
|
|
22553
|
+
troveManager: market.troveManager,
|
|
22554
|
+
sortedTroves: market.sortedTroves,
|
|
22555
|
+
debtToken: cfg.debtToken,
|
|
22556
|
+
periphery: cfg.periphery ?? void 0
|
|
22557
|
+
}
|
|
22558
|
+
}
|
|
22559
|
+
}
|
|
22560
|
+
};
|
|
22561
|
+
entry.chainId = chainId;
|
|
22562
|
+
out[lenderKey] = entry;
|
|
22563
|
+
}
|
|
22564
|
+
return out;
|
|
22565
|
+
}
|
|
21295
22566
|
|
|
21296
22567
|
// src/lending/public-data/silo-v2/fetchPublic.ts
|
|
21297
22568
|
var BASE_URL2 = "https://api-v3.silo.finance";
|
|
@@ -21889,12 +23160,16 @@ function convertDolomiteSubgraphMarkets(raw, chainId, prices, additionalYields,
|
|
|
21889
23160
|
}
|
|
21890
23161
|
return { data: result, chainId };
|
|
21891
23162
|
}
|
|
21892
|
-
var
|
|
23163
|
+
var warn3 = (...args) => {
|
|
21893
23164
|
};
|
|
21894
23165
|
async function getLenderDataFromApi(lender, chainId, prices, additionalYields, includeUnlisted = false) {
|
|
21895
23166
|
if (isMorphoType(lender))
|
|
21896
23167
|
return await fetchMorphoMarkets(chainId, includeUnlisted);
|
|
21897
23168
|
if (isMidnight(lender)) return await fetchMidnightMarkets(chainId);
|
|
23169
|
+
if (isTerm(lender)) return await fetchTermMarkets(chainId);
|
|
23170
|
+
if (isExactly(lender)) return await fetchExactlyMarkets(chainId);
|
|
23171
|
+
if (isLiquityFamily(lender)) return await fetchLiquityMarkets(lender, chainId);
|
|
23172
|
+
if (isRiver(lender)) return await fetchRiverMarkets(lender, chainId);
|
|
21898
23173
|
return {};
|
|
21899
23174
|
}
|
|
21900
23175
|
function convertLenderDataFromApi(lender, chainId, data, prices, additionalYields, list = {}) {
|
|
@@ -21908,6 +23183,38 @@ function convertLenderDataFromApi(lender, chainId, data, prices, additionalYield
|
|
|
21908
23183
|
additionalYields,
|
|
21909
23184
|
list
|
|
21910
23185
|
);
|
|
23186
|
+
if (isTerm(lender))
|
|
23187
|
+
return convertTermMarketsToResponse(
|
|
23188
|
+
data,
|
|
23189
|
+
chainId,
|
|
23190
|
+
prices,
|
|
23191
|
+
additionalYields,
|
|
23192
|
+
list
|
|
23193
|
+
);
|
|
23194
|
+
if (isExactly(lender))
|
|
23195
|
+
return convertExactlyMarketsToResponse(
|
|
23196
|
+
data,
|
|
23197
|
+
chainId,
|
|
23198
|
+
prices,
|
|
23199
|
+
additionalYields,
|
|
23200
|
+
list
|
|
23201
|
+
);
|
|
23202
|
+
if (isLiquityFamily(lender))
|
|
23203
|
+
return convertLiquityMarketsToResponse(
|
|
23204
|
+
data,
|
|
23205
|
+
chainId,
|
|
23206
|
+
prices,
|
|
23207
|
+
additionalYields,
|
|
23208
|
+
list
|
|
23209
|
+
);
|
|
23210
|
+
if (isRiver(lender))
|
|
23211
|
+
return convertRiverMarketsToResponse(
|
|
23212
|
+
data,
|
|
23213
|
+
chainId,
|
|
23214
|
+
prices,
|
|
23215
|
+
additionalYields,
|
|
23216
|
+
list
|
|
23217
|
+
);
|
|
21911
23218
|
return {};
|
|
21912
23219
|
}
|
|
21913
23220
|
var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYields, tokenList = async () => {
|
|
@@ -21948,7 +23255,7 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
|
|
|
21948
23255
|
const listResult = settled[0];
|
|
21949
23256
|
const list = listResult.status === "fulfilled" ? listResult.value : {};
|
|
21950
23257
|
if (listResult.status === "rejected") {
|
|
21951
|
-
|
|
23258
|
+
warn3(
|
|
21952
23259
|
`[lending] tokenList fetch failed on chain ${chainId}:`,
|
|
21953
23260
|
listResult.reason
|
|
21954
23261
|
);
|
|
@@ -21970,13 +23277,13 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
|
|
|
21970
23277
|
if (converted[lk]) lenderData[lk] = converted[lk];
|
|
21971
23278
|
}
|
|
21972
23279
|
} catch (e) {
|
|
21973
|
-
|
|
23280
|
+
warn3(
|
|
21974
23281
|
`[lending] Silo v2 API convert failed on chain ${chainId}:`,
|
|
21975
23282
|
e?.message ?? e
|
|
21976
23283
|
);
|
|
21977
23284
|
}
|
|
21978
23285
|
} else {
|
|
21979
|
-
|
|
23286
|
+
warn3(
|
|
21980
23287
|
`[lending] Silo v2 API fetch failed on chain ${chainId}:`,
|
|
21981
23288
|
siloV2Result.reason?.message ?? siloV2Result.reason
|
|
21982
23289
|
);
|
|
@@ -21998,13 +23305,13 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
|
|
|
21998
23305
|
if (converted[lk]) lenderData[lk] = converted[lk];
|
|
21999
23306
|
}
|
|
22000
23307
|
} catch (e) {
|
|
22001
|
-
|
|
23308
|
+
warn3(
|
|
22002
23309
|
`[lending] Silo v3 API convert failed on chain ${chainId}:`,
|
|
22003
23310
|
e?.message ?? e
|
|
22004
23311
|
);
|
|
22005
23312
|
}
|
|
22006
23313
|
} else {
|
|
22007
|
-
|
|
23314
|
+
warn3(
|
|
22008
23315
|
`[lending] Silo v3 API fetch failed on chain ${chainId}:`,
|
|
22009
23316
|
siloV3Result.reason?.message ?? siloV3Result.reason
|
|
22010
23317
|
);
|
|
@@ -22014,7 +23321,7 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
|
|
|
22014
23321
|
try {
|
|
22015
23322
|
const result = settled[i + 3];
|
|
22016
23323
|
if (result.status === "rejected") {
|
|
22017
|
-
|
|
23324
|
+
warn3(
|
|
22018
23325
|
`[lending] API fetch failed for ${otherLenders[i]} on chain ${chainId}:`,
|
|
22019
23326
|
result.reason?.message ?? result.reason
|
|
22020
23327
|
);
|
|
@@ -22058,13 +23365,13 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
|
|
|
22058
23365
|
);
|
|
22059
23366
|
for (const lk of dolomiteLenders) lenderData[lk] = converted;
|
|
22060
23367
|
} catch (e) {
|
|
22061
|
-
|
|
23368
|
+
warn3(
|
|
22062
23369
|
`[lending] Dolomite subgraph convert failed on chain ${chainId}:`,
|
|
22063
23370
|
e?.message ?? e
|
|
22064
23371
|
);
|
|
22065
23372
|
}
|
|
22066
23373
|
} else if (dolomiteResult.status === "rejected") {
|
|
22067
|
-
|
|
23374
|
+
warn3(
|
|
22068
23375
|
`[lending] Dolomite subgraph fetch failed on chain ${chainId}:`,
|
|
22069
23376
|
dolomiteResult.reason?.message ?? dolomiteResult.reason
|
|
22070
23377
|
);
|
|
@@ -22072,7 +23379,7 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
|
|
|
22072
23379
|
}
|
|
22073
23380
|
return lenderData;
|
|
22074
23381
|
};
|
|
22075
|
-
var
|
|
23382
|
+
var warn4 = (...args) => {
|
|
22076
23383
|
};
|
|
22077
23384
|
function lenderApiOnly(lender, chainId) {
|
|
22078
23385
|
if (lender === Lender.MORPHO_BLUE) {
|
|
@@ -22092,6 +23399,10 @@ function lenderApiOnly(lender, chainId) {
|
|
|
22092
23399
|
return true;
|
|
22093
23400
|
}
|
|
22094
23401
|
if (isMidnight(lender)) return true;
|
|
23402
|
+
if (isTerm(lender)) return true;
|
|
23403
|
+
if (isExactly(lender)) return true;
|
|
23404
|
+
if (isLiquityFamily(lender)) return true;
|
|
23405
|
+
if (isRiver(lender)) return true;
|
|
22095
23406
|
return false;
|
|
22096
23407
|
}
|
|
22097
23408
|
function lenderApiWithOnChainFallback(lender, chainId) {
|
|
@@ -22119,7 +23430,7 @@ var getLenderPublicDataAll = async (chainId, lenders, prices, additionalYields,
|
|
|
22119
23430
|
includeUnlistedMorphoMarkets
|
|
22120
23431
|
);
|
|
22121
23432
|
} catch (e) {
|
|
22122
|
-
|
|
23433
|
+
warn4(
|
|
22123
23434
|
`[lending] API fetch failed for chain ${chainId}:`,
|
|
22124
23435
|
e?.message ?? e
|
|
22125
23436
|
);
|
|
@@ -22142,7 +23453,7 @@ var getLenderPublicDataAll = async (chainId, lenders, prices, additionalYields,
|
|
|
22142
23453
|
tokenList
|
|
22143
23454
|
);
|
|
22144
23455
|
} catch (e) {
|
|
22145
|
-
|
|
23456
|
+
warn4(
|
|
22146
23457
|
`[lending] on-chain fetch failed for chain ${chainId}:`,
|
|
22147
23458
|
e?.message ?? e
|
|
22148
23459
|
);
|
|
@@ -22827,6 +24138,179 @@ var buildMidnightUserCall = (chainId, _lender, account) => {
|
|
|
22827
24138
|
}
|
|
22828
24139
|
return calls;
|
|
22829
24140
|
};
|
|
24141
|
+
var termMarketCallCount = (collateralCount) => 3 + collateralCount;
|
|
24142
|
+
var buildTermUserCall = (chainId, _lender, account) => {
|
|
24143
|
+
const markets = termMarketsByChain(chainId);
|
|
24144
|
+
if (markets.length === 0) return [];
|
|
24145
|
+
const calls = [];
|
|
24146
|
+
for (const market of markets) {
|
|
24147
|
+
calls.push({ address: market.repoToken, name: "balanceOf", params: [account] });
|
|
24148
|
+
calls.push({ address: market.repoToken, name: "redemptionValue", params: [] });
|
|
24149
|
+
calls.push({
|
|
24150
|
+
address: market.servicer,
|
|
24151
|
+
name: "getBorrowerRepurchaseObligation",
|
|
24152
|
+
params: [account]
|
|
24153
|
+
});
|
|
24154
|
+
for (const c of market.collateralParams) {
|
|
24155
|
+
calls.push({
|
|
24156
|
+
address: market.collateralManager,
|
|
24157
|
+
name: "getCollateralBalance",
|
|
24158
|
+
params: [account, c.token]
|
|
24159
|
+
});
|
|
24160
|
+
}
|
|
24161
|
+
}
|
|
24162
|
+
return calls;
|
|
24163
|
+
};
|
|
24164
|
+
var buildExactlyUserCall = (chainId, _lender, account) => {
|
|
24165
|
+
const cfg = exactlyConfig()?.[chainId];
|
|
24166
|
+
if (!cfg?.previewer) return [];
|
|
24167
|
+
return [{ address: cfg.previewer, name: "exactly", params: [account] }];
|
|
24168
|
+
};
|
|
24169
|
+
var OWNER_INDEX_PROBE_COUNT = 8;
|
|
24170
|
+
var CACHE_TTL_MS = 5 * 6e4;
|
|
24171
|
+
var discoveryCache = /* @__PURE__ */ new Map();
|
|
24172
|
+
var cacheKey = (chainId, lender, account) => `${chainId}:${lender}:${account.toLowerCase()}`;
|
|
24173
|
+
var getCachedLiquityTroves = (chainId, lender, account) => {
|
|
24174
|
+
const hit = discoveryCache.get(cacheKey(chainId, lender, account));
|
|
24175
|
+
if (!hit || Date.now() - hit.at > CACHE_TTL_MS) return void 0;
|
|
24176
|
+
return hit;
|
|
24177
|
+
};
|
|
24178
|
+
var ADDRESS_ADDRESS_UINT = [
|
|
24179
|
+
{ type: "address" },
|
|
24180
|
+
{ type: "address" },
|
|
24181
|
+
{ type: "uint256" }
|
|
24182
|
+
];
|
|
24183
|
+
var ADDRESS_UINT = [{ type: "address" }, { type: "uint256" }];
|
|
24184
|
+
function liquityCandidateTroveIds(account, zappers) {
|
|
24185
|
+
const user = account;
|
|
24186
|
+
const ids = [];
|
|
24187
|
+
for (let i = 0; i < OWNER_INDEX_PROBE_COUNT; i++) {
|
|
24188
|
+
ids.push(
|
|
24189
|
+
BigInt(
|
|
24190
|
+
keccak256(
|
|
24191
|
+
encodeAbiParameters(ADDRESS_ADDRESS_UINT, [
|
|
24192
|
+
user,
|
|
24193
|
+
user,
|
|
24194
|
+
BigInt(i)
|
|
24195
|
+
])
|
|
24196
|
+
)
|
|
24197
|
+
).toString()
|
|
24198
|
+
);
|
|
24199
|
+
for (const z of zappers) {
|
|
24200
|
+
const saltedIndex = BigInt(
|
|
24201
|
+
keccak256(encodeAbiParameters(ADDRESS_UINT, [user, BigInt(i)]))
|
|
24202
|
+
);
|
|
24203
|
+
ids.push(
|
|
24204
|
+
BigInt(
|
|
24205
|
+
keccak256(
|
|
24206
|
+
encodeAbiParameters(ADDRESS_ADDRESS_UINT, [
|
|
24207
|
+
z,
|
|
24208
|
+
user,
|
|
24209
|
+
saltedIndex
|
|
24210
|
+
])
|
|
24211
|
+
)
|
|
24212
|
+
).toString()
|
|
24213
|
+
);
|
|
24214
|
+
}
|
|
24215
|
+
}
|
|
24216
|
+
return ids;
|
|
24217
|
+
}
|
|
24218
|
+
var liquityBranchCallCount = (branch, troveCount) => troveCount * 2 + 4 + (branch.collSurplusPool ? 1 : 0);
|
|
24219
|
+
var buildLiquityUserCall = async (chainId, lender, account) => {
|
|
24220
|
+
const cfg = liquityConfigFor(lender, chainId);
|
|
24221
|
+
const branches = liquityBranchesByChain(lender, chainId);
|
|
24222
|
+
if (!cfg || branches.length === 0) return [];
|
|
24223
|
+
const candidates = liquityCandidateTroveIds(account, cfg.zappers ?? []);
|
|
24224
|
+
let statuses = [];
|
|
24225
|
+
try {
|
|
24226
|
+
statuses = await multicallRetryUniversal({
|
|
24227
|
+
chain: chainId,
|
|
24228
|
+
calls: branches.flatMap(
|
|
24229
|
+
(b) => candidates.map((id) => ({
|
|
24230
|
+
address: b.troveManager,
|
|
24231
|
+
name: "getTroveStatus",
|
|
24232
|
+
params: [id]
|
|
24233
|
+
}))
|
|
24234
|
+
),
|
|
24235
|
+
abi: LiquityTroveManagerAbi,
|
|
24236
|
+
allowFailure: true
|
|
24237
|
+
});
|
|
24238
|
+
} catch {
|
|
24239
|
+
return [];
|
|
24240
|
+
}
|
|
24241
|
+
const perBranch = branches.map(
|
|
24242
|
+
(_3, bi) => candidates.map((id, ci) => {
|
|
24243
|
+
const r = statuses[bi * candidates.length + ci];
|
|
24244
|
+
const status = typeof r === "bigint" || typeof r === "number" ? Number(r) : 0;
|
|
24245
|
+
if (status !== 1 && status !== 4) return void 0;
|
|
24246
|
+
return { troveId: id, zombie: status === 4 };
|
|
24247
|
+
}).filter((t) => !!t)
|
|
24248
|
+
);
|
|
24249
|
+
discoveryCache.set(cacheKey(chainId, lender, account), {
|
|
24250
|
+
perBranch,
|
|
24251
|
+
at: Date.now()
|
|
24252
|
+
});
|
|
24253
|
+
const calls = [];
|
|
24254
|
+
branches.forEach((b, bi) => {
|
|
24255
|
+
for (const t of perBranch[bi]) {
|
|
24256
|
+
calls.push({
|
|
24257
|
+
address: b.troveManager,
|
|
24258
|
+
name: "getLatestTroveData",
|
|
24259
|
+
params: [t.troveId]
|
|
24260
|
+
});
|
|
24261
|
+
calls.push({ address: b.troveNFT, name: "ownerOf", params: [t.troveId] });
|
|
24262
|
+
}
|
|
24263
|
+
calls.push({
|
|
24264
|
+
address: b.stabilityPool,
|
|
24265
|
+
name: "getCompoundedBoldDeposit",
|
|
24266
|
+
params: [account]
|
|
24267
|
+
});
|
|
24268
|
+
calls.push({
|
|
24269
|
+
address: b.stabilityPool,
|
|
24270
|
+
name: "getDepositorYieldGainWithPending",
|
|
24271
|
+
params: [account]
|
|
24272
|
+
});
|
|
24273
|
+
calls.push({
|
|
24274
|
+
address: b.stabilityPool,
|
|
24275
|
+
name: "getDepositorCollGain",
|
|
24276
|
+
params: [account]
|
|
24277
|
+
});
|
|
24278
|
+
calls.push({
|
|
24279
|
+
address: b.stabilityPool,
|
|
24280
|
+
name: "stashedColl",
|
|
24281
|
+
params: [account]
|
|
24282
|
+
});
|
|
24283
|
+
if (b.collSurplusPool) {
|
|
24284
|
+
calls.push({
|
|
24285
|
+
address: b.collSurplusPool,
|
|
24286
|
+
name: "getCollateral",
|
|
24287
|
+
params: [account]
|
|
24288
|
+
});
|
|
24289
|
+
}
|
|
24290
|
+
});
|
|
24291
|
+
return calls;
|
|
24292
|
+
};
|
|
24293
|
+
var RIVER_CALLS_PER_MARKET = 3;
|
|
24294
|
+
var buildRiverUserCall = (chainId, lender, account) => {
|
|
24295
|
+
const cfg = riverConfigFor(lender, chainId);
|
|
24296
|
+
const markets = riverChainData(lender, chainId)?.markets ?? [];
|
|
24297
|
+
if (!cfg || markets.length === 0) return [];
|
|
24298
|
+
const calls = markets.flatMap((m) => [
|
|
24299
|
+
{
|
|
24300
|
+
address: m.troveManager,
|
|
24301
|
+
name: "getEntireDebtAndColl",
|
|
24302
|
+
params: [account]
|
|
24303
|
+
},
|
|
24304
|
+
{ address: m.troveManager, name: "getTroveStatus", params: [account] },
|
|
24305
|
+
{ address: m.troveManager, name: "surplusBalances", params: [account] }
|
|
24306
|
+
]);
|
|
24307
|
+
calls.push({
|
|
24308
|
+
address: cfg.xapp,
|
|
24309
|
+
name: "getCompoundedDebtDeposit",
|
|
24310
|
+
params: [account]
|
|
24311
|
+
});
|
|
24312
|
+
return calls;
|
|
24313
|
+
};
|
|
22830
24314
|
|
|
22831
24315
|
// src/lending/user-data/fetch-balances/prepare.ts
|
|
22832
24316
|
async function buildUserCall(chainId, lender, account, params, getClient) {
|
|
@@ -22843,6 +24327,11 @@ async function buildUserCall(chainId, lender, account, params, getClient) {
|
|
|
22843
24327
|
getClient
|
|
22844
24328
|
);
|
|
22845
24329
|
if (isMidnight(lender)) return buildMidnightUserCall(chainId, lender, account);
|
|
24330
|
+
if (isTerm(lender)) return buildTermUserCall(chainId, lender, account);
|
|
24331
|
+
if (isExactly(lender)) return buildExactlyUserCall(chainId, lender, account);
|
|
24332
|
+
if (isLiquityFamily(lender))
|
|
24333
|
+
return buildLiquityUserCall(chainId, lender, account);
|
|
24334
|
+
if (isRiver(lender)) return buildRiverUserCall(chainId, lender, account);
|
|
22846
24335
|
if (isCompoundV3Type(lender))
|
|
22847
24336
|
return buildCompoundV3UserCall(chainId, lender, account);
|
|
22848
24337
|
if (isEulerType(lender))
|
|
@@ -22865,10 +24354,14 @@ function organizeUserQueries(queries) {
|
|
|
22865
24354
|
const morphos = queries.filter((q) => isMorphoType(q.lender));
|
|
22866
24355
|
const gearbox = queries.filter((q) => isGearboxV3(q.lender));
|
|
22867
24356
|
const midnight = queries.filter((q) => isMidnight(q.lender));
|
|
22868
|
-
|
|
24357
|
+
const term = queries.filter((q) => isTerm(q.lender));
|
|
24358
|
+
const exactly = queries.filter((q) => isExactly(q.lender));
|
|
24359
|
+
const liquity = queries.filter((q) => isLiquityFamily(q.lender));
|
|
24360
|
+
const river = queries.filter((q) => isRiver(q.lender));
|
|
24361
|
+
if (morphos.length === 0 && gearbox.length === 0 && midnight.length === 0 && term.length === 0 && exactly.length === 0 && liquity.length === 0 && river.length === 0)
|
|
22869
24362
|
return queries;
|
|
22870
24363
|
const others = queries.filter(
|
|
22871
|
-
(q) => !isMorphoType(q.lender) && !isGearboxV3(q.lender) && !isMidnight(q.lender)
|
|
24364
|
+
(q) => !isMorphoType(q.lender) && !isGearboxV3(q.lender) && !isMidnight(q.lender) && !isTerm(q.lender) && !isExactly(q.lender) && !isLiquityFamily(q.lender) && !isRiver(q.lender)
|
|
22872
24365
|
);
|
|
22873
24366
|
const morphoBlue = morphos.filter((q) => q.lender.startsWith("MORPHO_BLUE"));
|
|
22874
24367
|
const moolah = morphos.filter((q) => q.lender.startsWith("LISTA_DAO"));
|
|
@@ -22905,6 +24398,42 @@ function organizeUserQueries(queries) {
|
|
|
22905
24398
|
assets: void 0
|
|
22906
24399
|
});
|
|
22907
24400
|
}
|
|
24401
|
+
if (term.length > 0) {
|
|
24402
|
+
result.push({
|
|
24403
|
+
lender: Lender.TERM_FINANCE,
|
|
24404
|
+
account: term[0].account,
|
|
24405
|
+
params: term.map((p) => p.lender),
|
|
24406
|
+
assets: void 0
|
|
24407
|
+
});
|
|
24408
|
+
}
|
|
24409
|
+
if (exactly.length > 0) {
|
|
24410
|
+
result.push({
|
|
24411
|
+
lender: Lender.EXACTLY,
|
|
24412
|
+
account: exactly[0].account,
|
|
24413
|
+
params: exactly.map((p) => p.lender),
|
|
24414
|
+
assets: void 0
|
|
24415
|
+
});
|
|
24416
|
+
}
|
|
24417
|
+
if (river.length > 0) {
|
|
24418
|
+
result.push({
|
|
24419
|
+
lender: Lender.RIVER,
|
|
24420
|
+
account: river[0].account,
|
|
24421
|
+
params: river.map((p) => p.lender),
|
|
24422
|
+
assets: void 0
|
|
24423
|
+
});
|
|
24424
|
+
}
|
|
24425
|
+
if (liquity.length > 0) {
|
|
24426
|
+
for (const base of LIQUITY_FAMILY_LENDERS) {
|
|
24427
|
+
const members = liquity.filter((q) => q.lender.startsWith(base));
|
|
24428
|
+
if (members.length === 0) continue;
|
|
24429
|
+
result.push({
|
|
24430
|
+
lender: base,
|
|
24431
|
+
account: members[0].account,
|
|
24432
|
+
params: members.map((p) => p.lender),
|
|
24433
|
+
assets: void 0
|
|
24434
|
+
});
|
|
24435
|
+
}
|
|
24436
|
+
}
|
|
22908
24437
|
return result;
|
|
22909
24438
|
}
|
|
22910
24439
|
|
|
@@ -25225,6 +26754,593 @@ var getMidnightUserDataConverter = (_lender, chainId, account, meta) => {
|
|
|
25225
26754
|
totalCalls
|
|
25226
26755
|
];
|
|
25227
26756
|
};
|
|
26757
|
+
var WAD8 = 1000000000000000000n;
|
|
26758
|
+
function toBigInt11(v) {
|
|
26759
|
+
if (v === void 0 || v === null || v === "0x") return 0n;
|
|
26760
|
+
if (typeof v === "bigint") return v;
|
|
26761
|
+
try {
|
|
26762
|
+
return BigInt(v);
|
|
26763
|
+
} catch {
|
|
26764
|
+
return 0n;
|
|
26765
|
+
}
|
|
26766
|
+
}
|
|
26767
|
+
var getTermUserDataConverter = (_lender, chainId, account, meta) => {
|
|
26768
|
+
const markets = termMarketsByChain(chainId);
|
|
26769
|
+
const totalCalls = markets.reduce(
|
|
26770
|
+
(sum, m) => sum + termMarketCallCount(m.collateralParams.length),
|
|
26771
|
+
0
|
|
26772
|
+
);
|
|
26773
|
+
return [
|
|
26774
|
+
(data) => {
|
|
26775
|
+
if (!data || data.length < totalCalls) return void 0;
|
|
26776
|
+
const out = {};
|
|
26777
|
+
let cursor = 0;
|
|
26778
|
+
for (const market of markets) {
|
|
26779
|
+
const balanceResult = data[cursor];
|
|
26780
|
+
const redemptionResult = data[cursor + 1];
|
|
26781
|
+
const obligationResult = data[cursor + 2];
|
|
26782
|
+
const collateralResults = market.collateralParams.map(
|
|
26783
|
+
(_c, i) => data[cursor + 3 + i]
|
|
26784
|
+
);
|
|
26785
|
+
cursor += termMarketCallCount(market.collateralParams.length);
|
|
26786
|
+
const lenderKey = termLenderKey(market.termRepoId);
|
|
26787
|
+
const metaMap = meta?.[lenderKey];
|
|
26788
|
+
if (!metaMap) continue;
|
|
26789
|
+
const loanAddr = market.purchaseToken.toLowerCase();
|
|
26790
|
+
const loanUid = createMarketUid(chainId, lenderKey, loanAddr);
|
|
26791
|
+
const loanMeta = metaMap[loanUid];
|
|
26792
|
+
const loanDisplayPrice = loanMeta ? getDisplayPrice(loanMeta) : 0;
|
|
26793
|
+
const loanOraclePrice = loanMeta ? getOraclePrice(loanMeta) : 0;
|
|
26794
|
+
const loanPriceHist = loanMeta?.price?.priceUsd24h ?? loanDisplayPrice;
|
|
26795
|
+
const debtUnits = toBigInt11(obligationResult);
|
|
26796
|
+
const debtStr = parseRawAmount(debtUnits.toString(), market.loanDecimals);
|
|
26797
|
+
const debtNum = Number(debtStr);
|
|
26798
|
+
const repoBalance = toBigInt11(balanceResult);
|
|
26799
|
+
const redemptionValue = toBigInt11(redemptionResult) || toBigInt11(market.redemptionValue) || WAD8;
|
|
26800
|
+
const lentUnits = repoBalance * redemptionValue / WAD8;
|
|
26801
|
+
const depositsStr = parseRawAmount(lentUnits.toString(), market.loanDecimals);
|
|
26802
|
+
const depositsNum = Number(depositsStr);
|
|
26803
|
+
const posData = {};
|
|
26804
|
+
let anyBalance = debtUnits > 0n || lentUnits > 0n;
|
|
26805
|
+
let depositsUSD24h = depositsNum * loanPriceHist;
|
|
26806
|
+
posData[loanUid] = {
|
|
26807
|
+
marketUid: loanUid,
|
|
26808
|
+
underlying: loanAddr,
|
|
26809
|
+
deposits: depositsStr,
|
|
26810
|
+
debt: debtStr,
|
|
26811
|
+
debtStable: "0",
|
|
26812
|
+
depositsUSD: depositsNum * loanDisplayPrice,
|
|
26813
|
+
debtUSD: debtNum * loanDisplayPrice,
|
|
26814
|
+
debtStableUSD: 0,
|
|
26815
|
+
depositsUSDOracle: depositsNum * loanOraclePrice,
|
|
26816
|
+
debtUSDOracle: debtNum * loanOraclePrice,
|
|
26817
|
+
debtStableUSDOracle: 0,
|
|
26818
|
+
stableBorrowRate: "0",
|
|
26819
|
+
collateralEnabled: false,
|
|
26820
|
+
claimableRewards: 0
|
|
26821
|
+
};
|
|
26822
|
+
market.collateralParams.forEach((c, i) => {
|
|
26823
|
+
const collAmt = toBigInt11(collateralResults[i]);
|
|
26824
|
+
if (collAmt === 0n) return;
|
|
26825
|
+
anyBalance = true;
|
|
26826
|
+
const collAddr = c.token.toLowerCase();
|
|
26827
|
+
const collUid = createMarketUid(chainId, lenderKey, collAddr);
|
|
26828
|
+
const collMeta = metaMap[collUid];
|
|
26829
|
+
const collDec = collMeta?.asset?.decimals ?? c.decimals;
|
|
26830
|
+
const collDisplayPrice = collMeta ? getDisplayPrice(collMeta) : 0;
|
|
26831
|
+
const collOraclePrice = collMeta ? getOraclePrice(collMeta) : 0;
|
|
26832
|
+
const collPriceHist = collMeta?.price?.priceUsd24h ?? collDisplayPrice;
|
|
26833
|
+
const collDepositsStr = parseRawAmount(collAmt.toString(), collDec);
|
|
26834
|
+
const collDepositsNum = Number(collDepositsStr);
|
|
26835
|
+
depositsUSD24h += collDepositsNum * collPriceHist;
|
|
26836
|
+
posData[collUid] = {
|
|
26837
|
+
marketUid: collUid,
|
|
26838
|
+
underlying: collAddr,
|
|
26839
|
+
deposits: collDepositsStr,
|
|
26840
|
+
debt: "0",
|
|
26841
|
+
debtStable: "0",
|
|
26842
|
+
depositsUSD: collDepositsNum * collDisplayPrice,
|
|
26843
|
+
debtUSD: 0,
|
|
26844
|
+
debtStableUSD: 0,
|
|
26845
|
+
depositsUSDOracle: collDepositsNum * collOraclePrice,
|
|
26846
|
+
debtUSDOracle: 0,
|
|
26847
|
+
debtStableUSDOracle: 0,
|
|
26848
|
+
stableBorrowRate: "0",
|
|
26849
|
+
collateralEnabled: true,
|
|
26850
|
+
claimableRewards: 0
|
|
26851
|
+
};
|
|
26852
|
+
});
|
|
26853
|
+
if (!anyBalance) continue;
|
|
26854
|
+
const userData = createMultiAccountTypeUserState(
|
|
26855
|
+
{
|
|
26856
|
+
chainId,
|
|
26857
|
+
account,
|
|
26858
|
+
lendingPositions: { "0": posData },
|
|
26859
|
+
modes: { "0": 0 }
|
|
26860
|
+
},
|
|
26861
|
+
metaMap,
|
|
26862
|
+
{
|
|
26863
|
+
"0": {
|
|
26864
|
+
totalDeposits24h: depositsUSD24h,
|
|
26865
|
+
totalDebt24h: debtNum * loanPriceHist
|
|
26866
|
+
}
|
|
26867
|
+
}
|
|
26868
|
+
);
|
|
26869
|
+
if (userData && userData.data.length > 0) out[lenderKey] = userData;
|
|
26870
|
+
}
|
|
26871
|
+
return Object.keys(out).length > 0 ? out : void 0;
|
|
26872
|
+
},
|
|
26873
|
+
totalCalls
|
|
26874
|
+
];
|
|
26875
|
+
};
|
|
26876
|
+
var nowSec4 = () => Math.floor(Date.now() / 1e3);
|
|
26877
|
+
function sumPreview(positions) {
|
|
26878
|
+
return positions.reduce((acc, p) => acc + p.previewValue, 0n);
|
|
26879
|
+
}
|
|
26880
|
+
function toDetail(positions, kind, now) {
|
|
26881
|
+
return positions.map((p) => ({
|
|
26882
|
+
maturity: Number(p.maturity),
|
|
26883
|
+
kind,
|
|
26884
|
+
principal: p.position.principal.toString(),
|
|
26885
|
+
fee: p.position.fee.toString(),
|
|
26886
|
+
previewValue: p.previewValue.toString(),
|
|
26887
|
+
overdue: Number(p.maturity) < now
|
|
26888
|
+
}));
|
|
26889
|
+
}
|
|
26890
|
+
var getExactlyUserDataConverter = (_lender, chainId, account, meta) => {
|
|
26891
|
+
const expected = exactlyConfig()?.[chainId]?.previewer ? 1 : 0;
|
|
26892
|
+
return [
|
|
26893
|
+
(data) => {
|
|
26894
|
+
if (!data || data.length < expected || expected === 0) return void 0;
|
|
26895
|
+
const res = data[0];
|
|
26896
|
+
if (!res || res === "0x" || !Array.isArray(res)) return void 0;
|
|
26897
|
+
const markets = res;
|
|
26898
|
+
const now = nowSec4();
|
|
26899
|
+
const out = {};
|
|
26900
|
+
for (const m of markets) {
|
|
26901
|
+
const lenderKey = exactlyLenderKey(m.market);
|
|
26902
|
+
const metaMap = meta?.[lenderKey];
|
|
26903
|
+
if (!metaMap) continue;
|
|
26904
|
+
const assetAddr = m.asset.toLowerCase();
|
|
26905
|
+
const loanUid = createMarketUid(chainId, lenderKey, assetAddr);
|
|
26906
|
+
const loanMeta = metaMap[loanUid];
|
|
26907
|
+
const decimals = loanMeta?.asset?.decimals ?? m.decimals;
|
|
26908
|
+
const loanDisplayPrice = loanMeta ? getDisplayPrice(loanMeta) : 0;
|
|
26909
|
+
const loanOraclePrice = loanMeta ? getOraclePrice(loanMeta) : 0;
|
|
26910
|
+
const loanPriceHist = loanMeta?.price?.priceUsd24h ?? loanDisplayPrice;
|
|
26911
|
+
const depositUnits = m.floatingDepositAssets + sumPreview(m.fixedDepositPositions);
|
|
26912
|
+
const debtUnits = m.floatingBorrowAssets + sumPreview(m.fixedBorrowPositions);
|
|
26913
|
+
if (depositUnits === 0n && debtUnits === 0n) continue;
|
|
26914
|
+
const depositsStr = parseRawAmount(depositUnits.toString(), decimals);
|
|
26915
|
+
const depositsNum = Number(depositsStr);
|
|
26916
|
+
const debtStr = parseRawAmount(debtUnits.toString(), decimals);
|
|
26917
|
+
const debtNum = Number(debtStr);
|
|
26918
|
+
const fixedPositions = [
|
|
26919
|
+
...toDetail(m.fixedDepositPositions, "deposit", now),
|
|
26920
|
+
...toDetail(m.fixedBorrowPositions, "borrow", now)
|
|
26921
|
+
];
|
|
26922
|
+
const posData = {};
|
|
26923
|
+
let depositsUSD24h = depositsNum * loanPriceHist;
|
|
26924
|
+
posData[loanUid] = {
|
|
26925
|
+
marketUid: loanUid,
|
|
26926
|
+
underlying: assetAddr,
|
|
26927
|
+
deposits: depositsStr,
|
|
26928
|
+
debt: debtStr,
|
|
26929
|
+
debtStable: "0",
|
|
26930
|
+
depositsUSD: depositsNum * loanDisplayPrice,
|
|
26931
|
+
debtUSD: debtNum * loanDisplayPrice,
|
|
26932
|
+
debtStableUSD: 0,
|
|
26933
|
+
depositsUSDOracle: depositsNum * loanOraclePrice,
|
|
26934
|
+
debtUSDOracle: debtNum * loanOraclePrice,
|
|
26935
|
+
debtStableUSDOracle: 0,
|
|
26936
|
+
stableBorrowRate: "0",
|
|
26937
|
+
collateralEnabled: m.isCollateral,
|
|
26938
|
+
claimableRewards: 0,
|
|
26939
|
+
// Per-maturity fixed-position detail (survives to the output — the
|
|
26940
|
+
// multi-account state builder mutates posData in place).
|
|
26941
|
+
fixedPositions: fixedPositions.length > 0 ? fixedPositions : void 0
|
|
26942
|
+
};
|
|
26943
|
+
if (debtUnits > 0n) {
|
|
26944
|
+
for (const c of markets) {
|
|
26945
|
+
if (c.market.toLowerCase() === m.market.toLowerCase()) continue;
|
|
26946
|
+
if (!c.isCollateral) continue;
|
|
26947
|
+
const cDeposit = c.floatingDepositAssets + sumPreview(c.fixedDepositPositions);
|
|
26948
|
+
if (cDeposit === 0n) continue;
|
|
26949
|
+
const collAddr = c.asset.toLowerCase();
|
|
26950
|
+
const collUid = createMarketUid(chainId, lenderKey, collAddr);
|
|
26951
|
+
const collMeta = metaMap[collUid];
|
|
26952
|
+
const collDec = collMeta?.asset?.decimals ?? c.decimals;
|
|
26953
|
+
const collDisplayPrice = collMeta ? getDisplayPrice(collMeta) : 0;
|
|
26954
|
+
const collOraclePrice = collMeta ? getOraclePrice(collMeta) : 0;
|
|
26955
|
+
const collPriceHist = collMeta?.price?.priceUsd24h ?? collDisplayPrice;
|
|
26956
|
+
const collStr = parseRawAmount(cDeposit.toString(), collDec);
|
|
26957
|
+
const collNum = Number(collStr);
|
|
26958
|
+
depositsUSD24h += collNum * collPriceHist;
|
|
26959
|
+
posData[collUid] = {
|
|
26960
|
+
marketUid: collUid,
|
|
26961
|
+
underlying: collAddr,
|
|
26962
|
+
deposits: collStr,
|
|
26963
|
+
debt: "0",
|
|
26964
|
+
debtStable: "0",
|
|
26965
|
+
depositsUSD: collNum * collDisplayPrice,
|
|
26966
|
+
debtUSD: 0,
|
|
26967
|
+
debtStableUSD: 0,
|
|
26968
|
+
depositsUSDOracle: collNum * collOraclePrice,
|
|
26969
|
+
debtUSDOracle: 0,
|
|
26970
|
+
debtStableUSDOracle: 0,
|
|
26971
|
+
stableBorrowRate: "0",
|
|
26972
|
+
collateralEnabled: true,
|
|
26973
|
+
claimableRewards: 0
|
|
26974
|
+
};
|
|
26975
|
+
}
|
|
26976
|
+
}
|
|
26977
|
+
const userData = createMultiAccountTypeUserState(
|
|
26978
|
+
{
|
|
26979
|
+
chainId,
|
|
26980
|
+
account,
|
|
26981
|
+
lendingPositions: { "0": posData },
|
|
26982
|
+
modes: { "0": 0 }
|
|
26983
|
+
},
|
|
26984
|
+
metaMap,
|
|
26985
|
+
{
|
|
26986
|
+
"0": {
|
|
26987
|
+
totalDeposits24h: depositsUSD24h,
|
|
26988
|
+
totalDebt24h: debtNum * loanPriceHist
|
|
26989
|
+
}
|
|
26990
|
+
}
|
|
26991
|
+
);
|
|
26992
|
+
if (userData && userData.data.length > 0) out[lenderKey] = userData;
|
|
26993
|
+
}
|
|
26994
|
+
return Object.keys(out).length > 0 ? out : void 0;
|
|
26995
|
+
},
|
|
26996
|
+
expected
|
|
26997
|
+
];
|
|
26998
|
+
};
|
|
26999
|
+
var big = (v) => {
|
|
27000
|
+
try {
|
|
27001
|
+
if (typeof v === "bigint") return v;
|
|
27002
|
+
if (typeof v === "number" || typeof v === "string") return BigInt(v);
|
|
27003
|
+
} catch {
|
|
27004
|
+
}
|
|
27005
|
+
return 0n;
|
|
27006
|
+
};
|
|
27007
|
+
var field6 = (res, name, idx) => big(res?.[name] ?? res?.[idx]);
|
|
27008
|
+
var getLiquityUserDataConverter = (lender, chainId, account, meta) => {
|
|
27009
|
+
const cfg = liquityConfigFor(lender, chainId);
|
|
27010
|
+
const branches = liquityBranchesByChain(lender, chainId);
|
|
27011
|
+
const discovery = getCachedLiquityTroves(chainId, lender, account);
|
|
27012
|
+
const expected = cfg && discovery ? branches.reduce(
|
|
27013
|
+
(acc, b, i) => acc + liquityBranchCallCount(b, discovery.perBranch[i]?.length ?? 0),
|
|
27014
|
+
0
|
|
27015
|
+
) : 0;
|
|
27016
|
+
return [
|
|
27017
|
+
(data) => {
|
|
27018
|
+
if (!cfg || !discovery || expected === 0) return void 0;
|
|
27019
|
+
if (!data || data.length < expected) return void 0;
|
|
27020
|
+
const stableAddr = cfg.boldToken.toLowerCase();
|
|
27021
|
+
const stableDecimals = cfg.boldDecimals ?? 18;
|
|
27022
|
+
const accountLower = account.toLowerCase();
|
|
27023
|
+
const out = {};
|
|
27024
|
+
let cursor = 0;
|
|
27025
|
+
branches.forEach((branch, bi) => {
|
|
27026
|
+
const troves = discovery.perBranch[bi] ?? [];
|
|
27027
|
+
const callCount = liquityBranchCallCount(branch, troves.length);
|
|
27028
|
+
const slice = data.slice(cursor, cursor + callCount);
|
|
27029
|
+
cursor += callCount;
|
|
27030
|
+
const lenderKey = liquityLenderKey(lender, branch.collIndex);
|
|
27031
|
+
const metaMap = meta?.[lenderKey];
|
|
27032
|
+
if (!metaMap) return;
|
|
27033
|
+
const collAddr = branch.collToken.toLowerCase();
|
|
27034
|
+
const collUid = createMarketUid(chainId, lenderKey, collAddr);
|
|
27035
|
+
const loanUid = createMarketUid(chainId, lenderKey, stableAddr);
|
|
27036
|
+
const collMeta = metaMap[collUid];
|
|
27037
|
+
const loanMeta = metaMap[loanUid];
|
|
27038
|
+
const collDecimals = collMeta?.asset?.decimals ?? branch.collDecimals;
|
|
27039
|
+
const collDisplay = collMeta ? getDisplayPrice(collMeta) : 0;
|
|
27040
|
+
const collOracle = collMeta ? getOraclePrice(collMeta) : 0;
|
|
27041
|
+
const collHist = collMeta?.price?.priceUsd24h ?? collDisplay;
|
|
27042
|
+
const loanDisplay = loanMeta ? getDisplayPrice(loanMeta) : 0;
|
|
27043
|
+
const loanOracle = loanMeta ? getOraclePrice(loanMeta) : 0;
|
|
27044
|
+
const loanHist = loanMeta?.price?.priceUsd24h ?? loanDisplay;
|
|
27045
|
+
const lendingPositions = {};
|
|
27046
|
+
const modes = {};
|
|
27047
|
+
const hist = {};
|
|
27048
|
+
troves.forEach((t, ti) => {
|
|
27049
|
+
const troveData = slice[ti * 2];
|
|
27050
|
+
const ownerRaw = slice[ti * 2 + 1];
|
|
27051
|
+
const owner = typeof ownerRaw === "string" ? ownerRaw.toLowerCase() : void 0;
|
|
27052
|
+
if (owner !== accountLower) return;
|
|
27053
|
+
if (!troveData || troveData === "0x") return;
|
|
27054
|
+
const entireDebt = field6(troveData, "entireDebt", 0);
|
|
27055
|
+
const entireColl = field6(troveData, "entireColl", 1);
|
|
27056
|
+
if (entireDebt === 0n && entireColl === 0n) return;
|
|
27057
|
+
const troveInfo = {
|
|
27058
|
+
troveId: t.troveId,
|
|
27059
|
+
collIndex: branch.collIndex,
|
|
27060
|
+
annualInterestRate: field6(
|
|
27061
|
+
troveData,
|
|
27062
|
+
"annualInterestRate",
|
|
27063
|
+
6
|
|
27064
|
+
).toString(),
|
|
27065
|
+
lastInterestRateAdjTime: Number(
|
|
27066
|
+
field6(troveData, "lastInterestRateAdjTime", 9)
|
|
27067
|
+
),
|
|
27068
|
+
zombie: t.zombie,
|
|
27069
|
+
redistCollGain: field6(troveData, "redistCollGain", 3).toString(),
|
|
27070
|
+
redistBoldDebtGain: field6(
|
|
27071
|
+
troveData,
|
|
27072
|
+
"redistBoldDebtGain",
|
|
27073
|
+
2
|
|
27074
|
+
).toString(),
|
|
27075
|
+
accruedInterest: field6(troveData, "accruedInterest", 4).toString(),
|
|
27076
|
+
accruedBatchManagementFee: field6(
|
|
27077
|
+
troveData,
|
|
27078
|
+
"accruedBatchManagementFee",
|
|
27079
|
+
8
|
|
27080
|
+
).toString()
|
|
27081
|
+
};
|
|
27082
|
+
const collStr = parseRawAmount(entireColl.toString(), collDecimals);
|
|
27083
|
+
const collNum = Number(collStr);
|
|
27084
|
+
const debtStr = parseRawAmount(entireDebt.toString(), stableDecimals);
|
|
27085
|
+
const debtNum = Number(debtStr);
|
|
27086
|
+
lendingPositions[t.troveId] = {
|
|
27087
|
+
[collUid]: {
|
|
27088
|
+
marketUid: collUid,
|
|
27089
|
+
underlying: collAddr,
|
|
27090
|
+
deposits: collStr,
|
|
27091
|
+
debt: "0",
|
|
27092
|
+
debtStable: "0",
|
|
27093
|
+
depositsUSD: collNum * collDisplay,
|
|
27094
|
+
debtUSD: 0,
|
|
27095
|
+
debtStableUSD: 0,
|
|
27096
|
+
depositsUSDOracle: collNum * collOracle,
|
|
27097
|
+
debtUSDOracle: 0,
|
|
27098
|
+
debtStableUSDOracle: 0,
|
|
27099
|
+
stableBorrowRate: "0",
|
|
27100
|
+
collateralEnabled: true,
|
|
27101
|
+
claimableRewards: 0
|
|
27102
|
+
},
|
|
27103
|
+
[loanUid]: {
|
|
27104
|
+
marketUid: loanUid,
|
|
27105
|
+
underlying: stableAddr,
|
|
27106
|
+
deposits: "0",
|
|
27107
|
+
debt: debtStr,
|
|
27108
|
+
debtStable: "0",
|
|
27109
|
+
depositsUSD: 0,
|
|
27110
|
+
debtUSD: debtNum * loanDisplay,
|
|
27111
|
+
debtStableUSD: 0,
|
|
27112
|
+
depositsUSDOracle: 0,
|
|
27113
|
+
debtUSDOracle: debtNum * loanOracle,
|
|
27114
|
+
debtStableUSDOracle: 0,
|
|
27115
|
+
stableBorrowRate: "0",
|
|
27116
|
+
collateralEnabled: false,
|
|
27117
|
+
claimableRewards: 0,
|
|
27118
|
+
troveInfo
|
|
27119
|
+
}
|
|
27120
|
+
};
|
|
27121
|
+
modes[t.troveId] = 0;
|
|
27122
|
+
hist[t.troveId] = {
|
|
27123
|
+
totalDeposits24h: collNum * collHist,
|
|
27124
|
+
totalDebt24h: debtNum * loanHist
|
|
27125
|
+
};
|
|
27126
|
+
});
|
|
27127
|
+
const spBase = troves.length * 2;
|
|
27128
|
+
const spDeposit = big(slice[spBase]);
|
|
27129
|
+
const spYield = big(slice[spBase + 1]);
|
|
27130
|
+
const spCollGain = big(slice[spBase + 2]);
|
|
27131
|
+
const spStashed = big(slice[spBase + 3]);
|
|
27132
|
+
const collSurplus = branch.collSurplusPool ? big(slice[spBase + 4]) : 0n;
|
|
27133
|
+
const spStable = spDeposit + spYield;
|
|
27134
|
+
const spColl = spCollGain + spStashed + collSurplus;
|
|
27135
|
+
if (spStable > 0n || spColl > 0n) {
|
|
27136
|
+
const spInfo = {
|
|
27137
|
+
deposit: spDeposit.toString(),
|
|
27138
|
+
yieldGain: spYield.toString(),
|
|
27139
|
+
collGain: spCollGain.toString(),
|
|
27140
|
+
stashedColl: spStashed.toString(),
|
|
27141
|
+
collSurplus: collSurplus.toString()
|
|
27142
|
+
};
|
|
27143
|
+
const spStableStr = parseRawAmount(
|
|
27144
|
+
spStable.toString(),
|
|
27145
|
+
stableDecimals
|
|
27146
|
+
);
|
|
27147
|
+
const spStableNum = Number(spStableStr);
|
|
27148
|
+
const spCollStr = parseRawAmount(spColl.toString(), collDecimals);
|
|
27149
|
+
const spCollNum = Number(spCollStr);
|
|
27150
|
+
lendingPositions["sp"] = {
|
|
27151
|
+
[loanUid]: {
|
|
27152
|
+
marketUid: loanUid,
|
|
27153
|
+
underlying: stableAddr,
|
|
27154
|
+
deposits: spStableStr,
|
|
27155
|
+
debt: "0",
|
|
27156
|
+
debtStable: "0",
|
|
27157
|
+
depositsUSD: spStableNum * loanDisplay,
|
|
27158
|
+
debtUSD: 0,
|
|
27159
|
+
debtStableUSD: 0,
|
|
27160
|
+
depositsUSDOracle: spStableNum * loanOracle,
|
|
27161
|
+
debtUSDOracle: 0,
|
|
27162
|
+
debtStableUSDOracle: 0,
|
|
27163
|
+
stableBorrowRate: "0",
|
|
27164
|
+
collateralEnabled: false,
|
|
27165
|
+
claimableRewards: 0,
|
|
27166
|
+
spInfo
|
|
27167
|
+
},
|
|
27168
|
+
...spColl > 0n ? {
|
|
27169
|
+
[collUid]: {
|
|
27170
|
+
marketUid: collUid,
|
|
27171
|
+
underlying: collAddr,
|
|
27172
|
+
deposits: spCollStr,
|
|
27173
|
+
debt: "0",
|
|
27174
|
+
debtStable: "0",
|
|
27175
|
+
depositsUSD: spCollNum * collDisplay,
|
|
27176
|
+
debtUSD: 0,
|
|
27177
|
+
debtStableUSD: 0,
|
|
27178
|
+
depositsUSDOracle: spCollNum * collOracle,
|
|
27179
|
+
debtUSDOracle: 0,
|
|
27180
|
+
debtStableUSDOracle: 0,
|
|
27181
|
+
stableBorrowRate: "0",
|
|
27182
|
+
collateralEnabled: false,
|
|
27183
|
+
claimableRewards: 0
|
|
27184
|
+
}
|
|
27185
|
+
} : {}
|
|
27186
|
+
};
|
|
27187
|
+
modes["sp"] = 0;
|
|
27188
|
+
hist["sp"] = {
|
|
27189
|
+
totalDeposits24h: spStableNum * loanHist + spCollNum * collHist,
|
|
27190
|
+
totalDebt24h: 0
|
|
27191
|
+
};
|
|
27192
|
+
}
|
|
27193
|
+
if (Object.keys(lendingPositions).length === 0) return;
|
|
27194
|
+
const userData = createMultiAccountTypeUserState(
|
|
27195
|
+
{
|
|
27196
|
+
chainId,
|
|
27197
|
+
account,
|
|
27198
|
+
lendingPositions,
|
|
27199
|
+
modes
|
|
27200
|
+
},
|
|
27201
|
+
metaMap,
|
|
27202
|
+
hist
|
|
27203
|
+
);
|
|
27204
|
+
if (userData && userData.data.length > 0) out[lenderKey] = userData;
|
|
27205
|
+
});
|
|
27206
|
+
return Object.keys(out).length > 0 ? out : void 0;
|
|
27207
|
+
},
|
|
27208
|
+
expected
|
|
27209
|
+
];
|
|
27210
|
+
};
|
|
27211
|
+
var big2 = (v) => {
|
|
27212
|
+
try {
|
|
27213
|
+
if (typeof v === "bigint") return v;
|
|
27214
|
+
if (typeof v === "number" || typeof v === "string") return BigInt(v);
|
|
27215
|
+
} catch {
|
|
27216
|
+
}
|
|
27217
|
+
return 0n;
|
|
27218
|
+
};
|
|
27219
|
+
var field7 = (res, name, idx) => big2(res?.[name] ?? res?.[idx]);
|
|
27220
|
+
var getRiverUserDataConverter = (lender, chainId, account, meta) => {
|
|
27221
|
+
const cfg = riverConfigFor(lender, chainId);
|
|
27222
|
+
const markets = riverChainData(lender, chainId)?.markets ?? [];
|
|
27223
|
+
const expected = cfg && markets.length > 0 ? markets.length * RIVER_CALLS_PER_MARKET + 1 : 0;
|
|
27224
|
+
return [
|
|
27225
|
+
(data) => {
|
|
27226
|
+
if (!cfg || expected === 0) return void 0;
|
|
27227
|
+
if (!data || data.length < expected) return void 0;
|
|
27228
|
+
const debtAddr = cfg.debtToken.toLowerCase();
|
|
27229
|
+
const debtDecimals = cfg.debtDecimals ?? 18;
|
|
27230
|
+
const out = {};
|
|
27231
|
+
const spDeposit = big2(data[markets.length * RIVER_CALLS_PER_MARKET]);
|
|
27232
|
+
markets.forEach((market, i) => {
|
|
27233
|
+
const base = i * RIVER_CALLS_PER_MARKET;
|
|
27234
|
+
const entire = data[base];
|
|
27235
|
+
const status = Number(big2(data[base + 1]));
|
|
27236
|
+
const surplus = big2(data[base + 2]);
|
|
27237
|
+
const lenderKey = riverLenderKey(lender, market.index);
|
|
27238
|
+
const metaMap = meta?.[lenderKey];
|
|
27239
|
+
if (!metaMap) return;
|
|
27240
|
+
const collAddr = market.collToken.toLowerCase();
|
|
27241
|
+
const collUid = createMarketUid(chainId, lenderKey, collAddr);
|
|
27242
|
+
const loanUid = createMarketUid(chainId, lenderKey, debtAddr);
|
|
27243
|
+
const collMeta = metaMap[collUid];
|
|
27244
|
+
const loanMeta = metaMap[loanUid];
|
|
27245
|
+
const collDecimals = collMeta?.asset?.decimals ?? market.collDecimals;
|
|
27246
|
+
const collDisplay = collMeta ? getDisplayPrice(collMeta) : 0;
|
|
27247
|
+
const collOracle = collMeta ? getOraclePrice(collMeta) : 0;
|
|
27248
|
+
const collHist = collMeta?.price?.priceUsd24h ?? collDisplay;
|
|
27249
|
+
const loanDisplay = loanMeta ? getDisplayPrice(loanMeta) : 0;
|
|
27250
|
+
const loanOracle = loanMeta ? getOraclePrice(loanMeta) : 0;
|
|
27251
|
+
const loanHist = loanMeta?.price?.priceUsd24h ?? loanDisplay;
|
|
27252
|
+
const lendingPositions = {};
|
|
27253
|
+
const modes = {};
|
|
27254
|
+
const hist = {};
|
|
27255
|
+
const debt = field7(entire, "debt", 0);
|
|
27256
|
+
const coll = field7(entire, "coll", 1);
|
|
27257
|
+
if (status === 1 && (debt > 0n || coll > 0n)) {
|
|
27258
|
+
const riverInfo = {
|
|
27259
|
+
index: market.index,
|
|
27260
|
+
collateralSurplus: surplus.toString()
|
|
27261
|
+
};
|
|
27262
|
+
const collStr = parseRawAmount(coll.toString(), collDecimals);
|
|
27263
|
+
const collNum = Number(collStr);
|
|
27264
|
+
const debtStr = parseRawAmount(debt.toString(), debtDecimals);
|
|
27265
|
+
const debtNum = Number(debtStr);
|
|
27266
|
+
lendingPositions["0"] = {
|
|
27267
|
+
[collUid]: {
|
|
27268
|
+
marketUid: collUid,
|
|
27269
|
+
underlying: collAddr,
|
|
27270
|
+
deposits: collStr,
|
|
27271
|
+
debt: "0",
|
|
27272
|
+
debtStable: "0",
|
|
27273
|
+
depositsUSD: collNum * collDisplay,
|
|
27274
|
+
debtUSD: 0,
|
|
27275
|
+
debtStableUSD: 0,
|
|
27276
|
+
depositsUSDOracle: collNum * collOracle,
|
|
27277
|
+
debtUSDOracle: 0,
|
|
27278
|
+
debtStableUSDOracle: 0,
|
|
27279
|
+
stableBorrowRate: "0",
|
|
27280
|
+
collateralEnabled: true,
|
|
27281
|
+
claimableRewards: 0
|
|
27282
|
+
},
|
|
27283
|
+
[loanUid]: {
|
|
27284
|
+
marketUid: loanUid,
|
|
27285
|
+
underlying: debtAddr,
|
|
27286
|
+
deposits: "0",
|
|
27287
|
+
debt: debtStr,
|
|
27288
|
+
debtStable: "0",
|
|
27289
|
+
depositsUSD: 0,
|
|
27290
|
+
debtUSD: debtNum * loanDisplay,
|
|
27291
|
+
debtStableUSD: 0,
|
|
27292
|
+
depositsUSDOracle: 0,
|
|
27293
|
+
debtUSDOracle: debtNum * loanOracle,
|
|
27294
|
+
debtStableUSDOracle: 0,
|
|
27295
|
+
stableBorrowRate: "0",
|
|
27296
|
+
collateralEnabled: false,
|
|
27297
|
+
claimableRewards: 0,
|
|
27298
|
+
riverInfo
|
|
27299
|
+
}
|
|
27300
|
+
};
|
|
27301
|
+
modes["0"] = 0;
|
|
27302
|
+
hist["0"] = {
|
|
27303
|
+
totalDeposits24h: collNum * collHist,
|
|
27304
|
+
totalDebt24h: debtNum * loanHist
|
|
27305
|
+
};
|
|
27306
|
+
}
|
|
27307
|
+
if (market.index === 0 && spDeposit > 0n) {
|
|
27308
|
+
const spStr = parseRawAmount(spDeposit.toString(), debtDecimals);
|
|
27309
|
+
const spNum = Number(spStr);
|
|
27310
|
+
lendingPositions["sp"] = {
|
|
27311
|
+
[loanUid]: {
|
|
27312
|
+
marketUid: loanUid,
|
|
27313
|
+
underlying: debtAddr,
|
|
27314
|
+
deposits: spStr,
|
|
27315
|
+
debt: "0",
|
|
27316
|
+
debtStable: "0",
|
|
27317
|
+
depositsUSD: spNum * loanDisplay,
|
|
27318
|
+
debtUSD: 0,
|
|
27319
|
+
debtStableUSD: 0,
|
|
27320
|
+
depositsUSDOracle: spNum * loanOracle,
|
|
27321
|
+
debtUSDOracle: 0,
|
|
27322
|
+
debtStableUSDOracle: 0,
|
|
27323
|
+
stableBorrowRate: "0",
|
|
27324
|
+
collateralEnabled: false,
|
|
27325
|
+
claimableRewards: 0
|
|
27326
|
+
}
|
|
27327
|
+
};
|
|
27328
|
+
modes["sp"] = 0;
|
|
27329
|
+
hist["sp"] = { totalDeposits24h: spNum * loanHist, totalDebt24h: 0 };
|
|
27330
|
+
}
|
|
27331
|
+
if (Object.keys(lendingPositions).length === 0) return;
|
|
27332
|
+
const userData = createMultiAccountTypeUserState(
|
|
27333
|
+
{ chainId, account, lendingPositions, modes },
|
|
27334
|
+
metaMap,
|
|
27335
|
+
hist
|
|
27336
|
+
);
|
|
27337
|
+
if (userData && userData.data.length > 0) out[lenderKey] = userData;
|
|
27338
|
+
});
|
|
27339
|
+
return Object.keys(out).length > 0 ? out : void 0;
|
|
27340
|
+
},
|
|
27341
|
+
expected
|
|
27342
|
+
];
|
|
27343
|
+
};
|
|
25228
27344
|
|
|
25229
27345
|
// src/lending/user-data/fetch-balances/parse.ts
|
|
25230
27346
|
function getUserDataConverter(lender, chainId, account, params, meta) {
|
|
@@ -25248,6 +27364,14 @@ function getUserDataConverter(lender, chainId, account, params, meta) {
|
|
|
25248
27364
|
);
|
|
25249
27365
|
if (isMidnight(lender))
|
|
25250
27366
|
return getMidnightUserDataConverter(lender, chainId, account, meta);
|
|
27367
|
+
if (isTerm(lender))
|
|
27368
|
+
return getTermUserDataConverter(lender, chainId, account, meta);
|
|
27369
|
+
if (isExactly(lender))
|
|
27370
|
+
return getExactlyUserDataConverter(lender, chainId, account, meta);
|
|
27371
|
+
if (isLiquityFamily(lender))
|
|
27372
|
+
return getLiquityUserDataConverter(lender, chainId, account, meta);
|
|
27373
|
+
if (isRiver(lender))
|
|
27374
|
+
return getRiverUserDataConverter(lender, chainId, account, meta);
|
|
25251
27375
|
if (isCompoundV3Type(lender))
|
|
25252
27376
|
return getCompoundV3UserDataConverter(
|
|
25253
27377
|
lender,
|
|
@@ -25421,9 +27545,9 @@ var MULTICALL_ADDRESS = {
|
|
|
25421
27545
|
// src/utils/multicall.ts
|
|
25422
27546
|
var { isArray } = lodash;
|
|
25423
27547
|
var maxRetries = 3;
|
|
25424
|
-
var multicallViemAbiArray = async (chainId, abi, calls,
|
|
27548
|
+
var multicallViemAbiArray = async (chainId, abi, calls, getEvmClient18, retry = true, providerId = 0, retries = maxRetries, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, logs = false) => {
|
|
25425
27549
|
try {
|
|
25426
|
-
const provider =
|
|
27550
|
+
const provider = getEvmClient18(chainId, providerId);
|
|
25427
27551
|
const abiIsArray = isArray(abi[0]);
|
|
25428
27552
|
const returnData = await provider.multicall({
|
|
25429
27553
|
allowFailure,
|
|
@@ -25449,7 +27573,7 @@ var multicallViemAbiArray = async (chainId, abi, calls, getEvmClient17, retry =
|
|
|
25449
27573
|
chainId,
|
|
25450
27574
|
abi,
|
|
25451
27575
|
calls,
|
|
25452
|
-
|
|
27576
|
+
getEvmClient18,
|
|
25453
27577
|
retry,
|
|
25454
27578
|
providerId,
|
|
25455
27579
|
retries,
|
|
@@ -25459,13 +27583,13 @@ var multicallViemAbiArray = async (chainId, abi, calls, getEvmClient17, retry =
|
|
|
25459
27583
|
);
|
|
25460
27584
|
}
|
|
25461
27585
|
};
|
|
25462
|
-
var multicallShardedAbiArray = async (chainId, abi, calls,
|
|
27586
|
+
var multicallShardedAbiArray = async (chainId, abi, calls, getEvmClient18, poolSize, retries = maxRetries, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, logs = false) => {
|
|
25463
27587
|
if (poolSize <= 1) {
|
|
25464
27588
|
return multicallViemAbiArray(
|
|
25465
27589
|
chainId,
|
|
25466
27590
|
abi,
|
|
25467
27591
|
calls,
|
|
25468
|
-
|
|
27592
|
+
getEvmClient18,
|
|
25469
27593
|
true,
|
|
25470
27594
|
0,
|
|
25471
27595
|
retries,
|
|
@@ -25488,7 +27612,7 @@ var multicallShardedAbiArray = async (chainId, abi, calls, getEvmClient17, poolS
|
|
|
25488
27612
|
const results = new Array(contracts.length);
|
|
25489
27613
|
const runBatch = async (batch, rpcId, attemptsLeft, size) => {
|
|
25490
27614
|
try {
|
|
25491
|
-
const provider =
|
|
27615
|
+
const provider = getEvmClient18(chainId, rpcId);
|
|
25492
27616
|
const returnData = await provider.multicall({
|
|
25493
27617
|
allowFailure,
|
|
25494
27618
|
batchSize: size,
|
|
@@ -30003,6 +32127,22 @@ var getAbi2 = (lender) => {
|
|
|
30003
32127
|
return [...CometAbi, ...CometExtAbi, ...CometRewardsAbi];
|
|
30004
32128
|
if (isMorphoType(lender)) return [...MorphoBlueAbi, ...MorphoLensAbi];
|
|
30005
32129
|
if (isMidnight(lender)) return [...MidnightAbi];
|
|
32130
|
+
if (isTerm(lender))
|
|
32131
|
+
return [
|
|
32132
|
+
...TermRepoTokenAbi,
|
|
32133
|
+
...TermRepoServicerAbi,
|
|
32134
|
+
...TermRepoCollateralManagerAbi
|
|
32135
|
+
];
|
|
32136
|
+
if (isExactly(lender)) return [...ExactlyPreviewerAbi];
|
|
32137
|
+
if (isLiquityFamily(lender))
|
|
32138
|
+
return [
|
|
32139
|
+
...LiquityTroveManagerAbi,
|
|
32140
|
+
...LiquityStabilityPoolAbi,
|
|
32141
|
+
...LiquityTroveNFTAbi,
|
|
32142
|
+
...LiquityCollSurplusPoolAbi
|
|
32143
|
+
];
|
|
32144
|
+
if (isRiver(lender))
|
|
32145
|
+
return [...RiverTroveManagerAbi, ...RiverStabilityPoolAbi];
|
|
30006
32146
|
if (isInit(lender)) return InitLensAbi;
|
|
30007
32147
|
if (isEulerType(lender)) return accountLensAbi;
|
|
30008
32148
|
if (isCompoundV2Type(lender))
|
|
@@ -30116,7 +32256,7 @@ function unflattenLenderData(pools) {
|
|
|
30116
32256
|
}
|
|
30117
32257
|
return result;
|
|
30118
32258
|
}
|
|
30119
|
-
var getLenderUserDataResult = async (chainId, queriesRaw,
|
|
32259
|
+
var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient18, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, retries = 3, logs = false, concurrency = 1) => {
|
|
30120
32260
|
const queries = organizeUserQueries(queriesRaw);
|
|
30121
32261
|
const builtCalls = await Promise.all(
|
|
30122
32262
|
queries.map(async (query3) => {
|
|
@@ -30126,7 +32266,7 @@ var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient17, allowF
|
|
|
30126
32266
|
query3.lender,
|
|
30127
32267
|
query3.account,
|
|
30128
32268
|
query3.params,
|
|
30129
|
-
|
|
32269
|
+
getEvmClient18
|
|
30130
32270
|
);
|
|
30131
32271
|
return callData.map((call) => ({ call, abi: call.abi ?? abi }));
|
|
30132
32272
|
})
|
|
@@ -30136,7 +32276,7 @@ var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient17, allowF
|
|
|
30136
32276
|
chainId,
|
|
30137
32277
|
calls.map((call) => call.abi),
|
|
30138
32278
|
calls.map((call) => call.call),
|
|
30139
|
-
|
|
32279
|
+
getEvmClient18,
|
|
30140
32280
|
concurrency,
|
|
30141
32281
|
retries,
|
|
30142
32282
|
allowFailure,
|
|
@@ -30556,7 +32696,7 @@ var MORPHO_API_CHAIN_IDS = {
|
|
|
30556
32696
|
[Chain.UNICHAIN]: 130
|
|
30557
32697
|
};
|
|
30558
32698
|
var FETCH_TIMEOUT_MS = 3e3;
|
|
30559
|
-
var
|
|
32699
|
+
var CACHE_TTL_MS2 = 2e3;
|
|
30560
32700
|
var buildSubgraphQuery = (account) => `
|
|
30561
32701
|
{
|
|
30562
32702
|
account(id: "${account.toLowerCase()}") {
|
|
@@ -30611,11 +32751,11 @@ async function fetchJsonWithProxyFallback(url, body, proxyConfig) {
|
|
|
30611
32751
|
}
|
|
30612
32752
|
var inflight = /* @__PURE__ */ new Map();
|
|
30613
32753
|
var resolved = /* @__PURE__ */ new Map();
|
|
30614
|
-
function
|
|
32754
|
+
function cacheKey2(chainId, account) {
|
|
30615
32755
|
return `${chainId}:${account.toLowerCase()}`;
|
|
30616
32756
|
}
|
|
30617
32757
|
async function dedupedFetch(chainId, account, loader) {
|
|
30618
|
-
const key =
|
|
32758
|
+
const key = cacheKey2(chainId, account);
|
|
30619
32759
|
const now = Date.now();
|
|
30620
32760
|
const cached = resolved.get(key);
|
|
30621
32761
|
if (cached && cached.expiresAt > now) {
|
|
@@ -30624,7 +32764,7 @@ async function dedupedFetch(chainId, account, loader) {
|
|
|
30624
32764
|
const existing = inflight.get(key);
|
|
30625
32765
|
if (existing) return existing;
|
|
30626
32766
|
const promise = loader().then((value) => {
|
|
30627
|
-
resolved.set(key, { value, expiresAt: Date.now() +
|
|
32767
|
+
resolved.set(key, { value, expiresAt: Date.now() + CACHE_TTL_MS2 });
|
|
30628
32768
|
return value;
|
|
30629
32769
|
}).finally(() => {
|
|
30630
32770
|
inflight.delete(key);
|
|
@@ -30756,8 +32896,8 @@ function calculateOverallNetApr(totalDepositsUSD, totalDebtUSD, avgDepositApr, a
|
|
|
30756
32896
|
return (totalDepositsUSD * avgDepositApr - totalDebtUSD * avgBorrowApr) / Math.abs(totalNetWorth) * (totalNetWorth > 0 ? 1 : -1);
|
|
30757
32897
|
}
|
|
30758
32898
|
function calculateWeightedAprs(items) {
|
|
30759
|
-
const wa = (
|
|
30760
|
-
items.filter((i) => i[weightField] !== 0).map((i) => ({ value: i[
|
|
32899
|
+
const wa = (field8, weightField) => calculateWeightedAverage(
|
|
32900
|
+
items.filter((i) => i[weightField] !== 0).map((i) => ({ value: i[field8], weight: Math.abs(i[weightField]) }))
|
|
30761
32901
|
);
|
|
30762
32902
|
return {
|
|
30763
32903
|
apr: wa("apr", "nav"),
|
|
@@ -32027,8 +34167,8 @@ var rswethFetcher = {
|
|
|
32027
34167
|
};
|
|
32028
34168
|
|
|
32029
34169
|
// src/yields/intrinsic/annualizeRate.ts
|
|
32030
|
-
var
|
|
32031
|
-
var annualizeGrowthPercent = (growth, elapsedSeconds) => growth * (
|
|
34170
|
+
var YEAR_SECONDS2 = 365 * 24 * 60 * 60;
|
|
34171
|
+
var annualizeGrowthPercent = (growth, elapsedSeconds) => growth * (YEAR_SECONDS2 / elapsedSeconds) * 100;
|
|
32032
34172
|
var annualizeRateDeltaPercent = (rateNow, rateThen, elapsedSeconds) => {
|
|
32033
34173
|
const growth = typeof rateNow === "bigint" && typeof rateThen === "bigint" ? Number(rateNow - rateThen) / Number(rateThen) : Number(rateNow) / Number(rateThen) - 1;
|
|
32034
34174
|
return annualizeGrowthPercent(growth, elapsedSeconds);
|
|
@@ -32496,8 +34636,8 @@ var TIMEOUT_MS = 8e3;
|
|
|
32496
34636
|
var slisBnbFetcher = {
|
|
32497
34637
|
label: "SLISBNB",
|
|
32498
34638
|
fetch: async () => {
|
|
32499
|
-
const
|
|
32500
|
-
const url = `${HISTORY_URL}?name=slisBNBRate&cycle=1&startTime=${
|
|
34639
|
+
const nowSec5 = Math.floor(Date.now() / 1e3);
|
|
34640
|
+
const url = `${HISTORY_URL}?name=slisBNBRate&cycle=1&startTime=${nowSec5 - LOOKBACK_SECONDS}&endTime=${nowSec5}`;
|
|
32501
34641
|
const controller = new AbortController();
|
|
32502
34642
|
const timer = setTimeout(() => controller.abort(), TIMEOUT_MS);
|
|
32503
34643
|
try {
|
|
@@ -38779,10 +40919,10 @@ function createAssetArrayPerChain() {
|
|
|
38779
40919
|
return assetsPerChain;
|
|
38780
40920
|
}
|
|
38781
40921
|
var RELEVANT_LENDING_ASSETS = () => createAssetArrayPerChain();
|
|
38782
|
-
function createSimpleArrayPerChain(fork,
|
|
40922
|
+
function createSimpleArrayPerChain(fork, field8 = void 0) {
|
|
38783
40923
|
let pools = {};
|
|
38784
40924
|
Object.entries(fork ?? {}).forEach(([b2, data]) => {
|
|
38785
|
-
Object.entries(
|
|
40925
|
+
Object.entries(field8 ? data[field8] : data).forEach(
|
|
38786
40926
|
([chainId, address]) => {
|
|
38787
40927
|
if (!pools[chainId]) pools[chainId] = [];
|
|
38788
40928
|
pools[chainId] = uniq2([...pools[chainId], { address, pool: b2 }]);
|
|
@@ -40991,9 +43131,9 @@ query EvkByAssets($assets: [Bytes!]!) {
|
|
|
40991
43131
|
`;
|
|
40992
43132
|
var ZERO = 0n;
|
|
40993
43133
|
var RAY_TO_PERCENT3 = 1e25;
|
|
40994
|
-
function readAddress2(
|
|
40995
|
-
if (!
|
|
40996
|
-
return
|
|
43134
|
+
function readAddress2(field8) {
|
|
43135
|
+
if (!field8) return void 0;
|
|
43136
|
+
return field8.toLowerCase();
|
|
40997
43137
|
}
|
|
40998
43138
|
function parseVaultFee(v) {
|
|
40999
43139
|
if (v.performanceFee == null) return 0;
|
|
@@ -41427,7 +43567,7 @@ var Multicall3BalanceAbi = [
|
|
|
41427
43567
|
outputs: [{ type: "uint256" }]
|
|
41428
43568
|
}
|
|
41429
43569
|
];
|
|
41430
|
-
var
|
|
43570
|
+
var toBigInt12 = (v) => {
|
|
41431
43571
|
if (v === void 0 || v === null) return void 0;
|
|
41432
43572
|
if (typeof v === "bigint") return v;
|
|
41433
43573
|
if (typeof v === "number") return BigInt(v);
|
|
@@ -41451,12 +43591,12 @@ var readerBeetsStS = (entry) => ({
|
|
|
41451
43591
|
],
|
|
41452
43592
|
abis: [TotalSupplyAbi, BeetsStSAbi, BeetsStSAbi],
|
|
41453
43593
|
parse: ([supply, rate, pool]) => {
|
|
41454
|
-
const totalSupply =
|
|
41455
|
-
const exchangeRate =
|
|
43594
|
+
const totalSupply = toBigInt12(supply);
|
|
43595
|
+
const exchangeRate = toBigInt12(rate);
|
|
41456
43596
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
41457
43597
|
return void 0;
|
|
41458
43598
|
}
|
|
41459
|
-
const liquidity =
|
|
43599
|
+
const liquidity = toBigInt12(pool);
|
|
41460
43600
|
return {
|
|
41461
43601
|
totalAssets: totalSupply * exchangeRate / ONE_E186,
|
|
41462
43602
|
totalSupply,
|
|
@@ -41497,12 +43637,12 @@ var readerBenqiSavax = (entry) => ({
|
|
|
41497
43637
|
],
|
|
41498
43638
|
abis: [TotalSupplyAbi, BenqiSavaxAbi, BenqiSavaxAbi],
|
|
41499
43639
|
parse: ([supply, rate, totalPooled]) => {
|
|
41500
|
-
const totalSupply =
|
|
41501
|
-
const exchangeRate =
|
|
43640
|
+
const totalSupply = toBigInt12(supply);
|
|
43641
|
+
const exchangeRate = toBigInt12(rate);
|
|
41502
43642
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
41503
43643
|
return void 0;
|
|
41504
43644
|
}
|
|
41505
|
-
const totalAssets =
|
|
43645
|
+
const totalAssets = toBigInt12(totalPooled) ?? totalSupply * exchangeRate / ONE_E186;
|
|
41506
43646
|
return {
|
|
41507
43647
|
totalAssets,
|
|
41508
43648
|
totalSupply,
|
|
@@ -41516,7 +43656,7 @@ var readerBgtWrapper1to1 = (entry) => ({
|
|
|
41516
43656
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
41517
43657
|
abis: [TotalSupplyAbi],
|
|
41518
43658
|
parse: ([supply]) => {
|
|
41519
|
-
const totalSupply =
|
|
43659
|
+
const totalSupply = toBigInt12(supply);
|
|
41520
43660
|
if (totalSupply === void 0) return void 0;
|
|
41521
43661
|
return {
|
|
41522
43662
|
totalAssets: totalSupply,
|
|
@@ -41545,8 +43685,8 @@ var readerDineroBeraEth = (entry) => ({
|
|
|
41545
43685
|
],
|
|
41546
43686
|
abis: [TotalSupplyAbi, DineroBeraEthAbi],
|
|
41547
43687
|
parse: ([supply, rate]) => {
|
|
41548
|
-
const totalSupply =
|
|
41549
|
-
const exchangeRate =
|
|
43688
|
+
const totalSupply = toBigInt12(supply);
|
|
43689
|
+
const exchangeRate = toBigInt12(rate);
|
|
41550
43690
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
41551
43691
|
return void 0;
|
|
41552
43692
|
}
|
|
@@ -41567,9 +43707,9 @@ var readerErc4626 = (entry) => ({
|
|
|
41567
43707
|
],
|
|
41568
43708
|
abis: [Erc4626ReadAbi, TotalSupplyAbi, Erc4626ReadAbi],
|
|
41569
43709
|
parse: ([assets, supply, rate]) => {
|
|
41570
|
-
const totalAssets =
|
|
41571
|
-
const totalSupply =
|
|
41572
|
-
const exchangeRate =
|
|
43710
|
+
const totalAssets = toBigInt12(assets);
|
|
43711
|
+
const totalSupply = toBigInt12(supply);
|
|
43712
|
+
const exchangeRate = toBigInt12(rate);
|
|
41573
43713
|
if (totalAssets === void 0 || totalSupply === void 0 || exchangeRate === void 0) {
|
|
41574
43714
|
return void 0;
|
|
41575
43715
|
}
|
|
@@ -41584,9 +43724,9 @@ var readerErc4626PreviewRedeem = (entry) => ({
|
|
|
41584
43724
|
],
|
|
41585
43725
|
abis: [Erc4626PreviewRedeemAbi, TotalSupplyAbi, Erc4626PreviewRedeemAbi],
|
|
41586
43726
|
parse: ([assets, supply, rate]) => {
|
|
41587
|
-
const totalAssets =
|
|
41588
|
-
const totalSupply =
|
|
41589
|
-
const exchangeRate =
|
|
43727
|
+
const totalAssets = toBigInt12(assets);
|
|
43728
|
+
const totalSupply = toBigInt12(supply);
|
|
43729
|
+
const exchangeRate = toBigInt12(rate);
|
|
41590
43730
|
if (totalAssets === void 0 || totalSupply === void 0 || exchangeRate === void 0) {
|
|
41591
43731
|
return void 0;
|
|
41592
43732
|
}
|
|
@@ -41646,15 +43786,15 @@ var readerEtherFiWeEth = (entry) => {
|
|
|
41646
43786
|
calls,
|
|
41647
43787
|
abis,
|
|
41648
43788
|
parse: (slice) => {
|
|
41649
|
-
const totalSupply =
|
|
41650
|
-
const exchangeRate =
|
|
43789
|
+
const totalSupply = toBigInt12(slice[0]);
|
|
43790
|
+
const exchangeRate = toBigInt12(slice[1]);
|
|
41651
43791
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
41652
43792
|
return void 0;
|
|
41653
43793
|
}
|
|
41654
43794
|
let liquidity;
|
|
41655
43795
|
if (lp) {
|
|
41656
|
-
const lpBalance =
|
|
41657
|
-
const locked =
|
|
43796
|
+
const lpBalance = toBigInt12(slice[2]);
|
|
43797
|
+
const locked = toBigInt12(slice[3]);
|
|
41658
43798
|
if (lpBalance !== void 0 && locked !== void 0) {
|
|
41659
43799
|
liquidity = lpBalance > locked ? lpBalance - locked : 0n;
|
|
41660
43800
|
}
|
|
@@ -41688,7 +43828,7 @@ var readerHyperbeatBeHype = (entry) => {
|
|
|
41688
43828
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
41689
43829
|
abis: [TotalSupplyAbi],
|
|
41690
43830
|
parse: ([supply]) => {
|
|
41691
|
-
const totalSupply =
|
|
43831
|
+
const totalSupply = toBigInt12(supply);
|
|
41692
43832
|
if (totalSupply === void 0) return void 0;
|
|
41693
43833
|
return {
|
|
41694
43834
|
totalAssets: totalSupply,
|
|
@@ -41705,8 +43845,8 @@ var readerHyperbeatBeHype = (entry) => {
|
|
|
41705
43845
|
],
|
|
41706
43846
|
abis: [TotalSupplyAbi, HyperbeatStakingCoreAbi],
|
|
41707
43847
|
parse: ([supply, rate]) => {
|
|
41708
|
-
const totalSupply =
|
|
41709
|
-
const exchangeRate =
|
|
43848
|
+
const totalSupply = toBigInt12(supply);
|
|
43849
|
+
const exchangeRate = toBigInt12(rate);
|
|
41710
43850
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
41711
43851
|
return void 0;
|
|
41712
43852
|
}
|
|
@@ -41738,7 +43878,7 @@ var readerKelpRsEth = (entry) => {
|
|
|
41738
43878
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
41739
43879
|
abis: [TotalSupplyAbi],
|
|
41740
43880
|
parse: ([supply]) => {
|
|
41741
|
-
const totalSupply =
|
|
43881
|
+
const totalSupply = toBigInt12(supply);
|
|
41742
43882
|
if (totalSupply === void 0) return void 0;
|
|
41743
43883
|
return {
|
|
41744
43884
|
totalAssets: totalSupply,
|
|
@@ -41755,8 +43895,8 @@ var readerKelpRsEth = (entry) => {
|
|
|
41755
43895
|
],
|
|
41756
43896
|
abis: [TotalSupplyAbi, KelpLrtOracleAbi],
|
|
41757
43897
|
parse: ([supply, rate]) => {
|
|
41758
|
-
const totalSupply =
|
|
41759
|
-
const exchangeRate =
|
|
43898
|
+
const totalSupply = toBigInt12(supply);
|
|
43899
|
+
const exchangeRate = toBigInt12(rate);
|
|
41760
43900
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
41761
43901
|
return void 0;
|
|
41762
43902
|
}
|
|
@@ -41788,7 +43928,7 @@ var readerKinetiqKHype = (entry) => {
|
|
|
41788
43928
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
41789
43929
|
abis: [TotalSupplyAbi],
|
|
41790
43930
|
parse: ([supply]) => {
|
|
41791
|
-
const totalSupply =
|
|
43931
|
+
const totalSupply = toBigInt12(supply);
|
|
41792
43932
|
if (totalSupply === void 0) return void 0;
|
|
41793
43933
|
return {
|
|
41794
43934
|
totalAssets: totalSupply,
|
|
@@ -41805,8 +43945,8 @@ var readerKinetiqKHype = (entry) => {
|
|
|
41805
43945
|
],
|
|
41806
43946
|
abis: [TotalSupplyAbi, KinetiqStakingAccountantAbi],
|
|
41807
43947
|
parse: ([supply, rate]) => {
|
|
41808
|
-
const totalSupply =
|
|
41809
|
-
const exchangeRate =
|
|
43948
|
+
const totalSupply = toBigInt12(supply);
|
|
43949
|
+
const exchangeRate = toBigInt12(rate);
|
|
41810
43950
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
41811
43951
|
return void 0;
|
|
41812
43952
|
}
|
|
@@ -41846,12 +43986,12 @@ var readerLairStKaia = (entry) => ({
|
|
|
41846
43986
|
],
|
|
41847
43987
|
abis: [TotalSupplyAbi, LairStKaiaAbi, LairStKaiaAbi],
|
|
41848
43988
|
parse: ([supply, rate, totalStaking]) => {
|
|
41849
|
-
const totalSupply =
|
|
41850
|
-
const exchangeRate =
|
|
43989
|
+
const totalSupply = toBigInt12(supply);
|
|
43990
|
+
const exchangeRate = toBigInt12(rate);
|
|
41851
43991
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
41852
43992
|
return void 0;
|
|
41853
43993
|
}
|
|
41854
|
-
const totalAssets =
|
|
43994
|
+
const totalAssets = toBigInt12(totalStaking) ?? totalSupply * exchangeRate / ONE_E186;
|
|
41855
43995
|
return {
|
|
41856
43996
|
totalAssets,
|
|
41857
43997
|
totalSupply,
|
|
@@ -41879,8 +44019,8 @@ var readerLidoWstEth = (entry) => ({
|
|
|
41879
44019
|
],
|
|
41880
44020
|
abis: [TotalSupplyAbi, LidoWstEthAbi],
|
|
41881
44021
|
parse: ([supply, rate]) => {
|
|
41882
|
-
const totalSupply =
|
|
41883
|
-
const exchangeRate =
|
|
44022
|
+
const totalSupply = toBigInt12(supply);
|
|
44023
|
+
const exchangeRate = toBigInt12(rate);
|
|
41884
44024
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
41885
44025
|
return void 0;
|
|
41886
44026
|
}
|
|
@@ -41918,7 +44058,7 @@ var readerListaSlisBnb = (entry) => {
|
|
|
41918
44058
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
41919
44059
|
abis: [TotalSupplyAbi],
|
|
41920
44060
|
parse: ([supply]) => {
|
|
41921
|
-
const totalSupply =
|
|
44061
|
+
const totalSupply = toBigInt12(supply);
|
|
41922
44062
|
if (totalSupply === void 0) return void 0;
|
|
41923
44063
|
return {
|
|
41924
44064
|
totalAssets: totalSupply,
|
|
@@ -41936,12 +44076,12 @@ var readerListaSlisBnb = (entry) => {
|
|
|
41936
44076
|
],
|
|
41937
44077
|
abis: [TotalSupplyAbi, ListaStakeManagerReadAbi, ListaStakeManagerReadAbi],
|
|
41938
44078
|
parse: ([supply, rate, pooled]) => {
|
|
41939
|
-
const totalSupply =
|
|
41940
|
-
const exchangeRate =
|
|
44079
|
+
const totalSupply = toBigInt12(supply);
|
|
44080
|
+
const exchangeRate = toBigInt12(rate);
|
|
41941
44081
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
41942
44082
|
return void 0;
|
|
41943
44083
|
}
|
|
41944
|
-
const pooledBnb =
|
|
44084
|
+
const pooledBnb = toBigInt12(pooled);
|
|
41945
44085
|
const totalAssets = pooledBnb ?? totalSupply * exchangeRate / ONE_E186;
|
|
41946
44086
|
return { totalAssets, totalSupply, exchangeRate };
|
|
41947
44087
|
}
|
|
@@ -41967,7 +44107,7 @@ var readerMantleMEth = (entry) => {
|
|
|
41967
44107
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
41968
44108
|
abis: [TotalSupplyAbi],
|
|
41969
44109
|
parse: ([supply]) => {
|
|
41970
|
-
const totalSupply =
|
|
44110
|
+
const totalSupply = toBigInt12(supply);
|
|
41971
44111
|
if (totalSupply === void 0) return void 0;
|
|
41972
44112
|
return {
|
|
41973
44113
|
totalAssets: totalSupply,
|
|
@@ -41984,8 +44124,8 @@ var readerMantleMEth = (entry) => {
|
|
|
41984
44124
|
],
|
|
41985
44125
|
abis: [TotalSupplyAbi, MantleStakingAbi],
|
|
41986
44126
|
parse: ([supply, rate]) => {
|
|
41987
|
-
const totalSupply =
|
|
41988
|
-
const exchangeRate =
|
|
44127
|
+
const totalSupply = toBigInt12(supply);
|
|
44128
|
+
const exchangeRate = toBigInt12(rate);
|
|
41989
44129
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
41990
44130
|
return void 0;
|
|
41991
44131
|
}
|
|
@@ -42006,7 +44146,7 @@ var readerOffChain = (entry) => {
|
|
|
42006
44146
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
42007
44147
|
abis: [TotalSupplyAbi],
|
|
42008
44148
|
parse: ([supply]) => {
|
|
42009
|
-
const totalSupply =
|
|
44149
|
+
const totalSupply = toBigInt12(supply);
|
|
42010
44150
|
if (totalSupply === void 0) return void 0;
|
|
42011
44151
|
return {
|
|
42012
44152
|
totalAssets: rescaleDecimals(totalSupply, shareDec, underlyingDec),
|
|
@@ -42040,7 +44180,7 @@ var readerRenzoEzEth = (entry) => {
|
|
|
42040
44180
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
42041
44181
|
abis: [TotalSupplyAbi],
|
|
42042
44182
|
parse: ([supply]) => {
|
|
42043
|
-
const totalSupply =
|
|
44183
|
+
const totalSupply = toBigInt12(supply);
|
|
42044
44184
|
if (totalSupply === void 0) return void 0;
|
|
42045
44185
|
return {
|
|
42046
44186
|
totalAssets: totalSupply,
|
|
@@ -42057,9 +44197,9 @@ var readerRenzoEzEth = (entry) => {
|
|
|
42057
44197
|
],
|
|
42058
44198
|
abis: [TotalSupplyAbi, RenzoRestakeManagerAbi],
|
|
42059
44199
|
parse: ([supply, tvls]) => {
|
|
42060
|
-
const totalSupply =
|
|
44200
|
+
const totalSupply = toBigInt12(supply);
|
|
42061
44201
|
if (totalSupply === void 0 || totalSupply === 0n) return void 0;
|
|
42062
|
-
const totalTvl = Array.isArray(tvls) && tvls.length >= 3 ?
|
|
44202
|
+
const totalTvl = Array.isArray(tvls) && tvls.length >= 3 ? toBigInt12(tvls[2]) : void 0;
|
|
42063
44203
|
if (totalTvl === void 0) return void 0;
|
|
42064
44204
|
return {
|
|
42065
44205
|
totalAssets: totalTvl,
|
|
@@ -42113,12 +44253,12 @@ var readerRocketReth = (entry) => {
|
|
|
42113
44253
|
calls,
|
|
42114
44254
|
abis,
|
|
42115
44255
|
parse: (slice) => {
|
|
42116
|
-
const totalSupply =
|
|
42117
|
-
const exchangeRate =
|
|
44256
|
+
const totalSupply = toBigInt12(slice[0]);
|
|
44257
|
+
const exchangeRate = toBigInt12(slice[1]);
|
|
42118
44258
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
42119
44259
|
return void 0;
|
|
42120
44260
|
}
|
|
42121
|
-
const liquidity = depositPool ?
|
|
44261
|
+
const liquidity = depositPool ? toBigInt12(slice[2]) : void 0;
|
|
42122
44262
|
return {
|
|
42123
44263
|
totalAssets: totalSupply * exchangeRate / ONE_E186,
|
|
42124
44264
|
totalSupply,
|
|
@@ -42157,7 +44297,7 @@ var readerStaderEthx = (entry) => {
|
|
|
42157
44297
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
42158
44298
|
abis: [TotalSupplyAbi],
|
|
42159
44299
|
parse: ([supply]) => {
|
|
42160
|
-
const totalSupply =
|
|
44300
|
+
const totalSupply = toBigInt12(supply);
|
|
42161
44301
|
if (totalSupply === void 0) return void 0;
|
|
42162
44302
|
return {
|
|
42163
44303
|
totalAssets: totalSupply,
|
|
@@ -42174,8 +44314,8 @@ var readerStaderEthx = (entry) => {
|
|
|
42174
44314
|
],
|
|
42175
44315
|
abis: [TotalSupplyAbi, StaderEthxAbi],
|
|
42176
44316
|
parse: ([supply, rate]) => {
|
|
42177
|
-
const totalSupply =
|
|
42178
|
-
const exchangeRate =
|
|
44317
|
+
const totalSupply = toBigInt12(supply);
|
|
44318
|
+
const exchangeRate = toBigInt12(rate);
|
|
42179
44319
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
42180
44320
|
return void 0;
|
|
42181
44321
|
}
|
|
@@ -42203,10 +44343,10 @@ var readerStaderMaticX = (entry) => {
|
|
|
42203
44343
|
],
|
|
42204
44344
|
abis: [TotalSupplyAbi, StaderMaticXAbi],
|
|
42205
44345
|
parse: ([supply, tup]) => {
|
|
42206
|
-
const totalSupply =
|
|
44346
|
+
const totalSupply = toBigInt12(supply);
|
|
42207
44347
|
if (!Array.isArray(tup) || tup.length < 3) return void 0;
|
|
42208
|
-
const amountInMatic =
|
|
42209
|
-
const totalPooledMatic =
|
|
44348
|
+
const amountInMatic = toBigInt12(tup[0]);
|
|
44349
|
+
const totalPooledMatic = toBigInt12(tup[2]);
|
|
42210
44350
|
if (totalSupply === void 0 || amountInMatic === void 0) {
|
|
42211
44351
|
return void 0;
|
|
42212
44352
|
}
|
|
@@ -42239,7 +44379,7 @@ var readerStakeWiseOsEth = (entry) => {
|
|
|
42239
44379
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
42240
44380
|
abis: [TotalSupplyAbi],
|
|
42241
44381
|
parse: ([supply]) => {
|
|
42242
|
-
const totalSupply =
|
|
44382
|
+
const totalSupply = toBigInt12(supply);
|
|
42243
44383
|
if (totalSupply === void 0) return void 0;
|
|
42244
44384
|
return {
|
|
42245
44385
|
totalAssets: totalSupply,
|
|
@@ -42256,8 +44396,8 @@ var readerStakeWiseOsEth = (entry) => {
|
|
|
42256
44396
|
],
|
|
42257
44397
|
abis: [TotalSupplyAbi, StakeWiseOsTokenAbi],
|
|
42258
44398
|
parse: ([supply, rate]) => {
|
|
42259
|
-
const totalSupply =
|
|
42260
|
-
const exchangeRate =
|
|
44399
|
+
const totalSupply = toBigInt12(supply);
|
|
44400
|
+
const exchangeRate = toBigInt12(rate);
|
|
42261
44401
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
42262
44402
|
return void 0;
|
|
42263
44403
|
}
|
|
@@ -42289,7 +44429,7 @@ var readerStCelo = (entry) => {
|
|
|
42289
44429
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
42290
44430
|
abis: [TotalSupplyAbi],
|
|
42291
44431
|
parse: ([supply]) => {
|
|
42292
|
-
const totalSupply =
|
|
44432
|
+
const totalSupply = toBigInt12(supply);
|
|
42293
44433
|
if (totalSupply === void 0) return void 0;
|
|
42294
44434
|
return {
|
|
42295
44435
|
totalAssets: totalSupply,
|
|
@@ -42306,8 +44446,8 @@ var readerStCelo = (entry) => {
|
|
|
42306
44446
|
],
|
|
42307
44447
|
abis: [TotalSupplyAbi, StCeloManagerAbi],
|
|
42308
44448
|
parse: ([supply, rate]) => {
|
|
42309
|
-
const totalSupply =
|
|
42310
|
-
const exchangeRate =
|
|
44449
|
+
const totalSupply = toBigInt12(supply);
|
|
44450
|
+
const exchangeRate = toBigInt12(rate);
|
|
42311
44451
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
42312
44452
|
return void 0;
|
|
42313
44453
|
}
|
|
@@ -42339,8 +44479,8 @@ var readerSwellGetRate = (entry) => ({
|
|
|
42339
44479
|
],
|
|
42340
44480
|
abis: [TotalSupplyAbi, SwellGetRateAbi],
|
|
42341
44481
|
parse: ([supply, rate]) => {
|
|
42342
|
-
const totalSupply =
|
|
42343
|
-
const exchangeRate =
|
|
44482
|
+
const totalSupply = toBigInt12(supply);
|
|
44483
|
+
const exchangeRate = toBigInt12(rate);
|
|
42344
44484
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
42345
44485
|
return void 0;
|
|
42346
44486
|
}
|
|
@@ -42371,7 +44511,7 @@ var readerValantisWstHype = (entry) => {
|
|
|
42371
44511
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
42372
44512
|
abis: [TotalSupplyAbi],
|
|
42373
44513
|
parse: ([supply]) => {
|
|
42374
|
-
const totalSupply =
|
|
44514
|
+
const totalSupply = toBigInt12(supply);
|
|
42375
44515
|
if (totalSupply === void 0) return void 0;
|
|
42376
44516
|
return {
|
|
42377
44517
|
totalAssets: totalSupply,
|
|
@@ -42388,8 +44528,8 @@ var readerValantisWstHype = (entry) => {
|
|
|
42388
44528
|
],
|
|
42389
44529
|
abis: [TotalSupplyAbi, ValantisStHypeAbi],
|
|
42390
44530
|
parse: ([supply, rate]) => {
|
|
42391
|
-
const totalSupply =
|
|
42392
|
-
const exchangeRate =
|
|
44531
|
+
const totalSupply = toBigInt12(supply);
|
|
44532
|
+
const exchangeRate = toBigInt12(rate);
|
|
42393
44533
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
42394
44534
|
return void 0;
|
|
42395
44535
|
}
|
|
@@ -42423,7 +44563,7 @@ var readerVedaAccountant = (entry) => {
|
|
|
42423
44563
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
42424
44564
|
abis: [TotalSupplyAbi],
|
|
42425
44565
|
parse: ([supply]) => {
|
|
42426
|
-
const totalSupply =
|
|
44566
|
+
const totalSupply = toBigInt12(supply);
|
|
42427
44567
|
if (totalSupply === void 0) return void 0;
|
|
42428
44568
|
return {
|
|
42429
44569
|
totalAssets: rescaleDecimals(totalSupply, shareDec, underlyingDec),
|
|
@@ -42441,8 +44581,8 @@ var readerVedaAccountant = (entry) => {
|
|
|
42441
44581
|
],
|
|
42442
44582
|
abis: [TotalSupplyAbi, VedaAccountantGetRateAbi],
|
|
42443
44583
|
parse: ([supply, rate]) => {
|
|
42444
|
-
const totalSupply =
|
|
42445
|
-
const rawRate =
|
|
44584
|
+
const totalSupply = toBigInt12(supply);
|
|
44585
|
+
const rawRate = toBigInt12(rate);
|
|
42446
44586
|
if (totalSupply === void 0 || rawRate === void 0) return void 0;
|
|
42447
44587
|
const exchangeRate = rawRate * scale;
|
|
42448
44588
|
return {
|
|
@@ -42477,8 +44617,8 @@ var readerAnkrRatio = (entry) => ({
|
|
|
42477
44617
|
],
|
|
42478
44618
|
abis: [TotalSupplyAbi, AnkrRatioAbi],
|
|
42479
44619
|
parse: ([supply, ratio]) => {
|
|
42480
|
-
const totalSupply =
|
|
42481
|
-
const r =
|
|
44620
|
+
const totalSupply = toBigInt12(supply);
|
|
44621
|
+
const r = toBigInt12(ratio);
|
|
42482
44622
|
if (totalSupply === void 0 || r === void 0 || r === 0n) {
|
|
42483
44623
|
return void 0;
|
|
42484
44624
|
}
|
|
@@ -42521,8 +44661,8 @@ var readerCoreEarnRate = (entry) => {
|
|
|
42521
44661
|
],
|
|
42522
44662
|
abis: [CoreEarnRateAbi, TotalSupplyAbi],
|
|
42523
44663
|
parse: ([rate, supply]) => {
|
|
42524
|
-
const r =
|
|
42525
|
-
const totalSupply =
|
|
44664
|
+
const r = toBigInt12(rate);
|
|
44665
|
+
const totalSupply = toBigInt12(supply);
|
|
42526
44666
|
if (r === void 0 || r === 0n || totalSupply === void 0) {
|
|
42527
44667
|
return void 0;
|
|
42528
44668
|
}
|
|
@@ -42543,8 +44683,8 @@ var readerCoreStakedRatio = (entry) => {
|
|
|
42543
44683
|
],
|
|
42544
44684
|
abis: [CoreTotalStakedAbi, TotalSupplyAbi],
|
|
42545
44685
|
parse: ([staked, supply]) => {
|
|
42546
|
-
const totalStaked =
|
|
42547
|
-
const totalSupply =
|
|
44686
|
+
const totalStaked = toBigInt12(staked);
|
|
44687
|
+
const totalSupply = toBigInt12(supply);
|
|
42548
44688
|
if (totalStaked === void 0 || totalSupply === void 0 || totalSupply === 0n) {
|
|
42549
44689
|
return void 0;
|
|
42550
44690
|
}
|
|
@@ -42588,12 +44728,12 @@ var readerStellaStDot = (entry) => ({
|
|
|
42588
44728
|
],
|
|
42589
44729
|
abis: [TotalSupplyAbi, StellaStDotAbi, StellaStDotAbi],
|
|
42590
44730
|
parse: ([supply, rate, pooled]) => {
|
|
42591
|
-
const totalSupply =
|
|
42592
|
-
const exchangeRate =
|
|
44731
|
+
const totalSupply = toBigInt12(supply);
|
|
44732
|
+
const exchangeRate = toBigInt12(rate);
|
|
42593
44733
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
42594
44734
|
return void 0;
|
|
42595
44735
|
}
|
|
42596
|
-
const totalAssets =
|
|
44736
|
+
const totalAssets = toBigInt12(pooled) ?? totalSupply * exchangeRate / ONE_E186;
|
|
42597
44737
|
return {
|
|
42598
44738
|
totalAssets,
|
|
42599
44739
|
totalSupply,
|
|
@@ -42628,8 +44768,8 @@ var readerKintsuSMon = (entry) => ({
|
|
|
42628
44768
|
],
|
|
42629
44769
|
abis: [KintsuSMonAbi, KintsuSMonAbi],
|
|
42630
44770
|
parse: ([pooled, shares]) => {
|
|
42631
|
-
const totalAssets =
|
|
42632
|
-
const totalSupply =
|
|
44771
|
+
const totalAssets = toBigInt12(pooled);
|
|
44772
|
+
const totalSupply = toBigInt12(shares);
|
|
42633
44773
|
if (totalAssets === void 0 || totalSupply === void 0) return void 0;
|
|
42634
44774
|
const exchangeRate = totalSupply > 0n ? totalAssets * ONE_E186 / totalSupply : ONE_E186;
|
|
42635
44775
|
return { totalAssets, totalSupply, exchangeRate };
|
|
@@ -43150,7 +45290,7 @@ var fetchLstShareTokens = async (chainId, multicallRetry, prices = {}, tokenList
|
|
|
43150
45290
|
const validatorsByAddress = new Map(validatorEntries);
|
|
43151
45291
|
const idleByAddress = /* @__PURE__ */ new Map();
|
|
43152
45292
|
idleEntries.forEach((e, i) => {
|
|
43153
|
-
const bal =
|
|
45293
|
+
const bal = toBigInt12(idleResults[i]);
|
|
43154
45294
|
if (bal !== void 0) idleByAddress.set(e.address.toLowerCase(), bal);
|
|
43155
45295
|
});
|
|
43156
45296
|
const rawResults = new Array(allCalls.length);
|
|
@@ -43280,7 +45420,7 @@ var BeetsStSWithdrawalAbi = [
|
|
|
43280
45420
|
];
|
|
43281
45421
|
|
|
43282
45422
|
// src/vaults/lst/withdrawals/readers/shared.ts
|
|
43283
|
-
var
|
|
45423
|
+
var toBigInt13 = (v) => {
|
|
43284
45424
|
if (v === void 0 || v === null) return void 0;
|
|
43285
45425
|
if (typeof v === "bigint") return v;
|
|
43286
45426
|
if (typeof v === "number") return BigInt(v);
|
|
@@ -43295,7 +45435,7 @@ var toBigInt12 = (v) => {
|
|
|
43295
45435
|
return void 0;
|
|
43296
45436
|
};
|
|
43297
45437
|
var toNumber = (v) => {
|
|
43298
|
-
const b =
|
|
45438
|
+
const b = toBigInt13(v);
|
|
43299
45439
|
if (b === void 0) return void 0;
|
|
43300
45440
|
if (b > BigInt(Number.MAX_SAFE_INTEGER)) return void 0;
|
|
43301
45441
|
return Number(b);
|
|
@@ -43332,7 +45472,7 @@ var readerBeets = {
|
|
|
43332
45472
|
const out = [];
|
|
43333
45473
|
for (let i = 0; i < reqs.length; i++) {
|
|
43334
45474
|
const r = reqs[i];
|
|
43335
|
-
const amount =
|
|
45475
|
+
const amount = toBigInt13(r.assetAmount);
|
|
43336
45476
|
const ts = toNumber(r.requestTimestamp);
|
|
43337
45477
|
const isWithdrawn = Boolean(r.isWithdrawn);
|
|
43338
45478
|
if (amount === void 0 || ts === void 0) continue;
|
|
@@ -43424,13 +45564,13 @@ var readerBeHype = {
|
|
|
43424
45564
|
const q = stage2[i * 2];
|
|
43425
45565
|
const canClaim = Boolean(stage2[i * 2 + 1]);
|
|
43426
45566
|
if (!q) continue;
|
|
43427
|
-
const hypeAmount = Array.isArray(q) ?
|
|
45567
|
+
const hypeAmount = Array.isArray(q) ? toBigInt13(q[2]) : toBigInt13(q.hypeAmount);
|
|
43428
45568
|
if (hypeAmount === void 0) continue;
|
|
43429
45569
|
out.push({
|
|
43430
45570
|
lst: entry.lst,
|
|
43431
45571
|
brand: entry.brand,
|
|
43432
45572
|
symbol: entry.symbol,
|
|
43433
|
-
requestId: String(
|
|
45573
|
+
requestId: String(toBigInt13(ids[i]) ?? i),
|
|
43434
45574
|
amountUnderlying: hypeAmount.toString(),
|
|
43435
45575
|
status: canClaim ? "claimable" : "pending"
|
|
43436
45576
|
});
|
|
@@ -43533,7 +45673,7 @@ var readerBenqi = {
|
|
|
43533
45673
|
for (let i = 0; i < reqs.length; i++) {
|
|
43534
45674
|
const r = reqs[i];
|
|
43535
45675
|
const startedAt = toNumber(r.startedAt);
|
|
43536
|
-
const shareAmount =
|
|
45676
|
+
const shareAmount = toBigInt13(r.shareAmount);
|
|
43537
45677
|
if (startedAt === void 0 || shareAmount === void 0) continue;
|
|
43538
45678
|
const readyAt = startedAt + cooldown;
|
|
43539
45679
|
const expiresAt = readyAt + claimWindow;
|
|
@@ -43596,8 +45736,8 @@ var readerBeraPaw = {
|
|
|
43596
45736
|
}
|
|
43597
45737
|
const pos = res[0];
|
|
43598
45738
|
if (!pos) return [];
|
|
43599
|
-
const queued = Array.isArray(pos) ?
|
|
43600
|
-
const available = Array.isArray(pos) ?
|
|
45739
|
+
const queued = Array.isArray(pos) ? toBigInt13(pos[0]) : toBigInt13(pos.queued);
|
|
45740
|
+
const available = Array.isArray(pos) ? toBigInt13(pos[1]) : toBigInt13(pos.available);
|
|
43601
45741
|
const out = [];
|
|
43602
45742
|
if (available !== void 0 && available > 0n) {
|
|
43603
45743
|
out.push({
|
|
@@ -43679,7 +45819,7 @@ var readerIbera = {
|
|
|
43679
45819
|
return [];
|
|
43680
45820
|
}
|
|
43681
45821
|
const length = toNumber(stage1[0]) ?? 0;
|
|
43682
|
-
const frontier =
|
|
45822
|
+
const frontier = toBigInt13(stage1[1]) ?? 0n;
|
|
43683
45823
|
if (length === 0) return [];
|
|
43684
45824
|
const start = length > MAX_SCAN ? length - MAX_SCAN : 0;
|
|
43685
45825
|
const ids = Array.from({ length: length - start }, (_3, k) => start + k);
|
|
@@ -43703,7 +45843,7 @@ var readerIbera = {
|
|
|
43703
45843
|
const r = stage2[k];
|
|
43704
45844
|
if (!r) continue;
|
|
43705
45845
|
const receiver = Array.isArray(r) ? r[2] : r.receiver;
|
|
43706
|
-
const amount = Array.isArray(r) ?
|
|
45846
|
+
const amount = Array.isArray(r) ? toBigInt13(r[3]) : toBigInt13(r.amount);
|
|
43707
45847
|
if (typeof receiver !== "string" || receiver.toLowerCase() !== target || amount === void 0 || amount === 0n) {
|
|
43708
45848
|
continue;
|
|
43709
45849
|
}
|
|
@@ -43776,7 +45916,7 @@ var readerPrimeStaking = {
|
|
|
43776
45916
|
return [];
|
|
43777
45917
|
}
|
|
43778
45918
|
const length = toNumber(stage1[0]) ?? 0;
|
|
43779
|
-
const frontier =
|
|
45919
|
+
const frontier = toBigInt13(stage1[1]) ?? 0n;
|
|
43780
45920
|
if (length === 0) return [];
|
|
43781
45921
|
const start = length > MAX_SCAN2 ? length - MAX_SCAN2 : 0;
|
|
43782
45922
|
const ids = Array.from({ length: length - start }, (_3, k) => start + k);
|
|
@@ -43800,7 +45940,7 @@ var readerPrimeStaking = {
|
|
|
43800
45940
|
const r = stage2[k];
|
|
43801
45941
|
if (!r) continue;
|
|
43802
45942
|
const receiver = Array.isArray(r) ? r[1] : r.receiver;
|
|
43803
|
-
const assets = Array.isArray(r) ?
|
|
45943
|
+
const assets = Array.isArray(r) ? toBigInt13(r[3]) : toBigInt13(r.assets);
|
|
43804
45944
|
const processed = Array.isArray(r) ? r[4] : r.processed;
|
|
43805
45945
|
if (typeof receiver !== "string" || receiver.toLowerCase() !== target || assets === void 0 || assets === 0n) {
|
|
43806
45946
|
continue;
|
|
@@ -43870,8 +46010,8 @@ var readerErc7540 = {
|
|
|
43870
46010
|
],
|
|
43871
46011
|
abi: [Erc7540Abi, Erc7540Abi]
|
|
43872
46012
|
});
|
|
43873
|
-
const pending =
|
|
43874
|
-
const claimable =
|
|
46013
|
+
const pending = toBigInt13(stage1[0]) ?? 0n;
|
|
46014
|
+
const claimable = toBigInt13(stage1[1]) ?? 0n;
|
|
43875
46015
|
const out = [];
|
|
43876
46016
|
if (claimable > 0n) {
|
|
43877
46017
|
const stage2 = await multicallRetry({
|
|
@@ -43885,7 +46025,7 @@ var readerErc7540 = {
|
|
|
43885
46025
|
],
|
|
43886
46026
|
abi: [Erc7540Abi]
|
|
43887
46027
|
});
|
|
43888
|
-
const amount =
|
|
46028
|
+
const amount = toBigInt13(stage2[0]) ?? claimable;
|
|
43889
46029
|
out.push({
|
|
43890
46030
|
lst: entry.lst,
|
|
43891
46031
|
brand: entry.brand,
|
|
@@ -43939,11 +46079,11 @@ var readerEthenaCooldown = {
|
|
|
43939
46079
|
let cooldownEnd;
|
|
43940
46080
|
let amount;
|
|
43941
46081
|
if (Array.isArray(cell)) {
|
|
43942
|
-
cooldownEnd =
|
|
43943
|
-
amount =
|
|
46082
|
+
cooldownEnd = toBigInt13(cell[0]);
|
|
46083
|
+
amount = toBigInt13(cell[1]);
|
|
43944
46084
|
} else if (cell && typeof cell === "object") {
|
|
43945
|
-
cooldownEnd =
|
|
43946
|
-
amount =
|
|
46085
|
+
cooldownEnd = toBigInt13(cell.cooldownEnd);
|
|
46086
|
+
amount = toBigInt13(cell.underlyingAmount);
|
|
43947
46087
|
}
|
|
43948
46088
|
if (!amount || amount === 0n) return [];
|
|
43949
46089
|
const readyAt = Number(cooldownEnd ?? 0n);
|
|
@@ -44038,7 +46178,7 @@ var readerEtherFi = {
|
|
|
44038
46178
|
calls: enumCalls,
|
|
44039
46179
|
abi: enumCalls.map(() => EtherFiWithdrawRequestAbi)
|
|
44040
46180
|
});
|
|
44041
|
-
const ids = stage2.map(
|
|
46181
|
+
const ids = stage2.map(toBigInt13).filter((v) => v !== void 0);
|
|
44042
46182
|
if (ids.length === 0) return [];
|
|
44043
46183
|
const detailCalls = ids.flatMap((id) => [
|
|
44044
46184
|
{ address: entry.withdrawalContract, name: "getRequest", params: [id] },
|
|
@@ -44058,7 +46198,7 @@ var readerEtherFi = {
|
|
|
44058
46198
|
const isValid = Boolean(stage3[i * 3 + 2]);
|
|
44059
46199
|
if (!req) continue;
|
|
44060
46200
|
if (!isValid) continue;
|
|
44061
|
-
const amount =
|
|
46201
|
+
const amount = toBigInt13(req.amountOfEEth);
|
|
44062
46202
|
if (amount === void 0) continue;
|
|
44063
46203
|
out.push({
|
|
44064
46204
|
lst: entry.lst,
|
|
@@ -44153,7 +46293,7 @@ var readerKelp = {
|
|
|
44153
46293
|
}
|
|
44154
46294
|
],
|
|
44155
46295
|
abi: [KelpWithdrawalManagerAbi]
|
|
44156
|
-
}).then((res) =>
|
|
46296
|
+
}).then((res) => toBigInt13(res[0]) ?? 0n)
|
|
44157
46297
|
]);
|
|
44158
46298
|
lengths = storageReads;
|
|
44159
46299
|
currentBlock = block;
|
|
@@ -44183,9 +46323,9 @@ var readerKelp = {
|
|
|
44183
46323
|
for (let i = 0; i < detailCalls.length; i++) {
|
|
44184
46324
|
const r = stage2[i];
|
|
44185
46325
|
if (!r) continue;
|
|
44186
|
-
const expected = Array.isArray(r) ?
|
|
44187
|
-
const startBlock = Array.isArray(r) ?
|
|
44188
|
-
const nonce = Array.isArray(r) ?
|
|
46326
|
+
const expected = Array.isArray(r) ? toBigInt13(r[1]) : toBigInt13(r.expectedAssetAmount);
|
|
46327
|
+
const startBlock = Array.isArray(r) ? toBigInt13(r[2]) : toBigInt13(r.withdrawalStartBlock);
|
|
46328
|
+
const nonce = Array.isArray(r) ? toBigInt13(r[3]) : toBigInt13(r.userNonce);
|
|
44189
46329
|
if (expected === void 0 || startBlock === void 0) continue;
|
|
44190
46330
|
const claimable = currentBlock >= startBlock + delayBlocks;
|
|
44191
46331
|
out.push({
|
|
@@ -44262,7 +46402,7 @@ var readerLido = {
|
|
|
44262
46402
|
abi: [LidoWithdrawalQueueAbi, LidoWithdrawalQueueAbi]
|
|
44263
46403
|
});
|
|
44264
46404
|
const ids = stage1[0];
|
|
44265
|
-
const frontier =
|
|
46405
|
+
const frontier = toBigInt13(stage1[1]) ?? 0n;
|
|
44266
46406
|
if (!Array.isArray(ids) || ids.length === 0) return [];
|
|
44267
46407
|
const stage2 = await multicallRetry({
|
|
44268
46408
|
chain: chainId,
|
|
@@ -44279,10 +46419,10 @@ var readerLido = {
|
|
|
44279
46419
|
if (!Array.isArray(statuses)) return [];
|
|
44280
46420
|
const out = [];
|
|
44281
46421
|
for (let i = 0; i < ids.length; i++) {
|
|
44282
|
-
const id =
|
|
46422
|
+
const id = toBigInt13(ids[i]);
|
|
44283
46423
|
const s = statuses[i];
|
|
44284
46424
|
if (id === void 0 || !s) continue;
|
|
44285
|
-
const amountOfStETH =
|
|
46425
|
+
const amountOfStETH = toBigInt13(s.amountOfStETH);
|
|
44286
46426
|
const isFinalized = Boolean(s.isFinalized);
|
|
44287
46427
|
const isClaimed = Boolean(s.isClaimed);
|
|
44288
46428
|
if (amountOfStETH === void 0) continue;
|
|
@@ -44391,11 +46531,11 @@ var readerLista = {
|
|
|
44391
46531
|
const status = stage2[i];
|
|
44392
46532
|
if (!status) continue;
|
|
44393
46533
|
const isClaimable = Array.isArray(status) ? Boolean(status[0]) : Boolean(status._isClaimable);
|
|
44394
|
-
const bnbAmount = Array.isArray(status) ?
|
|
44395
|
-
const snbnbAmount = Array.isArray(req) ?
|
|
46534
|
+
const bnbAmount = Array.isArray(status) ? toBigInt13(status[1]) : toBigInt13(status._amount);
|
|
46535
|
+
const snbnbAmount = Array.isArray(req) ? toBigInt13(req[1]) : toBigInt13(req?.amountInSnBnb);
|
|
44396
46536
|
const amount = bnbAmount ?? snbnbAmount;
|
|
44397
46537
|
if (amount === void 0) continue;
|
|
44398
|
-
const uuid = Array.isArray(req) ?
|
|
46538
|
+
const uuid = Array.isArray(req) ? toBigInt13(req[0]) : toBigInt13(req?.uuid);
|
|
44399
46539
|
out.push({
|
|
44400
46540
|
lst: entry.lst,
|
|
44401
46541
|
brand: entry.brand,
|
|
@@ -44480,7 +46620,7 @@ var readerRenzo = {
|
|
|
44480
46620
|
for (let i = 0; i < count; i++) {
|
|
44481
46621
|
const tup = stage2[i];
|
|
44482
46622
|
if (!Array.isArray(tup) || tup.length < 5) continue;
|
|
44483
|
-
const amountToRedeem =
|
|
46623
|
+
const amountToRedeem = toBigInt13(tup[2]);
|
|
44484
46624
|
const createdAt = toNumber(tup[4]);
|
|
44485
46625
|
if (amountToRedeem === void 0 || createdAt === void 0) continue;
|
|
44486
46626
|
const readyAt = createdAt + cooldown;
|
|
@@ -44553,9 +46693,9 @@ var readerStaderEthx2 = {
|
|
|
44553
46693
|
]
|
|
44554
46694
|
});
|
|
44555
46695
|
const ids = stage1[0];
|
|
44556
|
-
const frontier =
|
|
46696
|
+
const frontier = toBigInt13(stage1[1]) ?? 0n;
|
|
44557
46697
|
if (!Array.isArray(ids) || ids.length === 0) return [];
|
|
44558
|
-
const idBigInts = ids.map(
|
|
46698
|
+
const idBigInts = ids.map(toBigInt13).filter((v) => v !== void 0);
|
|
44559
46699
|
const detailCalls = idBigInts.map((id) => ({
|
|
44560
46700
|
address: entry.withdrawalContract,
|
|
44561
46701
|
name: "userWithdrawRequests",
|
|
@@ -44571,8 +46711,8 @@ var readerStaderEthx2 = {
|
|
|
44571
46711
|
const id = idBigInts[i];
|
|
44572
46712
|
const tup = stage2[i];
|
|
44573
46713
|
if (!Array.isArray(tup) || tup.length < 5) continue;
|
|
44574
|
-
const ethExpected =
|
|
44575
|
-
const ethFinalized =
|
|
46714
|
+
const ethExpected = toBigInt13(tup[2]) ?? 0n;
|
|
46715
|
+
const ethFinalized = toBigInt13(tup[3]) ?? 0n;
|
|
44576
46716
|
const isFinalized = id < frontier && ethFinalized > 0n;
|
|
44577
46717
|
const queuePosition = isFinalized ? 0 : Number(id - frontier);
|
|
44578
46718
|
out.push({
|
|
@@ -44651,13 +46791,13 @@ var readerStaderMaticX2 = {
|
|
|
44651
46791
|
});
|
|
44652
46792
|
const arr = stage1[0];
|
|
44653
46793
|
if (!Array.isArray(arr)) return [];
|
|
44654
|
-
const currentEpoch = stakeManager ?
|
|
44655
|
-
const delay = stakeManager ?
|
|
46794
|
+
const currentEpoch = stakeManager ? toBigInt13(stage1[1]) ?? 0n : 0n;
|
|
46795
|
+
const delay = stakeManager ? toBigInt13(stage1[2]) ?? 0n : 0n;
|
|
44656
46796
|
const out = [];
|
|
44657
46797
|
for (let i = 0; i < arr.length; i++) {
|
|
44658
46798
|
const r = arr[i];
|
|
44659
|
-
const amount =
|
|
44660
|
-
const requestEpoch =
|
|
46799
|
+
const amount = toBigInt13(r.amount) ?? 0n;
|
|
46800
|
+
const requestEpoch = toBigInt13(r.requestEpoch);
|
|
44661
46801
|
if (requestEpoch === void 0) continue;
|
|
44662
46802
|
const ready = stakeManager ? currentEpoch >= requestEpoch + delay : false;
|
|
44663
46803
|
out.push({
|
|
@@ -44744,9 +46884,9 @@ var readerMantle = {
|
|
|
44744
46884
|
if (typeof requester === "string" && requester.toLowerCase() !== lcUser) {
|
|
44745
46885
|
continue;
|
|
44746
46886
|
}
|
|
44747
|
-
const ethRequested = Array.isArray(detail) ?
|
|
46887
|
+
const ethRequested = Array.isArray(detail) ? toBigInt13(detail[3]) : toBigInt13(detail.ethRequested);
|
|
44748
46888
|
const isFinalized = Array.isArray(info) ? Boolean(info[0]) : Boolean(info.isFinalized);
|
|
44749
|
-
const claimable = Array.isArray(info) ?
|
|
46889
|
+
const claimable = Array.isArray(info) ? toBigInt13(info[1]) : toBigInt13(info.claimableAmount);
|
|
44750
46890
|
if (ethRequested === void 0) continue;
|
|
44751
46891
|
out.push({
|
|
44752
46892
|
lst: entry.lst,
|
|
@@ -44825,8 +46965,8 @@ var readerPuffer = {
|
|
|
44825
46965
|
calls,
|
|
44826
46966
|
abi: calls.map(() => PufferWithdrawalManagerAbi)
|
|
44827
46967
|
});
|
|
44828
|
-
const finalizedBatch =
|
|
44829
|
-
const batchSize =
|
|
46968
|
+
const finalizedBatch = toBigInt13(results[detailCalls.length]) ?? 0n;
|
|
46969
|
+
const batchSize = toBigInt13(results[detailCalls.length + 1]) ?? 0n;
|
|
44830
46970
|
const out = [];
|
|
44831
46971
|
const lcUser = user.toLowerCase();
|
|
44832
46972
|
for (let i = 0; i < ids.length; i++) {
|
|
@@ -44836,7 +46976,7 @@ var readerPuffer = {
|
|
|
44836
46976
|
if (typeof recipient === "string" && recipient.toLowerCase() !== lcUser) {
|
|
44837
46977
|
continue;
|
|
44838
46978
|
}
|
|
44839
|
-
const pufETHAmount = Array.isArray(d) ?
|
|
46979
|
+
const pufETHAmount = Array.isArray(d) ? toBigInt13(d[0]) : toBigInt13(d.pufETHAmount);
|
|
44840
46980
|
if (pufETHAmount === void 0) continue;
|
|
44841
46981
|
const batchIdx = batchSize > 0n ? ids[i] / batchSize : 0n;
|
|
44842
46982
|
const claimable = batchIdx <= finalizedBatch;
|
|
@@ -44934,7 +47074,7 @@ var readerKinetiq = {
|
|
|
44934
47074
|
for (let i = 0; i < count; i++) {
|
|
44935
47075
|
const r = stage2[i];
|
|
44936
47076
|
if (!r) continue;
|
|
44937
|
-
const hypeAmount = Array.isArray(r) ?
|
|
47077
|
+
const hypeAmount = Array.isArray(r) ? toBigInt13(r[0]) : toBigInt13(r.hypeAmount);
|
|
44938
47078
|
const timestamp = Array.isArray(r) ? toNumber(r[4]) : toNumber(r.timestamp);
|
|
44939
47079
|
if (hypeAmount === void 0 || hypeAmount === 0n || timestamp === void 0) {
|
|
44940
47080
|
continue;
|
|
@@ -45062,7 +47202,7 @@ var readerStakeWise = {
|
|
|
45062
47202
|
const claimedByIdx = /* @__PURE__ */ new Map();
|
|
45063
47203
|
for (let i = 0; i < onChainChecks.length; i++) {
|
|
45064
47204
|
const cell = checkResults[i];
|
|
45065
|
-
const claimed = Array.isArray(cell) ?
|
|
47205
|
+
const claimed = Array.isArray(cell) ? toBigInt13(cell[2]) : toBigInt13(cell?.claimedAssets);
|
|
45066
47206
|
if (claimed !== void 0 && claimed > 0n) {
|
|
45067
47207
|
claimedByIdx.set(onChainChecks[i].idx, claimed);
|
|
45068
47208
|
}
|
|
@@ -45070,7 +47210,7 @@ var readerStakeWise = {
|
|
|
45070
47210
|
const out = [];
|
|
45071
47211
|
for (let i = 0; i < requests.length; i++) {
|
|
45072
47212
|
const r = requests[i];
|
|
45073
|
-
const amount =
|
|
47213
|
+
const amount = toBigInt13(r.totalAssets) ?? 0n;
|
|
45074
47214
|
const onChainClaimed = claimedByIdx.get(i);
|
|
45075
47215
|
const claimable = onChainClaimed !== void 0 || r.isClaimable;
|
|
45076
47216
|
out.push({
|
|
@@ -45127,7 +47267,7 @@ var readerStCelo2 = {
|
|
|
45127
47267
|
const timestamps = cell[1] ?? [];
|
|
45128
47268
|
const out = [];
|
|
45129
47269
|
for (let i = 0; i < values.length; i++) {
|
|
45130
|
-
const amount =
|
|
47270
|
+
const amount = toBigInt13(values[i]);
|
|
45131
47271
|
const readyAt = toNumber(timestamps[i]);
|
|
45132
47272
|
if (amount === void 0 || readyAt === void 0) continue;
|
|
45133
47273
|
out.push({
|
|
@@ -45172,11 +47312,11 @@ var readerStellaUnbond = {
|
|
|
45172
47312
|
let waiting;
|
|
45173
47313
|
let unbonded;
|
|
45174
47314
|
if (Array.isArray(cell)) {
|
|
45175
|
-
waiting =
|
|
45176
|
-
unbonded =
|
|
47315
|
+
waiting = toBigInt13(cell[0]);
|
|
47316
|
+
unbonded = toBigInt13(cell[1]);
|
|
45177
47317
|
} else if (cell && typeof cell === "object") {
|
|
45178
|
-
waiting =
|
|
45179
|
-
unbonded =
|
|
47318
|
+
waiting = toBigInt13(cell.waiting);
|
|
47319
|
+
unbonded = toBigInt13(cell.unbonded);
|
|
45180
47320
|
}
|
|
45181
47321
|
const out = [];
|
|
45182
47322
|
if (unbonded && unbonded > 0n) {
|
|
@@ -45266,7 +47406,7 @@ var readerSwell = {
|
|
|
45266
47406
|
abi: [SwellRswExitAbi, SwellRswExitAbi]
|
|
45267
47407
|
});
|
|
45268
47408
|
const count = toNumber(stage1[0]) ?? 0;
|
|
45269
|
-
const lastProcessed =
|
|
47409
|
+
const lastProcessed = toBigInt13(stage1[1]) ?? 0n;
|
|
45270
47410
|
if (count === 0) return [];
|
|
45271
47411
|
const enumCalls = Array.from({ length: count }, (_3, i) => ({
|
|
45272
47412
|
address: entry.withdrawalContract,
|
|
@@ -45278,7 +47418,7 @@ var readerSwell = {
|
|
|
45278
47418
|
calls: enumCalls,
|
|
45279
47419
|
abi: enumCalls.map(() => SwellRswExitAbi)
|
|
45280
47420
|
});
|
|
45281
|
-
const ids = stage2.map(
|
|
47421
|
+
const ids = stage2.map(toBigInt13).filter((v) => v !== void 0);
|
|
45282
47422
|
if (ids.length === 0) return [];
|
|
45283
47423
|
const detailCalls = ids.map((id) => ({
|
|
45284
47424
|
address: entry.withdrawalContract,
|
|
@@ -45295,7 +47435,7 @@ var readerSwell = {
|
|
|
45295
47435
|
const id = ids[i];
|
|
45296
47436
|
const r = stage3[i];
|
|
45297
47437
|
if (!r) continue;
|
|
45298
|
-
const amount =
|
|
47438
|
+
const amount = toBigInt13(r.amount);
|
|
45299
47439
|
if (amount === void 0) continue;
|
|
45300
47440
|
const claimable = id <= lastProcessed;
|
|
45301
47441
|
out.push({
|
|
@@ -45369,14 +47509,14 @@ var readerValantis = {
|
|
|
45369
47509
|
for (let i = 0; i < burns.length; i++) {
|
|
45370
47510
|
const b = burns[i];
|
|
45371
47511
|
if (!b) continue;
|
|
45372
|
-
const amount = Array.isArray(b) ?
|
|
47512
|
+
const amount = Array.isArray(b) ? toBigInt13(b[0]) : toBigInt13(b.amount);
|
|
45373
47513
|
const completed = Array.isArray(b) ? Boolean(b[2]) : Boolean(b.completed);
|
|
45374
47514
|
if (amount === void 0 || completed) continue;
|
|
45375
47515
|
out.push({
|
|
45376
47516
|
lst: entry.lst,
|
|
45377
47517
|
brand: entry.brand,
|
|
45378
47518
|
symbol: entry.symbol,
|
|
45379
|
-
requestId: String(
|
|
47519
|
+
requestId: String(toBigInt13(ids[i]) ?? i),
|
|
45380
47520
|
amountUnderlying: amount.toString(),
|
|
45381
47521
|
status: redeemable[i] ? "claimable" : "pending"
|
|
45382
47522
|
});
|
|
@@ -45449,7 +47589,7 @@ var readerTruFin = {
|
|
|
45449
47589
|
if (typeof recipient === "string" && recipient.toLowerCase() !== lcUser) {
|
|
45450
47590
|
continue;
|
|
45451
47591
|
}
|
|
45452
|
-
const amount = Array.isArray(w) ?
|
|
47592
|
+
const amount = Array.isArray(w) ? toBigInt13(w[1]) : toBigInt13(w.amount);
|
|
45453
47593
|
if (amount === void 0 || amount === 0n) continue;
|
|
45454
47594
|
out.push({
|
|
45455
47595
|
lst: entry.lst,
|
|
@@ -45545,7 +47685,7 @@ var readerYieldNest = {
|
|
|
45545
47685
|
calls: enumCalls,
|
|
45546
47686
|
abi: enumCalls.map(() => YieldNestWithdrawalQueueAbi)
|
|
45547
47687
|
});
|
|
45548
|
-
const ids = stage2.map(
|
|
47688
|
+
const ids = stage2.map(toBigInt13).filter((v) => v !== void 0);
|
|
45549
47689
|
if (ids.length === 0) return [];
|
|
45550
47690
|
const detailCalls = ids.map((id) => ({
|
|
45551
47691
|
address: entry.withdrawalContract,
|
|
@@ -45564,7 +47704,7 @@ var readerYieldNest = {
|
|
|
45564
47704
|
const id = ids[i];
|
|
45565
47705
|
const r = stage3[i];
|
|
45566
47706
|
if (!r) continue;
|
|
45567
|
-
const amount =
|
|
47707
|
+
const amount = toBigInt13(r.amount);
|
|
45568
47708
|
const created = toNumber(r.creationTimestamp);
|
|
45569
47709
|
const processed = Boolean(r.processed);
|
|
45570
47710
|
if (amount === void 0 || created === void 0) continue;
|
|
@@ -46157,7 +48297,7 @@ var getLstWithdrawalRegistry = (chainId, extraEntries) => {
|
|
|
46157
48297
|
const extra = extraEntries.filter((e) => !seen.has(e.lst.toLowerCase()));
|
|
46158
48298
|
return extra.length === 0 ? base : [...base, ...extra];
|
|
46159
48299
|
};
|
|
46160
|
-
var
|
|
48300
|
+
var warn5 = (...args) => {
|
|
46161
48301
|
};
|
|
46162
48302
|
var getLstWithdrawalRequests = async (user, chainId, multicallRetry, options) => {
|
|
46163
48303
|
const entries = getLstWithdrawalRegistry(chainId, options?.extraEntries);
|
|
@@ -46172,7 +48312,7 @@ var getLstWithdrawalRequests = async (user, chainId, multicallRetry, options) =>
|
|
|
46172
48312
|
try {
|
|
46173
48313
|
return await reader.fetch(lcUser, multicallRetry, chainId, entry, ids);
|
|
46174
48314
|
} catch (e) {
|
|
46175
|
-
|
|
48315
|
+
warn5(
|
|
46176
48316
|
`[lst-withdrawals] ${entry.brand} ${entry.symbol} (${entry.lst}) failed:`,
|
|
46177
48317
|
e?.message ?? e
|
|
46178
48318
|
);
|
|
@@ -46217,7 +48357,7 @@ var Erc4626ReadAbi2 = [
|
|
|
46217
48357
|
|
|
46218
48358
|
// src/vaults/savings/readers/shared.ts
|
|
46219
48359
|
var ONE_E188 = 10n ** 18n;
|
|
46220
|
-
var
|
|
48360
|
+
var toBigInt14 = (v) => {
|
|
46221
48361
|
if (v === void 0 || v === null) return void 0;
|
|
46222
48362
|
if (typeof v === "bigint") return v;
|
|
46223
48363
|
if (typeof v === "number") return BigInt(v);
|
|
@@ -46248,9 +48388,9 @@ var readerErc46262 = (entry) => {
|
|
|
46248
48388
|
],
|
|
46249
48389
|
abis: [Erc4626ReadAbi2, TotalSupplyAbi2, Erc4626ReadAbi2],
|
|
46250
48390
|
parse: ([assets, supply, rate]) => {
|
|
46251
|
-
const totalAssets =
|
|
46252
|
-
const totalSupply =
|
|
46253
|
-
const convertToAssetsRaw =
|
|
48391
|
+
const totalAssets = toBigInt14(assets);
|
|
48392
|
+
const totalSupply = toBigInt14(supply);
|
|
48393
|
+
const convertToAssetsRaw = toBigInt14(rate);
|
|
46254
48394
|
if (totalAssets === void 0 || totalSupply === void 0 || convertToAssetsRaw === void 0) {
|
|
46255
48395
|
return void 0;
|
|
46256
48396
|
}
|
|
@@ -46701,7 +48841,7 @@ var resolveAaveEarnCuratorName = (chainId, owner) => {
|
|
|
46701
48841
|
|
|
46702
48842
|
// src/vaults/aave-earn/fetchPublic.ts
|
|
46703
48843
|
var BRAND2 = "Aave";
|
|
46704
|
-
var
|
|
48844
|
+
var toBigInt15 = (v) => {
|
|
46705
48845
|
if (v === void 0 || v === null) return void 0;
|
|
46706
48846
|
if (typeof v === "bigint") return v;
|
|
46707
48847
|
if (typeof v === "number") return BigInt(v);
|
|
@@ -46761,15 +48901,15 @@ var fetchAaveEarnVaults = async (chainId, multicallRetry, prices = {}, tokenList
|
|
|
46761
48901
|
const token = v.usedReserve.underlyingToken;
|
|
46762
48902
|
const underlyingLc = token.address.toLowerCase();
|
|
46763
48903
|
const assetDecimals = token.decimals;
|
|
46764
|
-
const shareDecOnChain =
|
|
48904
|
+
const shareDecOnChain = toBigInt15(slice[1]);
|
|
46765
48905
|
const decimals = shareDecOnChain !== void 0 ? Number(shareDecOnChain) : assetDecimals;
|
|
46766
|
-
const totalSupply =
|
|
48906
|
+
const totalSupply = toBigInt15(slice[2]);
|
|
46767
48907
|
if (totalSupply === void 0) continue;
|
|
46768
48908
|
const shareUnit = 10n ** BigInt(decimals);
|
|
46769
48909
|
const underlyingUnit = 10n ** BigInt(assetDecimals);
|
|
46770
|
-
const convertToAssets =
|
|
48910
|
+
const convertToAssets = toBigInt15(slice[3]) ?? 0n;
|
|
46771
48911
|
const convertToShares = convertToAssets > 0n ? shareUnit * underlyingUnit / convertToAssets : 0n;
|
|
46772
|
-
const totalAssets =
|
|
48912
|
+
const totalAssets = toBigInt15(slice[0]) ?? totalSupply * convertToAssets / shareUnit;
|
|
46773
48913
|
const totalAssetsFormatted = Number(totalAssets) / 10 ** assetDecimals;
|
|
46774
48914
|
const asset = tokenList[underlyingLc];
|
|
46775
48915
|
const priceUsd = prices[underlyingLc] ?? (v.balance?.usdPerToken != null ? num2(v.balance.usdPerToken) : void 0);
|
|
@@ -48013,23 +50153,23 @@ var priceGmMarkets = async (chainId, multicallRetry, markets, prices) => {
|
|
|
48013
50153
|
const indexMax = price(prices, m.indexToken)?.max;
|
|
48014
50154
|
if (Array.isArray(dsRes) && longMax != null && shortMax != null) {
|
|
48015
50155
|
const base = i * SLOTS;
|
|
48016
|
-
const
|
|
50156
|
+
const big3 = (j) => typeof dsRes[base + j] === "bigint" ? dsRes[base + j] : 0n;
|
|
48017
50157
|
const cap = computeDepositCapacityUsd(
|
|
48018
|
-
[info?.longTokenAmount, longMax,
|
|
48019
|
-
[info?.shortTokenAmount, shortMax,
|
|
50158
|
+
[info?.longTokenAmount, longMax, big3(0), big3(2)],
|
|
50159
|
+
[info?.shortTokenAmount, shortMax, big3(1), big3(3)]
|
|
48020
50160
|
);
|
|
48021
50161
|
if (cap != null) value.depositCapacityUsd = cap;
|
|
48022
50162
|
if (indexMax != null) {
|
|
48023
50163
|
const divisor = m.longToken.toLowerCase() === m.shortToken.toLowerCase() ? 2n : 1n;
|
|
48024
|
-
const reservedUsdLong = (
|
|
48025
|
-
const reservedUsdShort = (
|
|
50164
|
+
const reservedUsdLong = (big3(4) + big3(5)) / divisor * indexMax;
|
|
50165
|
+
const reservedUsdShort = (big3(6) + big3(7)) / divisor;
|
|
48026
50166
|
const liq = computeLiquidityUsd(
|
|
48027
50167
|
info?.longTokenUsd,
|
|
48028
50168
|
info?.shortTokenUsd,
|
|
48029
50169
|
reservedUsdLong,
|
|
48030
50170
|
reservedUsdShort,
|
|
48031
|
-
|
|
48032
|
-
|
|
50171
|
+
big3(8),
|
|
50172
|
+
big3(9)
|
|
48033
50173
|
);
|
|
48034
50174
|
if (liq != null)
|
|
48035
50175
|
value.liquidityUsd = Math.max(0, Math.min(liq, value.tvlUsd));
|
|
@@ -48228,21 +50368,21 @@ var fetchGmxExecutionFees = async (chainId, multicallRetry, gasPriceWei) => {
|
|
|
48228
50368
|
} catch {
|
|
48229
50369
|
return void 0;
|
|
48230
50370
|
}
|
|
48231
|
-
const
|
|
48232
|
-
const base =
|
|
48233
|
-
const mult =
|
|
50371
|
+
const big3 = (i) => typeof res[i] === "bigint" ? res[i] : 0n;
|
|
50372
|
+
const base = big3(0);
|
|
50373
|
+
const mult = big3(1);
|
|
48234
50374
|
if (base === 0n && mult === 0n) return void 0;
|
|
48235
50375
|
const PRECISION = 10n ** 30n;
|
|
48236
50376
|
const adjusted = (opGas) => base + opGas * mult / PRECISION;
|
|
48237
50377
|
const fee = (opGas) => (adjusted(opGas) * gasPriceWei).toString();
|
|
48238
|
-
const glvExtra =
|
|
50378
|
+
const glvExtra = big3(6) * GLV_NOMINAL_MARKET_COUNT;
|
|
48239
50379
|
return {
|
|
48240
50380
|
chainId,
|
|
48241
50381
|
gasPriceWei: gasPriceWei.toString(),
|
|
48242
|
-
deposit: fee(
|
|
48243
|
-
withdrawal: fee(
|
|
48244
|
-
glvDeposit: fee(
|
|
48245
|
-
glvWithdrawal: fee(
|
|
50382
|
+
deposit: fee(big3(2)),
|
|
50383
|
+
withdrawal: fee(big3(3)),
|
|
50384
|
+
glvDeposit: fee(big3(4) + glvExtra),
|
|
50385
|
+
glvWithdrawal: fee(big3(5) + glvExtra)
|
|
48246
50386
|
};
|
|
48247
50387
|
};
|
|
48248
50388
|
|
|
@@ -48629,7 +50769,7 @@ var readVaultSharePrices = async (chainId, addresses, multicallRetry) => {
|
|
|
48629
50769
|
};
|
|
48630
50770
|
|
|
48631
50771
|
// src/vaults/yield/annualize.ts
|
|
48632
|
-
var
|
|
50772
|
+
var YEAR_SECONDS3 = 365 * 24 * 60 * 60;
|
|
48633
50773
|
var SCALE = 10n ** 18n;
|
|
48634
50774
|
var appendSnapshot = (points, snap, options) => {
|
|
48635
50775
|
const maxPoints = options?.maxPoints ?? 90;
|
|
@@ -48658,7 +50798,7 @@ var computeVaultApr = (points, options) => {
|
|
|
48658
50798
|
if (pThen === 0n) return void 0;
|
|
48659
50799
|
const ratioScaled = BigInt(now.p) * SCALE / pThen;
|
|
48660
50800
|
const ratio = Number(ratioScaled) / 1e18;
|
|
48661
|
-
const apr = (ratio - 1) * (
|
|
50801
|
+
const apr = (ratio - 1) * (YEAR_SECONDS3 / windowSeconds);
|
|
48662
50802
|
return {
|
|
48663
50803
|
apr,
|
|
48664
50804
|
sharePriceNow: now.p,
|
|
@@ -48713,7 +50853,7 @@ function buildVaultLookup(data) {
|
|
|
48713
50853
|
addEntries(data.yearn, "yearn");
|
|
48714
50854
|
return map;
|
|
48715
50855
|
}
|
|
48716
|
-
var
|
|
50856
|
+
var warn6 = (...args) => {
|
|
48717
50857
|
};
|
|
48718
50858
|
var HYPERCORE_PROVIDER_CHAIN = "999";
|
|
48719
50859
|
var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices = {}, tokenList = {}, options) => {
|
|
@@ -48726,7 +50866,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
48726
50866
|
fetchFluidFTokens(chainId, multicallRetry, prices, tokenList).then((res) => {
|
|
48727
50867
|
out.fluid = res;
|
|
48728
50868
|
}).catch((e) => {
|
|
48729
|
-
|
|
50869
|
+
warn6(
|
|
48730
50870
|
`[vaults] fluid fetch failed for chain ${chainId}:`,
|
|
48731
50871
|
e?.message ?? e
|
|
48732
50872
|
);
|
|
@@ -48738,7 +50878,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
48738
50878
|
fetchGearboxV3Pools(chainId, multicallRetry, prices, tokenList).then((res) => {
|
|
48739
50879
|
out.gearbox = res;
|
|
48740
50880
|
}).catch((e) => {
|
|
48741
|
-
|
|
50881
|
+
warn6(
|
|
48742
50882
|
`[vaults] gearbox fetch failed for chain ${chainId}:`,
|
|
48743
50883
|
e?.message ?? e
|
|
48744
50884
|
);
|
|
@@ -48750,7 +50890,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
48750
50890
|
fetchMorphoVaults(chainId, multicallRetry, prices, tokenList).then((res) => {
|
|
48751
50891
|
out.morpho = res;
|
|
48752
50892
|
}).catch((e) => {
|
|
48753
|
-
|
|
50893
|
+
warn6(
|
|
48754
50894
|
`[vaults] morpho fetch failed for chain ${chainId}:`,
|
|
48755
50895
|
e?.message ?? e
|
|
48756
50896
|
);
|
|
@@ -48762,7 +50902,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
48762
50902
|
fetchListaVaultsFromChain(chainId, multicallRetry, prices, tokenList).then((res) => {
|
|
48763
50903
|
out.lista = res;
|
|
48764
50904
|
}).catch((e) => {
|
|
48765
|
-
|
|
50905
|
+
warn6(
|
|
48766
50906
|
`[vaults] lista fetch failed for chain ${chainId}:`,
|
|
48767
50907
|
e?.message ?? e
|
|
48768
50908
|
);
|
|
@@ -48777,7 +50917,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
48777
50917
|
}).then((res) => {
|
|
48778
50918
|
out.silo = res;
|
|
48779
50919
|
}).catch((e) => {
|
|
48780
|
-
|
|
50920
|
+
warn6(
|
|
48781
50921
|
`[vaults] silo fetch failed for chain ${chainId}:`,
|
|
48782
50922
|
e?.message ?? e
|
|
48783
50923
|
);
|
|
@@ -48789,7 +50929,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
48789
50929
|
fetchEulerEarnVaults(chainId, prices, tokenList, multicallRetry).then((res) => {
|
|
48790
50930
|
out["euler-earn"] = res;
|
|
48791
50931
|
}).catch((e) => {
|
|
48792
|
-
|
|
50932
|
+
warn6(
|
|
48793
50933
|
`[vaults] euler-earn fetch failed for chain ${chainId}:`,
|
|
48794
50934
|
e?.message ?? e
|
|
48795
50935
|
);
|
|
@@ -48801,7 +50941,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
48801
50941
|
fetchLstShareTokens(chainId, multicallRetry, prices, tokenList).then((res) => {
|
|
48802
50942
|
out.lst = res;
|
|
48803
50943
|
}).catch((e) => {
|
|
48804
|
-
|
|
50944
|
+
warn6(
|
|
48805
50945
|
`[vaults] lst fetch failed for chain ${chainId}:`,
|
|
48806
50946
|
e?.message ?? e
|
|
48807
50947
|
);
|
|
@@ -48813,7 +50953,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
48813
50953
|
fetchSavingsVaults(chainId, multicallRetry, prices, tokenList).then((res) => {
|
|
48814
50954
|
out.savings = res;
|
|
48815
50955
|
}).catch((e) => {
|
|
48816
|
-
|
|
50956
|
+
warn6(
|
|
48817
50957
|
`[vaults] savings fetch failed for chain ${chainId}:`,
|
|
48818
50958
|
e?.message ?? e
|
|
48819
50959
|
);
|
|
@@ -48825,7 +50965,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
48825
50965
|
fetchLagoonVaults(chainId, prices, tokenList).then((res) => {
|
|
48826
50966
|
out.lagoon = res;
|
|
48827
50967
|
}).catch((e) => {
|
|
48828
|
-
|
|
50968
|
+
warn6(
|
|
48829
50969
|
`[vaults] lagoon fetch failed for chain ${chainId}:`,
|
|
48830
50970
|
e?.message ?? e
|
|
48831
50971
|
);
|
|
@@ -48837,7 +50977,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
48837
50977
|
fetchAaveEarnVaults(chainId, multicallRetry, prices, tokenList).then((res) => {
|
|
48838
50978
|
out["aave-earn"] = res;
|
|
48839
50979
|
}).catch((e) => {
|
|
48840
|
-
|
|
50980
|
+
warn6(
|
|
48841
50981
|
`[vaults] aave-earn fetch failed for chain ${chainId}:`,
|
|
48842
50982
|
e?.message ?? e
|
|
48843
50983
|
);
|
|
@@ -48849,7 +50989,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
48849
50989
|
fetchUpshiftVaults(chainId, prices, tokenList).then((res) => {
|
|
48850
50990
|
out.upshift = res;
|
|
48851
50991
|
}).catch((e) => {
|
|
48852
|
-
|
|
50992
|
+
warn6(
|
|
48853
50993
|
`[vaults] upshift fetch failed for chain ${chainId}:`,
|
|
48854
50994
|
e?.message ?? e
|
|
48855
50995
|
);
|
|
@@ -48861,7 +51001,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
48861
51001
|
fetchYearnVaults(chainId, multicallRetry, prices, tokenList).then((res) => {
|
|
48862
51002
|
out.yearn = res;
|
|
48863
51003
|
}).catch((e) => {
|
|
48864
|
-
|
|
51004
|
+
warn6(
|
|
48865
51005
|
`[vaults] yearn fetch failed for chain ${chainId}:`,
|
|
48866
51006
|
e?.message ?? e
|
|
48867
51007
|
);
|
|
@@ -48873,7 +51013,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
48873
51013
|
fetchHypercoreVaults().then((res) => {
|
|
48874
51014
|
out.hypercore = res;
|
|
48875
51015
|
}).catch((e) => {
|
|
48876
|
-
|
|
51016
|
+
warn6(
|
|
48877
51017
|
`[vaults] hypercore fetch failed for chain ${chainId}:`,
|
|
48878
51018
|
e?.message ?? e
|
|
48879
51019
|
);
|
|
@@ -48885,7 +51025,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
48885
51025
|
fetchGmxVaults(chainId, multicallRetry).then((res) => {
|
|
48886
51026
|
out.gmx = res;
|
|
48887
51027
|
}).catch((e) => {
|
|
48888
|
-
|
|
51028
|
+
warn6(
|
|
48889
51029
|
`[vaults] gmx fetch failed for chain ${chainId}:`,
|
|
48890
51030
|
e?.message ?? e
|
|
48891
51031
|
);
|
|
@@ -48901,7 +51041,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
48901
51041
|
);
|
|
48902
51042
|
if (fees) out.gmxExecutionFees = fees;
|
|
48903
51043
|
})().catch((e) => {
|
|
48904
|
-
|
|
51044
|
+
warn6(
|
|
48905
51045
|
`[vaults] gmx execution-fee fetch failed for chain ${chainId}:`,
|
|
48906
51046
|
e?.message ?? e
|
|
48907
51047
|
);
|
|
@@ -49448,6 +51588,6 @@ async function fetchTokenBalances(chainId, account, tokens, options = {}) {
|
|
|
49448
51588
|
return parseTokenBalanceResult(rawResult, prepared.query);
|
|
49449
51589
|
}
|
|
49450
51590
|
|
|
49451
|
-
export { ApiBookSource, EMPTY_BALANCE, GMX_API_HOSTS, GMX_READ_CONTRACTS, GMX_SUPPORTED_CHAINS, HYPERCORE_VAULT_REGISTRY, IDLE_MARKET_ID, INTERFACE_IDS, LAGOON_API_URL, LAGOON_CHAIN_IDS, MORPHO_LENS, MaxParamThresholds, STABLECOIN_SYMBOLS, STCELO_MANAGER_ADDRESS, UPSHIFT_CHAIN_IDS, UPSHIFT_VAULTS_URL, VAULT_SHARE_PRICE_PROBE, VOLATILE_VAULT_OVERRIDES, YEARN_CHAIN_IDS, YEARN_YDAEMON_BASE, accountDepositListKey, accountWithdrawalListKey, appendSnapshot, applyPositionDelta, attachPricesToFlashLiquidity, buildFluidFTokensCall, buildLoopResult, buildMorphoTypeCall, buildMorphoTypeUserCallWithLens, buildPortfolioTotals, buildSumerAccumulators, buildSummaries, buildVaultLookup, calculateLeverage, calculateNetApr, calculateOverallNetApr, calculateWeightedAverage, classifyVault, computeBorrowDelta2 as computeBorrowDelta, computeCloseTradeDeltas, computeCollateralSwapDeltas, computeDebtSwapDeltas, computeDepositDelta2 as computeDepositDelta, computeEModeAnalysis, computeOpenTradeDeltas, computePostTradeMetrics, computeRepayDelta2 as computeRepayDelta, computeSumerBorrowDelta, computeSumerDepositDelta, computeSumerRepayDelta, computeSumerWaterfall, computeSumerWithdrawDelta, computeVaultApr, computeWithdrawDelta2 as computeWithdrawDelta, computeZapTradeDeltas, convertLenderUserDataResult, createMarketUid, createMidnightBookSource, createMulticallRpcCall, createRawRpcCalls, decodeListaMarkets, decodeMarkets, decodePackedListaUserDataset, decodePackedMorphoUserDataset, detectInterfaceKinds, encodeBalanceFetcherCalldata, fetchDolomiteAccountNumbers, fetchEulerEarnVaults, fetchEulerEarnVaultsFromSubgraph, fetchEulerSubAccountIndexes, fetchFlashLiquidityForChain, fetchFluidFTokens, fetchGeneralYields, fetchGeneralYieldsByMarketUid, fetchGmxExecutionFees, fetchGmxTickerPrices, fetchGmxVaults, fetchHypercoreVaults, fetchLagoonApiVaults, fetchLagoonVaults, fetchListaVaultsFromChain, fetchMorphoUserBalances, fetchMorphoUserPositionMarkets, fetchMorphoVaults, fetchMorphoVaultsFromApi, fetchMorphoVaultsFromChain, fetchOraclePrices, fetchPendlePrices, fetchSiloVaults, fetchTokenBalances, fetchTokenMetadata, fetchUpshiftApiVaults, fetchUpshiftVaults, fetchYearnApiVaults, fetchYearnVaults, filterActiveLenders, filterLendersByProtocol, fuseLenderData, generateLendingPools, getAavesForChain, getAssetConfig, getBalanceForMarketUid, getBorrowCapacity, getCoreValidators, getFluidFTokensConverter, getGmxApiHost, getGmxReadContracts, getGmxUserPositions, getHealthFactor, getHypercoreUserPositions, getHypercoreVaultRegistry, getLenderAssets, getLenderPublicData, getLenderPublicDataAll, getLenderPublicDataViaApi, getLenderUserDataMulti, getLenderUserDataResult, getLendersForChain, getLstDelegation, getLstValidators, getLstWithdrawalRegistry, getLstWithdrawalRequests, getMaxAmountClose, getMaxAmountCollateralSwap, getMaxAmountDebtSwap, getMaxAmountOpen, getMergedUserData, getMorphoTypeMarketConverter, getResolvedDolomiteAccountNumbers, getStCeloValidatorGroups, getSubAccountAddress, getSubAccountIndex, getVaultPublicDataAll, getVaultWithdrawalRequests, hasEulerEarnVaultSubgraph, hasLagoonVaults, hasMorphoPositionIndex, hasMorphoUserApi, hasMorphoUserSubgraph, hasUpshiftVaults, hasYearnVaults, isStablecoinSymbol, isYearnV3, keysFromMaps, multicall3Abi, nanTo, needsLenderApproval, needsTokenApproval, noOpResult, normalizeToBytes, parseBalanceFetcherResult, parseMergedResult, parseMulticallRpcResponses, parseRawRpcBatchResponses, parseRawRpcResponses, parseTokenBalanceResult, positivePart2 as positivePart, prepareLenderUserDataRpcCalls, prepareMergedMulticallParams, prepareMergedRpcCalls, prepareMulticallInputs, prepareTokenBalanceRpcCalls, priceGlvVaults, priceGmMarkets, readVaultSharePrices, resolveStCeloDepositGroup, selectAssetGroupPrices, stampVaultClassification, tickToAprNumber, tickToPrice, unflattenLenderData };
|
|
51591
|
+
export { ApiBookSource, DEFAULT_MIDNIGHT_API, EMPTY_BALANCE, GMX_API_HOSTS, GMX_READ_CONTRACTS, GMX_SUPPORTED_CHAINS, HYPERCORE_VAULT_REGISTRY, IDLE_MARKET_ID, INTERFACE_IDS, LAGOON_API_URL, LAGOON_CHAIN_IDS, MORPHO_LENS, MaxParamThresholds, STABLECOIN_SYMBOLS, STCELO_MANAGER_ADDRESS, TermSubgraphSource, UPSHIFT_CHAIN_IDS, UPSHIFT_VAULTS_URL, VAULT_SHARE_PRICE_PROBE, VOLATILE_VAULT_OVERRIDES, YEARN_CHAIN_IDS, YEARN_YDAEMON_BASE, accountDepositListKey, accountWithdrawalListKey, appendSnapshot, applyPositionDelta, attachPricesToFlashLiquidity, buildFluidFTokensCall, buildLiquityUserCall, buildLoopResult, buildMorphoTypeCall, buildMorphoTypeUserCallWithLens, buildPortfolioTotals, buildSumerAccumulators, buildSummaries, buildVaultLookup, calculateLeverage, calculateNetApr, calculateOverallNetApr, calculateWeightedAverage, classifyVault, computeBorrowDelta2 as computeBorrowDelta, computeCloseTradeDeltas, computeCollateralSwapDeltas, computeDebtSwapDeltas, computeDepositDelta2 as computeDepositDelta, computeEModeAnalysis, computeOpenTradeDeltas, computePostTradeMetrics, computeRepayDelta2 as computeRepayDelta, computeSumerBorrowDelta, computeSumerDepositDelta, computeSumerRepayDelta, computeSumerWaterfall, computeSumerWithdrawDelta, computeVaultApr, computeWithdrawDelta2 as computeWithdrawDelta, computeZapTradeDeltas, convertExactlyMarketsToResponse, convertLenderUserDataResult, convertLiquityMarketsToResponse, convertRiverMarketsToResponse, convertTermMarketsToResponse, createMarketUid, createMidnightBookSource, createMulticallRpcCall, createRawRpcCalls, createTermBookSource, decodeListaMarkets, decodeMarkets, decodePackedListaUserDataset, decodePackedMorphoUserDataset, detectInterfaceKinds, encodeBalanceFetcherCalldata, exactlyLenderKey, exactlyMarketFromLenderKey, exactlyPairLtv, exactlyPenaltyRateToAprPercent, exactlyWadRateToPercent, fetchDolomiteAccountNumbers, fetchEulerEarnVaults, fetchEulerEarnVaultsFromSubgraph, fetchEulerSubAccountIndexes, fetchExactlyMarkets, fetchFlashLiquidityForChain, fetchFluidFTokens, fetchGeneralYields, fetchGeneralYieldsByMarketUid, fetchGmxExecutionFees, fetchGmxTickerPrices, fetchGmxVaults, fetchHypercoreVaults, fetchLagoonApiVaults, fetchLagoonVaults, fetchLiquityMarkets, fetchListaVaultsFromChain, fetchMorphoUserBalances, fetchMorphoUserPositionMarkets, fetchMorphoVaults, fetchMorphoVaultsFromApi, fetchMorphoVaultsFromChain, fetchOraclePrices, fetchPendlePrices, fetchRiverMarkets, fetchSiloVaults, fetchTermMarkets, fetchTokenBalances, fetchTokenMetadata, fetchUpshiftApiVaults, fetchUpshiftVaults, fetchYearnApiVaults, fetchYearnVaults, filterActiveLenders, filterLendersByProtocol, fuseLenderData, generateLendingPools, getAavesForChain, getAssetConfig, getBalanceForMarketUid, getBorrowCapacity, getCachedLiquityTroves, getCoreValidators, getFluidFTokensConverter, getGmxApiHost, getGmxReadContracts, getGmxUserPositions, getHealthFactor, getHypercoreUserPositions, getHypercoreVaultRegistry, getLenderAssets, getLenderPublicData, getLenderPublicDataAll, getLenderPublicDataViaApi, getLenderUserDataMulti, getLenderUserDataResult, getLendersForChain, getLstDelegation, getLstValidators, getLstWithdrawalRegistry, getLstWithdrawalRequests, getMaxAmountClose, getMaxAmountCollateralSwap, getMaxAmountDebtSwap, getMaxAmountOpen, getMergedUserData, getMorphoTypeMarketConverter, getResolvedDolomiteAccountNumbers, getStCeloValidatorGroups, getSubAccountAddress, getSubAccountIndex, getVaultPublicDataAll, getVaultWithdrawalRequests, hasEulerEarnVaultSubgraph, hasLagoonVaults, hasMorphoPositionIndex, hasMorphoUserApi, hasMorphoUserSubgraph, hasUpshiftVaults, hasYearnVaults, isStablecoinSymbol, isYearnV3, keysFromMaps, liquityCandidateTroveIds, liquityKeyParts, liquityLenderKey, multicall3Abi, nanTo, needsLenderApproval, needsTokenApproval, noOpResult, normalizeToBytes, parseBalanceFetcherResult, parseMergedResult, parseMulticallRpcResponses, parseRawRpcBatchResponses, parseRawRpcResponses, parseTokenBalanceResult, positivePart2 as positivePart, prepareLenderUserDataRpcCalls, prepareMergedMulticallParams, prepareMergedRpcCalls, prepareMulticallInputs, prepareTokenBalanceRpcCalls, priceGlvVaults, priceGmMarkets, readVaultSharePrices, resolveStCeloDepositGroup, riverKeyParts, riverLenderKey, selectAssetGroupPrices, stampVaultClassification, termLenderKey, tickToAprNumber, tickToPrice, unflattenLenderData };
|
|
49452
51592
|
//# sourceMappingURL=index.js.map
|
|
49453
51593
|
//# sourceMappingURL=index.js.map
|