@1delta/margin-fetcher 0.0.404 → 0.0.405
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/ccip-5UG36BRY.js +5 -0
- package/dist/{ccip-VFYF2C5F.js.map → ccip-5UG36BRY.js.map} +1 -1
- package/dist/{chunk-Z3MGRQJR.js → chunk-SRWUFRRR.js} +4 -4
- package/dist/{chunk-Z3MGRQJR.js.map → chunk-SRWUFRRR.js.map} +1 -1
- package/dist/index.d.ts +582 -10
- package/dist/index.js +2192 -449
- package/dist/index.js.map +1 -1
- package/package.json +6 -6
- package/dist/ccip-VFYF2C5F.js +0 -5
package/dist/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { parseAbi, keccak256, encodeAbiParameters, formatEther, BaseError, encodeFunctionData, formatUnits, isAddress, getAddress, decodeFunctionResult, decodeAbiParameters, AbiEncodingLengthMismatchError, concatHex,
|
|
1
|
+
import { parseAbi, keccak256, encodeAbiParameters, formatEther, BaseError, pad, encodeFunctionData, formatUnits, isAddress, getAddress, decodeFunctionResult, decodeAbiParameters, concat, AbiEncodingLengthMismatchError, concatHex, toBytes, slice, InvalidAddressError, stringToHex, boolToHex, integerRegex, numberToHex, bytesRegex, BytesSizeMismatchError, arrayRegex, UnsupportedPackedAbiType } from './chunk-SRWUFRRR.js';
|
|
2
2
|
import './chunk-BYTNVMX7.js';
|
|
3
3
|
import './chunk-PR4QN5HX.js';
|
|
4
|
-
import { Lender, LIQUITY_FAMILY_LENDERS, isAaveType, isCompoundV3, isMultiMarket, isSiloV2Type, isSiloV3Type, isDolomite, isMidnight, isTerm, isExactly, isLiquityFamily, isRiver, isTeller, isEulerType, isAaveV4Type, isInit, isMorphoType, isCompoundV2Type, isVenusType, isSumerType, AAVE_V3_LENDERS, AAVE_V2_LENDERS, isAaveV2Type, isAaveV32Type, isAaveV3Type, isFluid, isGearboxV3, isYLDR, isCompoundV3Type, isLista, isTectonicType, isKineticType, isBenqiType } from '@1delta/lender-registry';
|
|
4
|
+
import { Lender, LIQUITY_FAMILY_LENDERS, isAaveType, isCompoundV3, isMultiMarket, isSiloV2Type, isSiloV3Type, isDolomite, isMidnight, isTerm, isExactly, isLiquityFamily, isRiver, isTeller, isEulerType, isAaveV4Type, isInit, isMorphoType, isCompoundV2Type, isVenusType, isSumerType, AAVE_V3_LENDERS, AAVE_V2_LENDERS, isAaveV2Type, isAaveV32Type, isAaveV3Type, isFluid, isGearboxV3, isInverse, isTermMax, 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, termConfig, termMarketsByChain, exactlyConfig, liquityLendersByChain, riverLendersByChain, tellerConfigByChain, tellerPoolsByChain, aaveReserves, compoundV3Reserves, liquityConfigFor, liquityBranchesByChain, riverConfigFor, riverChainData, aaveOracles, morphoTypeMarkets, resolveMidnightApiBase, resolveTermApiBase, getSiloV2MarketEntry, getSiloV3MarketEntry, dolomiteEmode, aaveTokens, morphoTypeVaults, eulerConfigs, gearboxMarketCompressor, gearboxMarketConfigurators, gearboxV3LenderKey, midnightMarketsByChain, parseAaveV4SpokeLenderKey, gearboxAccountCompressor, compoundV2Tokens, exactlyMarketsByChain, 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, termConfig, termMarketsByChain, exactlyConfig, liquityLendersByChain, riverLendersByChain, inverseLendersByChain, tellerConfigByChain, tellerPoolsByChain, aaveReserves, compoundV3Reserves, liquityConfigFor, liquityBranchesByChain, riverConfigFor, riverChainData, termMaxApiBaseUrl, termMaxConfigByChain, termMaxLenderKey, inverseConfigFor, inverseChainData, aaveOracles, morphoTypeMarkets, resolveMidnightApiBase, resolveTermApiBase, getSiloV2MarketEntry, getSiloV3MarketEntry, dolomiteEmode, aaveTokens, morphoTypeVaults, eulerConfigs, gearboxMarketCompressor, gearboxMarketConfigurators, gearboxV3LenderKey, midnightMarketsByChain, parseAaveV4SpokeLenderKey, gearboxAccountCompressor, compoundV2Tokens, exactlyMarketsByChain, aaveOraclesConfig, compoundV2Oracles, compoundV2TokenArray, compoundV2OraclesConfig, compoundV3OraclesData, compoundV3BaseData, compoundV2Reserves, aaveV4Oracles } from '@1delta/data-sdk';
|
|
7
7
|
import lodash from 'lodash';
|
|
8
8
|
import { multicallRetryUniversal, getEvmClient, getEvmChain, getEvmClientUniversal } from '@1delta/providers';
|
|
9
|
-
import { LiquityTroveManagerAbi, LiquityActivePoolAbi, LiquityStabilityPoolAbi, LiquityPriceFeedAbi, LiquitySortedTrovesAbi, RiverTroveManagerAbi, RiverStabilityPoolAbi, TellerMarketRegistryAbi, TellerV2Abi, MetaMorphoAbi, ExactlyPreviewerAbi, ExactlyAuditorAbi, LenderCommitmentGroupAbi, FluidLendingResolverAbi, FluidVaultResolverAbi, FluidLiquidityResolverAbi, MoolahVaultAbi, MorphoLensAbi, AaveV4SpokeAbi, AaveV4OracleAbi, AaveV4HubAbi, DolomiteMarginAbi, GearboxMarketCompressorV310Abi, MorphoBlueAbi, MidnightAbi, TermRepoTokenAbi, TermRepoServicerAbi, TermRepoCollateralManagerAbi, LiquityTroveNFTAbi, LiquityCollSurplusPoolAbi, TellerCollateralManagerAbi, GearboxCreditAccountCompressorV310Abi, TermPriceConsumerAbi } from '@1delta/abis';
|
|
9
|
+
import { LiquityTroveManagerAbi, LiquityActivePoolAbi, LiquityStabilityPoolAbi, LiquityPriceFeedAbi, LiquitySortedTrovesAbi, RiverTroveManagerAbi, RiverStabilityPoolAbi, TellerMarketRegistryAbi, TellerV2Abi, InverseMarketAbi, InverseOracleAbi, InverseDbrAbi, Erc20Abi, MetaMorphoAbi, ExactlyPreviewerAbi, ExactlyAuditorAbi, LenderCommitmentGroupAbi, FluidLendingResolverAbi, FluidVaultResolverAbi, FluidLiquidityResolverAbi, MoolahVaultAbi, MorphoLensAbi, AaveV4SpokeAbi, AaveV4OracleAbi, AaveV4HubAbi, DolomiteMarginAbi, GearboxMarketCompressorV310Abi, MorphoBlueAbi, MidnightAbi, TermRepoTokenAbi, TermRepoServicerAbi, TermRepoCollateralManagerAbi, LiquityTroveNFTAbi, LiquityCollSurplusPoolAbi, TellerCollateralManagerAbi, InverseEscrowAbi, GearboxCreditAccountCompressorV310Abi, TermPriceConsumerAbi, TermMaxOracleAggregatorV2Abi } 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';
|
|
@@ -7516,6 +7516,9 @@ var getLendersForChain = (c) => {
|
|
|
7516
7516
|
for (const l of riverLendersByChain(c)) {
|
|
7517
7517
|
lenders.push(l);
|
|
7518
7518
|
}
|
|
7519
|
+
for (const l of inverseLendersByChain(c)) {
|
|
7520
|
+
lenders.push(l);
|
|
7521
|
+
}
|
|
7519
7522
|
if (tellerConfigByChain(c)?.tellerV2 && tellerPoolsByChain(c).length > 0) {
|
|
7520
7523
|
lenders.push(Lender.TELLER);
|
|
7521
7524
|
}
|
|
@@ -8002,6 +8005,37 @@ function encode(type, value, isArray2 = false) {
|
|
|
8002
8005
|
throw new UnsupportedPackedAbiType(type);
|
|
8003
8006
|
}
|
|
8004
8007
|
|
|
8008
|
+
// ../../node_modules/.pnpm/viem@2.45.3_bufferutil@4.1.0_typescript@5.9.3_utf-8-validate@6.0.6_zod@4.3.6/node_modules/viem/_esm/utils/data/isBytes.js
|
|
8009
|
+
function isBytes(value) {
|
|
8010
|
+
if (!value)
|
|
8011
|
+
return false;
|
|
8012
|
+
if (typeof value !== "object")
|
|
8013
|
+
return false;
|
|
8014
|
+
if (!("BYTES_PER_ELEMENT" in value))
|
|
8015
|
+
return false;
|
|
8016
|
+
return value.BYTES_PER_ELEMENT === 1 && value.constructor.name === "Uint8Array";
|
|
8017
|
+
}
|
|
8018
|
+
|
|
8019
|
+
// ../../node_modules/.pnpm/viem@2.45.3_bufferutil@4.1.0_typescript@5.9.3_utf-8-validate@6.0.6_zod@4.3.6/node_modules/viem/_esm/utils/address/getContractAddress.js
|
|
8020
|
+
function getContractAddress(opts) {
|
|
8021
|
+
return getCreate2Address(opts);
|
|
8022
|
+
}
|
|
8023
|
+
function getCreate2Address(opts) {
|
|
8024
|
+
const from = toBytes(getAddress(opts.from));
|
|
8025
|
+
const salt = pad(isBytes(opts.salt) ? opts.salt : toBytes(opts.salt), {
|
|
8026
|
+
size: 32
|
|
8027
|
+
});
|
|
8028
|
+
const bytecodeHash = (() => {
|
|
8029
|
+
if ("bytecodeHash" in opts) {
|
|
8030
|
+
if (isBytes(opts.bytecodeHash))
|
|
8031
|
+
return opts.bytecodeHash;
|
|
8032
|
+
return toBytes(opts.bytecodeHash);
|
|
8033
|
+
}
|
|
8034
|
+
return keccak256(opts.bytecode, "bytes");
|
|
8035
|
+
})();
|
|
8036
|
+
return getAddress(slice(keccak256(concat([toBytes("0xff"), from, salt, bytecodeHash])), 12));
|
|
8037
|
+
}
|
|
8038
|
+
|
|
8005
8039
|
// ../../node_modules/.pnpm/viem@2.45.3_bufferutil@4.1.0_typescript@5.9.3_utf-8-validate@6.0.6_zod@4.3.6/node_modules/viem/_esm/constants/bytes.js
|
|
8006
8040
|
var zeroHash = "0x0000000000000000000000000000000000000000000000000000000000000000";
|
|
8007
8041
|
|
|
@@ -11112,8 +11146,8 @@ async function resolveListaBrokers(chainId, marketKeys, getClient = getEvmClient
|
|
|
11112
11146
|
});
|
|
11113
11147
|
results.forEach((r, i) => {
|
|
11114
11148
|
const id = missing[i];
|
|
11115
|
-
const
|
|
11116
|
-
cache[id] =
|
|
11149
|
+
const addr2 = r.status === "success" && r.result ? r.result : zeroAddress;
|
|
11150
|
+
cache[id] = addr2.toLowerCase();
|
|
11117
11151
|
});
|
|
11118
11152
|
} catch {
|
|
11119
11153
|
}
|
|
@@ -11161,15 +11195,15 @@ async function fetchListaFixedTerms(chainId, marketKeys) {
|
|
|
11161
11195
|
}
|
|
11162
11196
|
return out;
|
|
11163
11197
|
}
|
|
11164
|
-
function getCachedListaFixedTerms(chainId,
|
|
11165
|
-
return FIXED_TERMS_CACHE[chainId]?.[toBytes32MarketId(
|
|
11198
|
+
function getCachedListaFixedTerms(chainId, marketKey2) {
|
|
11199
|
+
return FIXED_TERMS_CACHE[chainId]?.[toBytes32MarketId(marketKey2)];
|
|
11166
11200
|
}
|
|
11167
11201
|
async function fetchListaBrokerUserData(chainId, account, marketKeys, nowSecs = Math.floor(Date.now() / 1e3), getClient = getEvmClient) {
|
|
11168
11202
|
const brokers = await resolveListaBrokers(chainId, marketKeys, getClient);
|
|
11169
11203
|
const ids = Object.keys(brokers);
|
|
11170
11204
|
const out = {};
|
|
11171
|
-
const
|
|
11172
|
-
BROKER_USER_CACHE[
|
|
11205
|
+
const cacheKey5 = `${chainId}:${account.toLowerCase()}`;
|
|
11206
|
+
BROKER_USER_CACHE[cacheKey5] = out;
|
|
11173
11207
|
if (ids.length === 0) return out;
|
|
11174
11208
|
try {
|
|
11175
11209
|
const client = getClient(chainId);
|
|
@@ -11272,8 +11306,8 @@ async function fetchListaBrokerUserData(chainId, account, marketKeys, nowSecs =
|
|
|
11272
11306
|
}
|
|
11273
11307
|
return out;
|
|
11274
11308
|
}
|
|
11275
|
-
function getCachedListaBrokerUserData(chainId, account,
|
|
11276
|
-
return BROKER_USER_CACHE[`${chainId}:${account.toLowerCase()}`]?.[toBytes32MarketId(
|
|
11309
|
+
function getCachedListaBrokerUserData(chainId, account, marketKey2) {
|
|
11310
|
+
return BROKER_USER_CACHE[`${chainId}:${account.toLowerCase()}`]?.[toBytes32MarketId(marketKey2)];
|
|
11277
11311
|
}
|
|
11278
11312
|
var { chunk } = lodash;
|
|
11279
11313
|
var MORPHO_LENS = {
|
|
@@ -12530,12 +12564,12 @@ function rateToApy(rate) {
|
|
|
12530
12564
|
);
|
|
12531
12565
|
}
|
|
12532
12566
|
function parseLtv(ltv) {
|
|
12533
|
-
let
|
|
12567
|
+
let str3 = 0;
|
|
12534
12568
|
try {
|
|
12535
|
-
|
|
12569
|
+
str3 = Number(formatUnits(BigInt(ltv), 18));
|
|
12536
12570
|
} catch (e) {
|
|
12537
12571
|
}
|
|
12538
|
-
return
|
|
12572
|
+
return str3;
|
|
12539
12573
|
}
|
|
12540
12574
|
function liquidationPenaltyFromLltv(lltv) {
|
|
12541
12575
|
if (!lltv || lltv <= 0) return 0;
|
|
@@ -18424,13 +18458,13 @@ function findVaultInfo(normalizedAddr, vaultData) {
|
|
|
18424
18458
|
function buildAdjacencyList(vaultData) {
|
|
18425
18459
|
const adj = /* @__PURE__ */ new Map();
|
|
18426
18460
|
const knownVaults = /* @__PURE__ */ new Set();
|
|
18427
|
-
for (const
|
|
18428
|
-
const norm =
|
|
18461
|
+
for (const addr2 of vaultData.keys()) {
|
|
18462
|
+
const norm = addr2.toLowerCase();
|
|
18429
18463
|
knownVaults.add(norm);
|
|
18430
18464
|
adj.set(norm, /* @__PURE__ */ new Set());
|
|
18431
18465
|
}
|
|
18432
|
-
for (const [
|
|
18433
|
-
const from =
|
|
18466
|
+
for (const [addr2, info] of vaultData) {
|
|
18467
|
+
const from = addr2.toLowerCase();
|
|
18434
18468
|
const activeCollaterals = getActiveCollaterals(info.collateralLTVInfo);
|
|
18435
18469
|
for (const to of activeCollaterals) {
|
|
18436
18470
|
if (knownVaults.has(to) && from !== to) {
|
|
@@ -18473,8 +18507,8 @@ function findConnectedComponents(adj) {
|
|
|
18473
18507
|
function deriveGovernor(vaultAddresses, vaultData) {
|
|
18474
18508
|
const counts = /* @__PURE__ */ new Map();
|
|
18475
18509
|
const zeroNorm = zeroAddress;
|
|
18476
|
-
for (const
|
|
18477
|
-
const info = findVaultInfo(
|
|
18510
|
+
for (const addr2 of vaultAddresses) {
|
|
18511
|
+
const info = findVaultInfo(addr2, vaultData);
|
|
18478
18512
|
if (!info) continue;
|
|
18479
18513
|
const gov = info.governorAdmin?.toLowerCase();
|
|
18480
18514
|
if (!gov || gov === zeroNorm) continue;
|
|
@@ -18499,8 +18533,8 @@ function deriveClusters(vaultData, includeSingletons = false) {
|
|
|
18499
18533
|
if (!includeSingletons && component.length < 2) continue;
|
|
18500
18534
|
if (!includeSingletons) {
|
|
18501
18535
|
let hasActiveEdge = false;
|
|
18502
|
-
for (const
|
|
18503
|
-
const neighbors = adj.get(
|
|
18536
|
+
for (const addr2 of component) {
|
|
18537
|
+
const neighbors = adj.get(addr2);
|
|
18504
18538
|
if (neighbors && neighbors.size > 0) {
|
|
18505
18539
|
hasActiveEdge = true;
|
|
18506
18540
|
break;
|
|
@@ -18509,9 +18543,9 @@ function deriveClusters(vaultData, includeSingletons = false) {
|
|
|
18509
18543
|
if (!hasActiveEdge) continue;
|
|
18510
18544
|
}
|
|
18511
18545
|
const clusterVaultData = /* @__PURE__ */ new Map();
|
|
18512
|
-
for (const
|
|
18513
|
-
const info = findVaultInfo(
|
|
18514
|
-
if (info) clusterVaultData.set(
|
|
18546
|
+
for (const addr2 of component) {
|
|
18547
|
+
const info = findVaultInfo(addr2, vaultData);
|
|
18548
|
+
if (info) clusterVaultData.set(addr2, info);
|
|
18515
18549
|
}
|
|
18516
18550
|
clusters.push({
|
|
18517
18551
|
governor: deriveGovernor(component, vaultData),
|
|
@@ -18536,21 +18570,21 @@ function toTokenAmount(raw, decimals) {
|
|
|
18536
18570
|
}
|
|
18537
18571
|
function identifyBorrowVaults(cluster) {
|
|
18538
18572
|
const borrowVaults = /* @__PURE__ */ new Set();
|
|
18539
|
-
for (const [
|
|
18573
|
+
for (const [addr2, info] of cluster.vaultData) {
|
|
18540
18574
|
const hasIRM = info.interestRateModel && info.interestRateModel.toLowerCase() !== zeroAddress;
|
|
18541
18575
|
const hasActiveCollateral = (info.collateralLTVInfo ?? []).some(
|
|
18542
18576
|
(ltv) => ltv.borrowLTV > 0n
|
|
18543
18577
|
);
|
|
18544
18578
|
if (hasIRM && hasActiveCollateral) {
|
|
18545
|
-
borrowVaults.add(
|
|
18579
|
+
borrowVaults.add(addr2.toLowerCase());
|
|
18546
18580
|
}
|
|
18547
18581
|
}
|
|
18548
18582
|
return borrowVaults;
|
|
18549
18583
|
}
|
|
18550
18584
|
function buildReverseLTVIndex(cluster) {
|
|
18551
18585
|
const index = /* @__PURE__ */ new Map();
|
|
18552
|
-
for (const [
|
|
18553
|
-
const borrowVault =
|
|
18586
|
+
for (const [addr2, info] of cluster.vaultData) {
|
|
18587
|
+
const borrowVault = addr2.toLowerCase();
|
|
18554
18588
|
for (const ltv of info.collateralLTVInfo ?? []) {
|
|
18555
18589
|
if (ltv.borrowLTV <= 0n) continue;
|
|
18556
18590
|
const collateral = ltv.collateral.toLowerCase();
|
|
@@ -18601,8 +18635,8 @@ function buildTokenConfig(vaultAddr, reverseLTV, borrowVaults, vaultData) {
|
|
|
18601
18635
|
}
|
|
18602
18636
|
function buildEModes(borrowVaults, cluster) {
|
|
18603
18637
|
const eModes = {};
|
|
18604
|
-
for (const
|
|
18605
|
-
const info = findInfo(
|
|
18638
|
+
for (const addr2 of borrowVaults) {
|
|
18639
|
+
const info = findInfo(addr2, cluster.vaultData);
|
|
18606
18640
|
if (!info) continue;
|
|
18607
18641
|
const activeLTVs = info.collateralLTVInfo.filter((l) => l.borrowLTV > 0n);
|
|
18608
18642
|
const avgBorrowLTV = activeLTVs.length > 0 ? activeLTVs.reduce((sum, l) => sum + ltvToNumber(l.borrowLTV), 0) / activeLTVs.length : 0;
|
|
@@ -18610,8 +18644,8 @@ function buildEModes(borrowVaults, cluster) {
|
|
|
18610
18644
|
(sum, l) => sum + ltvToNumber(l.liquidationLTV),
|
|
18611
18645
|
0
|
|
18612
18646
|
) / activeLTVs.length : 0;
|
|
18613
|
-
eModes[
|
|
18614
|
-
category:
|
|
18647
|
+
eModes[addr2] = {
|
|
18648
|
+
category: addr2,
|
|
18615
18649
|
label: `${info.assetSymbol} Borrow (${info.vaultSymbol})`,
|
|
18616
18650
|
borrowCollateralFactor: avgBorrowLTV,
|
|
18617
18651
|
collateralFactor: avgLiqLTV,
|
|
@@ -18633,11 +18667,11 @@ function buildMetadata(info) {
|
|
|
18633
18667
|
}
|
|
18634
18668
|
function buildTokenEntry(info, config, collateralActive, borrowVaults, opts) {
|
|
18635
18669
|
if (!info.asset) return void 0;
|
|
18636
|
-
const
|
|
18637
|
-
const tokenMeta = opts.tokenList?.[
|
|
18670
|
+
const addr2 = info.asset.toLowerCase();
|
|
18671
|
+
const tokenMeta = opts.tokenList?.[addr2];
|
|
18638
18672
|
const asset = {
|
|
18639
18673
|
chainId: opts.chainId,
|
|
18640
|
-
address:
|
|
18674
|
+
address: addr2,
|
|
18641
18675
|
name: tokenMeta?.name ?? info.assetName,
|
|
18642
18676
|
symbol: tokenMeta?.symbol ?? info.assetSymbol,
|
|
18643
18677
|
decimals: tokenMeta?.decimals ?? Number(info.assetDecimals)
|
|
@@ -18698,9 +18732,9 @@ function buildTokenEntry(info, config, collateralActive, borrowVaults, opts) {
|
|
|
18698
18732
|
params: { metadata: buildMetadata(info) }
|
|
18699
18733
|
};
|
|
18700
18734
|
}
|
|
18701
|
-
function findInfo(
|
|
18735
|
+
function findInfo(addr2, vaultData) {
|
|
18702
18736
|
for (const [key, value] of vaultData) {
|
|
18703
|
-
if (key.toLowerCase() ===
|
|
18737
|
+
if (key.toLowerCase() === addr2) return value;
|
|
18704
18738
|
}
|
|
18705
18739
|
return void 0;
|
|
18706
18740
|
}
|
|
@@ -18715,8 +18749,8 @@ function normalizeCluster(cluster, opts) {
|
|
|
18715
18749
|
}
|
|
18716
18750
|
const eModes = buildEModes(borrowVaults, cluster);
|
|
18717
18751
|
const data = {};
|
|
18718
|
-
for (const [
|
|
18719
|
-
const norm =
|
|
18752
|
+
for (const [addr2, info] of cluster.vaultData) {
|
|
18753
|
+
const norm = addr2.toLowerCase();
|
|
18720
18754
|
const config = buildTokenConfig(
|
|
18721
18755
|
norm,
|
|
18722
18756
|
reverseLTV,
|
|
@@ -18861,8 +18895,8 @@ var getEulerV2ReservesDataConverter = (lender, chainId, prices, additionalYields
|
|
|
18861
18895
|
var BASE_CALLS_PER_RESERVE = 5;
|
|
18862
18896
|
var CALLS_PER_SPOKE_TAIL = 1;
|
|
18863
18897
|
var MAX_HUB_ASSETS = 25;
|
|
18864
|
-
function isValidAddress(
|
|
18865
|
-
return !!
|
|
18898
|
+
function isValidAddress(addr2) {
|
|
18899
|
+
return !!addr2 && addr2 !== "0x" && addr2.length > 2;
|
|
18866
18900
|
}
|
|
18867
18901
|
function getDynamicConfigCount(spokeEntry) {
|
|
18868
18902
|
const max = spokeEntry?.dynamicConfigKeyMax ?? 0;
|
|
@@ -19206,8 +19240,8 @@ function normalizeAaveV4(spokeDataList, chainId, spokeLenderKeyArg, prices, addi
|
|
|
19206
19240
|
}
|
|
19207
19241
|
|
|
19208
19242
|
// src/lending/public-data/aave-v4-type/publicCallParse.ts
|
|
19209
|
-
function isValidAddress2(
|
|
19210
|
-
return !!
|
|
19243
|
+
function isValidAddress2(addr2) {
|
|
19244
|
+
return !!addr2 && addr2 !== "0x" && addr2.length > 2;
|
|
19211
19245
|
}
|
|
19212
19246
|
var getAaveV4ReservesDataConverter = (lender, chainId, prices, additionalYields, tokenList = {}) => {
|
|
19213
19247
|
const expectedCalls = getAaveV4ExpectedCallCount(chainId, lender);
|
|
@@ -19656,7 +19690,7 @@ var getSiloV2ReservesDataConverter = (lender, chainId, prices, additionalYields,
|
|
|
19656
19690
|
{ self: market.silo0, other: market.silo1 },
|
|
19657
19691
|
{ self: market.silo1, other: market.silo0 }
|
|
19658
19692
|
];
|
|
19659
|
-
const
|
|
19693
|
+
const toBigInt17 = (v) => {
|
|
19660
19694
|
if (v === void 0 || v === null || v === "0x") return 0n;
|
|
19661
19695
|
if (typeof v === "bigint") return v;
|
|
19662
19696
|
try {
|
|
@@ -19668,8 +19702,8 @@ var getSiloV2ReservesDataConverter = (lender, chainId, prices, additionalYields,
|
|
|
19668
19702
|
for (let s = 0; s < 2; s++) {
|
|
19669
19703
|
const { self, other } = sides[s];
|
|
19670
19704
|
const slot = s * SILO_V2_CALLS_PER_SIDE;
|
|
19671
|
-
const totalAssetsRaw =
|
|
19672
|
-
const debtAssetsRaw =
|
|
19705
|
+
const totalAssetsRaw = toBigInt17(data[slot]);
|
|
19706
|
+
const debtAssetsRaw = toBigInt17(data[slot + 1]);
|
|
19673
19707
|
const irmConfigRaw = data[slot + 2];
|
|
19674
19708
|
const decimals = self.decimals;
|
|
19675
19709
|
const totalDeposits = Number(formatUnits(totalAssetsRaw, decimals));
|
|
@@ -19824,7 +19858,7 @@ var getSiloV3ReservesDataConverter = (lender, chainId, prices, additionalYields,
|
|
|
19824
19858
|
{ self: market.silo0, other: market.silo1 },
|
|
19825
19859
|
{ self: market.silo1, other: market.silo0 }
|
|
19826
19860
|
];
|
|
19827
|
-
const
|
|
19861
|
+
const toBigInt17 = (v) => {
|
|
19828
19862
|
if (v === void 0 || v === null || v === "0x") return 0n;
|
|
19829
19863
|
if (typeof v === "bigint") return v;
|
|
19830
19864
|
try {
|
|
@@ -19836,8 +19870,8 @@ var getSiloV3ReservesDataConverter = (lender, chainId, prices, additionalYields,
|
|
|
19836
19870
|
for (let s = 0; s < 2; s++) {
|
|
19837
19871
|
const { self, other } = sides[s];
|
|
19838
19872
|
const slot = s * SILO_V3_CALLS_PER_SIDE;
|
|
19839
|
-
const totalAssetsRaw =
|
|
19840
|
-
const debtAssetsRaw =
|
|
19873
|
+
const totalAssetsRaw = toBigInt17(data[slot]);
|
|
19874
|
+
const debtAssetsRaw = toBigInt17(data[slot + 1]);
|
|
19841
19875
|
const irmConfigRaw = data[slot + 2];
|
|
19842
19876
|
const decimals = self.decimals;
|
|
19843
19877
|
const totalDeposits = Number(formatUnits(totalAssetsRaw, decimals));
|
|
@@ -19962,7 +19996,7 @@ var buildFluidCall = (chainId, _lender) => {
|
|
|
19962
19996
|
|
|
19963
19997
|
// src/lending/public-data/fluid/publicCallParse.ts
|
|
19964
19998
|
var FLUID_EEE_LOWER = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";
|
|
19965
|
-
var normalizeUnderlying = (
|
|
19999
|
+
var normalizeUnderlying = (addr2) => addr2 === FLUID_EEE_LOWER ? zeroAddress : addr2;
|
|
19966
20000
|
var FLUID_RATE_SCALE = 100;
|
|
19967
20001
|
var scaleFluidRate = (raw) => {
|
|
19968
20002
|
if (raw === void 0 || raw === null) return 0;
|
|
@@ -20465,9 +20499,9 @@ var getGearboxV3PublicDataConverter = (_lender, chainId, prices, additionalYield
|
|
|
20465
20499
|
const underlyingPrice = prices[underlyingPriceKey] ?? 0;
|
|
20466
20500
|
const debtByCm = {};
|
|
20467
20501
|
for (const dp of pool.creditManagerDebtParams ?? []) {
|
|
20468
|
-
const
|
|
20469
|
-
if (!
|
|
20470
|
-
debtByCm[
|
|
20502
|
+
const addr2 = (dp?.creditManager ?? "").toString().toLowerCase();
|
|
20503
|
+
if (!addr2) continue;
|
|
20504
|
+
debtByCm[addr2] = {
|
|
20471
20505
|
borrowed: BigInt(dp.borrowed ?? 0),
|
|
20472
20506
|
limit: BigInt(dp.limit ?? 0),
|
|
20473
20507
|
available: BigInt(dp.available ?? 0)
|
|
@@ -21091,7 +21125,7 @@ function createMidnightBookSource(chainId, fetchImpl = fetch) {
|
|
|
21091
21125
|
var MIDNIGHT_BOOK_LEVELS = 20;
|
|
21092
21126
|
var LKG_TTL_SEC = 30 * 60;
|
|
21093
21127
|
var lastGood = /* @__PURE__ */ new Map();
|
|
21094
|
-
async function fetchTopAndBookWithFallback(source, chainId, marketId,
|
|
21128
|
+
async function fetchTopAndBookWithFallback(source, chainId, marketId, nowSec9) {
|
|
21095
21129
|
const key = `${chainId}:${marketId}`;
|
|
21096
21130
|
let fresh = null;
|
|
21097
21131
|
if (source.getTopAndBook) {
|
|
@@ -21101,11 +21135,11 @@ async function fetchTopAndBookWithFallback(source, chainId, marketId, nowSec7) {
|
|
|
21101
21135
|
if (top) fresh = { top, book: { bids: [], asks: [] } };
|
|
21102
21136
|
}
|
|
21103
21137
|
if (fresh) {
|
|
21104
|
-
lastGood.set(key, { top: fresh.top, book: fresh.book, at:
|
|
21138
|
+
lastGood.set(key, { top: fresh.top, book: fresh.book, at: nowSec9 });
|
|
21105
21139
|
return { top: fresh.top, book: fresh.book };
|
|
21106
21140
|
}
|
|
21107
21141
|
const cached = lastGood.get(key);
|
|
21108
|
-
if (cached &&
|
|
21142
|
+
if (cached && nowSec9 - cached.at <= LKG_TTL_SEC) {
|
|
21109
21143
|
return { top: cached.top, book: cached.book };
|
|
21110
21144
|
}
|
|
21111
21145
|
return { top: null, book: null };
|
|
@@ -21113,17 +21147,17 @@ async function fetchTopAndBookWithFallback(source, chainId, marketId, nowSec7) {
|
|
|
21113
21147
|
async function fetchMidnightMarkets(chainId, source = createMidnightBookSource(chainId)) {
|
|
21114
21148
|
const markets = midnightMarketsByChain(chainId);
|
|
21115
21149
|
if (markets.length === 0) return [];
|
|
21116
|
-
const
|
|
21150
|
+
const nowSec9 = Math.floor(Date.now() / 1e3);
|
|
21117
21151
|
return Promise.all(
|
|
21118
21152
|
markets.map(async (config) => {
|
|
21119
|
-
if (Number(config.maturity) <=
|
|
21153
|
+
if (Number(config.maturity) <= nowSec9) {
|
|
21120
21154
|
return { config, top: null, book: null };
|
|
21121
21155
|
}
|
|
21122
21156
|
const { top, book } = await fetchTopAndBookWithFallback(
|
|
21123
21157
|
source,
|
|
21124
21158
|
chainId,
|
|
21125
21159
|
config.marketId,
|
|
21126
|
-
|
|
21160
|
+
nowSec9
|
|
21127
21161
|
);
|
|
21128
21162
|
return { config, top, book };
|
|
21129
21163
|
})
|
|
@@ -21230,9 +21264,9 @@ function midnightLenderKey(marketId) {
|
|
|
21230
21264
|
return "MORPHO_MIDNIGHT_" + marketId.slice(2).toUpperCase();
|
|
21231
21265
|
}
|
|
21232
21266
|
function currencyFor(address, decimals, tokens) {
|
|
21233
|
-
const
|
|
21234
|
-
return tokens[
|
|
21235
|
-
address:
|
|
21267
|
+
const lower3 = address.toLowerCase();
|
|
21268
|
+
return tokens[lower3] ?? {
|
|
21269
|
+
address: lower3,
|
|
21236
21270
|
symbol: "",
|
|
21237
21271
|
name: "",
|
|
21238
21272
|
decimals
|
|
@@ -21470,7 +21504,7 @@ var toBig3 = (v) => {
|
|
|
21470
21504
|
return 0n;
|
|
21471
21505
|
}
|
|
21472
21506
|
};
|
|
21473
|
-
function pickAuction(rows,
|
|
21507
|
+
function pickAuction(rows, nowSec9 = Math.floor(Date.now() / 1e3)) {
|
|
21474
21508
|
if (!Array.isArray(rows) || rows.length === 0) return null;
|
|
21475
21509
|
const live = rows.filter((a) => a && !a.delisted && !a.nonViableAuction).map((a) => ({
|
|
21476
21510
|
id: String(a.id ?? ""),
|
|
@@ -21481,7 +21515,7 @@ function pickAuction(rows, nowSec7 = Math.floor(Date.now() / 1e3)) {
|
|
|
21481
21515
|
minOfferAmount: String(a.auctionMinOfferAmount ?? "0"),
|
|
21482
21516
|
maxBidPriceWad: String(a.auctionMaxBidPrice ?? "0"),
|
|
21483
21517
|
maxOfferPriceWad: String(a.auctionMaxOfferPrice ?? "0")
|
|
21484
|
-
})).filter((a) => a.endTime >
|
|
21518
|
+
})).filter((a) => a.endTime > nowSec9).sort((a, b) => a.endTime - b.endTime);
|
|
21485
21519
|
return live[0] ?? null;
|
|
21486
21520
|
}
|
|
21487
21521
|
var TermSubgraphSource = class {
|
|
@@ -21704,7 +21738,7 @@ function createTermBookSource(chainId, fetchImpl = fetch) {
|
|
|
21704
21738
|
var TERM_BOOK_LEVELS = 20;
|
|
21705
21739
|
var LKG_TTL_SEC2 = 30 * 60;
|
|
21706
21740
|
var lastGood2 = /* @__PURE__ */ new Map();
|
|
21707
|
-
async function fetchTopAndBookWithFallback2(source, chainId, config,
|
|
21741
|
+
async function fetchTopAndBookWithFallback2(source, chainId, config, nowSec9) {
|
|
21708
21742
|
const key = `${chainId}:${config.termRepoId}`;
|
|
21709
21743
|
let fresh = null;
|
|
21710
21744
|
if (source.getTopAndBook) {
|
|
@@ -21718,13 +21752,13 @@ async function fetchTopAndBookWithFallback2(source, chainId, config, nowSec7) {
|
|
|
21718
21752
|
top: fresh.top,
|
|
21719
21753
|
book: fresh.book,
|
|
21720
21754
|
auction: fresh.auction ?? null,
|
|
21721
|
-
at:
|
|
21755
|
+
at: nowSec9
|
|
21722
21756
|
});
|
|
21723
21757
|
return { top: fresh.top, book: fresh.book, auction: fresh.auction ?? null };
|
|
21724
21758
|
}
|
|
21725
21759
|
const cached = lastGood2.get(key);
|
|
21726
|
-
if (cached &&
|
|
21727
|
-
const stillOpen = cached.auction && cached.auction.endTime >
|
|
21760
|
+
if (cached && nowSec9 - cached.at <= LKG_TTL_SEC2) {
|
|
21761
|
+
const stillOpen = cached.auction && cached.auction.endTime > nowSec9 ? cached.auction : null;
|
|
21728
21762
|
return { top: cached.top, book: cached.book, auction: stillOpen };
|
|
21729
21763
|
}
|
|
21730
21764
|
return { top: null, book: null, auction: null };
|
|
@@ -21732,17 +21766,17 @@ async function fetchTopAndBookWithFallback2(source, chainId, config, nowSec7) {
|
|
|
21732
21766
|
async function fetchTermMarkets(chainId, source = createTermBookSource(chainId)) {
|
|
21733
21767
|
const markets = termMarketsByChain(chainId);
|
|
21734
21768
|
if (markets.length === 0) return [];
|
|
21735
|
-
const
|
|
21769
|
+
const nowSec9 = Math.floor(Date.now() / 1e3);
|
|
21736
21770
|
return Promise.all(
|
|
21737
21771
|
markets.map(async (config) => {
|
|
21738
|
-
if (Number(config.maturity) <=
|
|
21772
|
+
if (Number(config.maturity) <= nowSec9) {
|
|
21739
21773
|
return { config, top: null, book: null, auction: null };
|
|
21740
21774
|
}
|
|
21741
21775
|
const { top, book, auction } = await fetchTopAndBookWithFallback2(
|
|
21742
21776
|
source,
|
|
21743
21777
|
chainId,
|
|
21744
21778
|
config,
|
|
21745
|
-
|
|
21779
|
+
nowSec9
|
|
21746
21780
|
);
|
|
21747
21781
|
return { config, top, book, auction };
|
|
21748
21782
|
})
|
|
@@ -21849,8 +21883,8 @@ function toFixedTermAuction(auction, now, matured = false) {
|
|
|
21849
21883
|
};
|
|
21850
21884
|
}
|
|
21851
21885
|
function currencyFor2(address, decimals, tokens) {
|
|
21852
|
-
const
|
|
21853
|
-
return tokens[
|
|
21886
|
+
const lower3 = address.toLowerCase();
|
|
21887
|
+
return tokens[lower3] ?? { address: lower3, symbol: "", name: "", decimals };
|
|
21854
21888
|
}
|
|
21855
21889
|
function convertTermMarketsToResponse(raw, chainId, prices = {}, _additionalYields = {
|
|
21856
21890
|
intrinsicYields: {},
|
|
@@ -22100,8 +22134,8 @@ function toHuman(raw, decimals) {
|
|
|
22100
22134
|
return Number(raw) / 10 ** decimals;
|
|
22101
22135
|
}
|
|
22102
22136
|
function currencyFor3(address, decimals, symbol, tokens) {
|
|
22103
|
-
const
|
|
22104
|
-
return tokens[
|
|
22137
|
+
const lower3 = address.toLowerCase();
|
|
22138
|
+
return tokens[lower3] ?? { address: lower3, symbol, name: symbol, decimals };
|
|
22105
22139
|
}
|
|
22106
22140
|
function convertExactlyMarketsToResponse(raw, chainId, prices = {}, _additionalYields = {
|
|
22107
22141
|
intrinsicYields: {},
|
|
@@ -22371,8 +22405,8 @@ function toHuman2(raw, decimals) {
|
|
|
22371
22405
|
return Number(raw) / 10 ** decimals;
|
|
22372
22406
|
}
|
|
22373
22407
|
function currencyFor4(address, decimals, symbol, tokens) {
|
|
22374
|
-
const
|
|
22375
|
-
return tokens[
|
|
22408
|
+
const lower3 = address.toLowerCase();
|
|
22409
|
+
return tokens[lower3] ?? { address: lower3, symbol, name: symbol, decimals };
|
|
22376
22410
|
}
|
|
22377
22411
|
function convertLiquityMarketsToResponse(raw, chainId, prices = {}, _additionalYields = {
|
|
22378
22412
|
intrinsicYields: {},
|
|
@@ -22648,8 +22682,8 @@ function toHuman3(raw, decimals) {
|
|
|
22648
22682
|
return Number(raw) / 10 ** decimals;
|
|
22649
22683
|
}
|
|
22650
22684
|
function currencyFor5(address, decimals, symbol, tokens) {
|
|
22651
|
-
const
|
|
22652
|
-
return tokens[
|
|
22685
|
+
const lower3 = address.toLowerCase();
|
|
22686
|
+
return tokens[lower3] ?? { address: lower3, symbol, name: symbol, decimals };
|
|
22653
22687
|
}
|
|
22654
22688
|
function convertRiverMarketsToResponse(raw, chainId, prices = {}, _additionalYields = {
|
|
22655
22689
|
intrinsicYields: {},
|
|
@@ -22878,7 +22912,7 @@ async function fetchTellerMarkets(chainId) {
|
|
|
22878
22912
|
} catch {
|
|
22879
22913
|
return { chainId, pools: [] };
|
|
22880
22914
|
}
|
|
22881
|
-
const
|
|
22915
|
+
const big7 = (i) => {
|
|
22882
22916
|
const r = results[i];
|
|
22883
22917
|
if (typeof r === "bigint") return r;
|
|
22884
22918
|
if (typeof r === "number") return BigInt(r);
|
|
@@ -22891,21 +22925,21 @@ async function fetchTellerMarkets(chainId) {
|
|
|
22891
22925
|
}
|
|
22892
22926
|
return null;
|
|
22893
22927
|
};
|
|
22894
|
-
const
|
|
22895
|
-
const b =
|
|
22928
|
+
const num9 = (i) => {
|
|
22929
|
+
const b = big7(i);
|
|
22896
22930
|
return b === null ? null : Number(b);
|
|
22897
22931
|
};
|
|
22898
22932
|
const pool0 = pools.map((config, i) => {
|
|
22899
22933
|
const base = i * READS_PER_POOL;
|
|
22900
22934
|
return {
|
|
22901
22935
|
config,
|
|
22902
|
-
available:
|
|
22903
|
-
committed:
|
|
22904
|
-
minRateBps:
|
|
22905
|
-
collateralPerPrincipal:
|
|
22906
|
-
maxLoanDuration:
|
|
22907
|
-
marketId:
|
|
22908
|
-
totalAssets:
|
|
22936
|
+
available: big7(base),
|
|
22937
|
+
committed: big7(base + 1),
|
|
22938
|
+
minRateBps: num9(base + 2),
|
|
22939
|
+
collateralPerPrincipal: big7(base + 3),
|
|
22940
|
+
maxLoanDuration: num9(base + 4),
|
|
22941
|
+
marketId: big7(base + 5),
|
|
22942
|
+
totalAssets: big7(base + 6)
|
|
22909
22943
|
};
|
|
22910
22944
|
});
|
|
22911
22945
|
const attByMarket = /* @__PURE__ */ new Map();
|
|
@@ -22976,6 +23010,240 @@ async function fetchTellerMarkets(chainId) {
|
|
|
22976
23010
|
});
|
|
22977
23011
|
return { chainId, pools: out };
|
|
22978
23012
|
}
|
|
23013
|
+
var DEFAULT_TERMMAX_API = "https://api.termmax.ts.finance";
|
|
23014
|
+
var warn3 = (...args) => {
|
|
23015
|
+
};
|
|
23016
|
+
function termMaxApiBase(chainId) {
|
|
23017
|
+
return termMaxApiBaseUrl(chainId) || DEFAULT_TERMMAX_API;
|
|
23018
|
+
}
|
|
23019
|
+
var toBig4 = (v) => {
|
|
23020
|
+
try {
|
|
23021
|
+
if (v == null) return 0n;
|
|
23022
|
+
if (typeof v === "bigint") return v;
|
|
23023
|
+
if (typeof v === "number") return BigInt(Math.trunc(v));
|
|
23024
|
+
const s = String(v).trim();
|
|
23025
|
+
if (s === "") return 0n;
|
|
23026
|
+
return BigInt(s.includes(".") ? s.slice(0, s.indexOf(".")) : s);
|
|
23027
|
+
} catch {
|
|
23028
|
+
return 0n;
|
|
23029
|
+
}
|
|
23030
|
+
};
|
|
23031
|
+
var toNum2 = (v) => {
|
|
23032
|
+
const n = Number(v);
|
|
23033
|
+
return Number.isFinite(n) ? n : 0;
|
|
23034
|
+
};
|
|
23035
|
+
var lower = (v) => String(v ?? "").toLowerCase();
|
|
23036
|
+
function parseCuts(raw) {
|
|
23037
|
+
if (!Array.isArray(raw)) return [];
|
|
23038
|
+
return raw.map((c) => ({
|
|
23039
|
+
xtReserve: toBig4(c?.xtReserve),
|
|
23040
|
+
liqSquare: toBig4(c?.liqSquare),
|
|
23041
|
+
offset: toBig4(c?.offset)
|
|
23042
|
+
}));
|
|
23043
|
+
}
|
|
23044
|
+
function parseFeeConfig(raw) {
|
|
23045
|
+
if (!raw) return void 0;
|
|
23046
|
+
return {
|
|
23047
|
+
lendTakerFeeRatio: toBig4(raw.lendTakerFeeRatio),
|
|
23048
|
+
lendMakerFeeRatio: toBig4(raw.lendMakerFeeRatio),
|
|
23049
|
+
borrowTakerFeeRatio: toBig4(raw.borrowTakerFeeRatio),
|
|
23050
|
+
borrowMakerFeeRatio: toBig4(raw.borrowMakerFeeRatio),
|
|
23051
|
+
mintGtFeeRatio: toBig4(raw.mintGtFeeRatio),
|
|
23052
|
+
mintGtFeeRef: toBig4(raw.mintGtFeeRef)
|
|
23053
|
+
};
|
|
23054
|
+
}
|
|
23055
|
+
function toUnix(iso) {
|
|
23056
|
+
if (typeof iso === "number") return Math.trunc(iso);
|
|
23057
|
+
const t = Date.parse(String(iso ?? ""));
|
|
23058
|
+
return Number.isFinite(t) ? Math.floor(t / 1e3) : 0;
|
|
23059
|
+
}
|
|
23060
|
+
function parseMarket(raw, assetDecimals) {
|
|
23061
|
+
const c = raw?.contracts;
|
|
23062
|
+
if (!c?.marketAddr || !c?.underlyingAddr || !c?.collateralAddr) return null;
|
|
23063
|
+
const debtToken = lower(c.underlyingAddr);
|
|
23064
|
+
const collateral = lower(c.collateralAddr);
|
|
23065
|
+
return {
|
|
23066
|
+
market: lower(c.marketAddr),
|
|
23067
|
+
ft: lower(c.ftAddr),
|
|
23068
|
+
xt: lower(c.xtAddr),
|
|
23069
|
+
gt: lower(c.gtAddr),
|
|
23070
|
+
debtToken,
|
|
23071
|
+
debtDecimals: assetDecimals.get(debtToken) ?? 18,
|
|
23072
|
+
collateral,
|
|
23073
|
+
collateralDecimals: assetDecimals.get(collateral) ?? 18,
|
|
23074
|
+
symbol: raw.symbol,
|
|
23075
|
+
maturity: toUnix(raw.maturity),
|
|
23076
|
+
maxLtv: String(raw.maxLtv ?? "0"),
|
|
23077
|
+
liquidationLtv: String(raw.liquidationLtv ?? "0"),
|
|
23078
|
+
liquidatable: raw.liquidatable !== false,
|
|
23079
|
+
liquidationWindowSeconds: toNum2(raw.liquidationWindowSeconds) || void 0,
|
|
23080
|
+
version: raw.version,
|
|
23081
|
+
feeConfig: parseFeeConfig(raw.defaultFeeConfig),
|
|
23082
|
+
isMatured: raw.isMatured === true,
|
|
23083
|
+
isEnabled: raw.isEnabled !== false
|
|
23084
|
+
};
|
|
23085
|
+
}
|
|
23086
|
+
function parseOrder(raw) {
|
|
23087
|
+
const oc = raw?.orderConfig?.contracts ?? raw?.orderInfo;
|
|
23088
|
+
const orderAddress = lower(oc?.orderAddr ?? raw?.orderInfo?.orderAddress);
|
|
23089
|
+
const marketAddress = lower(oc?.marketAddr ?? raw?.orderInfo?.marketAddress);
|
|
23090
|
+
if (!orderAddress || !marketAddress) return null;
|
|
23091
|
+
const state = raw?.orderInfo?.contractState ?? raw?.contractState ?? {};
|
|
23092
|
+
const meta = raw?.metadata ?? {};
|
|
23093
|
+
const term = raw?.priceInfo?.term ?? {};
|
|
23094
|
+
return {
|
|
23095
|
+
orderAddress,
|
|
23096
|
+
marketAddress,
|
|
23097
|
+
makerAddress: raw?.orderConfig?.makerAddress ? lower(raw.orderConfig.makerAddress) : void 0,
|
|
23098
|
+
makerIsVault: state.makerIsVault === true,
|
|
23099
|
+
virtualXtReserve: toBig4(state.virtualXtReserve),
|
|
23100
|
+
ftReserve: toBig4(state.ftReserve),
|
|
23101
|
+
xtReserve: toBig4(state.xtReserve),
|
|
23102
|
+
maxXtReserve: toBig4(state.maxXtReserve),
|
|
23103
|
+
gtId: toBig4(state.gtId),
|
|
23104
|
+
// ── the crossing ──
|
|
23105
|
+
takerLendCuts: parseCuts(state.borrowCurve),
|
|
23106
|
+
takerBorrowCuts: parseCuts(state.lendCurve),
|
|
23107
|
+
takerLendApr: term?.bcft?.apr != null ? toNum2(term.bcft.apr) : void 0,
|
|
23108
|
+
takerBorrowApr: term?.lcft?.apr != null ? toNum2(term.lcft.apr) : void 0,
|
|
23109
|
+
feeConfig: parseFeeConfig(state.feeConfig),
|
|
23110
|
+
lendCapacityUsd: toNum2(meta.lendCapacityValue),
|
|
23111
|
+
borrowCapacityUsd: toNum2(meta.borrowCapacityValue),
|
|
23112
|
+
lendCapacityAmount: toNum2(meta.lendCapacityAmount),
|
|
23113
|
+
borrowCapacityAmount: toNum2(meta.borrowCapacityAmount)
|
|
23114
|
+
};
|
|
23115
|
+
}
|
|
23116
|
+
function reduceTop2(orders) {
|
|
23117
|
+
let bestLendApr;
|
|
23118
|
+
let bestBorrowApr;
|
|
23119
|
+
let lendDepthUsd = 0;
|
|
23120
|
+
let borrowDepthUsd = 0;
|
|
23121
|
+
let lendDepthAmount = 0;
|
|
23122
|
+
let borrowDepthAmount = 0;
|
|
23123
|
+
for (const o of orders) {
|
|
23124
|
+
lendDepthUsd += o.lendCapacityUsd;
|
|
23125
|
+
borrowDepthUsd += o.borrowCapacityUsd;
|
|
23126
|
+
lendDepthAmount += o.lendCapacityAmount;
|
|
23127
|
+
borrowDepthAmount += o.borrowCapacityAmount;
|
|
23128
|
+
if (o.takerLendApr != null && o.takerLendApr > 0 && o.lendCapacityUsd > 0) {
|
|
23129
|
+
if (bestLendApr === void 0 || o.takerLendApr > bestLendApr) {
|
|
23130
|
+
bestLendApr = o.takerLendApr;
|
|
23131
|
+
}
|
|
23132
|
+
}
|
|
23133
|
+
if (o.takerBorrowApr != null && o.takerBorrowApr > 0 && o.borrowCapacityUsd > 0) {
|
|
23134
|
+
if (bestBorrowApr === void 0 || o.takerBorrowApr < bestBorrowApr) {
|
|
23135
|
+
bestBorrowApr = o.takerBorrowApr;
|
|
23136
|
+
}
|
|
23137
|
+
}
|
|
23138
|
+
}
|
|
23139
|
+
return {
|
|
23140
|
+
bestLendApr,
|
|
23141
|
+
bestBorrowApr,
|
|
23142
|
+
lendDepthUsd,
|
|
23143
|
+
borrowDepthUsd,
|
|
23144
|
+
lendDepthAmount,
|
|
23145
|
+
borrowDepthAmount
|
|
23146
|
+
};
|
|
23147
|
+
}
|
|
23148
|
+
var TermMaxApiSource = class {
|
|
23149
|
+
baseUrl;
|
|
23150
|
+
fetchImpl;
|
|
23151
|
+
constructor(baseUrl, fetchImpl = fetch) {
|
|
23152
|
+
this.baseUrl = baseUrl.replace(/\/+$/, "");
|
|
23153
|
+
this.fetchImpl = (input, init) => fetchImpl.call(globalThis, input, init);
|
|
23154
|
+
}
|
|
23155
|
+
async getChainMarkets(chainId) {
|
|
23156
|
+
const url = `${this.baseUrl}/market/data?chainId=${chainId}`;
|
|
23157
|
+
let json;
|
|
23158
|
+
try {
|
|
23159
|
+
const res = await this.fetchImpl(url);
|
|
23160
|
+
if (!res.ok) {
|
|
23161
|
+
warn3(`market/data ${chainId} \u2192 HTTP ${res.status}`);
|
|
23162
|
+
return null;
|
|
23163
|
+
}
|
|
23164
|
+
json = await res.json();
|
|
23165
|
+
} catch (e) {
|
|
23166
|
+
warn3(`market/data ${chainId} fetch failed:`, e?.message ?? e);
|
|
23167
|
+
return null;
|
|
23168
|
+
}
|
|
23169
|
+
const data = json?.data ?? json;
|
|
23170
|
+
if (!data) return null;
|
|
23171
|
+
const assetDecimals = /* @__PURE__ */ new Map();
|
|
23172
|
+
for (const a of Array.isArray(data.assetConfigs) ? data.assetConfigs : []) {
|
|
23173
|
+
const addr2 = lower(a?.assetAddress);
|
|
23174
|
+
const dec = Number(a?.assetDecimals);
|
|
23175
|
+
if (addr2 && Number.isFinite(dec)) assetDecimals.set(addr2, dec);
|
|
23176
|
+
}
|
|
23177
|
+
const markets = [];
|
|
23178
|
+
for (const m of Array.isArray(data.markets) ? data.markets : []) {
|
|
23179
|
+
const parsed = parseMarket(m, assetDecimals);
|
|
23180
|
+
if (parsed && parsed.isEnabled && !parsed.isMatured) markets.push(parsed);
|
|
23181
|
+
}
|
|
23182
|
+
if (markets.length === 0) return [];
|
|
23183
|
+
const ordersByMarket = /* @__PURE__ */ new Map();
|
|
23184
|
+
for (const o of Array.isArray(data.orders) ? data.orders : []) {
|
|
23185
|
+
const parsed = parseOrder(o);
|
|
23186
|
+
if (!parsed) continue;
|
|
23187
|
+
const list = ordersByMarket.get(parsed.marketAddress);
|
|
23188
|
+
if (list) list.push(parsed);
|
|
23189
|
+
else ordersByMarket.set(parsed.marketAddress, [parsed]);
|
|
23190
|
+
}
|
|
23191
|
+
return markets.map((config) => {
|
|
23192
|
+
const orders = ordersByMarket.get(config.market) ?? [];
|
|
23193
|
+
return { config, top: reduceTop2(orders), orders };
|
|
23194
|
+
});
|
|
23195
|
+
}
|
|
23196
|
+
};
|
|
23197
|
+
function createTermMaxDataSource(chainId, fetchImpl = fetch) {
|
|
23198
|
+
return new TermMaxApiSource(termMaxApiBase(chainId), fetchImpl);
|
|
23199
|
+
}
|
|
23200
|
+
|
|
23201
|
+
// src/lending/public-data/termmax/fetchPublic.ts
|
|
23202
|
+
var LKG_TTL_SEC3 = 30 * 60;
|
|
23203
|
+
var lastGood3 = /* @__PURE__ */ new Map();
|
|
23204
|
+
var MARKET_CACHE_TTL_MS = 10 * 6e4;
|
|
23205
|
+
var marketCache = /* @__PURE__ */ new Map();
|
|
23206
|
+
var marketKey = (chainId, market) => `${chainId}:${market.toLowerCase()}`;
|
|
23207
|
+
function rememberMarkets(chainId, raw) {
|
|
23208
|
+
const at = Date.now();
|
|
23209
|
+
for (const { config } of raw) {
|
|
23210
|
+
marketCache.set(marketKey(chainId, config.market), { config, at });
|
|
23211
|
+
}
|
|
23212
|
+
}
|
|
23213
|
+
function getCachedTermMaxMarket(chainId, market) {
|
|
23214
|
+
const hit = marketCache.get(marketKey(chainId, market));
|
|
23215
|
+
if (!hit || Date.now() - hit.at > MARKET_CACHE_TTL_MS) return void 0;
|
|
23216
|
+
return hit.config;
|
|
23217
|
+
}
|
|
23218
|
+
function getCachedTermMaxMarkets(chainId) {
|
|
23219
|
+
const prefix = `${chainId}:`;
|
|
23220
|
+
const now = Date.now();
|
|
23221
|
+
const out = [];
|
|
23222
|
+
for (const [key, hit] of marketCache) {
|
|
23223
|
+
if (!key.startsWith(prefix)) continue;
|
|
23224
|
+
if (now - hit.at > MARKET_CACHE_TTL_MS) continue;
|
|
23225
|
+
out.push(hit.config);
|
|
23226
|
+
}
|
|
23227
|
+
return out;
|
|
23228
|
+
}
|
|
23229
|
+
async function fetchTermMaxMarkets(chainId, source = createTermMaxDataSource(chainId)) {
|
|
23230
|
+
if (!termMaxConfigByChain(chainId)) return [];
|
|
23231
|
+
const nowSec9 = Math.floor(Date.now() / 1e3);
|
|
23232
|
+
const fresh = await source.getChainMarkets(chainId).catch(() => null);
|
|
23233
|
+
if (fresh) {
|
|
23234
|
+
const live = fresh.filter((m) => m.config.maturity > nowSec9);
|
|
23235
|
+
lastGood3.set(chainId, { markets: live, at: nowSec9 });
|
|
23236
|
+
rememberMarkets(chainId, live);
|
|
23237
|
+
return live;
|
|
23238
|
+
}
|
|
23239
|
+
const cached = lastGood3.get(chainId);
|
|
23240
|
+
if (cached && nowSec9 - cached.at <= LKG_TTL_SEC3) {
|
|
23241
|
+
const live = cached.markets.filter((m) => m.config.maturity > nowSec9);
|
|
23242
|
+
rememberMarkets(chainId, live);
|
|
23243
|
+
return live;
|
|
23244
|
+
}
|
|
23245
|
+
return [];
|
|
23246
|
+
}
|
|
22979
23247
|
|
|
22980
23248
|
// src/lending/public-data/teller/math.ts
|
|
22981
23249
|
function tellerBpsToPercent(bps) {
|
|
@@ -23006,8 +23274,8 @@ function tellerPoolFromLenderKey(lender) {
|
|
|
23006
23274
|
return body.length === 40 ? "0x" + body.toLowerCase() : void 0;
|
|
23007
23275
|
}
|
|
23008
23276
|
function currencyFor6(address, decimals, symbol, tokens) {
|
|
23009
|
-
const
|
|
23010
|
-
return tokens[
|
|
23277
|
+
const lower3 = address.toLowerCase();
|
|
23278
|
+
return tokens[lower3] ?? { address: lower3, symbol, name: symbol, decimals };
|
|
23011
23279
|
}
|
|
23012
23280
|
function fmtDuration2(sec) {
|
|
23013
23281
|
if (sec == null || sec <= 0) return "a short window";
|
|
@@ -23016,9 +23284,9 @@ function fmtDuration2(sec) {
|
|
|
23016
23284
|
return `${Math.round(sec / 86400)} day${sec < 172800 ? "" : "s"}`;
|
|
23017
23285
|
}
|
|
23018
23286
|
function priceFor(address, chainId, tokens, prices) {
|
|
23019
|
-
const
|
|
23020
|
-
const token = tokens[
|
|
23021
|
-
const key = toOracleKey(token?.assetGroup) || toGenericPriceKey(
|
|
23287
|
+
const lower3 = address.toLowerCase();
|
|
23288
|
+
const token = tokens[lower3];
|
|
23289
|
+
const key = toOracleKey(token?.assetGroup) || toGenericPriceKey(lower3, chainId);
|
|
23022
23290
|
return prices[key] ?? 0;
|
|
23023
23291
|
}
|
|
23024
23292
|
function convertTellerMarketsToResponse(raw, chainId, prices = {}, _additionalYields = {
|
|
@@ -23267,6 +23535,615 @@ function convertTellerMarketsToResponse(raw, chainId, prices = {}, _additionalYi
|
|
|
23267
23535
|
return out;
|
|
23268
23536
|
}
|
|
23269
23537
|
|
|
23538
|
+
// src/lending/public-data/termmax/math.ts
|
|
23539
|
+
var DECIMAL_BASE = 100000000n;
|
|
23540
|
+
var DAYS_IN_YEAR2 = 365n;
|
|
23541
|
+
var SECONDS_IN_DAY = 86400n;
|
|
23542
|
+
var MAX_FEE_RATIO = 20000000n;
|
|
23543
|
+
function daysToMaturity(maturity, nowSec9) {
|
|
23544
|
+
const remaining = BigInt(Math.trunc(maturity)) - BigInt(Math.trunc(nowSec9));
|
|
23545
|
+
if (remaining <= 0n) return 0n;
|
|
23546
|
+
return (remaining + SECONDS_IN_DAY - 1n) / SECONDS_IN_DAY;
|
|
23547
|
+
}
|
|
23548
|
+
function calcCutId(cuts, xtReserve) {
|
|
23549
|
+
let id = cuts.length;
|
|
23550
|
+
while (id > 0) {
|
|
23551
|
+
id--;
|
|
23552
|
+
if (xtReserve >= cuts[id].xtReserve) return id;
|
|
23553
|
+
}
|
|
23554
|
+
return cuts.length > 0 ? 0 : -1;
|
|
23555
|
+
}
|
|
23556
|
+
function intervalProps(netInterestFactor, days, cut, xtReserve) {
|
|
23557
|
+
if (days <= 0n) return null;
|
|
23558
|
+
const liqSquare = cut.liqSquare * days * netInterestFactor / (DAYS_IN_YEAR2 * DECIMAL_BASE);
|
|
23559
|
+
const vXtReserve = xtReserve + cut.offset;
|
|
23560
|
+
if (vXtReserve <= 0n) return null;
|
|
23561
|
+
return { liqSquare, vXtReserve, vFtReserve: liqSquare / vXtReserve };
|
|
23562
|
+
}
|
|
23563
|
+
function curveApr(cuts, virtualXtReserve, days) {
|
|
23564
|
+
if (cuts.length === 0 || days <= 0n) return 0n;
|
|
23565
|
+
const id = calcCutId(cuts, virtualXtReserve);
|
|
23566
|
+
if (id < 0) return 0n;
|
|
23567
|
+
const props = intervalProps(DECIMAL_BASE, days, cuts[id], virtualXtReserve);
|
|
23568
|
+
if (!props || props.vXtReserve === 0n) return 0n;
|
|
23569
|
+
return props.vFtReserve * DECIMAL_BASE * DAYS_IN_YEAR2 / (props.vXtReserve * days);
|
|
23570
|
+
}
|
|
23571
|
+
function ratioToNumber(v) {
|
|
23572
|
+
return Number(v) / Number(DECIMAL_BASE);
|
|
23573
|
+
}
|
|
23574
|
+
function ratioToPercent(v) {
|
|
23575
|
+
return Number(v) / Number(DECIMAL_BASE) * 100;
|
|
23576
|
+
}
|
|
23577
|
+
function curveAprNumber(cuts, virtualXtReserve, days) {
|
|
23578
|
+
return ratioToNumber(curveApr(cuts, virtualXtReserve, days));
|
|
23579
|
+
}
|
|
23580
|
+
function lendNif(fee) {
|
|
23581
|
+
const f = fee?.lendTakerFeeRatio ?? 0n;
|
|
23582
|
+
const nif = DECIMAL_BASE - (f > MAX_FEE_RATIO ? MAX_FEE_RATIO : f);
|
|
23583
|
+
return nif > 0n ? nif : DECIMAL_BASE;
|
|
23584
|
+
}
|
|
23585
|
+
function borrowNif(fee) {
|
|
23586
|
+
const f = fee?.borrowTakerFeeRatio ?? 0n;
|
|
23587
|
+
return DECIMAL_BASE + (f > MAX_FEE_RATIO ? MAX_FEE_RATIO : f);
|
|
23588
|
+
}
|
|
23589
|
+
function mintGtFeeRatio(fee, days) {
|
|
23590
|
+
if (!fee || days <= 0n) return 0n;
|
|
23591
|
+
const ratio = fee.mintGtFeeRatio ?? 0n;
|
|
23592
|
+
const ref = fee.mintGtFeeRef ?? 0n;
|
|
23593
|
+
const denom = DAYS_IN_YEAR2 * DECIMAL_BASE + ref * days;
|
|
23594
|
+
if (denom === 0n) return 0n;
|
|
23595
|
+
return days * ratio * ref / denom;
|
|
23596
|
+
}
|
|
23597
|
+
var TERMMAX_LIQUIDATION_PENALTY = 0.1;
|
|
23598
|
+
var TERMMAX_LIQUIDATOR_BONUS = 0.05;
|
|
23599
|
+
var TERMMAX_PARTIAL_LIQUIDATION_THRESHOLD_USD = 1e4;
|
|
23600
|
+
var TERMMAX_PARTIAL_CLOSE_FACTOR = 0.5;
|
|
23601
|
+
var TERMMAX_LIQUIDATION_WINDOW_SECS = 7200;
|
|
23602
|
+
function parseTermMaxLtv(v) {
|
|
23603
|
+
if (v === void 0 || v === null || v === "") return 0;
|
|
23604
|
+
try {
|
|
23605
|
+
return Number(BigInt(v)) / Number(DECIMAL_BASE);
|
|
23606
|
+
} catch {
|
|
23607
|
+
const n = Number(v);
|
|
23608
|
+
return Number.isFinite(n) ? n / Number(DECIMAL_BASE) : 0;
|
|
23609
|
+
}
|
|
23610
|
+
}
|
|
23611
|
+
|
|
23612
|
+
// src/lending/public-data/termmax/convertPublic.ts
|
|
23613
|
+
var nowSec4 = () => Math.floor(Date.now() / 1e3);
|
|
23614
|
+
function currencyFor7(address, decimals, tokens) {
|
|
23615
|
+
const lower3 = address.toLowerCase();
|
|
23616
|
+
return tokens[lower3] ?? {
|
|
23617
|
+
address: lower3,
|
|
23618
|
+
symbol: "",
|
|
23619
|
+
name: "",
|
|
23620
|
+
decimals
|
|
23621
|
+
};
|
|
23622
|
+
}
|
|
23623
|
+
function priceFor2(address, chainId, prices, tokens) {
|
|
23624
|
+
const asset = tokens[address];
|
|
23625
|
+
const key = toOracleKey(asset?.assetGroup) || toGenericPriceKey(address, chainId);
|
|
23626
|
+
return prices[key] ?? 0;
|
|
23627
|
+
}
|
|
23628
|
+
function convertTermMaxMarketsToResponse(raw, chainId, prices = {}, _additionalYields = {
|
|
23629
|
+
intrinsicYields: {},
|
|
23630
|
+
lenderRewards: {},
|
|
23631
|
+
loaded: true
|
|
23632
|
+
}, tokens = {}) {
|
|
23633
|
+
const out = {};
|
|
23634
|
+
const now = nowSec4();
|
|
23635
|
+
for (const { config, top, orders } of raw) {
|
|
23636
|
+
if (!config?.market || !config.debtToken || !config.collateral) continue;
|
|
23637
|
+
const m = termMaxLenderKey(config.market);
|
|
23638
|
+
const maturity = Number(config.maturity);
|
|
23639
|
+
const ttm = maturity - now;
|
|
23640
|
+
const matured = ttm <= 0;
|
|
23641
|
+
const days = daysToMaturity(maturity, now);
|
|
23642
|
+
const supplyAprPct = !matured ? (top?.bestLendApr ?? 0) * 100 : 0;
|
|
23643
|
+
const borrowAprPct = !matured ? (top?.bestBorrowApr ?? 0) * 100 : 0;
|
|
23644
|
+
const debtAddr = config.debtToken;
|
|
23645
|
+
const collAddr = config.collateral;
|
|
23646
|
+
priceFor2(debtAddr, chainId, prices, tokens);
|
|
23647
|
+
const collPrice = priceFor2(collAddr, chainId, prices, tokens);
|
|
23648
|
+
const supplyLiquidity = matured ? 0 : top?.lendDepthAmount ?? 0;
|
|
23649
|
+
const borrowLiquidity = matured ? 0 : top?.borrowDepthAmount ?? 0;
|
|
23650
|
+
const supplyLiquidityUSD = matured ? 0 : top?.lendDepthUsd ?? 0;
|
|
23651
|
+
const borrowLiquidityUSD = matured ? 0 : top?.borrowDepthUsd ?? 0;
|
|
23652
|
+
const maxLtv = parseTermMaxLtv(config.maxLtv);
|
|
23653
|
+
const liquidationLtv = parseTermMaxLtv(config.liquidationLtv);
|
|
23654
|
+
const closeFactor = borrowLiquidityUSD > TERMMAX_PARTIAL_LIQUIDATION_THRESHOLD_USD ? TERMMAX_PARTIAL_CLOSE_FACTOR : 1;
|
|
23655
|
+
const liquidationPenalty = config.liquidatable ? TERMMAX_LIQUIDATION_PENALTY : 0;
|
|
23656
|
+
const terms = borrowAprPct > 0 && !matured ? [
|
|
23657
|
+
{
|
|
23658
|
+
termId: maturity,
|
|
23659
|
+
durationSecs: Math.max(0, ttm),
|
|
23660
|
+
durationDays: ttm / 86400,
|
|
23661
|
+
apr: borrowAprPct
|
|
23662
|
+
}
|
|
23663
|
+
] : void 0;
|
|
23664
|
+
const originationFeePercent = ratioToPercent(
|
|
23665
|
+
mintGtFeeRatio(config.feeConfig, days)
|
|
23666
|
+
);
|
|
23667
|
+
const entry = { data: {} };
|
|
23668
|
+
const loanUid = createMarketUid(chainId, m, debtAddr);
|
|
23669
|
+
entry.data[loanUid] = {
|
|
23670
|
+
marketUid: loanUid,
|
|
23671
|
+
name: "Loan " + (tokens[debtAddr]?.symbol ?? ""),
|
|
23672
|
+
poolId: debtAddr,
|
|
23673
|
+
underlying: debtAddr,
|
|
23674
|
+
asset: currencyFor7(debtAddr, config.debtDecimals, tokens),
|
|
23675
|
+
totalDeposits: supplyLiquidity,
|
|
23676
|
+
totalDebtStable: 0,
|
|
23677
|
+
totalDebt: 0,
|
|
23678
|
+
totalLiquidity: borrowLiquidity,
|
|
23679
|
+
borrowLiquidity,
|
|
23680
|
+
totalLiquidityUSD: borrowLiquidityUSD,
|
|
23681
|
+
borrowLiquidityUSD,
|
|
23682
|
+
totalDepositsUSD: supplyLiquidityUSD,
|
|
23683
|
+
totalDebtStableUSD: 0,
|
|
23684
|
+
totalDebtUSD: 0,
|
|
23685
|
+
// No utilization curve — price comes from per-maker curves, not a pool.
|
|
23686
|
+
utilization: 0,
|
|
23687
|
+
depositRate: supplyAprPct,
|
|
23688
|
+
variableBorrowRate: borrowAprPct,
|
|
23689
|
+
rateModel: "fixedTerm",
|
|
23690
|
+
// Fixed-rate: mirror onto stableBorrowRate so fixed-rate consumers pick it
|
|
23691
|
+
// up as a term product.
|
|
23692
|
+
stableBorrowRate: borrowAprPct,
|
|
23693
|
+
intrinsicYield: 0,
|
|
23694
|
+
rewards: void 0,
|
|
23695
|
+
decimals: config.debtDecimals,
|
|
23696
|
+
config: {
|
|
23697
|
+
0: {
|
|
23698
|
+
category: 0,
|
|
23699
|
+
borrowCollateralFactor: 0,
|
|
23700
|
+
collateralFactor: 0,
|
|
23701
|
+
borrowFactor: 1,
|
|
23702
|
+
liquidationPenalty: 0,
|
|
23703
|
+
closeFactor,
|
|
23704
|
+
collateralDisabled: true,
|
|
23705
|
+
debtDisabled: false
|
|
23706
|
+
}
|
|
23707
|
+
},
|
|
23708
|
+
closeFactor,
|
|
23709
|
+
collateralActive: false,
|
|
23710
|
+
borrowingEnabled: !matured && borrowLiquidity > 0,
|
|
23711
|
+
depositsEnabled: !matured,
|
|
23712
|
+
hasStable: false,
|
|
23713
|
+
// Borrowing IS fixed-term (see `terms` + `fixedTerm`), but it is real
|
|
23714
|
+
// borrowing — do NOT set this, or borrowable-only filters hide the market.
|
|
23715
|
+
variableBorrowDisabled: false,
|
|
23716
|
+
isActive: true,
|
|
23717
|
+
isFrozen: false
|
|
23718
|
+
};
|
|
23719
|
+
const collUid = createMarketUid(chainId, m, collAddr);
|
|
23720
|
+
const collCapacityUSD = maxLtv > 0 ? borrowLiquidityUSD / maxLtv : borrowLiquidityUSD;
|
|
23721
|
+
const collCapacity = collPrice > 0 ? collCapacityUSD / collPrice : 0;
|
|
23722
|
+
entry.data[collUid] = {
|
|
23723
|
+
marketUid: collUid,
|
|
23724
|
+
name: "Collateral " + (tokens[collAddr]?.symbol ?? ""),
|
|
23725
|
+
poolId: collAddr,
|
|
23726
|
+
underlying: collAddr,
|
|
23727
|
+
asset: currencyFor7(collAddr, config.collateralDecimals, tokens),
|
|
23728
|
+
totalDeposits: collCapacity,
|
|
23729
|
+
totalDebtStable: 0,
|
|
23730
|
+
totalDebt: 0,
|
|
23731
|
+
totalLiquidity: collCapacity,
|
|
23732
|
+
borrowLiquidity: 0,
|
|
23733
|
+
totalLiquidityUSD: collCapacityUSD,
|
|
23734
|
+
borrowLiquidityUSD: 0,
|
|
23735
|
+
totalDepositsUSD: collCapacityUSD,
|
|
23736
|
+
totalDebtStableUSD: 0,
|
|
23737
|
+
totalDebtUSD: 0,
|
|
23738
|
+
utilization: 0,
|
|
23739
|
+
depositRate: 0,
|
|
23740
|
+
variableBorrowRate: 0,
|
|
23741
|
+
stableBorrowRate: 0,
|
|
23742
|
+
intrinsicYield: 0,
|
|
23743
|
+
rewards: void 0,
|
|
23744
|
+
decimals: config.collateralDecimals,
|
|
23745
|
+
config: {
|
|
23746
|
+
0: {
|
|
23747
|
+
category: 0,
|
|
23748
|
+
borrowCollateralFactor: liquidationLtv,
|
|
23749
|
+
collateralFactor: maxLtv,
|
|
23750
|
+
borrowFactor: 1,
|
|
23751
|
+
liquidationPenalty,
|
|
23752
|
+
closeFactor,
|
|
23753
|
+
collateralDisabled: false,
|
|
23754
|
+
debtDisabled: true
|
|
23755
|
+
}
|
|
23756
|
+
},
|
|
23757
|
+
closeFactor,
|
|
23758
|
+
collateralActive: true,
|
|
23759
|
+
borrowingEnabled: false,
|
|
23760
|
+
depositsEnabled: !matured,
|
|
23761
|
+
hasStable: false,
|
|
23762
|
+
isActive: true,
|
|
23763
|
+
isFrozen: false
|
|
23764
|
+
};
|
|
23765
|
+
entry.params = {
|
|
23766
|
+
market: {
|
|
23767
|
+
lender: m,
|
|
23768
|
+
name: config.symbol,
|
|
23769
|
+
loanDecimals: config.debtDecimals,
|
|
23770
|
+
collateralDecimals: config.collateralDecimals,
|
|
23771
|
+
id: config.market,
|
|
23772
|
+
lltv: config.liquidationLtv,
|
|
23773
|
+
oracle: config.oracle ?? zeroAddress,
|
|
23774
|
+
irm: zeroAddress,
|
|
23775
|
+
collateralAddress: collAddr,
|
|
23776
|
+
loanAddress: debtAddr,
|
|
23777
|
+
terms,
|
|
23778
|
+
// TermMax-specific extras consumed by the calldata / worker-api
|
|
23779
|
+
// resolvers. FT is the lend position, GT the borrow sub-account.
|
|
23780
|
+
maturity: String(config.maturity),
|
|
23781
|
+
ft: config.ft,
|
|
23782
|
+
xt: config.xt,
|
|
23783
|
+
gt: config.gt,
|
|
23784
|
+
maxLtv: config.maxLtv,
|
|
23785
|
+
liquidationLtv: config.liquidationLtv,
|
|
23786
|
+
liquidatable: config.liquidatable,
|
|
23787
|
+
liquidationWindowSeconds: config.liquidationWindowSeconds,
|
|
23788
|
+
version: config.version,
|
|
23789
|
+
// Executable order set, best-first per side — what a builder quotes
|
|
23790
|
+
// against. Depth caps are hard: an order can refuse beyond them.
|
|
23791
|
+
orders: orders.map((o) => ({
|
|
23792
|
+
order: o.orderAddress,
|
|
23793
|
+
maker: o.makerAddress,
|
|
23794
|
+
makerIsVault: o.makerIsVault,
|
|
23795
|
+
lendApr: o.takerLendApr,
|
|
23796
|
+
borrowApr: o.takerBorrowApr,
|
|
23797
|
+
lendCapacityUsd: o.lendCapacityUsd,
|
|
23798
|
+
borrowCapacityUsd: o.borrowCapacityUsd,
|
|
23799
|
+
lendCapacityAmount: o.lendCapacityAmount,
|
|
23800
|
+
borrowCapacityAmount: o.borrowCapacityAmount
|
|
23801
|
+
})),
|
|
23802
|
+
fixedTerm: {
|
|
23803
|
+
model: "termmax",
|
|
23804
|
+
maturity,
|
|
23805
|
+
fees: {
|
|
23806
|
+
// % of principal, charged once when the GT is minted.
|
|
23807
|
+
originationFeePercent
|
|
23808
|
+
},
|
|
23809
|
+
// Exit early by buying discounted FT and handing it back at par — a
|
|
23810
|
+
// market price, not a penalty. Same as Midnight.
|
|
23811
|
+
earlyRepay: { kind: "none" },
|
|
23812
|
+
// The term is an aggregate of many per-maker order contracts; there is
|
|
23813
|
+
// no single provider at the market level.
|
|
23814
|
+
provider: { kind: "orderbook" }
|
|
23815
|
+
}
|
|
23816
|
+
}
|
|
23817
|
+
};
|
|
23818
|
+
entry.chainId = chainId;
|
|
23819
|
+
out[m] = entry;
|
|
23820
|
+
}
|
|
23821
|
+
return out;
|
|
23822
|
+
}
|
|
23823
|
+
var FIXED_MARKETS_URL = "https://www.inverse.finance/api/f2/fixed-markets";
|
|
23824
|
+
var DBR_URL = "https://www.inverse.finance/api/dbr";
|
|
23825
|
+
var INVERSE_PUBLIC_READ_ABI = [
|
|
23826
|
+
...InverseMarketAbi,
|
|
23827
|
+
...InverseOracleAbi,
|
|
23828
|
+
...InverseDbrAbi,
|
|
23829
|
+
...Erc20Abi
|
|
23830
|
+
];
|
|
23831
|
+
var READS_PER_MARKET2 = 4;
|
|
23832
|
+
var fetchJson = async (url, timeoutMs = 6e3) => {
|
|
23833
|
+
const res = await fetch(url, {
|
|
23834
|
+
headers: { accept: "application/json" },
|
|
23835
|
+
signal: AbortSignal.timeout(timeoutMs)
|
|
23836
|
+
});
|
|
23837
|
+
if (!res.ok) throw new Error(`HTTP ${res.status}`);
|
|
23838
|
+
return res.json();
|
|
23839
|
+
};
|
|
23840
|
+
var fetchDbrPriceDola = async (snapshot) => {
|
|
23841
|
+
try {
|
|
23842
|
+
const d = await fetchJson(DBR_URL);
|
|
23843
|
+
const p = Number(d?.priceDola);
|
|
23844
|
+
if (Number.isFinite(p) && p > 0) return p;
|
|
23845
|
+
} catch {
|
|
23846
|
+
}
|
|
23847
|
+
const snap = Number(snapshot);
|
|
23848
|
+
return Number.isFinite(snap) && snap > 0 ? snap : null;
|
|
23849
|
+
};
|
|
23850
|
+
async function fetchInverseMarkets(lender, chainId) {
|
|
23851
|
+
const config = inverseConfigFor(lender, chainId);
|
|
23852
|
+
const chainData = inverseChainData(lender, chainId);
|
|
23853
|
+
const markets = chainData?.markets ?? [];
|
|
23854
|
+
const empty = {
|
|
23855
|
+
lender,
|
|
23856
|
+
config,
|
|
23857
|
+
chainData,
|
|
23858
|
+
dbrPriceDola: null,
|
|
23859
|
+
replenishmentPriceBps: null,
|
|
23860
|
+
markets: [],
|
|
23861
|
+
source: "none"
|
|
23862
|
+
};
|
|
23863
|
+
if (!config || markets.length === 0) return empty;
|
|
23864
|
+
const dbrPricePromise = fetchDbrPriceDola(config.dbrPriceDolaSnapshot);
|
|
23865
|
+
try {
|
|
23866
|
+
const api = await fetchJson(FIXED_MARKETS_URL);
|
|
23867
|
+
const byAddr = {};
|
|
23868
|
+
for (const m of api?.markets ?? []) {
|
|
23869
|
+
if (m?.address) byAddr[String(m.address).toLowerCase()] = m;
|
|
23870
|
+
}
|
|
23871
|
+
if (Object.keys(byAddr).length > 0) {
|
|
23872
|
+
const rows = markets.map((market) => {
|
|
23873
|
+
const m = byAddr[market.address.toLowerCase()];
|
|
23874
|
+
const num9 = (v) => typeof v === "number" && Number.isFinite(v) ? v : null;
|
|
23875
|
+
return {
|
|
23876
|
+
market,
|
|
23877
|
+
totalDebt: num9(m?.totalDebt),
|
|
23878
|
+
dolaLiquidity: num9(m?.dolaLiquidity),
|
|
23879
|
+
leftToBorrow: num9(m?.leftToBorrow),
|
|
23880
|
+
price: num9(m?.price),
|
|
23881
|
+
borrowPaused: typeof m?.borrowPaused === "boolean" ? m.borrowPaused : null,
|
|
23882
|
+
dailyBorrows: num9(m?.dailyBorrows)
|
|
23883
|
+
};
|
|
23884
|
+
});
|
|
23885
|
+
return {
|
|
23886
|
+
lender,
|
|
23887
|
+
config,
|
|
23888
|
+
chainData,
|
|
23889
|
+
dbrPriceDola: await dbrPricePromise,
|
|
23890
|
+
replenishmentPriceBps: num(api, "replenishmentPriceBps"),
|
|
23891
|
+
markets: rows,
|
|
23892
|
+
source: "api"
|
|
23893
|
+
};
|
|
23894
|
+
}
|
|
23895
|
+
} catch {
|
|
23896
|
+
}
|
|
23897
|
+
const calls = [
|
|
23898
|
+
{ address: config.dbr, name: "replenishmentPriceBps", params: [] },
|
|
23899
|
+
...markets.flatMap((m) => [
|
|
23900
|
+
{ address: m.address, name: "totalDebt", params: [] },
|
|
23901
|
+
{ address: m.address, name: "borrowPaused", params: [] },
|
|
23902
|
+
{ address: config.dola, name: "balanceOf", params: [m.address] },
|
|
23903
|
+
{
|
|
23904
|
+
address: config.oracle,
|
|
23905
|
+
name: "viewPrice",
|
|
23906
|
+
params: [m.collToken, BigInt(m.collateralFactorBps)]
|
|
23907
|
+
}
|
|
23908
|
+
])
|
|
23909
|
+
];
|
|
23910
|
+
try {
|
|
23911
|
+
const results = await multicallRetryUniversal({
|
|
23912
|
+
chain: chainId,
|
|
23913
|
+
calls,
|
|
23914
|
+
abi: INVERSE_PUBLIC_READ_ABI,
|
|
23915
|
+
allowFailure: true
|
|
23916
|
+
});
|
|
23917
|
+
const bigAt = (i) => {
|
|
23918
|
+
const r = results[i];
|
|
23919
|
+
if (typeof r === "bigint") return r;
|
|
23920
|
+
if (typeof r === "number") return BigInt(r);
|
|
23921
|
+
return null;
|
|
23922
|
+
};
|
|
23923
|
+
const debtDecimals = config.debtDecimals ?? 18;
|
|
23924
|
+
const rows = markets.map((market, i) => {
|
|
23925
|
+
const base = 1 + i * READS_PER_MARKET2;
|
|
23926
|
+
const totalDebt = bigAt(base);
|
|
23927
|
+
const paused = results[base + 1];
|
|
23928
|
+
const liq = bigAt(base + 2);
|
|
23929
|
+
const price2 = bigAt(base + 3);
|
|
23930
|
+
return {
|
|
23931
|
+
market,
|
|
23932
|
+
totalDebt: totalDebt !== null ? Number(totalDebt) / 10 ** debtDecimals : null,
|
|
23933
|
+
dolaLiquidity: liq !== null ? Number(liq) / 10 ** debtDecimals : null,
|
|
23934
|
+
// dailyBorrows lives on the BorrowController (day-bucketed
|
|
23935
|
+
// mapping) — the fallback conservatively caps by liquidity only.
|
|
23936
|
+
leftToBorrow: null,
|
|
23937
|
+
// viewPrice scales so that price * balance / 1e18 is USD-ish:
|
|
23938
|
+
// 10^(36 − collDecimals) per unit — normalize to USD per token.
|
|
23939
|
+
price: price2 !== null ? Number(price2) / 10 ** (36 - market.collDecimals) : null,
|
|
23940
|
+
borrowPaused: typeof paused === "boolean" ? paused : null,
|
|
23941
|
+
dailyBorrows: null
|
|
23942
|
+
};
|
|
23943
|
+
});
|
|
23944
|
+
return {
|
|
23945
|
+
lender,
|
|
23946
|
+
config,
|
|
23947
|
+
chainData,
|
|
23948
|
+
dbrPriceDola: await dbrPricePromise,
|
|
23949
|
+
replenishmentPriceBps: bigAt(0) !== null ? Number(bigAt(0)) : null,
|
|
23950
|
+
markets: rows,
|
|
23951
|
+
source: "chain"
|
|
23952
|
+
};
|
|
23953
|
+
} catch {
|
|
23954
|
+
return { ...empty, dbrPriceDola: await dbrPricePromise };
|
|
23955
|
+
}
|
|
23956
|
+
}
|
|
23957
|
+
function num(api, key) {
|
|
23958
|
+
const v = api?.[key];
|
|
23959
|
+
return typeof v === "number" && Number.isFinite(v) ? v : null;
|
|
23960
|
+
}
|
|
23961
|
+
|
|
23962
|
+
// src/lending/public-data/inverse/convertPublic.ts
|
|
23963
|
+
function inverseLenderKey(lender, market) {
|
|
23964
|
+
return `${lender}_${market.replace(/^0x/i, "").toUpperCase()}`;
|
|
23965
|
+
}
|
|
23966
|
+
function inverseKeyParts(key) {
|
|
23967
|
+
if (!key.startsWith("INVERSE_")) return void 0;
|
|
23968
|
+
const suffix = key.slice("INVERSE_".length);
|
|
23969
|
+
if (!/^[0-9A-F]{40}$/.test(suffix)) return void 0;
|
|
23970
|
+
return { lender: "INVERSE", market: "0x" + suffix.toLowerCase() };
|
|
23971
|
+
}
|
|
23972
|
+
function currencyFor8(address, decimals, symbol, tokens) {
|
|
23973
|
+
const lower3 = address.toLowerCase();
|
|
23974
|
+
return tokens[lower3] ?? { address: lower3, symbol, name: symbol, decimals };
|
|
23975
|
+
}
|
|
23976
|
+
function convertInverseMarketsToResponse(raw, chainId, prices = {}, _additionalYields = {
|
|
23977
|
+
intrinsicYields: {},
|
|
23978
|
+
lenderRewards: {},
|
|
23979
|
+
loaded: true
|
|
23980
|
+
}, tokens = {}) {
|
|
23981
|
+
const out = {};
|
|
23982
|
+
const cfg = raw?.config;
|
|
23983
|
+
const chainData = raw?.chainData;
|
|
23984
|
+
if (!cfg || !chainData) return out;
|
|
23985
|
+
const dolaAddr = cfg.dola.toLowerCase();
|
|
23986
|
+
const debtDecimals = cfg.debtDecimals ?? 18;
|
|
23987
|
+
const dolaToken = tokens[dolaAddr];
|
|
23988
|
+
const dolaPriceKey = toOracleKey(dolaToken?.assetGroup) || toGenericPriceKey(dolaAddr, chainId);
|
|
23989
|
+
const dolaPrice = prices[dolaPriceKey] || 1;
|
|
23990
|
+
const borrowAprPct = raw.dbrPriceDola !== null ? raw.dbrPriceDola * 100 : 0;
|
|
23991
|
+
for (const m of raw.markets ?? []) {
|
|
23992
|
+
const market = m.market;
|
|
23993
|
+
const lenderKey = inverseLenderKey(raw.lender, market.address);
|
|
23994
|
+
const collAddr = market.collToken.toLowerCase();
|
|
23995
|
+
const collDecimals = market.collDecimals;
|
|
23996
|
+
const collToken = tokens[collAddr];
|
|
23997
|
+
const collSymbol = collToken?.symbol ?? market.name ?? "COLL";
|
|
23998
|
+
const marketName = `DOLA / ${market.name ?? collSymbol}`;
|
|
23999
|
+
const collPriceKey = toOracleKey(collToken?.assetGroup) || toGenericPriceKey(collAddr, chainId);
|
|
24000
|
+
const collPrice = m.price ?? prices[collPriceKey] ?? 0;
|
|
24001
|
+
const totalDebt = m.totalDebt ?? 0;
|
|
24002
|
+
const paused = m.borrowPaused ?? !!market.borrowPaused;
|
|
24003
|
+
const ltv = Number(market.collateralFactorBps) / 1e4;
|
|
24004
|
+
const liqPenalty = Number(market.liquidationIncentiveBps) / 1e4;
|
|
24005
|
+
const closeFactor = Number(market.liquidationFactorBps) / 1e4 || 1;
|
|
24006
|
+
const collateralTotal = 0;
|
|
24007
|
+
let borrowLiquidity = m.leftToBorrow ?? m.dolaLiquidity ?? 0;
|
|
24008
|
+
if (paused) borrowLiquidity = 0;
|
|
24009
|
+
const entry = { data: {} };
|
|
24010
|
+
const collUid = createMarketUid(chainId, lenderKey, collAddr);
|
|
24011
|
+
entry.data[collUid] = {
|
|
24012
|
+
marketUid: collUid,
|
|
24013
|
+
name: "Collateral " + collSymbol,
|
|
24014
|
+
poolId: market.address.toLowerCase(),
|
|
24015
|
+
underlying: collAddr,
|
|
24016
|
+
asset: currencyFor8(collAddr, collDecimals, collSymbol, tokens),
|
|
24017
|
+
totalDeposits: collateralTotal,
|
|
24018
|
+
totalDebtStable: 0,
|
|
24019
|
+
totalDebt: 0,
|
|
24020
|
+
totalLiquidity: collateralTotal,
|
|
24021
|
+
borrowLiquidity: 0,
|
|
24022
|
+
totalLiquidityUSD: collateralTotal * collPrice,
|
|
24023
|
+
borrowLiquidityUSD: 0,
|
|
24024
|
+
totalDepositsUSD: collateralTotal * collPrice,
|
|
24025
|
+
totalDebtStableUSD: 0,
|
|
24026
|
+
totalDebtUSD: 0,
|
|
24027
|
+
utilization: 0,
|
|
24028
|
+
depositRate: 0,
|
|
24029
|
+
variableBorrowRate: 0,
|
|
24030
|
+
stableBorrowRate: 0,
|
|
24031
|
+
intrinsicYield: _additionalYields?.intrinsicYields?.[collToken?.assetGroup] ?? 0,
|
|
24032
|
+
rewards: void 0,
|
|
24033
|
+
decimals: collDecimals,
|
|
24034
|
+
config: {
|
|
24035
|
+
0: {
|
|
24036
|
+
category: 0,
|
|
24037
|
+
borrowCollateralFactor: ltv,
|
|
24038
|
+
collateralFactor: ltv,
|
|
24039
|
+
borrowFactor: 1,
|
|
24040
|
+
liquidationPenalty: liqPenalty,
|
|
24041
|
+
closeFactor,
|
|
24042
|
+
collateralDisabled: false,
|
|
24043
|
+
debtDisabled: true
|
|
24044
|
+
}
|
|
24045
|
+
},
|
|
24046
|
+
closeFactor,
|
|
24047
|
+
collateralActive: true,
|
|
24048
|
+
borrowingEnabled: false,
|
|
24049
|
+
depositsEnabled: true,
|
|
24050
|
+
hasStable: false,
|
|
24051
|
+
isActive: true,
|
|
24052
|
+
isFrozen: false
|
|
24053
|
+
};
|
|
24054
|
+
const loanUid = createMarketUid(chainId, lenderKey, dolaAddr);
|
|
24055
|
+
entry.data[loanUid] = {
|
|
24056
|
+
marketUid: loanUid,
|
|
24057
|
+
name: "DOLA",
|
|
24058
|
+
poolId: market.address.toLowerCase(),
|
|
24059
|
+
underlying: dolaAddr,
|
|
24060
|
+
asset: currencyFor8(dolaAddr, debtDecimals, "DOLA", tokens),
|
|
24061
|
+
totalDeposits: 0,
|
|
24062
|
+
totalDebtStable: 0,
|
|
24063
|
+
totalDebt,
|
|
24064
|
+
totalLiquidity: borrowLiquidity,
|
|
24065
|
+
borrowLiquidity,
|
|
24066
|
+
totalLiquidityUSD: borrowLiquidity * dolaPrice,
|
|
24067
|
+
borrowLiquidityUSD: borrowLiquidity * dolaPrice,
|
|
24068
|
+
totalDepositsUSD: 0,
|
|
24069
|
+
totalDebtStableUSD: 0,
|
|
24070
|
+
totalDebtUSD: totalDebt * dolaPrice,
|
|
24071
|
+
utilization: 0,
|
|
24072
|
+
depositRate: 0,
|
|
24073
|
+
// The DBR price IS the fixed borrow APR (percent). Debt principal
|
|
24074
|
+
// is static — interest burns the user's DBR balance instead.
|
|
24075
|
+
variableBorrowRate: borrowAprPct,
|
|
24076
|
+
stableBorrowRate: 0,
|
|
24077
|
+
rateModel: "dbr",
|
|
24078
|
+
intrinsicYield: 0,
|
|
24079
|
+
rewards: void 0,
|
|
24080
|
+
decimals: debtDecimals,
|
|
24081
|
+
config: {
|
|
24082
|
+
0: {
|
|
24083
|
+
category: 0,
|
|
24084
|
+
borrowCollateralFactor: 0,
|
|
24085
|
+
collateralFactor: 0,
|
|
24086
|
+
borrowFactor: 1,
|
|
24087
|
+
liquidationPenalty: liqPenalty,
|
|
24088
|
+
closeFactor,
|
|
24089
|
+
collateralDisabled: true,
|
|
24090
|
+
debtDisabled: paused
|
|
24091
|
+
}
|
|
24092
|
+
},
|
|
24093
|
+
closeFactor,
|
|
24094
|
+
collateralActive: false,
|
|
24095
|
+
borrowingEnabled: !paused,
|
|
24096
|
+
depositsEnabled: false,
|
|
24097
|
+
hasStable: false,
|
|
24098
|
+
variableBorrowDisabled: paused,
|
|
24099
|
+
isActive: true,
|
|
24100
|
+
isFrozen: false
|
|
24101
|
+
};
|
|
24102
|
+
entry.params = {
|
|
24103
|
+
market: {
|
|
24104
|
+
lender: lenderKey,
|
|
24105
|
+
name: marketName,
|
|
24106
|
+
loanDecimals: debtDecimals,
|
|
24107
|
+
collateralDecimals: collDecimals,
|
|
24108
|
+
// The Market contract doubles as the market id.
|
|
24109
|
+
id: market.address.toLowerCase(),
|
|
24110
|
+
lltv: String(ltv),
|
|
24111
|
+
oracle: cfg.oracle,
|
|
24112
|
+
irm: zeroAddress,
|
|
24113
|
+
collateralAddress: collAddr,
|
|
24114
|
+
loanAddress: dolaAddr,
|
|
24115
|
+
// --- FiRM descriptor (metadata + live snapshot; consumed by
|
|
24116
|
+
// calldata builders + worker-api resolvers) ---
|
|
24117
|
+
inverse: {
|
|
24118
|
+
escrowImplementation: market.escrowImplementation,
|
|
24119
|
+
/** DOLA units, human numbers as strings. */
|
|
24120
|
+
minDebt: market.minDebt,
|
|
24121
|
+
dailyLimit: market.dailyLimit,
|
|
24122
|
+
dailyBorrows: m.dailyBorrows !== null ? String(m.dailyBorrows) : void 0,
|
|
24123
|
+
dolaLiquidity: m.dolaLiquidity !== null ? String(m.dolaLiquidity) : void 0,
|
|
24124
|
+
leftToBorrow: m.leftToBorrow !== null ? String(m.leftToBorrow) : void 0,
|
|
24125
|
+
liquidationFactorBps: market.liquidationFactorBps,
|
|
24126
|
+
/** Fixed borrow APR as a DECIMAL (DBR price in DOLA). */
|
|
24127
|
+
dbrPriceDola: raw.dbrPriceDola !== null ? String(raw.dbrPriceDola) : void 0,
|
|
24128
|
+
/** Force-replenish penalty (5475 = 54.75% APR on missed DBR). */
|
|
24129
|
+
replenishmentPriceBps: raw.replenishmentPriceBps !== null ? String(raw.replenishmentPriceBps) : void 0,
|
|
24130
|
+
borrowPaused: paused,
|
|
24131
|
+
addresses: {
|
|
24132
|
+
market: market.address,
|
|
24133
|
+
dola: cfg.dola,
|
|
24134
|
+
dbr: cfg.dbr,
|
|
24135
|
+
oracle: cfg.oracle,
|
|
24136
|
+
borrowController: cfg.borrowController
|
|
24137
|
+
}
|
|
24138
|
+
}
|
|
24139
|
+
}
|
|
24140
|
+
};
|
|
24141
|
+
entry.chainId = chainId;
|
|
24142
|
+
out[lenderKey] = entry;
|
|
24143
|
+
}
|
|
24144
|
+
return out;
|
|
24145
|
+
}
|
|
24146
|
+
|
|
23270
24147
|
// src/lending/public-data/silo-v2/fetchPublic.ts
|
|
23271
24148
|
var BASE_URL2 = "https://api-v3.silo.finance";
|
|
23272
24149
|
var SILO_API_SUPPORTED_CHAIN_IDS = /* @__PURE__ */ new Set([
|
|
@@ -23863,7 +24740,7 @@ function convertDolomiteSubgraphMarkets(raw, chainId, prices, additionalYields,
|
|
|
23863
24740
|
}
|
|
23864
24741
|
return { data: result, chainId };
|
|
23865
24742
|
}
|
|
23866
|
-
var
|
|
24743
|
+
var warn4 = (...args) => {
|
|
23867
24744
|
};
|
|
23868
24745
|
async function getLenderDataFromApi(lender, chainId, prices, additionalYields, includeUnlisted = false) {
|
|
23869
24746
|
if (isMorphoType(lender))
|
|
@@ -23874,6 +24751,8 @@ async function getLenderDataFromApi(lender, chainId, prices, additionalYields, i
|
|
|
23874
24751
|
if (isLiquityFamily(lender)) return await fetchLiquityMarkets(lender, chainId);
|
|
23875
24752
|
if (isRiver(lender)) return await fetchRiverMarkets(lender, chainId);
|
|
23876
24753
|
if (isTeller(lender)) return await fetchTellerMarkets(chainId);
|
|
24754
|
+
if (isInverse(lender)) return await fetchInverseMarkets(lender, chainId);
|
|
24755
|
+
if (isTermMax(lender)) return await fetchTermMaxMarkets(chainId);
|
|
23877
24756
|
return {};
|
|
23878
24757
|
}
|
|
23879
24758
|
function convertLenderDataFromApi(lender, chainId, data, prices, additionalYields, list = {}) {
|
|
@@ -23927,6 +24806,22 @@ function convertLenderDataFromApi(lender, chainId, data, prices, additionalYield
|
|
|
23927
24806
|
additionalYields,
|
|
23928
24807
|
list
|
|
23929
24808
|
);
|
|
24809
|
+
if (isInverse(lender))
|
|
24810
|
+
return convertInverseMarketsToResponse(
|
|
24811
|
+
data,
|
|
24812
|
+
chainId,
|
|
24813
|
+
prices,
|
|
24814
|
+
additionalYields,
|
|
24815
|
+
list
|
|
24816
|
+
);
|
|
24817
|
+
if (isTermMax(lender))
|
|
24818
|
+
return convertTermMaxMarketsToResponse(
|
|
24819
|
+
data,
|
|
24820
|
+
chainId,
|
|
24821
|
+
prices,
|
|
24822
|
+
additionalYields,
|
|
24823
|
+
list
|
|
24824
|
+
);
|
|
23930
24825
|
return {};
|
|
23931
24826
|
}
|
|
23932
24827
|
var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYields, tokenList = async () => {
|
|
@@ -23967,7 +24862,7 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
|
|
|
23967
24862
|
const listResult = settled[0];
|
|
23968
24863
|
const list = listResult.status === "fulfilled" ? listResult.value : {};
|
|
23969
24864
|
if (listResult.status === "rejected") {
|
|
23970
|
-
|
|
24865
|
+
warn4(
|
|
23971
24866
|
`[lending] tokenList fetch failed on chain ${chainId}:`,
|
|
23972
24867
|
listResult.reason
|
|
23973
24868
|
);
|
|
@@ -23989,13 +24884,13 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
|
|
|
23989
24884
|
if (converted[lk]) lenderData[lk] = converted[lk];
|
|
23990
24885
|
}
|
|
23991
24886
|
} catch (e) {
|
|
23992
|
-
|
|
24887
|
+
warn4(
|
|
23993
24888
|
`[lending] Silo v2 API convert failed on chain ${chainId}:`,
|
|
23994
24889
|
e?.message ?? e
|
|
23995
24890
|
);
|
|
23996
24891
|
}
|
|
23997
24892
|
} else {
|
|
23998
|
-
|
|
24893
|
+
warn4(
|
|
23999
24894
|
`[lending] Silo v2 API fetch failed on chain ${chainId}:`,
|
|
24000
24895
|
siloV2Result.reason?.message ?? siloV2Result.reason
|
|
24001
24896
|
);
|
|
@@ -24017,13 +24912,13 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
|
|
|
24017
24912
|
if (converted[lk]) lenderData[lk] = converted[lk];
|
|
24018
24913
|
}
|
|
24019
24914
|
} catch (e) {
|
|
24020
|
-
|
|
24915
|
+
warn4(
|
|
24021
24916
|
`[lending] Silo v3 API convert failed on chain ${chainId}:`,
|
|
24022
24917
|
e?.message ?? e
|
|
24023
24918
|
);
|
|
24024
24919
|
}
|
|
24025
24920
|
} else {
|
|
24026
|
-
|
|
24921
|
+
warn4(
|
|
24027
24922
|
`[lending] Silo v3 API fetch failed on chain ${chainId}:`,
|
|
24028
24923
|
siloV3Result.reason?.message ?? siloV3Result.reason
|
|
24029
24924
|
);
|
|
@@ -24033,7 +24928,7 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
|
|
|
24033
24928
|
try {
|
|
24034
24929
|
const result = settled[i + 3];
|
|
24035
24930
|
if (result.status === "rejected") {
|
|
24036
|
-
|
|
24931
|
+
warn4(
|
|
24037
24932
|
`[lending] API fetch failed for ${otherLenders[i]} on chain ${chainId}:`,
|
|
24038
24933
|
result.reason?.message ?? result.reason
|
|
24039
24934
|
);
|
|
@@ -24077,13 +24972,13 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
|
|
|
24077
24972
|
);
|
|
24078
24973
|
for (const lk of dolomiteLenders) lenderData[lk] = converted;
|
|
24079
24974
|
} catch (e) {
|
|
24080
|
-
|
|
24975
|
+
warn4(
|
|
24081
24976
|
`[lending] Dolomite subgraph convert failed on chain ${chainId}:`,
|
|
24082
24977
|
e?.message ?? e
|
|
24083
24978
|
);
|
|
24084
24979
|
}
|
|
24085
24980
|
} else if (dolomiteResult.status === "rejected") {
|
|
24086
|
-
|
|
24981
|
+
warn4(
|
|
24087
24982
|
`[lending] Dolomite subgraph fetch failed on chain ${chainId}:`,
|
|
24088
24983
|
dolomiteResult.reason?.message ?? dolomiteResult.reason
|
|
24089
24984
|
);
|
|
@@ -24091,7 +24986,7 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
|
|
|
24091
24986
|
}
|
|
24092
24987
|
return lenderData;
|
|
24093
24988
|
};
|
|
24094
|
-
var
|
|
24989
|
+
var warn5 = (...args) => {
|
|
24095
24990
|
};
|
|
24096
24991
|
function lenderApiOnly(lender, chainId) {
|
|
24097
24992
|
if (lender === Lender.MORPHO_BLUE) {
|
|
@@ -24153,7 +25048,7 @@ var getLenderPublicDataAll = async (chainId, lenders, prices, additionalYields,
|
|
|
24153
25048
|
includeUnlistedMorphoMarkets
|
|
24154
25049
|
);
|
|
24155
25050
|
} catch (e) {
|
|
24156
|
-
|
|
25051
|
+
warn5(
|
|
24157
25052
|
`[lending] API fetch failed for chain ${chainId}:`,
|
|
24158
25053
|
e?.message ?? e
|
|
24159
25054
|
);
|
|
@@ -24176,7 +25071,7 @@ var getLenderPublicDataAll = async (chainId, lenders, prices, additionalYields,
|
|
|
24176
25071
|
tokenList
|
|
24177
25072
|
);
|
|
24178
25073
|
} catch (e) {
|
|
24179
|
-
|
|
25074
|
+
warn5(
|
|
24180
25075
|
`[lending] on-chain fetch failed for chain ${chainId}:`,
|
|
24181
25076
|
e?.message ?? e
|
|
24182
25077
|
);
|
|
@@ -24777,8 +25672,8 @@ function getSubAccountAddress(owner, index) {
|
|
|
24777
25672
|
const suffix = newLastByte.toString(16).padStart(2, "0");
|
|
24778
25673
|
return (prefix + suffix).toLowerCase();
|
|
24779
25674
|
}
|
|
24780
|
-
function getSubAccountIndex(
|
|
24781
|
-
const addrLastByte = parseInt(
|
|
25675
|
+
function getSubAccountIndex(addr2, owner) {
|
|
25676
|
+
const addrLastByte = parseInt(addr2.slice(40), 16);
|
|
24782
25677
|
if (!owner) return addrLastByte;
|
|
24783
25678
|
const ownerLastByte = parseInt(owner.slice(40), 16);
|
|
24784
25679
|
return (addrLastByte ^ ownerLastByte) & 255;
|
|
@@ -25277,6 +26172,46 @@ var buildRiverUserCall = (chainId, lender, account) => {
|
|
|
25277
26172
|
});
|
|
25278
26173
|
return calls;
|
|
25279
26174
|
};
|
|
26175
|
+
var INVERSE_CALLS_PER_MARKET = 4;
|
|
26176
|
+
var INVERSE_TAIL_CALLS = 3;
|
|
26177
|
+
var proxyInitCode = (impl) => concat([
|
|
26178
|
+
"0x3d602d80600a3d3981f3363d3d373d3d3d363d73",
|
|
26179
|
+
impl,
|
|
26180
|
+
"0x5af43d82803e903d91602b57fd5bf3"
|
|
26181
|
+
]);
|
|
26182
|
+
function predictInverseEscrow(market, escrowImplementation, user) {
|
|
26183
|
+
return getContractAddress({
|
|
26184
|
+
opcode: "CREATE2",
|
|
26185
|
+
from: market,
|
|
26186
|
+
salt: pad(user, { size: 32 }),
|
|
26187
|
+
bytecodeHash: keccak256(proxyInitCode(escrowImplementation))
|
|
26188
|
+
});
|
|
26189
|
+
}
|
|
26190
|
+
var buildInverseUserCall = (chainId, lender, account) => {
|
|
26191
|
+
const cfg = inverseConfigFor(lender, chainId);
|
|
26192
|
+
const markets = inverseChainData(lender, chainId)?.markets ?? [];
|
|
26193
|
+
if (!cfg || markets.length === 0) return [];
|
|
26194
|
+
const calls = markets.flatMap((m) => [
|
|
26195
|
+
{
|
|
26196
|
+
address: predictInverseEscrow(
|
|
26197
|
+
m.address,
|
|
26198
|
+
m.escrowImplementation,
|
|
26199
|
+
account
|
|
26200
|
+
),
|
|
26201
|
+
name: "balance",
|
|
26202
|
+
params: []
|
|
26203
|
+
},
|
|
26204
|
+
{ address: m.address, name: "debts", params: [account] },
|
|
26205
|
+
{ address: m.address, name: "getCreditLimit", params: [account] },
|
|
26206
|
+
{ address: m.address, name: "getWithdrawalLimit", params: [account] }
|
|
26207
|
+
]);
|
|
26208
|
+
calls.push(
|
|
26209
|
+
{ address: cfg.dbr, name: "balanceOf", params: [account] },
|
|
26210
|
+
{ address: cfg.dbr, name: "deficitOf", params: [account] },
|
|
26211
|
+
{ address: cfg.dbr, name: "signedBalanceOf", params: [account] }
|
|
26212
|
+
);
|
|
26213
|
+
return calls;
|
|
26214
|
+
};
|
|
25280
26215
|
var TELLER_CALLS_PER_BID = 4;
|
|
25281
26216
|
var CACHE_TTL_MS2 = 5 * 6e4;
|
|
25282
26217
|
var discoveryCache2 = /* @__PURE__ */ new Map();
|
|
@@ -25286,7 +26221,7 @@ var getCachedTellerBids = (chainId, account) => {
|
|
|
25286
26221
|
if (!hit || Date.now() - hit.at > CACHE_TTL_MS2) return void 0;
|
|
25287
26222
|
return hit;
|
|
25288
26223
|
};
|
|
25289
|
-
var
|
|
26224
|
+
var nowSec5 = () => Math.floor(Date.now() / 1e3);
|
|
25290
26225
|
var toBigints = (arr) => {
|
|
25291
26226
|
if (!Array.isArray(arr)) return [];
|
|
25292
26227
|
const out = [];
|
|
@@ -25352,7 +26287,7 @@ var buildTellerUserCall = async (chainId, _lender, account) => {
|
|
|
25352
26287
|
});
|
|
25353
26288
|
discoveryCache2.set(cacheKey2(chainId, account), { bids: kept, at: Date.now() });
|
|
25354
26289
|
if (kept.length === 0) return [];
|
|
25355
|
-
const ts =
|
|
26290
|
+
const ts = nowSec5();
|
|
25356
26291
|
const calls = [];
|
|
25357
26292
|
for (const b of kept) {
|
|
25358
26293
|
calls.push({ address: proto.tellerV2, name: "bids", params: [b.bidId] });
|
|
@@ -25374,6 +26309,40 @@ var buildTellerUserCall = async (chainId, _lender, account) => {
|
|
|
25374
26309
|
}
|
|
25375
26310
|
return calls;
|
|
25376
26311
|
};
|
|
26312
|
+
var TERMMAX_CALLS_PER_ACCOUNT = 1;
|
|
26313
|
+
var CACHE_TTL_MS3 = 5 * 6e4;
|
|
26314
|
+
var discoveryCache3 = /* @__PURE__ */ new Map();
|
|
26315
|
+
var cacheKey3 = (chainId, account) => `${chainId}:${account.toLowerCase()}`;
|
|
26316
|
+
var getCachedTermMaxDiscovery = (chainId, account) => {
|
|
26317
|
+
const hit = discoveryCache3.get(cacheKey3(chainId, account));
|
|
26318
|
+
if (!hit || Date.now() - hit.at > CACHE_TTL_MS3) return void 0;
|
|
26319
|
+
return hit;
|
|
26320
|
+
};
|
|
26321
|
+
var buildTermMaxUserCall = async (chainId, _lender, account) => {
|
|
26322
|
+
const proto = termMaxConfigByChain(chainId);
|
|
26323
|
+
if (!proto?.viewer) return [];
|
|
26324
|
+
let markets = getCachedTermMaxMarkets(chainId);
|
|
26325
|
+
if (markets.length === 0) {
|
|
26326
|
+
try {
|
|
26327
|
+
markets = (await fetchTermMaxMarkets(chainId)).map((m) => m.config);
|
|
26328
|
+
} catch {
|
|
26329
|
+
return [];
|
|
26330
|
+
}
|
|
26331
|
+
}
|
|
26332
|
+
if (markets.length === 0) {
|
|
26333
|
+
discoveryCache3.set(cacheKey3(chainId, account), { markets: [], at: Date.now() });
|
|
26334
|
+
return [];
|
|
26335
|
+
}
|
|
26336
|
+
markets = [...markets].sort((a, b) => a.market.localeCompare(b.market));
|
|
26337
|
+
discoveryCache3.set(cacheKey3(chainId, account), { markets, at: Date.now() });
|
|
26338
|
+
return [
|
|
26339
|
+
{
|
|
26340
|
+
address: proto.viewer,
|
|
26341
|
+
name: "getPositionDetails",
|
|
26342
|
+
params: [markets.map((m) => m.market), account]
|
|
26343
|
+
}
|
|
26344
|
+
];
|
|
26345
|
+
};
|
|
25377
26346
|
|
|
25378
26347
|
// src/lending/user-data/fetch-balances/prepare.ts
|
|
25379
26348
|
async function buildUserCall(chainId, lender, account, params, getClient) {
|
|
@@ -25396,6 +26365,8 @@ async function buildUserCall(chainId, lender, account, params, getClient) {
|
|
|
25396
26365
|
return buildLiquityUserCall(chainId, lender, account);
|
|
25397
26366
|
if (isRiver(lender)) return buildRiverUserCall(chainId, lender, account);
|
|
25398
26367
|
if (isTeller(lender)) return buildTellerUserCall(chainId, lender, account);
|
|
26368
|
+
if (isTermMax(lender)) return buildTermMaxUserCall(chainId, lender, account);
|
|
26369
|
+
if (isInverse(lender)) return buildInverseUserCall(chainId, lender, account);
|
|
25399
26370
|
if (isCompoundV3Type(lender))
|
|
25400
26371
|
return buildCompoundV3UserCall(chainId, lender, account);
|
|
25401
26372
|
if (isEulerType(lender))
|
|
@@ -25423,10 +26394,11 @@ function organizeUserQueries(queries) {
|
|
|
25423
26394
|
const liquity = queries.filter((q) => isLiquityFamily(q.lender));
|
|
25424
26395
|
const river = queries.filter((q) => isRiver(q.lender));
|
|
25425
26396
|
const teller = queries.filter((q) => isTeller(q.lender));
|
|
25426
|
-
|
|
26397
|
+
const termMax = queries.filter((q) => isTermMax(q.lender));
|
|
26398
|
+
if (morphos.length === 0 && gearbox.length === 0 && midnight.length === 0 && term.length === 0 && exactly.length === 0 && liquity.length === 0 && river.length === 0 && teller.length === 0 && termMax.length === 0)
|
|
25427
26399
|
return queries;
|
|
25428
26400
|
const others = queries.filter(
|
|
25429
|
-
(q) => !isMorphoType(q.lender) && !isGearboxV3(q.lender) && !isMidnight(q.lender) && !isTerm(q.lender) && !isExactly(q.lender) && !isLiquityFamily(q.lender) && !isRiver(q.lender) && !isTeller(q.lender)
|
|
26401
|
+
(q) => !isMorphoType(q.lender) && !isGearboxV3(q.lender) && !isMidnight(q.lender) && !isTerm(q.lender) && !isExactly(q.lender) && !isLiquityFamily(q.lender) && !isRiver(q.lender) && !isTeller(q.lender) && !isTermMax(q.lender)
|
|
25430
26402
|
);
|
|
25431
26403
|
const morphoBlue = morphos.filter((q) => q.lender.startsWith("MORPHO_BLUE"));
|
|
25432
26404
|
const moolah = morphos.filter((q) => q.lender.startsWith("LISTA_DAO"));
|
|
@@ -25495,6 +26467,14 @@ function organizeUserQueries(queries) {
|
|
|
25495
26467
|
assets: void 0
|
|
25496
26468
|
});
|
|
25497
26469
|
}
|
|
26470
|
+
if (termMax.length > 0) {
|
|
26471
|
+
result.push({
|
|
26472
|
+
lender: Lender.TERMMAX,
|
|
26473
|
+
account: termMax[0].account,
|
|
26474
|
+
params: termMax.map((p) => p.lender),
|
|
26475
|
+
assets: void 0
|
|
26476
|
+
});
|
|
26477
|
+
}
|
|
25498
26478
|
if (liquity.length > 0) {
|
|
25499
26479
|
for (const base of LIQUITY_FAMILY_LENDERS) {
|
|
25500
26480
|
const members = liquity.filter((q) => q.lender.startsWith(base));
|
|
@@ -27294,7 +28274,7 @@ function toBigInt7(v) {
|
|
|
27294
28274
|
}
|
|
27295
28275
|
}
|
|
27296
28276
|
var FLUID_EEE_LOWER2 = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";
|
|
27297
|
-
var normalizeUnderlying2 = (
|
|
28277
|
+
var normalizeUnderlying2 = (addr2) => addr2 === FLUID_EEE_LOWER2 ? zeroAddress : addr2;
|
|
27298
28278
|
function toBigInt8(v) {
|
|
27299
28279
|
if (v === void 0 || v === null || v === "0x") return 0n;
|
|
27300
28280
|
if (typeof v === "bigint") return v;
|
|
@@ -27695,8 +28675,8 @@ var WETH_BY_CHAIN = {
|
|
|
27695
28675
|
// populated by the meta's native handling; kept as a hook. Default: identity.
|
|
27696
28676
|
};
|
|
27697
28677
|
function normalizeUnderlying3(token) {
|
|
27698
|
-
const
|
|
27699
|
-
return Object.values(WETH_BY_CHAIN).includes(
|
|
28678
|
+
const lower3 = token.toLowerCase();
|
|
28679
|
+
return Object.values(WETH_BY_CHAIN).includes(lower3) ? zeroAddress : lower3;
|
|
27700
28680
|
}
|
|
27701
28681
|
function toBigInt10(v) {
|
|
27702
28682
|
if (v === void 0 || v === null || v === "0x") return 0n;
|
|
@@ -27961,7 +28941,7 @@ var getTermUserDataConverter = (_lender, chainId, account, meta) => {
|
|
|
27961
28941
|
totalCalls
|
|
27962
28942
|
];
|
|
27963
28943
|
};
|
|
27964
|
-
var
|
|
28944
|
+
var nowSec6 = () => Math.floor(Date.now() / 1e3);
|
|
27965
28945
|
function sumPreview(positions) {
|
|
27966
28946
|
return positions.reduce((acc, p) => acc + p.previewValue, 0n);
|
|
27967
28947
|
}
|
|
@@ -27983,7 +28963,7 @@ var getExactlyUserDataConverter = (_lender, chainId, account, meta) => {
|
|
|
27983
28963
|
const res = data[0];
|
|
27984
28964
|
if (!res || res === "0x" || !Array.isArray(res)) return void 0;
|
|
27985
28965
|
const markets = res;
|
|
27986
|
-
const now =
|
|
28966
|
+
const now = nowSec6();
|
|
27987
28967
|
const out = {};
|
|
27988
28968
|
for (const m of markets) {
|
|
27989
28969
|
const lenderKey = exactlyLenderKey(m.market);
|
|
@@ -28151,7 +29131,7 @@ var getLiquityUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
28151
29131
|
branches.forEach((branch, bi) => {
|
|
28152
29132
|
const troves = discovery.perBranch[bi] ?? [];
|
|
28153
29133
|
const callCount = liquityBranchCallCount(branch, troves.length);
|
|
28154
|
-
const
|
|
29134
|
+
const slice2 = data.slice(cursor, cursor + callCount);
|
|
28155
29135
|
cursor += callCount;
|
|
28156
29136
|
const lenderKey = liquityLenderKey(lender, chainId, branch.collIndex);
|
|
28157
29137
|
const metaMap = meta?.[lenderKey];
|
|
@@ -28172,8 +29152,8 @@ var getLiquityUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
28172
29152
|
const modes = {};
|
|
28173
29153
|
const hist = {};
|
|
28174
29154
|
troves.forEach((t, ti) => {
|
|
28175
|
-
const troveData =
|
|
28176
|
-
const ownerRaw =
|
|
29155
|
+
const troveData = slice2[ti * 2];
|
|
29156
|
+
const ownerRaw = slice2[ti * 2 + 1];
|
|
28177
29157
|
const owner = typeof ownerRaw === "string" ? ownerRaw.toLowerCase() : void 0;
|
|
28178
29158
|
if (owner !== accountLower) return;
|
|
28179
29159
|
if (!troveData || troveData === "0x") return;
|
|
@@ -28251,11 +29231,11 @@ var getLiquityUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
28251
29231
|
};
|
|
28252
29232
|
});
|
|
28253
29233
|
const spBase = troves.length * 2;
|
|
28254
|
-
const spDeposit = big(
|
|
28255
|
-
const spYield = big(
|
|
28256
|
-
const spCollGain = big(
|
|
28257
|
-
const spStashed = big(
|
|
28258
|
-
const collSurplus = branch.collSurplusPool ? big(
|
|
29234
|
+
const spDeposit = big(slice2[spBase]);
|
|
29235
|
+
const spYield = big(slice2[spBase + 1]);
|
|
29236
|
+
const spCollGain = big(slice2[spBase + 2]);
|
|
29237
|
+
const spStashed = big(slice2[spBase + 3]);
|
|
29238
|
+
const collSurplus = branch.collSurplusPool ? big(slice2[spBase + 4]) : 0n;
|
|
28259
29239
|
const spStable = spDeposit + spYield;
|
|
28260
29240
|
const spColl = spCollGain + spStashed + collSurplus;
|
|
28261
29241
|
if (spStable > 0n || spColl > 0n) {
|
|
@@ -28468,10 +29448,125 @@ var getRiverUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
28468
29448
|
expected
|
|
28469
29449
|
];
|
|
28470
29450
|
};
|
|
29451
|
+
var big3 = (v) => {
|
|
29452
|
+
try {
|
|
29453
|
+
if (typeof v === "bigint") return v;
|
|
29454
|
+
if (typeof v === "number" || typeof v === "string") return BigInt(v);
|
|
29455
|
+
} catch {
|
|
29456
|
+
}
|
|
29457
|
+
return 0n;
|
|
29458
|
+
};
|
|
29459
|
+
var getInverseUserDataConverter = (lender, chainId, account, meta) => {
|
|
29460
|
+
const cfg = inverseConfigFor(lender, chainId);
|
|
29461
|
+
const markets = inverseChainData(lender, chainId)?.markets ?? [];
|
|
29462
|
+
const expected = cfg && markets.length > 0 ? markets.length * INVERSE_CALLS_PER_MARKET + INVERSE_TAIL_CALLS : 0;
|
|
29463
|
+
return [
|
|
29464
|
+
(data) => {
|
|
29465
|
+
if (!cfg || expected === 0) return void 0;
|
|
29466
|
+
if (!data || data.length < expected) return void 0;
|
|
29467
|
+
const dolaAddr = cfg.dola.toLowerCase();
|
|
29468
|
+
const debtDecimals = cfg.debtDecimals ?? 18;
|
|
29469
|
+
const tailBase = markets.length * INVERSE_CALLS_PER_MARKET;
|
|
29470
|
+
const dbrBalance = big3(data[tailBase]);
|
|
29471
|
+
const dbrDeficit = big3(data[tailBase + 1]);
|
|
29472
|
+
const dbrSignedRaw = data[tailBase + 2];
|
|
29473
|
+
const dbrSigned = isFailedCall(dbrSignedRaw) ? 0n : big3(dbrSignedRaw);
|
|
29474
|
+
const out = {};
|
|
29475
|
+
markets.forEach((market, i) => {
|
|
29476
|
+
const base = i * INVERSE_CALLS_PER_MARKET;
|
|
29477
|
+
const escrowBal = isFailedCall(data[base]) ? 0n : big3(data[base]);
|
|
29478
|
+
const debtRaw = data[base + 1];
|
|
29479
|
+
if (isFailedCall(debtRaw)) return;
|
|
29480
|
+
const debt = big3(debtRaw);
|
|
29481
|
+
if (escrowBal === 0n && debt === 0n) return;
|
|
29482
|
+
const creditLimit = isFailedCall(data[base + 2]) ? 0n : big3(data[base + 2]);
|
|
29483
|
+
const withdrawalLimit = isFailedCall(data[base + 3]) ? 0n : big3(data[base + 3]);
|
|
29484
|
+
const lenderKey = inverseLenderKey(lender, market.address);
|
|
29485
|
+
const metaMap = meta?.[lenderKey];
|
|
29486
|
+
if (!metaMap) return;
|
|
29487
|
+
const collAddr = market.collToken.toLowerCase();
|
|
29488
|
+
const collUid = createMarketUid(chainId, lenderKey, collAddr);
|
|
29489
|
+
const loanUid = createMarketUid(chainId, lenderKey, dolaAddr);
|
|
29490
|
+
const collMeta = metaMap[collUid];
|
|
29491
|
+
const loanMeta = metaMap[loanUid];
|
|
29492
|
+
const collDecimals = collMeta?.asset?.decimals ?? market.collDecimals;
|
|
29493
|
+
const collDisplay = collMeta ? getDisplayPrice(collMeta) : 0;
|
|
29494
|
+
const collOracle = collMeta ? getOraclePrice(collMeta) : 0;
|
|
29495
|
+
const collHist = collMeta?.price?.priceUsd24h ?? collDisplay;
|
|
29496
|
+
const loanDisplay = loanMeta ? getDisplayPrice(loanMeta) : 0;
|
|
29497
|
+
const loanOracle = loanMeta ? getOraclePrice(loanMeta) : 0;
|
|
29498
|
+
const loanHist = loanMeta?.price?.priceUsd24h ?? loanDisplay;
|
|
29499
|
+
const inverseInfo = {
|
|
29500
|
+
creditLimit: creditLimit.toString(),
|
|
29501
|
+
withdrawalLimit: withdrawalLimit.toString(),
|
|
29502
|
+
dbrBalance: dbrBalance.toString(),
|
|
29503
|
+
dbrDeficit: dbrDeficit.toString(),
|
|
29504
|
+
dbrSignedBalance: dbrSigned.toString()
|
|
29505
|
+
};
|
|
29506
|
+
const collStr = parseRawAmount(escrowBal.toString(), collDecimals);
|
|
29507
|
+
const collNum = Number(collStr);
|
|
29508
|
+
const debtStr = parseRawAmount(debt.toString(), debtDecimals);
|
|
29509
|
+
const debtNum = Number(debtStr);
|
|
29510
|
+
const lendingPositions = {
|
|
29511
|
+
"0": {
|
|
29512
|
+
[collUid]: {
|
|
29513
|
+
marketUid: collUid,
|
|
29514
|
+
underlying: collAddr,
|
|
29515
|
+
deposits: collStr,
|
|
29516
|
+
debt: "0",
|
|
29517
|
+
debtStable: "0",
|
|
29518
|
+
depositsUSD: collNum * collDisplay,
|
|
29519
|
+
debtUSD: 0,
|
|
29520
|
+
debtStableUSD: 0,
|
|
29521
|
+
depositsUSDOracle: collNum * collOracle,
|
|
29522
|
+
debtUSDOracle: 0,
|
|
29523
|
+
debtStableUSDOracle: 0,
|
|
29524
|
+
stableBorrowRate: "0",
|
|
29525
|
+
collateralEnabled: true,
|
|
29526
|
+
claimableRewards: 0
|
|
29527
|
+
},
|
|
29528
|
+
[loanUid]: {
|
|
29529
|
+
marketUid: loanUid,
|
|
29530
|
+
underlying: dolaAddr,
|
|
29531
|
+
deposits: "0",
|
|
29532
|
+
debt: debtStr,
|
|
29533
|
+
debtStable: "0",
|
|
29534
|
+
depositsUSD: 0,
|
|
29535
|
+
debtUSD: debtNum * loanDisplay,
|
|
29536
|
+
debtStableUSD: 0,
|
|
29537
|
+
depositsUSDOracle: 0,
|
|
29538
|
+
debtUSDOracle: debtNum * loanOracle,
|
|
29539
|
+
debtStableUSDOracle: 0,
|
|
29540
|
+
stableBorrowRate: "0",
|
|
29541
|
+
collateralEnabled: false,
|
|
29542
|
+
claimableRewards: 0,
|
|
29543
|
+
inverseInfo
|
|
29544
|
+
}
|
|
29545
|
+
}
|
|
29546
|
+
};
|
|
29547
|
+
const modes = { "0": 0 };
|
|
29548
|
+
const hist = {
|
|
29549
|
+
"0": {
|
|
29550
|
+
totalDeposits24h: collNum * collHist,
|
|
29551
|
+
totalDebt24h: debtNum * loanHist
|
|
29552
|
+
}
|
|
29553
|
+
};
|
|
29554
|
+
const userData = createMultiAccountTypeUserState(
|
|
29555
|
+
{ chainId, account, lendingPositions, modes },
|
|
29556
|
+
metaMap,
|
|
29557
|
+
hist
|
|
29558
|
+
);
|
|
29559
|
+
if (userData && userData.data.length > 0) out[lenderKey] = userData;
|
|
29560
|
+
});
|
|
29561
|
+
return Object.keys(out).length > 0 ? out : void 0;
|
|
29562
|
+
},
|
|
29563
|
+
expected
|
|
29564
|
+
];
|
|
29565
|
+
};
|
|
28471
29566
|
|
|
28472
29567
|
// src/lending/user-data/teller/userCallParse.ts
|
|
28473
|
-
var
|
|
28474
|
-
var
|
|
29568
|
+
var nowSec7 = () => Math.floor(Date.now() / 1e3);
|
|
29569
|
+
var big4 = (v) => {
|
|
28475
29570
|
try {
|
|
28476
29571
|
if (typeof v === "bigint") return v;
|
|
28477
29572
|
if (typeof v === "number" || typeof v === "string") return BigInt(v);
|
|
@@ -28487,13 +29582,13 @@ var getTellerUserDataConverter = (_lender, chainId, account, meta) => {
|
|
|
28487
29582
|
return [
|
|
28488
29583
|
(data) => {
|
|
28489
29584
|
if (expected === 0 || !data || data.length < expected) return void 0;
|
|
28490
|
-
const now =
|
|
29585
|
+
const now = nowSec7();
|
|
28491
29586
|
const perPool = {};
|
|
28492
29587
|
kept.forEach((b, i) => {
|
|
28493
29588
|
const base = i * TELLER_CALLS_PER_BID;
|
|
28494
29589
|
const bidRes = data[base];
|
|
28495
29590
|
const owed = data[base + 1];
|
|
28496
|
-
const collAmount =
|
|
29591
|
+
const collAmount = big4(data[base + 2]);
|
|
28497
29592
|
const defaulted = !!data[base + 3];
|
|
28498
29593
|
if (isFailedCall(bidRes) || isFailedCall(owed) || !bidRes) return;
|
|
28499
29594
|
const pool = b.pool;
|
|
@@ -28514,17 +29609,17 @@ var getTellerUserDataConverter = (_lender, chainId, account, meta) => {
|
|
|
28514
29609
|
const collDisplay = collMeta ? getDisplayPrice(collMeta) : 0;
|
|
28515
29610
|
const collOracle = collMeta ? getOraclePrice(collMeta) : 0;
|
|
28516
29611
|
const collHist = collMeta?.price?.priceUsd24h ?? collDisplay;
|
|
28517
|
-
const owedPrincipal =
|
|
28518
|
-
const owedInterest =
|
|
29612
|
+
const owedPrincipal = big4(field8(owed, "principal", 0));
|
|
29613
|
+
const owedInterest = big4(field8(owed, "interest", 1));
|
|
28519
29614
|
const owedTotal = owedPrincipal + owedInterest;
|
|
28520
29615
|
if (owedTotal === 0n && collAmount === 0n) return;
|
|
28521
29616
|
const loanDetails = field8(bidRes, "loanDetails", 5);
|
|
28522
29617
|
const terms = field8(bidRes, "terms", 6);
|
|
28523
29618
|
const acceptedTs = Number(
|
|
28524
|
-
|
|
29619
|
+
big4(field8(loanDetails, "acceptedTimestamp", 4))
|
|
28525
29620
|
);
|
|
28526
|
-
const loanDuration = Number(
|
|
28527
|
-
const aprBps = Number(
|
|
29621
|
+
const loanDuration = Number(big4(field8(loanDetails, "loanDuration", 6)));
|
|
29622
|
+
const aprBps = Number(big4(field8(terms, "APR", 2)));
|
|
28528
29623
|
const maturity = acceptedTs > 0 ? acceptedTs + loanDuration : void 0;
|
|
28529
29624
|
const isMatured = defaulted || maturity !== void 0 && maturity < now;
|
|
28530
29625
|
const collStr = parseRawAmount(collAmount.toString(), collDecimals);
|
|
@@ -28612,6 +29707,179 @@ var getTellerUserDataConverter = (_lender, chainId, account, meta) => {
|
|
|
28612
29707
|
expected
|
|
28613
29708
|
];
|
|
28614
29709
|
};
|
|
29710
|
+
var nowSec8 = () => Math.floor(Date.now() / 1e3);
|
|
29711
|
+
function toBigInt12(v) {
|
|
29712
|
+
if (v === void 0 || v === null || v === "0x") return 0n;
|
|
29713
|
+
if (typeof v === "bigint") return v;
|
|
29714
|
+
try {
|
|
29715
|
+
return BigInt(v);
|
|
29716
|
+
} catch {
|
|
29717
|
+
return 0n;
|
|
29718
|
+
}
|
|
29719
|
+
}
|
|
29720
|
+
function field9(res, name, index) {
|
|
29721
|
+
if (res && typeof res === "object" && !Array.isArray(res) && name in res) {
|
|
29722
|
+
return res[name];
|
|
29723
|
+
}
|
|
29724
|
+
if (Array.isArray(res)) return res[index];
|
|
29725
|
+
return void 0;
|
|
29726
|
+
}
|
|
29727
|
+
function parsePosition(res) {
|
|
29728
|
+
const ftBalance = toBigInt12(field9(res, "ftBalance", 2));
|
|
29729
|
+
const xtBalance = toBigInt12(field9(res, "xtBalance", 3));
|
|
29730
|
+
const rawGts = field9(res, "gtInfo", 4);
|
|
29731
|
+
const gts = [];
|
|
29732
|
+
if (Array.isArray(rawGts)) {
|
|
29733
|
+
for (const g of rawGts) {
|
|
29734
|
+
const loanId = toBigInt12(field9(g, "loanId", 0));
|
|
29735
|
+
if (loanId === 0n) continue;
|
|
29736
|
+
gts.push({
|
|
29737
|
+
loanId: loanId.toString(),
|
|
29738
|
+
collateralAmt: toBigInt12(field9(g, "collateralAmt", 1)),
|
|
29739
|
+
debtAmt: toBigInt12(field9(g, "debtAmt", 2))
|
|
29740
|
+
});
|
|
29741
|
+
}
|
|
29742
|
+
}
|
|
29743
|
+
return { ftBalance, xtBalance, gts };
|
|
29744
|
+
}
|
|
29745
|
+
var getTermMaxUserDataConverter = (_lender, chainId, account, meta) => {
|
|
29746
|
+
const discovery = getCachedTermMaxDiscovery(chainId, account);
|
|
29747
|
+
const markets = discovery?.markets ?? [];
|
|
29748
|
+
const expected = markets.length > 0 ? TERMMAX_CALLS_PER_ACCOUNT : 0;
|
|
29749
|
+
return [
|
|
29750
|
+
(data) => {
|
|
29751
|
+
if (expected === 0) return void 0;
|
|
29752
|
+
if (!data || data.length < expected) return void 0;
|
|
29753
|
+
const positions = data[0];
|
|
29754
|
+
if (!Array.isArray(positions)) return void 0;
|
|
29755
|
+
const now = nowSec8();
|
|
29756
|
+
const out = {};
|
|
29757
|
+
markets.forEach((market, i) => {
|
|
29758
|
+
const parsed = parsePosition(positions[i]);
|
|
29759
|
+
if (!parsed) return;
|
|
29760
|
+
if (parsed.ftBalance === 0n && parsed.gts.length === 0) return;
|
|
29761
|
+
const lenderKey = termMaxLenderKey(market.market);
|
|
29762
|
+
const metaMap = meta?.[lenderKey];
|
|
29763
|
+
if (!metaMap) return;
|
|
29764
|
+
const loanAddr = market.debtToken.toLowerCase();
|
|
29765
|
+
const collAddr = market.collateral.toLowerCase();
|
|
29766
|
+
const loanUid = createMarketUid(chainId, lenderKey, loanAddr);
|
|
29767
|
+
const collUid = createMarketUid(chainId, lenderKey, collAddr);
|
|
29768
|
+
const loanMeta = metaMap[loanUid];
|
|
29769
|
+
const collMeta = metaMap[collUid];
|
|
29770
|
+
const loanDisplay = loanMeta ? getDisplayPrice(loanMeta) : 0;
|
|
29771
|
+
const loanOracle = loanMeta ? getOraclePrice(loanMeta) : 0;
|
|
29772
|
+
const loanHist = loanMeta?.price?.priceUsd24h ?? loanDisplay;
|
|
29773
|
+
const collDisplay = collMeta ? getDisplayPrice(collMeta) : 0;
|
|
29774
|
+
const collOracle = collMeta ? getOraclePrice(collMeta) : 0;
|
|
29775
|
+
const collHist = collMeta?.price?.priceUsd24h ?? collDisplay;
|
|
29776
|
+
const loanDec = loanMeta?.asset?.decimals ?? market.debtDecimals;
|
|
29777
|
+
const collDec = collMeta?.asset?.decimals ?? market.collateralDecimals;
|
|
29778
|
+
const maturity = Number(market.maturity);
|
|
29779
|
+
const isMatured = maturity > 0 && maturity <= now;
|
|
29780
|
+
const positionsByAccount = {};
|
|
29781
|
+
const modes = {};
|
|
29782
|
+
const hist = {};
|
|
29783
|
+
if (parsed.ftBalance > 0n) {
|
|
29784
|
+
const ftStr = parseRawAmount(parsed.ftBalance.toString(), loanDec);
|
|
29785
|
+
const ftNum = Number(ftStr);
|
|
29786
|
+
positionsByAccount["0"] = {
|
|
29787
|
+
[loanUid]: {
|
|
29788
|
+
marketUid: loanUid,
|
|
29789
|
+
underlying: loanAddr,
|
|
29790
|
+
deposits: ftStr,
|
|
29791
|
+
debt: "0",
|
|
29792
|
+
debtStable: "0",
|
|
29793
|
+
depositsUSD: ftNum * loanDisplay,
|
|
29794
|
+
debtUSD: 0,
|
|
29795
|
+
debtStableUSD: 0,
|
|
29796
|
+
depositsUSDOracle: ftNum * loanOracle,
|
|
29797
|
+
debtUSDOracle: 0,
|
|
29798
|
+
debtStableUSDOracle: 0,
|
|
29799
|
+
stableBorrowRate: "0",
|
|
29800
|
+
// A TermMax lend position never collateralizes a borrow.
|
|
29801
|
+
collateralEnabled: false,
|
|
29802
|
+
claimableRewards: 0
|
|
29803
|
+
}
|
|
29804
|
+
};
|
|
29805
|
+
modes["0"] = 0;
|
|
29806
|
+
hist["0"] = { totalDeposits24h: ftNum * loanHist, totalDebt24h: 0 };
|
|
29807
|
+
}
|
|
29808
|
+
for (const gt of parsed.gts) {
|
|
29809
|
+
const collStr = parseRawAmount(gt.collateralAmt.toString(), collDec);
|
|
29810
|
+
const collNum = Number(collStr);
|
|
29811
|
+
const debtStr = parseRawAmount(gt.debtAmt.toString(), loanDec);
|
|
29812
|
+
const debtNum = Number(debtStr);
|
|
29813
|
+
if (gt.collateralAmt === 0n && gt.debtAmt === 0n) continue;
|
|
29814
|
+
positionsByAccount[gt.loanId] = {
|
|
29815
|
+
[collUid]: {
|
|
29816
|
+
marketUid: collUid,
|
|
29817
|
+
underlying: collAddr,
|
|
29818
|
+
deposits: collStr,
|
|
29819
|
+
debt: "0",
|
|
29820
|
+
debtStable: "0",
|
|
29821
|
+
depositsUSD: collNum * collDisplay,
|
|
29822
|
+
debtUSD: 0,
|
|
29823
|
+
debtStableUSD: 0,
|
|
29824
|
+
depositsUSDOracle: collNum * collOracle,
|
|
29825
|
+
debtUSDOracle: 0,
|
|
29826
|
+
debtStableUSDOracle: 0,
|
|
29827
|
+
stableBorrowRate: "0",
|
|
29828
|
+
collateralEnabled: true,
|
|
29829
|
+
claimableRewards: 0
|
|
29830
|
+
},
|
|
29831
|
+
[loanUid]: {
|
|
29832
|
+
marketUid: loanUid,
|
|
29833
|
+
underlying: loanAddr,
|
|
29834
|
+
deposits: "0",
|
|
29835
|
+
debt: "0",
|
|
29836
|
+
// Fixed-term debt → stable slot (Exactly / Lista / Teller convention).
|
|
29837
|
+
debtStable: debtStr,
|
|
29838
|
+
depositsUSD: 0,
|
|
29839
|
+
debtUSD: 0,
|
|
29840
|
+
debtStableUSD: debtNum * loanDisplay,
|
|
29841
|
+
depositsUSDOracle: 0,
|
|
29842
|
+
debtUSDOracle: 0,
|
|
29843
|
+
debtStableUSDOracle: debtNum * loanOracle,
|
|
29844
|
+
stableBorrowRate: "0",
|
|
29845
|
+
collateralEnabled: false,
|
|
29846
|
+
claimableRewards: 0,
|
|
29847
|
+
// Fixed-term loan detail. `loanId` = the gtId, which is the target
|
|
29848
|
+
// of every write op (repay / removeCollateral / …). Debt is a
|
|
29849
|
+
// STATIC face value: nothing accrues, so no accruedInterest.
|
|
29850
|
+
term: {
|
|
29851
|
+
loanId: gt.loanId,
|
|
29852
|
+
isDynamic: false,
|
|
29853
|
+
debt: debtStr,
|
|
29854
|
+
maturity: maturity || void 0,
|
|
29855
|
+
isMatured
|
|
29856
|
+
}
|
|
29857
|
+
}
|
|
29858
|
+
};
|
|
29859
|
+
modes[gt.loanId] = 0;
|
|
29860
|
+
hist[gt.loanId] = {
|
|
29861
|
+
totalDeposits24h: collNum * collHist,
|
|
29862
|
+
totalDebt24h: debtNum * loanHist
|
|
29863
|
+
};
|
|
29864
|
+
}
|
|
29865
|
+
if (Object.keys(positionsByAccount).length === 0) return;
|
|
29866
|
+
const userData = createMultiAccountTypeUserState(
|
|
29867
|
+
{
|
|
29868
|
+
chainId,
|
|
29869
|
+
account,
|
|
29870
|
+
lendingPositions: positionsByAccount,
|
|
29871
|
+
modes
|
|
29872
|
+
},
|
|
29873
|
+
metaMap,
|
|
29874
|
+
hist
|
|
29875
|
+
);
|
|
29876
|
+
if (userData && userData.data.length > 0) out[lenderKey] = userData;
|
|
29877
|
+
});
|
|
29878
|
+
return Object.keys(out).length > 0 ? out : void 0;
|
|
29879
|
+
},
|
|
29880
|
+
expected
|
|
29881
|
+
];
|
|
29882
|
+
};
|
|
28615
29883
|
|
|
28616
29884
|
// src/lending/user-data/fetch-balances/parse.ts
|
|
28617
29885
|
function getUserDataConverter(lender, chainId, account, params, meta) {
|
|
@@ -28645,6 +29913,10 @@ function getUserDataConverter(lender, chainId, account, params, meta) {
|
|
|
28645
29913
|
return getRiverUserDataConverter(lender, chainId, account, meta);
|
|
28646
29914
|
if (isTeller(lender))
|
|
28647
29915
|
return getTellerUserDataConverter(lender, chainId, account, meta);
|
|
29916
|
+
if (isTermMax(lender))
|
|
29917
|
+
return getTermMaxUserDataConverter(lender, chainId, account, meta);
|
|
29918
|
+
if (isInverse(lender))
|
|
29919
|
+
return getInverseUserDataConverter(lender, chainId, account, meta);
|
|
28648
29920
|
if (isCompoundV3Type(lender))
|
|
28649
29921
|
return getCompoundV3UserDataConverter(
|
|
28650
29922
|
lender,
|
|
@@ -33242,6 +34514,8 @@ var getAbi2 = (lender) => {
|
|
|
33242
34514
|
return [...RiverTroveManagerAbi, ...RiverStabilityPoolAbi];
|
|
33243
34515
|
if (isTeller(lender))
|
|
33244
34516
|
return [...TellerV2Abi, ...TellerCollateralManagerAbi];
|
|
34517
|
+
if (isInverse(lender))
|
|
34518
|
+
return [...InverseMarketAbi, ...InverseEscrowAbi, ...InverseDbrAbi];
|
|
33245
34519
|
if (isInit(lender)) return InitLensAbi;
|
|
33246
34520
|
if (isEulerType(lender)) return accountLensAbi;
|
|
33247
34521
|
if (isCompoundV2Type(lender))
|
|
@@ -33798,7 +35072,7 @@ var MORPHO_API_CHAIN_IDS = {
|
|
|
33798
35072
|
[Chain.UNICHAIN]: 130
|
|
33799
35073
|
};
|
|
33800
35074
|
var FETCH_TIMEOUT_MS = 3e3;
|
|
33801
|
-
var
|
|
35075
|
+
var CACHE_TTL_MS4 = 2e3;
|
|
33802
35076
|
var buildSubgraphQuery = (account) => `
|
|
33803
35077
|
{
|
|
33804
35078
|
account(id: "${account.toLowerCase()}") {
|
|
@@ -33853,11 +35127,11 @@ async function fetchJsonWithProxyFallback(url, body, proxyConfig) {
|
|
|
33853
35127
|
}
|
|
33854
35128
|
var inflight = /* @__PURE__ */ new Map();
|
|
33855
35129
|
var resolved = /* @__PURE__ */ new Map();
|
|
33856
|
-
function
|
|
35130
|
+
function cacheKey4(chainId, account) {
|
|
33857
35131
|
return `${chainId}:${account.toLowerCase()}`;
|
|
33858
35132
|
}
|
|
33859
35133
|
async function dedupedFetch(chainId, account, loader) {
|
|
33860
|
-
const key =
|
|
35134
|
+
const key = cacheKey4(chainId, account);
|
|
33861
35135
|
const now = Date.now();
|
|
33862
35136
|
const cached = resolved.get(key);
|
|
33863
35137
|
if (cached && cached.expiresAt > now) {
|
|
@@ -33866,7 +35140,7 @@ async function dedupedFetch(chainId, account, loader) {
|
|
|
33866
35140
|
const existing = inflight.get(key);
|
|
33867
35141
|
if (existing) return existing;
|
|
33868
35142
|
const promise = loader().then((value) => {
|
|
33869
|
-
resolved.set(key, { value, expiresAt: Date.now() +
|
|
35143
|
+
resolved.set(key, { value, expiresAt: Date.now() + CACHE_TTL_MS4 });
|
|
33870
35144
|
return value;
|
|
33871
35145
|
}).finally(() => {
|
|
33872
35146
|
inflight.delete(key);
|
|
@@ -33998,8 +35272,8 @@ function calculateOverallNetApr(totalDepositsUSD, totalDebtUSD, avgDepositApr, a
|
|
|
33998
35272
|
return (totalDepositsUSD * avgDepositApr - totalDebtUSD * avgBorrowApr) / Math.abs(totalNetWorth) * (totalNetWorth > 0 ? 1 : -1);
|
|
33999
35273
|
}
|
|
34000
35274
|
function calculateWeightedAprs(items) {
|
|
34001
|
-
const wa = (
|
|
34002
|
-
items.filter((i) => i[weightField] !== 0).map((i) => ({ value: i[
|
|
35275
|
+
const wa = (field10, weightField) => calculateWeightedAverage(
|
|
35276
|
+
items.filter((i) => i[weightField] !== 0).map((i) => ({ value: i[field10], weight: Math.abs(i[weightField]) }))
|
|
34003
35277
|
);
|
|
34004
35278
|
return {
|
|
34005
35279
|
apr: wa("apr", "nav"),
|
|
@@ -35743,8 +37017,8 @@ var TIMEOUT_MS = 8e3;
|
|
|
35743
37017
|
var slisBnbFetcher = {
|
|
35744
37018
|
label: "SLISBNB",
|
|
35745
37019
|
fetch: async () => {
|
|
35746
|
-
const
|
|
35747
|
-
const url = `${HISTORY_URL}?name=slisBNBRate&cycle=1&startTime=${
|
|
37020
|
+
const nowSec9 = Math.floor(Date.now() / 1e3);
|
|
37021
|
+
const url = `${HISTORY_URL}?name=slisBNBRate&cycle=1&startTime=${nowSec9 - LOOKBACK_SECONDS}&endTime=${nowSec9}`;
|
|
35748
37022
|
const controller = new AbortController();
|
|
35749
37023
|
const timer = setTimeout(() => controller.abort(), TIMEOUT_MS);
|
|
35750
37024
|
try {
|
|
@@ -38338,6 +39612,40 @@ var rwaFundsFetcher = {
|
|
|
38338
39612
|
}
|
|
38339
39613
|
};
|
|
38340
39614
|
|
|
39615
|
+
// src/yields/intrinsic/fetchers/inverse.ts
|
|
39616
|
+
var DOLA_STAKING_URL = "https://www.inverse.finance/api/dola-staking";
|
|
39617
|
+
var JDOLA_STAKING_URL = "https://www.inverse.finance/api/junior/jdola-staking";
|
|
39618
|
+
var SDOLA_KEY = "SDOLA";
|
|
39619
|
+
var SDOLA_GROUP_KEY = "sDOLA::SDOLA";
|
|
39620
|
+
var fetchJson2 = async (url) => {
|
|
39621
|
+
const res = await fetch(url, {
|
|
39622
|
+
headers: { accept: "application/json" },
|
|
39623
|
+
signal: AbortSignal.timeout(8e3)
|
|
39624
|
+
});
|
|
39625
|
+
if (!res.ok) throw new Error(`HTTP ${res.status}`);
|
|
39626
|
+
return res.json();
|
|
39627
|
+
};
|
|
39628
|
+
var fetchSdolaApyPercent = async () => {
|
|
39629
|
+
try {
|
|
39630
|
+
const d = await fetchJson2(DOLA_STAKING_URL);
|
|
39631
|
+
const apy = Number(d?.calculatedApy);
|
|
39632
|
+
if (Number.isFinite(apy) && apy > 0) return apy;
|
|
39633
|
+
throw new Error("calculatedApy missing");
|
|
39634
|
+
} catch {
|
|
39635
|
+
const d = await fetchJson2(JDOLA_STAKING_URL);
|
|
39636
|
+
const apy = Number(d?.sDolaApy);
|
|
39637
|
+
if (Number.isFinite(apy) && apy > 0) return apy;
|
|
39638
|
+
throw new Error("sDolaApy missing");
|
|
39639
|
+
}
|
|
39640
|
+
};
|
|
39641
|
+
var sdolaFetcher = {
|
|
39642
|
+
label: "SDOLA",
|
|
39643
|
+
fetch: async () => {
|
|
39644
|
+
const apr = apyToAprPercent(await fetchSdolaApyPercent());
|
|
39645
|
+
return { [SDOLA_KEY]: apr, [SDOLA_GROUP_KEY]: apr };
|
|
39646
|
+
}
|
|
39647
|
+
};
|
|
39648
|
+
|
|
38341
39649
|
// src/yields/intrinsic/fetchers/reProtocol.ts
|
|
38342
39650
|
var REUSD_KEY = "RE::reUSD";
|
|
38343
39651
|
var REUSDE_KEY = "RE::reUSDe";
|
|
@@ -39848,6 +41156,27 @@ var SINGLE_CHAIN_ENTRIES = {
|
|
|
39848
41156
|
yieldFetcher: fraxSavingsFetcher,
|
|
39849
41157
|
yieldKey: "SFRAX"
|
|
39850
41158
|
},
|
|
41159
|
+
{
|
|
41160
|
+
// Inverse sDOLA — 4626 auto-compounder over the DOLA Savings
|
|
41161
|
+
// Account; yield is FiRM's DBR revenue via a continuous on-chain
|
|
41162
|
+
// auction, no rehypothecation. Instant permissionless exit
|
|
41163
|
+
// (maxDeposit = uint.max verified 2026-08; ~6.9M DOLA TVL).
|
|
41164
|
+
// Ethereum-only; Inverse propagates the rate cross-chain via
|
|
41165
|
+
// CCIP, so bridged deployments may appear later. The jDOLA
|
|
41166
|
+
// junior tranche (48h exit window + fee, ~$28k) is deliberately
|
|
41167
|
+
// not registered.
|
|
41168
|
+
address: "0xb45ad160634c528cc3d2926d9807104fa3157305",
|
|
41169
|
+
underlying: "0x865377367054516e17014ccded1e7d814edc9ce4",
|
|
41170
|
+
// DOLA
|
|
41171
|
+
symbol: "sDOLA",
|
|
41172
|
+
brand: "Inverse",
|
|
41173
|
+
decimals: 18,
|
|
41174
|
+
isRebasing: false,
|
|
41175
|
+
isMintable: true,
|
|
41176
|
+
withdrawalMode: "instant",
|
|
41177
|
+
yieldFetcher: sdolaFetcher,
|
|
41178
|
+
yieldKey: SDOLA_GROUP_KEY
|
|
41179
|
+
},
|
|
39851
41180
|
{
|
|
39852
41181
|
address: "0x83f20f44975d03b1b09e64809b757c47f942beea",
|
|
39853
41182
|
underlying: "0x6b175474e89094c44da98b954eedeac495271d0f",
|
|
@@ -40382,13 +41711,13 @@ var gmxFetcher = {
|
|
|
40382
41711
|
fetch: async () => {
|
|
40383
41712
|
const { apy } = await fetchGmxRawData(GMX_CHAIN, GMX_DEFAULT_APY_PERIOD);
|
|
40384
41713
|
const rData = {};
|
|
40385
|
-
for (const [
|
|
40386
|
-
const a =
|
|
41714
|
+
for (const [addr2, d] of Object.entries(apy.markets ?? {})) {
|
|
41715
|
+
const a = addr2.toLowerCase();
|
|
40387
41716
|
if (a === gmx_eth_usd_address) rData[gmx_eth_usd] = apyToApr(d.apy) * 100;
|
|
40388
41717
|
if (a === gmx_btc_usd_address) rData[gmx_btc_usd] = apyToApr(d.apy) * 100;
|
|
40389
41718
|
}
|
|
40390
|
-
for (const [
|
|
40391
|
-
const a =
|
|
41719
|
+
for (const [addr2, d] of Object.entries(apy.glvs ?? {})) {
|
|
41720
|
+
const a = addr2.toLowerCase();
|
|
40392
41721
|
if (a === glv_wbtc_usdc_address)
|
|
40393
41722
|
rData[glv_wbtc_usdc] = apyToApr(d.apy) * 100;
|
|
40394
41723
|
if (a === glv_weth_usdc_address)
|
|
@@ -40872,8 +42201,8 @@ var yearnKatanaFetcher = {
|
|
|
40872
42201
|
YEARN_KATANA_URL
|
|
40873
42202
|
).then((r) => r.json());
|
|
40874
42203
|
let map = {};
|
|
40875
|
-
Object.entries(res).forEach(([
|
|
40876
|
-
const key = addressToAssetYearn[
|
|
42204
|
+
Object.entries(res).forEach(([addr2, data]) => {
|
|
42205
|
+
const key = addressToAssetYearn[addr2.toLowerCase()];
|
|
40877
42206
|
if (key) {
|
|
40878
42207
|
const apr = ((data.apr.netAPR ?? 0) + (data.apr.extra?.extrinsicYield ?? 0) + (data.apr.extra?.katanaNativeYield ?? 0)) * 100;
|
|
40879
42208
|
map[key] = apr;
|
|
@@ -42075,9 +43404,9 @@ function parseTellerResults(data, meta, context) {
|
|
|
42075
43404
|
const principal = meta.principal;
|
|
42076
43405
|
const collateral = meta.collateral;
|
|
42077
43406
|
const lenderKey = tellerLenderKey(meta.pool);
|
|
42078
|
-
const usdOf = (
|
|
42079
|
-
const key = tokenList?.[
|
|
42080
|
-
return usdPrices[key] ?? usdPrices[
|
|
43407
|
+
const usdOf = (addr2) => {
|
|
43408
|
+
const key = tokenList?.[addr2]?.assetGroup ?? `${chainId}-${addr2}`;
|
|
43409
|
+
return usdPrices[key] ?? usdPrices[addr2];
|
|
42081
43410
|
};
|
|
42082
43411
|
const principalUSD = usdOf(principal);
|
|
42083
43412
|
const collateralUSD = usdOf(collateral);
|
|
@@ -42143,6 +43472,86 @@ var tellerFetcher = {
|
|
|
42143
43472
|
parse: parseTellerResults,
|
|
42144
43473
|
getAbi: getTellerAbi
|
|
42145
43474
|
};
|
|
43475
|
+
function getTermMaxCalls(chainId) {
|
|
43476
|
+
const proto = termMaxConfigByChain(chainId);
|
|
43477
|
+
if (!proto?.oracleAggregatorV2) return [];
|
|
43478
|
+
const markets = getCachedTermMaxMarkets(chainId);
|
|
43479
|
+
if (markets.length === 0) return [];
|
|
43480
|
+
const oracle = proto.oracleAggregatorV2;
|
|
43481
|
+
const results = [];
|
|
43482
|
+
for (const m of markets) {
|
|
43483
|
+
if (!m.market || !m.debtToken || !m.collateral) continue;
|
|
43484
|
+
const calls = [
|
|
43485
|
+
{ address: oracle, name: "getPrice", params: [m.debtToken] },
|
|
43486
|
+
{ address: oracle, name: "getPrice", params: [m.collateral] }
|
|
43487
|
+
];
|
|
43488
|
+
results.push({
|
|
43489
|
+
calls,
|
|
43490
|
+
meta: {
|
|
43491
|
+
market: m.market.toLowerCase(),
|
|
43492
|
+
debtToken: m.debtToken.toLowerCase(),
|
|
43493
|
+
collateral: m.collateral.toLowerCase()
|
|
43494
|
+
},
|
|
43495
|
+
lender: termMaxLenderKey(m.market)
|
|
43496
|
+
});
|
|
43497
|
+
}
|
|
43498
|
+
return results;
|
|
43499
|
+
}
|
|
43500
|
+
function readUsdPrice(res) {
|
|
43501
|
+
if (res == null || res === "0x") return void 0;
|
|
43502
|
+
let raw;
|
|
43503
|
+
let dec;
|
|
43504
|
+
if (Array.isArray(res)) {
|
|
43505
|
+
raw = res[0];
|
|
43506
|
+
dec = res[1];
|
|
43507
|
+
} else if (typeof res === "object") {
|
|
43508
|
+
raw = res.price;
|
|
43509
|
+
dec = res.decimals;
|
|
43510
|
+
} else {
|
|
43511
|
+
return void 0;
|
|
43512
|
+
}
|
|
43513
|
+
let price2;
|
|
43514
|
+
try {
|
|
43515
|
+
price2 = BigInt(raw);
|
|
43516
|
+
} catch {
|
|
43517
|
+
return void 0;
|
|
43518
|
+
}
|
|
43519
|
+
if (price2 <= 0n) return void 0;
|
|
43520
|
+
const decimals = Number(dec);
|
|
43521
|
+
if (!Number.isFinite(decimals) || decimals < 0 || decimals > 36) return void 0;
|
|
43522
|
+
const usd = Number(price2) / 10 ** decimals;
|
|
43523
|
+
return Number.isFinite(usd) && usd > 0 ? usd : void 0;
|
|
43524
|
+
}
|
|
43525
|
+
function parseTermMaxResults(data, meta, context) {
|
|
43526
|
+
const { chainId } = context;
|
|
43527
|
+
const lenderKey = termMaxLenderKey(meta.market);
|
|
43528
|
+
const entries = [];
|
|
43529
|
+
const legs = [
|
|
43530
|
+
[meta.debtToken, data?.[0], "TermMax oracle (debt asset)"],
|
|
43531
|
+
[meta.collateral, data?.[1], "TermMax oracle (collateral)"]
|
|
43532
|
+
];
|
|
43533
|
+
for (const [asset, res, description] of legs) {
|
|
43534
|
+
const usd = readUsdPrice(res);
|
|
43535
|
+
if (usd === void 0) continue;
|
|
43536
|
+
entries.push({
|
|
43537
|
+
asset,
|
|
43538
|
+
price: usd,
|
|
43539
|
+
priceUSD: usd,
|
|
43540
|
+
marketUid: createMarketUid(chainId, lenderKey, asset),
|
|
43541
|
+
targetLender: lenderKey,
|
|
43542
|
+
description
|
|
43543
|
+
});
|
|
43544
|
+
}
|
|
43545
|
+
return entries;
|
|
43546
|
+
}
|
|
43547
|
+
function getTermMaxAbi() {
|
|
43548
|
+
return TermMaxOracleAggregatorV2Abi;
|
|
43549
|
+
}
|
|
43550
|
+
var termMaxFetcher = {
|
|
43551
|
+
getCalls: getTermMaxCalls,
|
|
43552
|
+
parse: parseTermMaxResults,
|
|
43553
|
+
getAbi: getTermMaxAbi
|
|
43554
|
+
};
|
|
42146
43555
|
var CompoundV2OracleAbi = [
|
|
42147
43556
|
{
|
|
42148
43557
|
inputs: [{ internalType: "address", name: "cToken", type: "address" }],
|
|
@@ -42482,8 +43891,8 @@ var priceLensAbi = [
|
|
|
42482
43891
|
// src/prices/oracle-prices/fetchers/euler.ts
|
|
42483
43892
|
var MAX_VIRTUAL_ADDRESS = 65535;
|
|
42484
43893
|
var MAX_SANE_PRICE_USD = 1e7;
|
|
42485
|
-
function isUsdUnitOfAccount(
|
|
42486
|
-
const numeric = parseInt(
|
|
43894
|
+
function isUsdUnitOfAccount(addr2) {
|
|
43895
|
+
const numeric = parseInt(addr2, 16);
|
|
42487
43896
|
return numeric <= MAX_VIRTUAL_ADDRESS;
|
|
42488
43897
|
}
|
|
42489
43898
|
var PRICE_LENS_ADDRESS = "0x6392892f3C57c658d2c748fc64c6fe57680E889F";
|
|
@@ -43041,7 +44450,7 @@ var siloV3Fetcher = {
|
|
|
43041
44450
|
getAbi: getSiloV3Abi
|
|
43042
44451
|
};
|
|
43043
44452
|
var FLUID_EEE_LOWER3 = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";
|
|
43044
|
-
var normalizeUnderlying4 = (
|
|
44453
|
+
var normalizeUnderlying4 = (addr2) => addr2 === FLUID_EEE_LOWER3 ? zeroAddress : addr2;
|
|
43045
44454
|
function priceColInDebt(raw, colDec, debtDec) {
|
|
43046
44455
|
return formatMorphoPrice(raw, debtDec, colDec + 9);
|
|
43047
44456
|
}
|
|
@@ -43886,6 +45295,11 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
43886
45295
|
() => tellerFetcher.getCalls(chainId),
|
|
43887
45296
|
getCallsErrors
|
|
43888
45297
|
) : [];
|
|
45298
|
+
const termMaxResults = isActive("termmax") ? safeGetCalls(
|
|
45299
|
+
"termmax",
|
|
45300
|
+
() => termMaxFetcher.getCalls(chainId),
|
|
45301
|
+
getCallsErrors
|
|
45302
|
+
) : [];
|
|
43889
45303
|
const siloV2Results = isActive("silov2") ? safeGetCalls(
|
|
43890
45304
|
"siloV2",
|
|
43891
45305
|
() => siloV2Fetcher.getCalls(chainId),
|
|
@@ -44002,6 +45416,15 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
44002
45416
|
getTellerAbi(),
|
|
44003
45417
|
"derived"
|
|
44004
45418
|
);
|
|
45419
|
+
const termMaxGroup = buildGroup(
|
|
45420
|
+
"termmax",
|
|
45421
|
+
termMaxResults,
|
|
45422
|
+
termMaxFetcher.parse,
|
|
45423
|
+
getTermMaxAbi(),
|
|
45424
|
+
// DIRECT: `OracleAggregatorV2.getPrice` returns a USD price outright —
|
|
45425
|
+
// nothing is derived from another asset's price.
|
|
45426
|
+
"direct"
|
|
45427
|
+
);
|
|
44005
45428
|
const siloV2Group = buildGroup(
|
|
44006
45429
|
"siloV2",
|
|
44007
45430
|
siloV2Results,
|
|
@@ -44051,6 +45474,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
44051
45474
|
liquityGroup,
|
|
44052
45475
|
riverGroup,
|
|
44053
45476
|
tellerGroup,
|
|
45477
|
+
termMaxGroup,
|
|
44054
45478
|
siloV2Group,
|
|
44055
45479
|
siloV3Group,
|
|
44056
45480
|
fluidGroup,
|
|
@@ -44097,6 +45521,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
44097
45521
|
liquityData,
|
|
44098
45522
|
riverData,
|
|
44099
45523
|
tellerData,
|
|
45524
|
+
termMaxData,
|
|
44100
45525
|
morphoGqlEntries,
|
|
44101
45526
|
siloV2GqlEntries,
|
|
44102
45527
|
siloV3GqlEntries
|
|
@@ -44221,6 +45646,14 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
44221
45646
|
allowFailure,
|
|
44222
45647
|
rpcOverrides
|
|
44223
45648
|
),
|
|
45649
|
+
executeGroup(
|
|
45650
|
+
termMaxGroup,
|
|
45651
|
+
chainId,
|
|
45652
|
+
chainBatchSize,
|
|
45653
|
+
retries,
|
|
45654
|
+
allowFailure,
|
|
45655
|
+
rpcOverrides
|
|
45656
|
+
),
|
|
44224
45657
|
morphoGqlPromise,
|
|
44225
45658
|
siloV2GqlPromise,
|
|
44226
45659
|
siloV3GqlPromise
|
|
@@ -44273,6 +45706,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
44273
45706
|
{ group: dolomiteGroup, data: dolomiteData },
|
|
44274
45707
|
{ group: midnightGroup, data: midnightData },
|
|
44275
45708
|
{ group: tellerGroup, data: tellerData },
|
|
45709
|
+
{ group: termMaxGroup, data: termMaxData },
|
|
44276
45710
|
...siloV2GqlEntries != null ? [] : [{ group: siloV2Group, data: siloV2Data }],
|
|
44277
45711
|
...siloV3GqlEntries != null ? [] : [{ group: siloV3Group, data: siloV3Data }],
|
|
44278
45712
|
// In hybrid mode the on-chain multicall ran too — surface its errors.
|
|
@@ -44332,6 +45766,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
44332
45766
|
parseTrackers(listaGroup, listaData.results);
|
|
44333
45767
|
parseTrackers(eulerGroup, eulerData.results);
|
|
44334
45768
|
parseTrackers(aaveV4Group, aaveV4Data.results);
|
|
45769
|
+
parseTrackers(termMaxGroup, termMaxData.results);
|
|
44335
45770
|
parseTrackers(
|
|
44336
45771
|
aaveGroup,
|
|
44337
45772
|
aaveData.results,
|
|
@@ -44581,9 +46016,9 @@ function rejectOutliers(candidates, guard = DEFAULT_OUTLIER_GUARD) {
|
|
|
44581
46016
|
const reference = consensusReference(candidates, guard);
|
|
44582
46017
|
if (reference === void 0) return candidates;
|
|
44583
46018
|
const upper = reference * guard.rejectFactor;
|
|
44584
|
-
const
|
|
46019
|
+
const lower3 = reference / guard.rejectFactor;
|
|
44585
46020
|
const kept = candidates.filter(
|
|
44586
|
-
(c) => c.priceUSD <= upper && c.priceUSD >=
|
|
46021
|
+
(c) => c.priceUSD <= upper && c.priceUSD >= lower3
|
|
44587
46022
|
);
|
|
44588
46023
|
return kept.length > 0 ? kept : candidates;
|
|
44589
46024
|
}
|
|
@@ -44942,10 +46377,10 @@ function createAssetArrayPerChain() {
|
|
|
44942
46377
|
return assetsPerChain;
|
|
44943
46378
|
}
|
|
44944
46379
|
var RELEVANT_LENDING_ASSETS = () => createAssetArrayPerChain();
|
|
44945
|
-
function createSimpleArrayPerChain(fork,
|
|
46380
|
+
function createSimpleArrayPerChain(fork, field10 = void 0) {
|
|
44946
46381
|
let pools = {};
|
|
44947
46382
|
Object.entries(fork ?? {}).forEach(([b2, data]) => {
|
|
44948
|
-
Object.entries(
|
|
46383
|
+
Object.entries(field10 ? data[field10] : data).forEach(
|
|
44949
46384
|
([chainId, address]) => {
|
|
44950
46385
|
if (!pools[chainId]) pools[chainId] = [];
|
|
44951
46386
|
pools[chainId] = uniq2([...pools[chainId], { address, pool: b2 }]);
|
|
@@ -45301,7 +46736,7 @@ var composeVaultDisplayName = (brand, curatorName, asset, fallbackName) => {
|
|
|
45301
46736
|
|
|
45302
46737
|
// src/vaults/fluid/publicCallParse.ts
|
|
45303
46738
|
var FLUID_EEE_LOWER4 = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";
|
|
45304
|
-
var normalizeUnderlying5 = (
|
|
46739
|
+
var normalizeUnderlying5 = (addr2) => addr2 === FLUID_EEE_LOWER4 ? zeroAddress : addr2;
|
|
45305
46740
|
var FLUID_RATE_SCALE2 = 100;
|
|
45306
46741
|
var scaleFluidRate2 = (raw) => {
|
|
45307
46742
|
if (raw === void 0 || raw === null) return 0;
|
|
@@ -45542,10 +46977,10 @@ function deriveConvertToAssets(totalAssetsRaw, totalSupplyRaw, shareDecimals) {
|
|
|
45542
46977
|
|
|
45543
46978
|
// src/vaults/gearbox/publicCallParse.ts
|
|
45544
46979
|
var WETH_MAINNET = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2";
|
|
45545
|
-
var normalizeUnderlying6 = (
|
|
45546
|
-
const
|
|
45547
|
-
if (chainId === "1" &&
|
|
45548
|
-
return
|
|
46980
|
+
var normalizeUnderlying6 = (addr2, chainId) => {
|
|
46981
|
+
const lower3 = addr2.toLowerCase();
|
|
46982
|
+
if (chainId === "1" && lower3 === WETH_MAINNET) return zeroAddress;
|
|
46983
|
+
return lower3;
|
|
45549
46984
|
};
|
|
45550
46985
|
var RAY_TO_PERCENT2 = 1e25;
|
|
45551
46986
|
var scaleRate = (raw) => {
|
|
@@ -46004,9 +47439,9 @@ var VAULT_V2_ADAPTER_ABI = parseAbi([
|
|
|
46004
47439
|
]);
|
|
46005
47440
|
var PHASE1_ABI = [...MetaMorphoAbi, ...VAULT_V2_PHASE1_ABI];
|
|
46006
47441
|
var FEE_SCALE = 1e18;
|
|
46007
|
-
var isHex40 = (
|
|
47442
|
+
var isHex40 = (addr2) => typeof addr2 === "string" && /^0x[0-9a-f]{40}$/i.test(addr2);
|
|
46008
47443
|
var isHex64 = (v) => typeof v === "string" && /^0x[0-9a-f]{64}$/i.test(v);
|
|
46009
|
-
var lcOrUndefined = (
|
|
47444
|
+
var lcOrUndefined = (addr2) => isHex40(addr2) ? addr2.toLowerCase() : void 0;
|
|
46010
47445
|
var toNumberSafe = (raw, fallback = 0) => {
|
|
46011
47446
|
if (raw === void 0 || raw === null) return fallback;
|
|
46012
47447
|
const n = Number(raw);
|
|
@@ -46153,12 +47588,12 @@ var fetchMorphoVaultsFromChain = async (chainId, multicallRetry, prices = {}, to
|
|
|
46153
47588
|
for (let i = 0; i < entries.length; i++) {
|
|
46154
47589
|
const { entry } = entries[i];
|
|
46155
47590
|
const base = i * PHASE1_PER_VAULT;
|
|
46156
|
-
const
|
|
47591
|
+
const slice2 = phase1.slice(base, base + CALLS_PER_VAULT);
|
|
46157
47592
|
const v2 = isV2[i] ? v2ByVault.get(entry.vault.toLowerCase()) ?? null : null;
|
|
46158
47593
|
const v2FeePercent = isV2[i] ? toNumberSafe(phase1[base + PERFORMANCE_FEE_INDEX]) / FEE_SCALE * 100 : void 0;
|
|
46159
47594
|
const parsed = parseVault3(
|
|
46160
47595
|
entry,
|
|
46161
|
-
|
|
47596
|
+
slice2,
|
|
46162
47597
|
chainId,
|
|
46163
47598
|
prices,
|
|
46164
47599
|
tokenList,
|
|
@@ -46544,11 +47979,11 @@ var PHASE1_CALLS2 = [
|
|
|
46544
47979
|
var PHASE1_PER_VAULT2 = PHASE1_CALLS2.length;
|
|
46545
47980
|
var WITHDRAW_QUEUE_LENGTH_INDEX2 = 8;
|
|
46546
47981
|
var FEE_SCALE2 = 1e18;
|
|
46547
|
-
var isHex402 = (
|
|
46548
|
-
var lcOrUndefined2 = (
|
|
46549
|
-
if (!isHex402(
|
|
46550
|
-
const
|
|
46551
|
-
return
|
|
47982
|
+
var isHex402 = (addr2) => typeof addr2 === "string" && /^0x[0-9a-f]{40}$/i.test(addr2);
|
|
47983
|
+
var lcOrUndefined2 = (addr2) => {
|
|
47984
|
+
if (!isHex402(addr2)) return void 0;
|
|
47985
|
+
const lower3 = addr2.toLowerCase();
|
|
47986
|
+
return lower3 === zeroAddress ? void 0 : lower3;
|
|
46552
47987
|
};
|
|
46553
47988
|
var isHex642 = (val) => typeof val === "string" && /^0x[0-9a-f]{64}$/i.test(val);
|
|
46554
47989
|
var toNumberSafe2 = (raw, fallback = 0) => {
|
|
@@ -46659,10 +48094,10 @@ var fetchListaVaultsFromChain = async (chainId, multicallRetry, prices = {}, tok
|
|
|
46659
48094
|
const out = {};
|
|
46660
48095
|
for (let i = 0; i < entries.length; i++) {
|
|
46661
48096
|
const entry = entries[i];
|
|
46662
|
-
const
|
|
48097
|
+
const slice2 = phase1.slice(i * PHASE1_PER_VAULT2, (i + 1) * PHASE1_PER_VAULT2);
|
|
46663
48098
|
const parsed = parseVault4(
|
|
46664
48099
|
entry,
|
|
46665
|
-
|
|
48100
|
+
slice2,
|
|
46666
48101
|
curatorAddrByVault[i],
|
|
46667
48102
|
chainId,
|
|
46668
48103
|
prices,
|
|
@@ -47154,9 +48589,9 @@ query EvkByAssets($assets: [Bytes!]!) {
|
|
|
47154
48589
|
`;
|
|
47155
48590
|
var ZERO = 0n;
|
|
47156
48591
|
var RAY_TO_PERCENT3 = 1e25;
|
|
47157
|
-
function readAddress2(
|
|
47158
|
-
if (!
|
|
47159
|
-
return
|
|
48592
|
+
function readAddress2(field10) {
|
|
48593
|
+
if (!field10) return void 0;
|
|
48594
|
+
return field10.toLowerCase();
|
|
47160
48595
|
}
|
|
47161
48596
|
function parseVaultFee(v) {
|
|
47162
48597
|
if (v.performanceFee == null) return 0;
|
|
@@ -47515,6 +48950,300 @@ var fetchEulerEarnVaults = async (chainId, prices = {}, tokenList = {}, multical
|
|
|
47515
48950
|
).catch(() => void 0);
|
|
47516
48951
|
return isNonEmpty(fromSubgraph) ? fromSubgraph : fromApi ?? {};
|
|
47517
48952
|
};
|
|
48953
|
+
var warn6 = (...args) => {
|
|
48954
|
+
};
|
|
48955
|
+
var num2 = (v) => {
|
|
48956
|
+
const n = Number(v);
|
|
48957
|
+
return Number.isFinite(n) ? n : 0;
|
|
48958
|
+
};
|
|
48959
|
+
var big5 = (v) => {
|
|
48960
|
+
try {
|
|
48961
|
+
if (v === void 0 || v === null || v === "") return "0";
|
|
48962
|
+
const s = String(v);
|
|
48963
|
+
return BigInt(s.includes(".") ? s.slice(0, s.indexOf(".")) : s).toString();
|
|
48964
|
+
} catch {
|
|
48965
|
+
return "0";
|
|
48966
|
+
}
|
|
48967
|
+
};
|
|
48968
|
+
var lower2 = (v) => String(v ?? "").toLowerCase();
|
|
48969
|
+
async function fetchTermMaxVaultsFromApi(chainId, prices = {}, tokenList = {}, fetchImpl = fetch) {
|
|
48970
|
+
const url = `${termMaxApiBase(chainId)}/vault/list?chainId=${chainId}`;
|
|
48971
|
+
let rows;
|
|
48972
|
+
try {
|
|
48973
|
+
const res = await fetchImpl.call(globalThis, url);
|
|
48974
|
+
if (!res.ok) {
|
|
48975
|
+
warn6(`vault/list ${chainId} \u2192 HTTP ${res.status}`);
|
|
48976
|
+
return null;
|
|
48977
|
+
}
|
|
48978
|
+
const json = await res.json();
|
|
48979
|
+
rows = Array.isArray(json?.data) ? json.data : [];
|
|
48980
|
+
} catch (e) {
|
|
48981
|
+
warn6(`vault/list ${chainId} failed:`, e?.message ?? e);
|
|
48982
|
+
return null;
|
|
48983
|
+
}
|
|
48984
|
+
const out = {};
|
|
48985
|
+
for (const r of rows) {
|
|
48986
|
+
const address = lower2(r?.vaultAddress);
|
|
48987
|
+
const underlying = lower2(r?.asset?.contractAddress);
|
|
48988
|
+
if (!address || !underlying) continue;
|
|
48989
|
+
if (r.isEnabled === false) continue;
|
|
48990
|
+
const assetDecimals = num2(r?.asset?.decimals) || 18;
|
|
48991
|
+
const scale = 10 ** assetDecimals;
|
|
48992
|
+
const assetEntry = tokenList[underlying];
|
|
48993
|
+
const priceKey = toOracleKey(assetEntry?.assetGroup) || toGenericPriceKey(underlying, chainId);
|
|
48994
|
+
const priceUsd = prices[priceKey];
|
|
48995
|
+
const totalAssets = big5(r.totalAssets);
|
|
48996
|
+
const totalSupply = big5(r.totalSupplyAmt);
|
|
48997
|
+
const totalAssetsFormatted = Number(totalAssets) / scale;
|
|
48998
|
+
const supplyRate = num2(r.apr) * 100;
|
|
48999
|
+
const rewardsRate = num2(r?.incentiveData?.TMX_APR) * 100;
|
|
49000
|
+
const rawLiquidity = BigInt(big5(r.redeemableAmt ?? r.idleFunds ?? "0"));
|
|
49001
|
+
const totalAssetsBig = BigInt(totalAssets);
|
|
49002
|
+
const liquidity = (rawLiquidity > totalAssetsBig ? totalAssetsBig : rawLiquidity).toString();
|
|
49003
|
+
const liquidityFormatted = Number(liquidity) / scale;
|
|
49004
|
+
const totalSupplyValue = num2(r.totalSupplyValue);
|
|
49005
|
+
out[address] = {
|
|
49006
|
+
address,
|
|
49007
|
+
underlying,
|
|
49008
|
+
symbol: String(r.symbol ?? ""),
|
|
49009
|
+
name: String(r.name ?? ""),
|
|
49010
|
+
// Share decimals are not reported; TermMax vault shares track the
|
|
49011
|
+
// asset's decimals (verified on-chain: 6-dec USDC vault, 18-dec WETH).
|
|
49012
|
+
decimals: assetDecimals,
|
|
49013
|
+
assetDecimals,
|
|
49014
|
+
totalAssets,
|
|
49015
|
+
totalSupply,
|
|
49016
|
+
convertToAssets: BigInt(totalSupply) > 0n ? (BigInt(totalAssets) * 10n ** BigInt(assetDecimals) / BigInt(totalSupply)).toString() : "0",
|
|
49017
|
+
supplyRate,
|
|
49018
|
+
rewardsRate,
|
|
49019
|
+
depositRate: supplyRate + rewardsRate,
|
|
49020
|
+
// 1e8-scaled upstream (10000000 = 10%).
|
|
49021
|
+
fee: num2(r.performanceFeeRate) / 1e6,
|
|
49022
|
+
timelock: num2(r.timeLockSeconds) || void 0,
|
|
49023
|
+
curator: r?.curator?.curatorAddress ? lower2(r.curator.curatorAddress) : void 0,
|
|
49024
|
+
// The API is the ONLY source for this — do not derive it from `name`.
|
|
49025
|
+
curatorName: r?.curator?.name || void 0,
|
|
49026
|
+
guardian: r?.guardianAddress ? lower2(r.guardianAddress) : void 0,
|
|
49027
|
+
asset: assetEntry,
|
|
49028
|
+
priceUsd,
|
|
49029
|
+
totalAssetsFormatted,
|
|
49030
|
+
totalAssetsUsd: totalSupplyValue > 0 ? totalSupplyValue : priceUsd ? totalAssetsFormatted * priceUsd : 0,
|
|
49031
|
+
liquidity,
|
|
49032
|
+
liquidityFormatted,
|
|
49033
|
+
liquidityUsd: priceUsd ? liquidityFormatted * priceUsd : 0,
|
|
49034
|
+
version: r.version,
|
|
49035
|
+
isPaused: r.isPaused === true || void 0,
|
|
49036
|
+
supplyCap: r.capacity ? big5(r.capacity) : void 0,
|
|
49037
|
+
basePool: r.poolAddress ? lower2(r.poolAddress) : void 0
|
|
49038
|
+
};
|
|
49039
|
+
}
|
|
49040
|
+
return out;
|
|
49041
|
+
}
|
|
49042
|
+
|
|
49043
|
+
// src/vaults/termmax/abi.ts
|
|
49044
|
+
var TermMaxVaultAbi = [
|
|
49045
|
+
{ type: "function", name: "name", stateMutability: "view", inputs: [], outputs: [{ type: "string" }] },
|
|
49046
|
+
{ type: "function", name: "symbol", stateMutability: "view", inputs: [], outputs: [{ type: "string" }] },
|
|
49047
|
+
{ type: "function", name: "decimals", stateMutability: "view", inputs: [], outputs: [{ type: "uint8" }] },
|
|
49048
|
+
{ type: "function", name: "asset", stateMutability: "view", inputs: [], outputs: [{ type: "address" }] },
|
|
49049
|
+
{ type: "function", name: "totalAssets", stateMutability: "view", inputs: [], outputs: [{ type: "uint256" }] },
|
|
49050
|
+
{ type: "function", name: "totalSupply", stateMutability: "view", inputs: [], outputs: [{ type: "uint256" }] },
|
|
49051
|
+
{
|
|
49052
|
+
type: "function",
|
|
49053
|
+
name: "convertToAssets",
|
|
49054
|
+
stateMutability: "view",
|
|
49055
|
+
inputs: [{ name: "shares", type: "uint256" }],
|
|
49056
|
+
outputs: [{ type: "uint256" }]
|
|
49057
|
+
},
|
|
49058
|
+
{
|
|
49059
|
+
type: "function",
|
|
49060
|
+
name: "balanceOf",
|
|
49061
|
+
stateMutability: "view",
|
|
49062
|
+
inputs: [{ name: "account", type: "address" }],
|
|
49063
|
+
outputs: [{ type: "uint256" }]
|
|
49064
|
+
},
|
|
49065
|
+
// GROSS annual interest in underlying units. The performance fee is deducted
|
|
49066
|
+
// from it on accrual, so it must be netted before publishing a rate.
|
|
49067
|
+
{ type: "function", name: "annualizedInterest", stateMutability: "view", inputs: [], outputs: [{ type: "uint256" }] },
|
|
49068
|
+
// Depositors' accruing claim — the correct APR denominator. REVERTS on 2.0.0.
|
|
49069
|
+
{ type: "function", name: "accretingPrincipal", stateMutability: "view", inputs: [], outputs: [{ type: "uint256" }] },
|
|
49070
|
+
// 1e8-scaled (0.1e8 = 10%).
|
|
49071
|
+
{ type: "function", name: "performanceFeeRate", stateMutability: "view", inputs: [], outputs: [{ type: "uint64" }] },
|
|
49072
|
+
// Pre-computed net APY. REVERTS on 2.0.0 — we derive instead.
|
|
49073
|
+
{ type: "function", name: "apr", stateMutability: "view", inputs: [], outputs: [{ type: "uint256" }] },
|
|
49074
|
+
{ type: "function", name: "curator", stateMutability: "view", inputs: [], outputs: [{ type: "address" }] },
|
|
49075
|
+
{ type: "function", name: "guardian", stateMutability: "view", inputs: [], outputs: [{ type: "address" }] },
|
|
49076
|
+
{ type: "function", name: "timelock", stateMutability: "view", inputs: [], outputs: [{ type: "uint256" }] },
|
|
49077
|
+
{ type: "function", name: "getVersion", stateMutability: "pure", inputs: [], outputs: [{ type: "string" }] }
|
|
49078
|
+
];
|
|
49079
|
+
var Erc20DecimalsBalanceAbi = [
|
|
49080
|
+
{ type: "function", name: "decimals", stateMutability: "view", inputs: [], outputs: [{ type: "uint8" }] },
|
|
49081
|
+
{
|
|
49082
|
+
type: "function",
|
|
49083
|
+
name: "balanceOf",
|
|
49084
|
+
stateMutability: "view",
|
|
49085
|
+
inputs: [{ name: "account", type: "address" }],
|
|
49086
|
+
outputs: [{ type: "uint256" }]
|
|
49087
|
+
}
|
|
49088
|
+
];
|
|
49089
|
+
|
|
49090
|
+
// src/vaults/termmax/fetchFromChain.ts
|
|
49091
|
+
var DECIMAL_BASE2 = 100000000n;
|
|
49092
|
+
var big6 = (v) => {
|
|
49093
|
+
if (v === void 0 || v === null || v === "0x") return 0n;
|
|
49094
|
+
try {
|
|
49095
|
+
return typeof v === "bigint" ? v : BigInt(v);
|
|
49096
|
+
} catch {
|
|
49097
|
+
return 0n;
|
|
49098
|
+
}
|
|
49099
|
+
};
|
|
49100
|
+
var num3 = (v) => {
|
|
49101
|
+
const n = Number(v);
|
|
49102
|
+
return Number.isFinite(n) ? n : void 0;
|
|
49103
|
+
};
|
|
49104
|
+
var str = (v) => typeof v === "string" && v.length > 0 ? v : void 0;
|
|
49105
|
+
var addr = (v) => typeof v === "string" && /^0x[0-9a-fA-F]{40}$/.test(v) && !/^0x0{40}$/.test(v) ? v.toLowerCase() : void 0;
|
|
49106
|
+
async function discoverVaultAddresses(chainId) {
|
|
49107
|
+
const markets = await fetchTermMaxMarkets(chainId).catch(() => []);
|
|
49108
|
+
const seen = /* @__PURE__ */ new Set();
|
|
49109
|
+
for (const m of markets) {
|
|
49110
|
+
for (const o of m.orders) {
|
|
49111
|
+
if (!o.makerIsVault) continue;
|
|
49112
|
+
const maker = addr(o.makerAddress);
|
|
49113
|
+
if (maker) seen.add(maker);
|
|
49114
|
+
}
|
|
49115
|
+
}
|
|
49116
|
+
return [...seen];
|
|
49117
|
+
}
|
|
49118
|
+
var VAULT_READS = [
|
|
49119
|
+
"name",
|
|
49120
|
+
"symbol",
|
|
49121
|
+
"decimals",
|
|
49122
|
+
"asset",
|
|
49123
|
+
"totalAssets",
|
|
49124
|
+
"totalSupply",
|
|
49125
|
+
"annualizedInterest",
|
|
49126
|
+
"accretingPrincipal",
|
|
49127
|
+
"performanceFeeRate",
|
|
49128
|
+
"apr",
|
|
49129
|
+
"curator",
|
|
49130
|
+
"guardian",
|
|
49131
|
+
"timelock",
|
|
49132
|
+
"getVersion"
|
|
49133
|
+
];
|
|
49134
|
+
var READS_PER_VAULT = VAULT_READS.length;
|
|
49135
|
+
var fetchTermMaxVaultsFromChain = async (chainId, multicallRetry, prices = {}, tokenList = {}) => {
|
|
49136
|
+
if (!termMaxConfigByChain(chainId)) return {};
|
|
49137
|
+
const vaults = await discoverVaultAddresses(chainId);
|
|
49138
|
+
if (vaults.length === 0) return {};
|
|
49139
|
+
const calls = vaults.flatMap(
|
|
49140
|
+
(address) => VAULT_READS.map((name) => ({
|
|
49141
|
+
address,
|
|
49142
|
+
name,
|
|
49143
|
+
params: []
|
|
49144
|
+
}))
|
|
49145
|
+
);
|
|
49146
|
+
const res = await multicallRetry({
|
|
49147
|
+
chain: chainId,
|
|
49148
|
+
calls,
|
|
49149
|
+
abi: TermMaxVaultAbi,
|
|
49150
|
+
allowFailure: true
|
|
49151
|
+
});
|
|
49152
|
+
const rows = [];
|
|
49153
|
+
vaults.forEach((address, i) => {
|
|
49154
|
+
const at = (k) => res[i * READS_PER_VAULT + VAULT_READS.indexOf(k)];
|
|
49155
|
+
const asset = addr(at("asset"));
|
|
49156
|
+
const totalAssets = big6(at("totalAssets"));
|
|
49157
|
+
if (!asset || totalAssets === 0n) return;
|
|
49158
|
+
rows.push({
|
|
49159
|
+
address,
|
|
49160
|
+
name: str(at("name")),
|
|
49161
|
+
symbol: str(at("symbol")),
|
|
49162
|
+
decimals: num3(at("decimals")) ?? 18,
|
|
49163
|
+
asset,
|
|
49164
|
+
totalAssets,
|
|
49165
|
+
totalSupply: big6(at("totalSupply")),
|
|
49166
|
+
annualizedInterest: big6(at("annualizedInterest")),
|
|
49167
|
+
accretingPrincipal: big6(at("accretingPrincipal")),
|
|
49168
|
+
performanceFeeRate: big6(at("performanceFeeRate")),
|
|
49169
|
+
aprRaw: at("apr") != null ? big6(at("apr")) : void 0,
|
|
49170
|
+
curator: addr(at("curator")),
|
|
49171
|
+
guardian: addr(at("guardian")),
|
|
49172
|
+
timelock: num3(at("timelock")),
|
|
49173
|
+
version: str(at("getVersion"))
|
|
49174
|
+
});
|
|
49175
|
+
});
|
|
49176
|
+
if (rows.length === 0) return {};
|
|
49177
|
+
const round2 = rows.flatMap((r) => [
|
|
49178
|
+
{ address: r.asset, name: "decimals", params: [] },
|
|
49179
|
+
{ address: r.asset, name: "balanceOf", params: [r.address] }
|
|
49180
|
+
]);
|
|
49181
|
+
const res2 = await multicallRetry({
|
|
49182
|
+
chain: chainId,
|
|
49183
|
+
calls: round2,
|
|
49184
|
+
abi: Erc20DecimalsBalanceAbi,
|
|
49185
|
+
allowFailure: true
|
|
49186
|
+
});
|
|
49187
|
+
const out = {};
|
|
49188
|
+
rows.forEach((r, i) => {
|
|
49189
|
+
const assetDecimals = num3(res2[i * 2]) ?? r.decimals;
|
|
49190
|
+
const idle = big6(res2[i * 2 + 1]);
|
|
49191
|
+
const assetEntry = tokenList[r.asset];
|
|
49192
|
+
const priceKey = toOracleKey(assetEntry?.assetGroup) || toGenericPriceKey(r.asset, chainId);
|
|
49193
|
+
const priceUsd = prices[priceKey];
|
|
49194
|
+
const denominator = r.accretingPrincipal > 0n ? r.accretingPrincipal : r.totalAssets;
|
|
49195
|
+
const feeRate = r.performanceFeeRate;
|
|
49196
|
+
let supplyRate = 0;
|
|
49197
|
+
if (denominator > 0n && r.annualizedInterest > 0n) {
|
|
49198
|
+
const netAnnual = r.annualizedInterest * (DECIMAL_BASE2 - feeRate) / DECIMAL_BASE2;
|
|
49199
|
+
supplyRate = Number(netAnnual) / Number(denominator) * 100;
|
|
49200
|
+
}
|
|
49201
|
+
if (r.aprRaw !== void 0 && r.aprRaw > 0n) {
|
|
49202
|
+
supplyRate = Number(r.aprRaw) / Number(DECIMAL_BASE2) * 100;
|
|
49203
|
+
}
|
|
49204
|
+
const scale = 10 ** assetDecimals;
|
|
49205
|
+
const totalAssetsFormatted = Number(r.totalAssets) / scale;
|
|
49206
|
+
const liquidityFormatted = Number(idle) / scale;
|
|
49207
|
+
const convertToAssets = r.totalSupply > 0n ? (r.totalAssets * 10n ** BigInt(r.decimals) / r.totalSupply).toString() : "0";
|
|
49208
|
+
const entry = {
|
|
49209
|
+
address: r.address,
|
|
49210
|
+
underlying: r.asset,
|
|
49211
|
+
symbol: r.symbol ?? "",
|
|
49212
|
+
name: r.name ?? "",
|
|
49213
|
+
decimals: r.decimals,
|
|
49214
|
+
assetDecimals,
|
|
49215
|
+
totalAssets: r.totalAssets.toString(),
|
|
49216
|
+
totalSupply: r.totalSupply.toString(),
|
|
49217
|
+
convertToAssets,
|
|
49218
|
+
supplyRate,
|
|
49219
|
+
rewardsRate: 0,
|
|
49220
|
+
depositRate: supplyRate,
|
|
49221
|
+
fee: Number(feeRate) / Number(DECIMAL_BASE2) * 100,
|
|
49222
|
+
timelock: r.timelock,
|
|
49223
|
+
curator: r.curator,
|
|
49224
|
+
curatorName: curatorNameFromVaultName(r.name),
|
|
49225
|
+
guardian: r.guardian,
|
|
49226
|
+
asset: assetEntry,
|
|
49227
|
+
priceUsd,
|
|
49228
|
+
totalAssetsFormatted,
|
|
49229
|
+
totalAssetsUsd: priceUsd ? totalAssetsFormatted * priceUsd : 0,
|
|
49230
|
+
liquidity: idle.toString(),
|
|
49231
|
+
liquidityFormatted,
|
|
49232
|
+
liquidityUsd: priceUsd ? liquidityFormatted * priceUsd : 0,
|
|
49233
|
+
version: r.version
|
|
49234
|
+
};
|
|
49235
|
+
out[r.address] = entry;
|
|
49236
|
+
});
|
|
49237
|
+
return out;
|
|
49238
|
+
};
|
|
49239
|
+
|
|
49240
|
+
// src/vaults/termmax/fetchPublic.ts
|
|
49241
|
+
var fetchTermMaxVaults = async (chainId, multicallRetry, prices = {}, tokenList = {}) => {
|
|
49242
|
+
if (!termMaxConfigByChain(chainId)) return {};
|
|
49243
|
+
const fromApi = await fetchTermMaxVaultsFromApi(chainId, prices, tokenList);
|
|
49244
|
+
if (fromApi !== null) return fromApi;
|
|
49245
|
+
return fetchTermMaxVaultsFromChain(chainId, multicallRetry, prices, tokenList);
|
|
49246
|
+
};
|
|
47518
49247
|
|
|
47519
49248
|
// src/vaults/lst/abis/beets.ts
|
|
47520
49249
|
var BeetsStSAbi = [
|
|
@@ -47590,7 +49319,7 @@ var Multicall3BalanceAbi = [
|
|
|
47590
49319
|
outputs: [{ type: "uint256" }]
|
|
47591
49320
|
}
|
|
47592
49321
|
];
|
|
47593
|
-
var
|
|
49322
|
+
var toBigInt13 = (v) => {
|
|
47594
49323
|
if (v === void 0 || v === null) return void 0;
|
|
47595
49324
|
if (typeof v === "bigint") return v;
|
|
47596
49325
|
if (typeof v === "number") return BigInt(v);
|
|
@@ -47614,12 +49343,12 @@ var readerBeetsStS = (entry) => ({
|
|
|
47614
49343
|
],
|
|
47615
49344
|
abis: [TotalSupplyAbi, BeetsStSAbi, BeetsStSAbi],
|
|
47616
49345
|
parse: ([supply, rate, pool]) => {
|
|
47617
|
-
const totalSupply =
|
|
47618
|
-
const exchangeRate =
|
|
49346
|
+
const totalSupply = toBigInt13(supply);
|
|
49347
|
+
const exchangeRate = toBigInt13(rate);
|
|
47619
49348
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
47620
49349
|
return void 0;
|
|
47621
49350
|
}
|
|
47622
|
-
const liquidity =
|
|
49351
|
+
const liquidity = toBigInt13(pool);
|
|
47623
49352
|
return {
|
|
47624
49353
|
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
47625
49354
|
totalSupply,
|
|
@@ -47660,12 +49389,12 @@ var readerBenqiSavax = (entry) => ({
|
|
|
47660
49389
|
],
|
|
47661
49390
|
abis: [TotalSupplyAbi, BenqiSavaxAbi, BenqiSavaxAbi],
|
|
47662
49391
|
parse: ([supply, rate, totalPooled]) => {
|
|
47663
|
-
const totalSupply =
|
|
47664
|
-
const exchangeRate =
|
|
49392
|
+
const totalSupply = toBigInt13(supply);
|
|
49393
|
+
const exchangeRate = toBigInt13(rate);
|
|
47665
49394
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
47666
49395
|
return void 0;
|
|
47667
49396
|
}
|
|
47668
|
-
const totalAssets =
|
|
49397
|
+
const totalAssets = toBigInt13(totalPooled) ?? totalSupply * exchangeRate / ONE_E187;
|
|
47669
49398
|
return {
|
|
47670
49399
|
totalAssets,
|
|
47671
49400
|
totalSupply,
|
|
@@ -47679,7 +49408,7 @@ var readerBgtWrapper1to1 = (entry) => ({
|
|
|
47679
49408
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
47680
49409
|
abis: [TotalSupplyAbi],
|
|
47681
49410
|
parse: ([supply]) => {
|
|
47682
|
-
const totalSupply =
|
|
49411
|
+
const totalSupply = toBigInt13(supply);
|
|
47683
49412
|
if (totalSupply === void 0) return void 0;
|
|
47684
49413
|
return {
|
|
47685
49414
|
totalAssets: totalSupply,
|
|
@@ -47708,8 +49437,8 @@ var readerDineroBeraEth = (entry) => ({
|
|
|
47708
49437
|
],
|
|
47709
49438
|
abis: [TotalSupplyAbi, DineroBeraEthAbi],
|
|
47710
49439
|
parse: ([supply, rate]) => {
|
|
47711
|
-
const totalSupply =
|
|
47712
|
-
const exchangeRate =
|
|
49440
|
+
const totalSupply = toBigInt13(supply);
|
|
49441
|
+
const exchangeRate = toBigInt13(rate);
|
|
47713
49442
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
47714
49443
|
return void 0;
|
|
47715
49444
|
}
|
|
@@ -47730,9 +49459,9 @@ var readerErc4626 = (entry) => ({
|
|
|
47730
49459
|
],
|
|
47731
49460
|
abis: [Erc4626ReadAbi, TotalSupplyAbi, Erc4626ReadAbi],
|
|
47732
49461
|
parse: ([assets, supply, rate]) => {
|
|
47733
|
-
const totalAssets =
|
|
47734
|
-
const totalSupply =
|
|
47735
|
-
const exchangeRate =
|
|
49462
|
+
const totalAssets = toBigInt13(assets);
|
|
49463
|
+
const totalSupply = toBigInt13(supply);
|
|
49464
|
+
const exchangeRate = toBigInt13(rate);
|
|
47736
49465
|
if (totalAssets === void 0 || totalSupply === void 0 || exchangeRate === void 0) {
|
|
47737
49466
|
return void 0;
|
|
47738
49467
|
}
|
|
@@ -47747,9 +49476,9 @@ var readerErc4626PreviewRedeem = (entry) => ({
|
|
|
47747
49476
|
],
|
|
47748
49477
|
abis: [Erc4626PreviewRedeemAbi, TotalSupplyAbi, Erc4626PreviewRedeemAbi],
|
|
47749
49478
|
parse: ([assets, supply, rate]) => {
|
|
47750
|
-
const totalAssets =
|
|
47751
|
-
const totalSupply =
|
|
47752
|
-
const exchangeRate =
|
|
49479
|
+
const totalAssets = toBigInt13(assets);
|
|
49480
|
+
const totalSupply = toBigInt13(supply);
|
|
49481
|
+
const exchangeRate = toBigInt13(rate);
|
|
47753
49482
|
if (totalAssets === void 0 || totalSupply === void 0 || exchangeRate === void 0) {
|
|
47754
49483
|
return void 0;
|
|
47755
49484
|
}
|
|
@@ -47808,16 +49537,16 @@ var readerEtherFiWeEth = (entry) => {
|
|
|
47808
49537
|
return {
|
|
47809
49538
|
calls,
|
|
47810
49539
|
abis,
|
|
47811
|
-
parse: (
|
|
47812
|
-
const totalSupply =
|
|
47813
|
-
const exchangeRate =
|
|
49540
|
+
parse: (slice2) => {
|
|
49541
|
+
const totalSupply = toBigInt13(slice2[0]);
|
|
49542
|
+
const exchangeRate = toBigInt13(slice2[1]);
|
|
47814
49543
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
47815
49544
|
return void 0;
|
|
47816
49545
|
}
|
|
47817
49546
|
let liquidity;
|
|
47818
49547
|
if (lp) {
|
|
47819
|
-
const lpBalance =
|
|
47820
|
-
const locked =
|
|
49548
|
+
const lpBalance = toBigInt13(slice2[2]);
|
|
49549
|
+
const locked = toBigInt13(slice2[3]);
|
|
47821
49550
|
if (lpBalance !== void 0 && locked !== void 0) {
|
|
47822
49551
|
liquidity = lpBalance > locked ? lpBalance - locked : 0n;
|
|
47823
49552
|
}
|
|
@@ -47851,7 +49580,7 @@ var readerHyperbeatBeHype = (entry) => {
|
|
|
47851
49580
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
47852
49581
|
abis: [TotalSupplyAbi],
|
|
47853
49582
|
parse: ([supply]) => {
|
|
47854
|
-
const totalSupply =
|
|
49583
|
+
const totalSupply = toBigInt13(supply);
|
|
47855
49584
|
if (totalSupply === void 0) return void 0;
|
|
47856
49585
|
return {
|
|
47857
49586
|
totalAssets: totalSupply,
|
|
@@ -47868,8 +49597,8 @@ var readerHyperbeatBeHype = (entry) => {
|
|
|
47868
49597
|
],
|
|
47869
49598
|
abis: [TotalSupplyAbi, HyperbeatStakingCoreAbi],
|
|
47870
49599
|
parse: ([supply, rate]) => {
|
|
47871
|
-
const totalSupply =
|
|
47872
|
-
const exchangeRate =
|
|
49600
|
+
const totalSupply = toBigInt13(supply);
|
|
49601
|
+
const exchangeRate = toBigInt13(rate);
|
|
47873
49602
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
47874
49603
|
return void 0;
|
|
47875
49604
|
}
|
|
@@ -47901,7 +49630,7 @@ var readerKelpRsEth = (entry) => {
|
|
|
47901
49630
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
47902
49631
|
abis: [TotalSupplyAbi],
|
|
47903
49632
|
parse: ([supply]) => {
|
|
47904
|
-
const totalSupply =
|
|
49633
|
+
const totalSupply = toBigInt13(supply);
|
|
47905
49634
|
if (totalSupply === void 0) return void 0;
|
|
47906
49635
|
return {
|
|
47907
49636
|
totalAssets: totalSupply,
|
|
@@ -47918,8 +49647,8 @@ var readerKelpRsEth = (entry) => {
|
|
|
47918
49647
|
],
|
|
47919
49648
|
abis: [TotalSupplyAbi, KelpLrtOracleAbi],
|
|
47920
49649
|
parse: ([supply, rate]) => {
|
|
47921
|
-
const totalSupply =
|
|
47922
|
-
const exchangeRate =
|
|
49650
|
+
const totalSupply = toBigInt13(supply);
|
|
49651
|
+
const exchangeRate = toBigInt13(rate);
|
|
47923
49652
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
47924
49653
|
return void 0;
|
|
47925
49654
|
}
|
|
@@ -47951,7 +49680,7 @@ var readerKinetiqKHype = (entry) => {
|
|
|
47951
49680
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
47952
49681
|
abis: [TotalSupplyAbi],
|
|
47953
49682
|
parse: ([supply]) => {
|
|
47954
|
-
const totalSupply =
|
|
49683
|
+
const totalSupply = toBigInt13(supply);
|
|
47955
49684
|
if (totalSupply === void 0) return void 0;
|
|
47956
49685
|
return {
|
|
47957
49686
|
totalAssets: totalSupply,
|
|
@@ -47968,8 +49697,8 @@ var readerKinetiqKHype = (entry) => {
|
|
|
47968
49697
|
],
|
|
47969
49698
|
abis: [TotalSupplyAbi, KinetiqStakingAccountantAbi],
|
|
47970
49699
|
parse: ([supply, rate]) => {
|
|
47971
|
-
const totalSupply =
|
|
47972
|
-
const exchangeRate =
|
|
49700
|
+
const totalSupply = toBigInt13(supply);
|
|
49701
|
+
const exchangeRate = toBigInt13(rate);
|
|
47973
49702
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
47974
49703
|
return void 0;
|
|
47975
49704
|
}
|
|
@@ -48009,12 +49738,12 @@ var readerLairStKaia = (entry) => ({
|
|
|
48009
49738
|
],
|
|
48010
49739
|
abis: [TotalSupplyAbi, LairStKaiaAbi, LairStKaiaAbi],
|
|
48011
49740
|
parse: ([supply, rate, totalStaking]) => {
|
|
48012
|
-
const totalSupply =
|
|
48013
|
-
const exchangeRate =
|
|
49741
|
+
const totalSupply = toBigInt13(supply);
|
|
49742
|
+
const exchangeRate = toBigInt13(rate);
|
|
48014
49743
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
48015
49744
|
return void 0;
|
|
48016
49745
|
}
|
|
48017
|
-
const totalAssets =
|
|
49746
|
+
const totalAssets = toBigInt13(totalStaking) ?? totalSupply * exchangeRate / ONE_E187;
|
|
48018
49747
|
return {
|
|
48019
49748
|
totalAssets,
|
|
48020
49749
|
totalSupply,
|
|
@@ -48042,8 +49771,8 @@ var readerLidoWstEth = (entry) => ({
|
|
|
48042
49771
|
],
|
|
48043
49772
|
abis: [TotalSupplyAbi, LidoWstEthAbi],
|
|
48044
49773
|
parse: ([supply, rate]) => {
|
|
48045
|
-
const totalSupply =
|
|
48046
|
-
const exchangeRate =
|
|
49774
|
+
const totalSupply = toBigInt13(supply);
|
|
49775
|
+
const exchangeRate = toBigInt13(rate);
|
|
48047
49776
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
48048
49777
|
return void 0;
|
|
48049
49778
|
}
|
|
@@ -48081,7 +49810,7 @@ var readerListaSlisBnb = (entry) => {
|
|
|
48081
49810
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
48082
49811
|
abis: [TotalSupplyAbi],
|
|
48083
49812
|
parse: ([supply]) => {
|
|
48084
|
-
const totalSupply =
|
|
49813
|
+
const totalSupply = toBigInt13(supply);
|
|
48085
49814
|
if (totalSupply === void 0) return void 0;
|
|
48086
49815
|
return {
|
|
48087
49816
|
totalAssets: totalSupply,
|
|
@@ -48099,12 +49828,12 @@ var readerListaSlisBnb = (entry) => {
|
|
|
48099
49828
|
],
|
|
48100
49829
|
abis: [TotalSupplyAbi, ListaStakeManagerReadAbi, ListaStakeManagerReadAbi],
|
|
48101
49830
|
parse: ([supply, rate, pooled]) => {
|
|
48102
|
-
const totalSupply =
|
|
48103
|
-
const exchangeRate =
|
|
49831
|
+
const totalSupply = toBigInt13(supply);
|
|
49832
|
+
const exchangeRate = toBigInt13(rate);
|
|
48104
49833
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
48105
49834
|
return void 0;
|
|
48106
49835
|
}
|
|
48107
|
-
const pooledBnb =
|
|
49836
|
+
const pooledBnb = toBigInt13(pooled);
|
|
48108
49837
|
const totalAssets = pooledBnb ?? totalSupply * exchangeRate / ONE_E187;
|
|
48109
49838
|
return { totalAssets, totalSupply, exchangeRate };
|
|
48110
49839
|
}
|
|
@@ -48130,7 +49859,7 @@ var readerMantleMEth = (entry) => {
|
|
|
48130
49859
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
48131
49860
|
abis: [TotalSupplyAbi],
|
|
48132
49861
|
parse: ([supply]) => {
|
|
48133
|
-
const totalSupply =
|
|
49862
|
+
const totalSupply = toBigInt13(supply);
|
|
48134
49863
|
if (totalSupply === void 0) return void 0;
|
|
48135
49864
|
return {
|
|
48136
49865
|
totalAssets: totalSupply,
|
|
@@ -48147,8 +49876,8 @@ var readerMantleMEth = (entry) => {
|
|
|
48147
49876
|
],
|
|
48148
49877
|
abis: [TotalSupplyAbi, MantleStakingAbi],
|
|
48149
49878
|
parse: ([supply, rate]) => {
|
|
48150
|
-
const totalSupply =
|
|
48151
|
-
const exchangeRate =
|
|
49879
|
+
const totalSupply = toBigInt13(supply);
|
|
49880
|
+
const exchangeRate = toBigInt13(rate);
|
|
48152
49881
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
48153
49882
|
return void 0;
|
|
48154
49883
|
}
|
|
@@ -48169,7 +49898,7 @@ var readerOffChain = (entry) => {
|
|
|
48169
49898
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
48170
49899
|
abis: [TotalSupplyAbi],
|
|
48171
49900
|
parse: ([supply]) => {
|
|
48172
|
-
const totalSupply =
|
|
49901
|
+
const totalSupply = toBigInt13(supply);
|
|
48173
49902
|
if (totalSupply === void 0) return void 0;
|
|
48174
49903
|
return {
|
|
48175
49904
|
totalAssets: rescaleDecimals(totalSupply, shareDec, underlyingDec),
|
|
@@ -48203,7 +49932,7 @@ var readerRenzoEzEth = (entry) => {
|
|
|
48203
49932
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
48204
49933
|
abis: [TotalSupplyAbi],
|
|
48205
49934
|
parse: ([supply]) => {
|
|
48206
|
-
const totalSupply =
|
|
49935
|
+
const totalSupply = toBigInt13(supply);
|
|
48207
49936
|
if (totalSupply === void 0) return void 0;
|
|
48208
49937
|
return {
|
|
48209
49938
|
totalAssets: totalSupply,
|
|
@@ -48220,9 +49949,9 @@ var readerRenzoEzEth = (entry) => {
|
|
|
48220
49949
|
],
|
|
48221
49950
|
abis: [TotalSupplyAbi, RenzoRestakeManagerAbi],
|
|
48222
49951
|
parse: ([supply, tvls]) => {
|
|
48223
|
-
const totalSupply =
|
|
49952
|
+
const totalSupply = toBigInt13(supply);
|
|
48224
49953
|
if (totalSupply === void 0 || totalSupply === 0n) return void 0;
|
|
48225
|
-
const totalTvl = Array.isArray(tvls) && tvls.length >= 3 ?
|
|
49954
|
+
const totalTvl = Array.isArray(tvls) && tvls.length >= 3 ? toBigInt13(tvls[2]) : void 0;
|
|
48226
49955
|
if (totalTvl === void 0) return void 0;
|
|
48227
49956
|
return {
|
|
48228
49957
|
totalAssets: totalTvl,
|
|
@@ -48275,13 +50004,13 @@ var readerRocketReth = (entry) => {
|
|
|
48275
50004
|
return {
|
|
48276
50005
|
calls,
|
|
48277
50006
|
abis,
|
|
48278
|
-
parse: (
|
|
48279
|
-
const totalSupply =
|
|
48280
|
-
const exchangeRate =
|
|
50007
|
+
parse: (slice2) => {
|
|
50008
|
+
const totalSupply = toBigInt13(slice2[0]);
|
|
50009
|
+
const exchangeRate = toBigInt13(slice2[1]);
|
|
48281
50010
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
48282
50011
|
return void 0;
|
|
48283
50012
|
}
|
|
48284
|
-
const liquidity = depositPool ?
|
|
50013
|
+
const liquidity = depositPool ? toBigInt13(slice2[2]) : void 0;
|
|
48285
50014
|
return {
|
|
48286
50015
|
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
48287
50016
|
totalSupply,
|
|
@@ -48320,7 +50049,7 @@ var readerStaderEthx = (entry) => {
|
|
|
48320
50049
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
48321
50050
|
abis: [TotalSupplyAbi],
|
|
48322
50051
|
parse: ([supply]) => {
|
|
48323
|
-
const totalSupply =
|
|
50052
|
+
const totalSupply = toBigInt13(supply);
|
|
48324
50053
|
if (totalSupply === void 0) return void 0;
|
|
48325
50054
|
return {
|
|
48326
50055
|
totalAssets: totalSupply,
|
|
@@ -48337,8 +50066,8 @@ var readerStaderEthx = (entry) => {
|
|
|
48337
50066
|
],
|
|
48338
50067
|
abis: [TotalSupplyAbi, StaderEthxAbi],
|
|
48339
50068
|
parse: ([supply, rate]) => {
|
|
48340
|
-
const totalSupply =
|
|
48341
|
-
const exchangeRate =
|
|
50069
|
+
const totalSupply = toBigInt13(supply);
|
|
50070
|
+
const exchangeRate = toBigInt13(rate);
|
|
48342
50071
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
48343
50072
|
return void 0;
|
|
48344
50073
|
}
|
|
@@ -48366,10 +50095,10 @@ var readerStaderMaticX = (entry) => {
|
|
|
48366
50095
|
],
|
|
48367
50096
|
abis: [TotalSupplyAbi, StaderMaticXAbi],
|
|
48368
50097
|
parse: ([supply, tup]) => {
|
|
48369
|
-
const totalSupply =
|
|
50098
|
+
const totalSupply = toBigInt13(supply);
|
|
48370
50099
|
if (!Array.isArray(tup) || tup.length < 3) return void 0;
|
|
48371
|
-
const amountInMatic =
|
|
48372
|
-
const totalPooledMatic =
|
|
50100
|
+
const amountInMatic = toBigInt13(tup[0]);
|
|
50101
|
+
const totalPooledMatic = toBigInt13(tup[2]);
|
|
48373
50102
|
if (totalSupply === void 0 || amountInMatic === void 0) {
|
|
48374
50103
|
return void 0;
|
|
48375
50104
|
}
|
|
@@ -48402,7 +50131,7 @@ var readerStakeWiseOsEth = (entry) => {
|
|
|
48402
50131
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
48403
50132
|
abis: [TotalSupplyAbi],
|
|
48404
50133
|
parse: ([supply]) => {
|
|
48405
|
-
const totalSupply =
|
|
50134
|
+
const totalSupply = toBigInt13(supply);
|
|
48406
50135
|
if (totalSupply === void 0) return void 0;
|
|
48407
50136
|
return {
|
|
48408
50137
|
totalAssets: totalSupply,
|
|
@@ -48419,8 +50148,8 @@ var readerStakeWiseOsEth = (entry) => {
|
|
|
48419
50148
|
],
|
|
48420
50149
|
abis: [TotalSupplyAbi, StakeWiseOsTokenAbi],
|
|
48421
50150
|
parse: ([supply, rate]) => {
|
|
48422
|
-
const totalSupply =
|
|
48423
|
-
const exchangeRate =
|
|
50151
|
+
const totalSupply = toBigInt13(supply);
|
|
50152
|
+
const exchangeRate = toBigInt13(rate);
|
|
48424
50153
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
48425
50154
|
return void 0;
|
|
48426
50155
|
}
|
|
@@ -48452,7 +50181,7 @@ var readerStCelo = (entry) => {
|
|
|
48452
50181
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
48453
50182
|
abis: [TotalSupplyAbi],
|
|
48454
50183
|
parse: ([supply]) => {
|
|
48455
|
-
const totalSupply =
|
|
50184
|
+
const totalSupply = toBigInt13(supply);
|
|
48456
50185
|
if (totalSupply === void 0) return void 0;
|
|
48457
50186
|
return {
|
|
48458
50187
|
totalAssets: totalSupply,
|
|
@@ -48469,8 +50198,8 @@ var readerStCelo = (entry) => {
|
|
|
48469
50198
|
],
|
|
48470
50199
|
abis: [TotalSupplyAbi, StCeloManagerAbi],
|
|
48471
50200
|
parse: ([supply, rate]) => {
|
|
48472
|
-
const totalSupply =
|
|
48473
|
-
const exchangeRate =
|
|
50201
|
+
const totalSupply = toBigInt13(supply);
|
|
50202
|
+
const exchangeRate = toBigInt13(rate);
|
|
48474
50203
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
48475
50204
|
return void 0;
|
|
48476
50205
|
}
|
|
@@ -48502,8 +50231,8 @@ var readerSwellGetRate = (entry) => ({
|
|
|
48502
50231
|
],
|
|
48503
50232
|
abis: [TotalSupplyAbi, SwellGetRateAbi],
|
|
48504
50233
|
parse: ([supply, rate]) => {
|
|
48505
|
-
const totalSupply =
|
|
48506
|
-
const exchangeRate =
|
|
50234
|
+
const totalSupply = toBigInt13(supply);
|
|
50235
|
+
const exchangeRate = toBigInt13(rate);
|
|
48507
50236
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
48508
50237
|
return void 0;
|
|
48509
50238
|
}
|
|
@@ -48534,7 +50263,7 @@ var readerValantisWstHype = (entry) => {
|
|
|
48534
50263
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
48535
50264
|
abis: [TotalSupplyAbi],
|
|
48536
50265
|
parse: ([supply]) => {
|
|
48537
|
-
const totalSupply =
|
|
50266
|
+
const totalSupply = toBigInt13(supply);
|
|
48538
50267
|
if (totalSupply === void 0) return void 0;
|
|
48539
50268
|
return {
|
|
48540
50269
|
totalAssets: totalSupply,
|
|
@@ -48551,8 +50280,8 @@ var readerValantisWstHype = (entry) => {
|
|
|
48551
50280
|
],
|
|
48552
50281
|
abis: [TotalSupplyAbi, ValantisStHypeAbi],
|
|
48553
50282
|
parse: ([supply, rate]) => {
|
|
48554
|
-
const totalSupply =
|
|
48555
|
-
const exchangeRate =
|
|
50283
|
+
const totalSupply = toBigInt13(supply);
|
|
50284
|
+
const exchangeRate = toBigInt13(rate);
|
|
48556
50285
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
48557
50286
|
return void 0;
|
|
48558
50287
|
}
|
|
@@ -48586,7 +50315,7 @@ var readerVedaAccountant = (entry) => {
|
|
|
48586
50315
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
48587
50316
|
abis: [TotalSupplyAbi],
|
|
48588
50317
|
parse: ([supply]) => {
|
|
48589
|
-
const totalSupply =
|
|
50318
|
+
const totalSupply = toBigInt13(supply);
|
|
48590
50319
|
if (totalSupply === void 0) return void 0;
|
|
48591
50320
|
return {
|
|
48592
50321
|
totalAssets: rescaleDecimals(totalSupply, shareDec, underlyingDec),
|
|
@@ -48604,8 +50333,8 @@ var readerVedaAccountant = (entry) => {
|
|
|
48604
50333
|
],
|
|
48605
50334
|
abis: [TotalSupplyAbi, VedaAccountantGetRateAbi],
|
|
48606
50335
|
parse: ([supply, rate]) => {
|
|
48607
|
-
const totalSupply =
|
|
48608
|
-
const rawRate =
|
|
50336
|
+
const totalSupply = toBigInt13(supply);
|
|
50337
|
+
const rawRate = toBigInt13(rate);
|
|
48609
50338
|
if (totalSupply === void 0 || rawRate === void 0) return void 0;
|
|
48610
50339
|
const exchangeRate = rawRate * scale;
|
|
48611
50340
|
return {
|
|
@@ -48640,8 +50369,8 @@ var readerAnkrRatio = (entry) => ({
|
|
|
48640
50369
|
],
|
|
48641
50370
|
abis: [TotalSupplyAbi, AnkrRatioAbi],
|
|
48642
50371
|
parse: ([supply, ratio]) => {
|
|
48643
|
-
const totalSupply =
|
|
48644
|
-
const r =
|
|
50372
|
+
const totalSupply = toBigInt13(supply);
|
|
50373
|
+
const r = toBigInt13(ratio);
|
|
48645
50374
|
if (totalSupply === void 0 || r === void 0 || r === 0n) {
|
|
48646
50375
|
return void 0;
|
|
48647
50376
|
}
|
|
@@ -48684,8 +50413,8 @@ var readerCoreEarnRate = (entry) => {
|
|
|
48684
50413
|
],
|
|
48685
50414
|
abis: [CoreEarnRateAbi, TotalSupplyAbi],
|
|
48686
50415
|
parse: ([rate, supply]) => {
|
|
48687
|
-
const r =
|
|
48688
|
-
const totalSupply =
|
|
50416
|
+
const r = toBigInt13(rate);
|
|
50417
|
+
const totalSupply = toBigInt13(supply);
|
|
48689
50418
|
if (r === void 0 || r === 0n || totalSupply === void 0) {
|
|
48690
50419
|
return void 0;
|
|
48691
50420
|
}
|
|
@@ -48706,8 +50435,8 @@ var readerCoreStakedRatio = (entry) => {
|
|
|
48706
50435
|
],
|
|
48707
50436
|
abis: [CoreTotalStakedAbi, TotalSupplyAbi],
|
|
48708
50437
|
parse: ([staked, supply]) => {
|
|
48709
|
-
const totalStaked =
|
|
48710
|
-
const totalSupply =
|
|
50438
|
+
const totalStaked = toBigInt13(staked);
|
|
50439
|
+
const totalSupply = toBigInt13(supply);
|
|
48711
50440
|
if (totalStaked === void 0 || totalSupply === void 0 || totalSupply === 0n) {
|
|
48712
50441
|
return void 0;
|
|
48713
50442
|
}
|
|
@@ -48751,12 +50480,12 @@ var readerStellaStDot = (entry) => ({
|
|
|
48751
50480
|
],
|
|
48752
50481
|
abis: [TotalSupplyAbi, StellaStDotAbi, StellaStDotAbi],
|
|
48753
50482
|
parse: ([supply, rate, pooled]) => {
|
|
48754
|
-
const totalSupply =
|
|
48755
|
-
const exchangeRate =
|
|
50483
|
+
const totalSupply = toBigInt13(supply);
|
|
50484
|
+
const exchangeRate = toBigInt13(rate);
|
|
48756
50485
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
48757
50486
|
return void 0;
|
|
48758
50487
|
}
|
|
48759
|
-
const totalAssets =
|
|
50488
|
+
const totalAssets = toBigInt13(pooled) ?? totalSupply * exchangeRate / ONE_E187;
|
|
48760
50489
|
return {
|
|
48761
50490
|
totalAssets,
|
|
48762
50491
|
totalSupply,
|
|
@@ -48791,8 +50520,8 @@ var readerKintsuSMon = (entry) => ({
|
|
|
48791
50520
|
],
|
|
48792
50521
|
abis: [KintsuSMonAbi, KintsuSMonAbi],
|
|
48793
50522
|
parse: ([pooled, shares]) => {
|
|
48794
|
-
const totalAssets =
|
|
48795
|
-
const totalSupply =
|
|
50523
|
+
const totalAssets = toBigInt13(pooled);
|
|
50524
|
+
const totalSupply = toBigInt13(shares);
|
|
48796
50525
|
if (totalAssets === void 0 || totalSupply === void 0) return void 0;
|
|
48797
50526
|
const exchangeRate = totalSupply > 0n ? totalAssets * ONE_E187 / totalSupply : ONE_E187;
|
|
48798
50527
|
return { totalAssets, totalSupply, exchangeRate };
|
|
@@ -49313,7 +51042,7 @@ var fetchLstShareTokens = async (chainId, multicallRetry, prices = {}, tokenList
|
|
|
49313
51042
|
const validatorsByAddress = new Map(validatorEntries);
|
|
49314
51043
|
const idleByAddress = /* @__PURE__ */ new Map();
|
|
49315
51044
|
idleEntries.forEach((e, i) => {
|
|
49316
|
-
const bal =
|
|
51045
|
+
const bal = toBigInt13(idleResults[i]);
|
|
49317
51046
|
if (bal !== void 0) idleByAddress.set(e.address.toLowerCase(), bal);
|
|
49318
51047
|
});
|
|
49319
51048
|
const rawResults = new Array(allCalls.length);
|
|
@@ -49328,9 +51057,9 @@ var fetchLstShareTokens = async (chainId, multicallRetry, prices = {}, tokenList
|
|
|
49328
51057
|
for (let i = 0; i < entries.length; i++) {
|
|
49329
51058
|
const entry = entries[i];
|
|
49330
51059
|
const reader = readers[i];
|
|
49331
|
-
const
|
|
51060
|
+
const slice2 = rawResults.slice(cursor, cursor + reader.calls.length);
|
|
49332
51061
|
cursor += reader.calls.length;
|
|
49333
|
-
const state = reader.parse(
|
|
51062
|
+
const state = reader.parse(slice2);
|
|
49334
51063
|
if (!state) continue;
|
|
49335
51064
|
const addressLc = entry.address.toLowerCase();
|
|
49336
51065
|
const underlyingLc = entry.underlying.toLowerCase();
|
|
@@ -49443,7 +51172,7 @@ var BeetsStSWithdrawalAbi = [
|
|
|
49443
51172
|
];
|
|
49444
51173
|
|
|
49445
51174
|
// src/vaults/lst/withdrawals/readers/shared.ts
|
|
49446
|
-
var
|
|
51175
|
+
var toBigInt14 = (v) => {
|
|
49447
51176
|
if (v === void 0 || v === null) return void 0;
|
|
49448
51177
|
if (typeof v === "bigint") return v;
|
|
49449
51178
|
if (typeof v === "number") return BigInt(v);
|
|
@@ -49458,7 +51187,7 @@ var toBigInt13 = (v) => {
|
|
|
49458
51187
|
return void 0;
|
|
49459
51188
|
};
|
|
49460
51189
|
var toNumber = (v) => {
|
|
49461
|
-
const b =
|
|
51190
|
+
const b = toBigInt14(v);
|
|
49462
51191
|
if (b === void 0) return void 0;
|
|
49463
51192
|
if (b > BigInt(Number.MAX_SAFE_INTEGER)) return void 0;
|
|
49464
51193
|
return Number(b);
|
|
@@ -49495,7 +51224,7 @@ var readerBeets = {
|
|
|
49495
51224
|
const out = [];
|
|
49496
51225
|
for (let i = 0; i < reqs.length; i++) {
|
|
49497
51226
|
const r = reqs[i];
|
|
49498
|
-
const amount =
|
|
51227
|
+
const amount = toBigInt14(r.assetAmount);
|
|
49499
51228
|
const ts = toNumber(r.requestTimestamp);
|
|
49500
51229
|
const isWithdrawn = Boolean(r.isWithdrawn);
|
|
49501
51230
|
if (amount === void 0 || ts === void 0) continue;
|
|
@@ -49587,13 +51316,13 @@ var readerBeHype = {
|
|
|
49587
51316
|
const q = stage2[i * 2];
|
|
49588
51317
|
const canClaim = Boolean(stage2[i * 2 + 1]);
|
|
49589
51318
|
if (!q) continue;
|
|
49590
|
-
const hypeAmount = Array.isArray(q) ?
|
|
51319
|
+
const hypeAmount = Array.isArray(q) ? toBigInt14(q[2]) : toBigInt14(q.hypeAmount);
|
|
49591
51320
|
if (hypeAmount === void 0) continue;
|
|
49592
51321
|
out.push({
|
|
49593
51322
|
lst: entry.lst,
|
|
49594
51323
|
brand: entry.brand,
|
|
49595
51324
|
symbol: entry.symbol,
|
|
49596
|
-
requestId: String(
|
|
51325
|
+
requestId: String(toBigInt14(ids[i]) ?? i),
|
|
49597
51326
|
amountUnderlying: hypeAmount.toString(),
|
|
49598
51327
|
status: canClaim ? "claimable" : "pending"
|
|
49599
51328
|
});
|
|
@@ -49696,7 +51425,7 @@ var readerBenqi = {
|
|
|
49696
51425
|
for (let i = 0; i < reqs.length; i++) {
|
|
49697
51426
|
const r = reqs[i];
|
|
49698
51427
|
const startedAt = toNumber(r.startedAt);
|
|
49699
|
-
const shareAmount =
|
|
51428
|
+
const shareAmount = toBigInt14(r.shareAmount);
|
|
49700
51429
|
if (startedAt === void 0 || shareAmount === void 0) continue;
|
|
49701
51430
|
const readyAt = startedAt + cooldown;
|
|
49702
51431
|
const expiresAt = readyAt + claimWindow;
|
|
@@ -49759,8 +51488,8 @@ var readerBeraPaw = {
|
|
|
49759
51488
|
}
|
|
49760
51489
|
const pos = res[0];
|
|
49761
51490
|
if (!pos) return [];
|
|
49762
|
-
const queued = Array.isArray(pos) ?
|
|
49763
|
-
const available = Array.isArray(pos) ?
|
|
51491
|
+
const queued = Array.isArray(pos) ? toBigInt14(pos[0]) : toBigInt14(pos.queued);
|
|
51492
|
+
const available = Array.isArray(pos) ? toBigInt14(pos[1]) : toBigInt14(pos.available);
|
|
49764
51493
|
const out = [];
|
|
49765
51494
|
if (available !== void 0 && available > 0n) {
|
|
49766
51495
|
out.push({
|
|
@@ -49842,7 +51571,7 @@ var readerIbera = {
|
|
|
49842
51571
|
return [];
|
|
49843
51572
|
}
|
|
49844
51573
|
const length = toNumber(stage1[0]) ?? 0;
|
|
49845
|
-
const frontier =
|
|
51574
|
+
const frontier = toBigInt14(stage1[1]) ?? 0n;
|
|
49846
51575
|
if (length === 0) return [];
|
|
49847
51576
|
const start = length > MAX_SCAN ? length - MAX_SCAN : 0;
|
|
49848
51577
|
const ids = Array.from({ length: length - start }, (_3, k) => start + k);
|
|
@@ -49866,7 +51595,7 @@ var readerIbera = {
|
|
|
49866
51595
|
const r = stage2[k];
|
|
49867
51596
|
if (!r) continue;
|
|
49868
51597
|
const receiver = Array.isArray(r) ? r[2] : r.receiver;
|
|
49869
|
-
const amount = Array.isArray(r) ?
|
|
51598
|
+
const amount = Array.isArray(r) ? toBigInt14(r[3]) : toBigInt14(r.amount);
|
|
49870
51599
|
if (typeof receiver !== "string" || receiver.toLowerCase() !== target || amount === void 0 || amount === 0n) {
|
|
49871
51600
|
continue;
|
|
49872
51601
|
}
|
|
@@ -49939,7 +51668,7 @@ var readerPrimeStaking = {
|
|
|
49939
51668
|
return [];
|
|
49940
51669
|
}
|
|
49941
51670
|
const length = toNumber(stage1[0]) ?? 0;
|
|
49942
|
-
const frontier =
|
|
51671
|
+
const frontier = toBigInt14(stage1[1]) ?? 0n;
|
|
49943
51672
|
if (length === 0) return [];
|
|
49944
51673
|
const start = length > MAX_SCAN2 ? length - MAX_SCAN2 : 0;
|
|
49945
51674
|
const ids = Array.from({ length: length - start }, (_3, k) => start + k);
|
|
@@ -49963,7 +51692,7 @@ var readerPrimeStaking = {
|
|
|
49963
51692
|
const r = stage2[k];
|
|
49964
51693
|
if (!r) continue;
|
|
49965
51694
|
const receiver = Array.isArray(r) ? r[1] : r.receiver;
|
|
49966
|
-
const assets = Array.isArray(r) ?
|
|
51695
|
+
const assets = Array.isArray(r) ? toBigInt14(r[3]) : toBigInt14(r.assets);
|
|
49967
51696
|
const processed = Array.isArray(r) ? r[4] : r.processed;
|
|
49968
51697
|
if (typeof receiver !== "string" || receiver.toLowerCase() !== target || assets === void 0 || assets === 0n) {
|
|
49969
51698
|
continue;
|
|
@@ -50033,8 +51762,8 @@ var readerErc7540 = {
|
|
|
50033
51762
|
],
|
|
50034
51763
|
abi: [Erc7540Abi, Erc7540Abi]
|
|
50035
51764
|
});
|
|
50036
|
-
const pending =
|
|
50037
|
-
const claimable =
|
|
51765
|
+
const pending = toBigInt14(stage1[0]) ?? 0n;
|
|
51766
|
+
const claimable = toBigInt14(stage1[1]) ?? 0n;
|
|
50038
51767
|
const out = [];
|
|
50039
51768
|
if (claimable > 0n) {
|
|
50040
51769
|
const stage2 = await multicallRetry({
|
|
@@ -50048,7 +51777,7 @@ var readerErc7540 = {
|
|
|
50048
51777
|
],
|
|
50049
51778
|
abi: [Erc7540Abi]
|
|
50050
51779
|
});
|
|
50051
|
-
const amount =
|
|
51780
|
+
const amount = toBigInt14(stage2[0]) ?? claimable;
|
|
50052
51781
|
out.push({
|
|
50053
51782
|
lst: entry.lst,
|
|
50054
51783
|
brand: entry.brand,
|
|
@@ -50102,11 +51831,11 @@ var readerEthenaCooldown = {
|
|
|
50102
51831
|
let cooldownEnd;
|
|
50103
51832
|
let amount;
|
|
50104
51833
|
if (Array.isArray(cell)) {
|
|
50105
|
-
cooldownEnd =
|
|
50106
|
-
amount =
|
|
51834
|
+
cooldownEnd = toBigInt14(cell[0]);
|
|
51835
|
+
amount = toBigInt14(cell[1]);
|
|
50107
51836
|
} else if (cell && typeof cell === "object") {
|
|
50108
|
-
cooldownEnd =
|
|
50109
|
-
amount =
|
|
51837
|
+
cooldownEnd = toBigInt14(cell.cooldownEnd);
|
|
51838
|
+
amount = toBigInt14(cell.underlyingAmount);
|
|
50110
51839
|
}
|
|
50111
51840
|
if (!amount || amount === 0n) return [];
|
|
50112
51841
|
const readyAt = Number(cooldownEnd ?? 0n);
|
|
@@ -50201,7 +51930,7 @@ var readerEtherFi = {
|
|
|
50201
51930
|
calls: enumCalls,
|
|
50202
51931
|
abi: enumCalls.map(() => EtherFiWithdrawRequestAbi)
|
|
50203
51932
|
});
|
|
50204
|
-
const ids = stage2.map(
|
|
51933
|
+
const ids = stage2.map(toBigInt14).filter((v) => v !== void 0);
|
|
50205
51934
|
if (ids.length === 0) return [];
|
|
50206
51935
|
const detailCalls = ids.flatMap((id) => [
|
|
50207
51936
|
{ address: entry.withdrawalContract, name: "getRequest", params: [id] },
|
|
@@ -50221,7 +51950,7 @@ var readerEtherFi = {
|
|
|
50221
51950
|
const isValid = Boolean(stage3[i * 3 + 2]);
|
|
50222
51951
|
if (!req) continue;
|
|
50223
51952
|
if (!isValid) continue;
|
|
50224
|
-
const amount =
|
|
51953
|
+
const amount = toBigInt14(req.amountOfEEth);
|
|
50225
51954
|
if (amount === void 0) continue;
|
|
50226
51955
|
out.push({
|
|
50227
51956
|
lst: entry.lst,
|
|
@@ -50316,7 +52045,7 @@ var readerKelp = {
|
|
|
50316
52045
|
}
|
|
50317
52046
|
],
|
|
50318
52047
|
abi: [KelpWithdrawalManagerAbi]
|
|
50319
|
-
}).then((res) =>
|
|
52048
|
+
}).then((res) => toBigInt14(res[0]) ?? 0n)
|
|
50320
52049
|
]);
|
|
50321
52050
|
lengths = storageReads;
|
|
50322
52051
|
currentBlock = block;
|
|
@@ -50346,9 +52075,9 @@ var readerKelp = {
|
|
|
50346
52075
|
for (let i = 0; i < detailCalls.length; i++) {
|
|
50347
52076
|
const r = stage2[i];
|
|
50348
52077
|
if (!r) continue;
|
|
50349
|
-
const expected = Array.isArray(r) ?
|
|
50350
|
-
const startBlock = Array.isArray(r) ?
|
|
50351
|
-
const nonce = Array.isArray(r) ?
|
|
52078
|
+
const expected = Array.isArray(r) ? toBigInt14(r[1]) : toBigInt14(r.expectedAssetAmount);
|
|
52079
|
+
const startBlock = Array.isArray(r) ? toBigInt14(r[2]) : toBigInt14(r.withdrawalStartBlock);
|
|
52080
|
+
const nonce = Array.isArray(r) ? toBigInt14(r[3]) : toBigInt14(r.userNonce);
|
|
50352
52081
|
if (expected === void 0 || startBlock === void 0) continue;
|
|
50353
52082
|
const claimable = currentBlock >= startBlock + delayBlocks;
|
|
50354
52083
|
out.push({
|
|
@@ -50425,7 +52154,7 @@ var readerLido = {
|
|
|
50425
52154
|
abi: [LidoWithdrawalQueueAbi, LidoWithdrawalQueueAbi]
|
|
50426
52155
|
});
|
|
50427
52156
|
const ids = stage1[0];
|
|
50428
|
-
const frontier =
|
|
52157
|
+
const frontier = toBigInt14(stage1[1]) ?? 0n;
|
|
50429
52158
|
if (!Array.isArray(ids) || ids.length === 0) return [];
|
|
50430
52159
|
const stage2 = await multicallRetry({
|
|
50431
52160
|
chain: chainId,
|
|
@@ -50442,10 +52171,10 @@ var readerLido = {
|
|
|
50442
52171
|
if (!Array.isArray(statuses)) return [];
|
|
50443
52172
|
const out = [];
|
|
50444
52173
|
for (let i = 0; i < ids.length; i++) {
|
|
50445
|
-
const id =
|
|
52174
|
+
const id = toBigInt14(ids[i]);
|
|
50446
52175
|
const s = statuses[i];
|
|
50447
52176
|
if (id === void 0 || !s) continue;
|
|
50448
|
-
const amountOfStETH =
|
|
52177
|
+
const amountOfStETH = toBigInt14(s.amountOfStETH);
|
|
50449
52178
|
const isFinalized = Boolean(s.isFinalized);
|
|
50450
52179
|
const isClaimed = Boolean(s.isClaimed);
|
|
50451
52180
|
if (amountOfStETH === void 0) continue;
|
|
@@ -50554,11 +52283,11 @@ var readerLista = {
|
|
|
50554
52283
|
const status = stage2[i];
|
|
50555
52284
|
if (!status) continue;
|
|
50556
52285
|
const isClaimable = Array.isArray(status) ? Boolean(status[0]) : Boolean(status._isClaimable);
|
|
50557
|
-
const bnbAmount = Array.isArray(status) ?
|
|
50558
|
-
const snbnbAmount = Array.isArray(req) ?
|
|
52286
|
+
const bnbAmount = Array.isArray(status) ? toBigInt14(status[1]) : toBigInt14(status._amount);
|
|
52287
|
+
const snbnbAmount = Array.isArray(req) ? toBigInt14(req[1]) : toBigInt14(req?.amountInSnBnb);
|
|
50559
52288
|
const amount = bnbAmount ?? snbnbAmount;
|
|
50560
52289
|
if (amount === void 0) continue;
|
|
50561
|
-
const uuid = Array.isArray(req) ?
|
|
52290
|
+
const uuid = Array.isArray(req) ? toBigInt14(req[0]) : toBigInt14(req?.uuid);
|
|
50562
52291
|
out.push({
|
|
50563
52292
|
lst: entry.lst,
|
|
50564
52293
|
brand: entry.brand,
|
|
@@ -50643,7 +52372,7 @@ var readerRenzo = {
|
|
|
50643
52372
|
for (let i = 0; i < count; i++) {
|
|
50644
52373
|
const tup = stage2[i];
|
|
50645
52374
|
if (!Array.isArray(tup) || tup.length < 5) continue;
|
|
50646
|
-
const amountToRedeem =
|
|
52375
|
+
const amountToRedeem = toBigInt14(tup[2]);
|
|
50647
52376
|
const createdAt = toNumber(tup[4]);
|
|
50648
52377
|
if (amountToRedeem === void 0 || createdAt === void 0) continue;
|
|
50649
52378
|
const readyAt = createdAt + cooldown;
|
|
@@ -50716,9 +52445,9 @@ var readerStaderEthx2 = {
|
|
|
50716
52445
|
]
|
|
50717
52446
|
});
|
|
50718
52447
|
const ids = stage1[0];
|
|
50719
|
-
const frontier =
|
|
52448
|
+
const frontier = toBigInt14(stage1[1]) ?? 0n;
|
|
50720
52449
|
if (!Array.isArray(ids) || ids.length === 0) return [];
|
|
50721
|
-
const idBigInts = ids.map(
|
|
52450
|
+
const idBigInts = ids.map(toBigInt14).filter((v) => v !== void 0);
|
|
50722
52451
|
const detailCalls = idBigInts.map((id) => ({
|
|
50723
52452
|
address: entry.withdrawalContract,
|
|
50724
52453
|
name: "userWithdrawRequests",
|
|
@@ -50734,8 +52463,8 @@ var readerStaderEthx2 = {
|
|
|
50734
52463
|
const id = idBigInts[i];
|
|
50735
52464
|
const tup = stage2[i];
|
|
50736
52465
|
if (!Array.isArray(tup) || tup.length < 5) continue;
|
|
50737
|
-
const ethExpected =
|
|
50738
|
-
const ethFinalized =
|
|
52466
|
+
const ethExpected = toBigInt14(tup[2]) ?? 0n;
|
|
52467
|
+
const ethFinalized = toBigInt14(tup[3]) ?? 0n;
|
|
50739
52468
|
const isFinalized = id < frontier && ethFinalized > 0n;
|
|
50740
52469
|
const queuePosition = isFinalized ? 0 : Number(id - frontier);
|
|
50741
52470
|
out.push({
|
|
@@ -50814,13 +52543,13 @@ var readerStaderMaticX2 = {
|
|
|
50814
52543
|
});
|
|
50815
52544
|
const arr = stage1[0];
|
|
50816
52545
|
if (!Array.isArray(arr)) return [];
|
|
50817
|
-
const currentEpoch = stakeManager ?
|
|
50818
|
-
const delay = stakeManager ?
|
|
52546
|
+
const currentEpoch = stakeManager ? toBigInt14(stage1[1]) ?? 0n : 0n;
|
|
52547
|
+
const delay = stakeManager ? toBigInt14(stage1[2]) ?? 0n : 0n;
|
|
50819
52548
|
const out = [];
|
|
50820
52549
|
for (let i = 0; i < arr.length; i++) {
|
|
50821
52550
|
const r = arr[i];
|
|
50822
|
-
const amount =
|
|
50823
|
-
const requestEpoch =
|
|
52551
|
+
const amount = toBigInt14(r.amount) ?? 0n;
|
|
52552
|
+
const requestEpoch = toBigInt14(r.requestEpoch);
|
|
50824
52553
|
if (requestEpoch === void 0) continue;
|
|
50825
52554
|
const ready = stakeManager ? currentEpoch >= requestEpoch + delay : false;
|
|
50826
52555
|
out.push({
|
|
@@ -50907,9 +52636,9 @@ var readerMantle = {
|
|
|
50907
52636
|
if (typeof requester === "string" && requester.toLowerCase() !== lcUser) {
|
|
50908
52637
|
continue;
|
|
50909
52638
|
}
|
|
50910
|
-
const ethRequested = Array.isArray(detail) ?
|
|
52639
|
+
const ethRequested = Array.isArray(detail) ? toBigInt14(detail[3]) : toBigInt14(detail.ethRequested);
|
|
50911
52640
|
const isFinalized = Array.isArray(info) ? Boolean(info[0]) : Boolean(info.isFinalized);
|
|
50912
|
-
const claimable = Array.isArray(info) ?
|
|
52641
|
+
const claimable = Array.isArray(info) ? toBigInt14(info[1]) : toBigInt14(info.claimableAmount);
|
|
50913
52642
|
if (ethRequested === void 0) continue;
|
|
50914
52643
|
out.push({
|
|
50915
52644
|
lst: entry.lst,
|
|
@@ -50988,8 +52717,8 @@ var readerPuffer = {
|
|
|
50988
52717
|
calls,
|
|
50989
52718
|
abi: calls.map(() => PufferWithdrawalManagerAbi)
|
|
50990
52719
|
});
|
|
50991
|
-
const finalizedBatch =
|
|
50992
|
-
const batchSize =
|
|
52720
|
+
const finalizedBatch = toBigInt14(results[detailCalls.length]) ?? 0n;
|
|
52721
|
+
const batchSize = toBigInt14(results[detailCalls.length + 1]) ?? 0n;
|
|
50993
52722
|
const out = [];
|
|
50994
52723
|
const lcUser = user.toLowerCase();
|
|
50995
52724
|
for (let i = 0; i < ids.length; i++) {
|
|
@@ -50999,7 +52728,7 @@ var readerPuffer = {
|
|
|
50999
52728
|
if (typeof recipient === "string" && recipient.toLowerCase() !== lcUser) {
|
|
51000
52729
|
continue;
|
|
51001
52730
|
}
|
|
51002
|
-
const pufETHAmount = Array.isArray(d) ?
|
|
52731
|
+
const pufETHAmount = Array.isArray(d) ? toBigInt14(d[0]) : toBigInt14(d.pufETHAmount);
|
|
51003
52732
|
if (pufETHAmount === void 0) continue;
|
|
51004
52733
|
const batchIdx = batchSize > 0n ? ids[i] / batchSize : 0n;
|
|
51005
52734
|
const claimable = batchIdx <= finalizedBatch;
|
|
@@ -51097,7 +52826,7 @@ var readerKinetiq = {
|
|
|
51097
52826
|
for (let i = 0; i < count; i++) {
|
|
51098
52827
|
const r = stage2[i];
|
|
51099
52828
|
if (!r) continue;
|
|
51100
|
-
const hypeAmount = Array.isArray(r) ?
|
|
52829
|
+
const hypeAmount = Array.isArray(r) ? toBigInt14(r[0]) : toBigInt14(r.hypeAmount);
|
|
51101
52830
|
const timestamp = Array.isArray(r) ? toNumber(r[4]) : toNumber(r.timestamp);
|
|
51102
52831
|
if (hypeAmount === void 0 || hypeAmount === 0n || timestamp === void 0) {
|
|
51103
52832
|
continue;
|
|
@@ -51225,7 +52954,7 @@ var readerStakeWise = {
|
|
|
51225
52954
|
const claimedByIdx = /* @__PURE__ */ new Map();
|
|
51226
52955
|
for (let i = 0; i < onChainChecks.length; i++) {
|
|
51227
52956
|
const cell = checkResults[i];
|
|
51228
|
-
const claimed = Array.isArray(cell) ?
|
|
52957
|
+
const claimed = Array.isArray(cell) ? toBigInt14(cell[2]) : toBigInt14(cell?.claimedAssets);
|
|
51229
52958
|
if (claimed !== void 0 && claimed > 0n) {
|
|
51230
52959
|
claimedByIdx.set(onChainChecks[i].idx, claimed);
|
|
51231
52960
|
}
|
|
@@ -51233,7 +52962,7 @@ var readerStakeWise = {
|
|
|
51233
52962
|
const out = [];
|
|
51234
52963
|
for (let i = 0; i < requests.length; i++) {
|
|
51235
52964
|
const r = requests[i];
|
|
51236
|
-
const amount =
|
|
52965
|
+
const amount = toBigInt14(r.totalAssets) ?? 0n;
|
|
51237
52966
|
const onChainClaimed = claimedByIdx.get(i);
|
|
51238
52967
|
const claimable = onChainClaimed !== void 0 || r.isClaimable;
|
|
51239
52968
|
out.push({
|
|
@@ -51290,7 +53019,7 @@ var readerStCelo2 = {
|
|
|
51290
53019
|
const timestamps = cell[1] ?? [];
|
|
51291
53020
|
const out = [];
|
|
51292
53021
|
for (let i = 0; i < values.length; i++) {
|
|
51293
|
-
const amount =
|
|
53022
|
+
const amount = toBigInt14(values[i]);
|
|
51294
53023
|
const readyAt = toNumber(timestamps[i]);
|
|
51295
53024
|
if (amount === void 0 || readyAt === void 0) continue;
|
|
51296
53025
|
out.push({
|
|
@@ -51335,11 +53064,11 @@ var readerStellaUnbond = {
|
|
|
51335
53064
|
let waiting;
|
|
51336
53065
|
let unbonded;
|
|
51337
53066
|
if (Array.isArray(cell)) {
|
|
51338
|
-
waiting =
|
|
51339
|
-
unbonded =
|
|
53067
|
+
waiting = toBigInt14(cell[0]);
|
|
53068
|
+
unbonded = toBigInt14(cell[1]);
|
|
51340
53069
|
} else if (cell && typeof cell === "object") {
|
|
51341
|
-
waiting =
|
|
51342
|
-
unbonded =
|
|
53070
|
+
waiting = toBigInt14(cell.waiting);
|
|
53071
|
+
unbonded = toBigInt14(cell.unbonded);
|
|
51343
53072
|
}
|
|
51344
53073
|
const out = [];
|
|
51345
53074
|
if (unbonded && unbonded > 0n) {
|
|
@@ -51429,7 +53158,7 @@ var readerSwell = {
|
|
|
51429
53158
|
abi: [SwellRswExitAbi, SwellRswExitAbi]
|
|
51430
53159
|
});
|
|
51431
53160
|
const count = toNumber(stage1[0]) ?? 0;
|
|
51432
|
-
const lastProcessed =
|
|
53161
|
+
const lastProcessed = toBigInt14(stage1[1]) ?? 0n;
|
|
51433
53162
|
if (count === 0) return [];
|
|
51434
53163
|
const enumCalls = Array.from({ length: count }, (_3, i) => ({
|
|
51435
53164
|
address: entry.withdrawalContract,
|
|
@@ -51441,7 +53170,7 @@ var readerSwell = {
|
|
|
51441
53170
|
calls: enumCalls,
|
|
51442
53171
|
abi: enumCalls.map(() => SwellRswExitAbi)
|
|
51443
53172
|
});
|
|
51444
|
-
const ids = stage2.map(
|
|
53173
|
+
const ids = stage2.map(toBigInt14).filter((v) => v !== void 0);
|
|
51445
53174
|
if (ids.length === 0) return [];
|
|
51446
53175
|
const detailCalls = ids.map((id) => ({
|
|
51447
53176
|
address: entry.withdrawalContract,
|
|
@@ -51458,7 +53187,7 @@ var readerSwell = {
|
|
|
51458
53187
|
const id = ids[i];
|
|
51459
53188
|
const r = stage3[i];
|
|
51460
53189
|
if (!r) continue;
|
|
51461
|
-
const amount =
|
|
53190
|
+
const amount = toBigInt14(r.amount);
|
|
51462
53191
|
if (amount === void 0) continue;
|
|
51463
53192
|
const claimable = id <= lastProcessed;
|
|
51464
53193
|
out.push({
|
|
@@ -51532,14 +53261,14 @@ var readerValantis = {
|
|
|
51532
53261
|
for (let i = 0; i < burns.length; i++) {
|
|
51533
53262
|
const b = burns[i];
|
|
51534
53263
|
if (!b) continue;
|
|
51535
|
-
const amount = Array.isArray(b) ?
|
|
53264
|
+
const amount = Array.isArray(b) ? toBigInt14(b[0]) : toBigInt14(b.amount);
|
|
51536
53265
|
const completed = Array.isArray(b) ? Boolean(b[2]) : Boolean(b.completed);
|
|
51537
53266
|
if (amount === void 0 || completed) continue;
|
|
51538
53267
|
out.push({
|
|
51539
53268
|
lst: entry.lst,
|
|
51540
53269
|
brand: entry.brand,
|
|
51541
53270
|
symbol: entry.symbol,
|
|
51542
|
-
requestId: String(
|
|
53271
|
+
requestId: String(toBigInt14(ids[i]) ?? i),
|
|
51543
53272
|
amountUnderlying: amount.toString(),
|
|
51544
53273
|
status: redeemable[i] ? "claimable" : "pending"
|
|
51545
53274
|
});
|
|
@@ -51612,7 +53341,7 @@ var readerTruFin = {
|
|
|
51612
53341
|
if (typeof recipient === "string" && recipient.toLowerCase() !== lcUser) {
|
|
51613
53342
|
continue;
|
|
51614
53343
|
}
|
|
51615
|
-
const amount = Array.isArray(w) ?
|
|
53344
|
+
const amount = Array.isArray(w) ? toBigInt14(w[1]) : toBigInt14(w.amount);
|
|
51616
53345
|
if (amount === void 0 || amount === 0n) continue;
|
|
51617
53346
|
out.push({
|
|
51618
53347
|
lst: entry.lst,
|
|
@@ -51708,7 +53437,7 @@ var readerYieldNest = {
|
|
|
51708
53437
|
calls: enumCalls,
|
|
51709
53438
|
abi: enumCalls.map(() => YieldNestWithdrawalQueueAbi)
|
|
51710
53439
|
});
|
|
51711
|
-
const ids = stage2.map(
|
|
53440
|
+
const ids = stage2.map(toBigInt14).filter((v) => v !== void 0);
|
|
51712
53441
|
if (ids.length === 0) return [];
|
|
51713
53442
|
const detailCalls = ids.map((id) => ({
|
|
51714
53443
|
address: entry.withdrawalContract,
|
|
@@ -51727,7 +53456,7 @@ var readerYieldNest = {
|
|
|
51727
53456
|
const id = ids[i];
|
|
51728
53457
|
const r = stage3[i];
|
|
51729
53458
|
if (!r) continue;
|
|
51730
|
-
const amount =
|
|
53459
|
+
const amount = toBigInt14(r.amount);
|
|
51731
53460
|
const created = toNumber(r.creationTimestamp);
|
|
51732
53461
|
const processed = Boolean(r.processed);
|
|
51733
53462
|
if (amount === void 0 || created === void 0) continue;
|
|
@@ -52320,7 +54049,7 @@ var getLstWithdrawalRegistry = (chainId, extraEntries) => {
|
|
|
52320
54049
|
const extra = extraEntries.filter((e) => !seen.has(e.lst.toLowerCase()));
|
|
52321
54050
|
return extra.length === 0 ? base : [...base, ...extra];
|
|
52322
54051
|
};
|
|
52323
|
-
var
|
|
54052
|
+
var warn7 = (...args) => {
|
|
52324
54053
|
};
|
|
52325
54054
|
var getLstWithdrawalRequests = async (user, chainId, multicallRetry, options) => {
|
|
52326
54055
|
const entries = getLstWithdrawalRegistry(chainId, options?.extraEntries);
|
|
@@ -52335,7 +54064,7 @@ var getLstWithdrawalRequests = async (user, chainId, multicallRetry, options) =>
|
|
|
52335
54064
|
try {
|
|
52336
54065
|
return await reader.fetch(lcUser, multicallRetry, chainId, entry, ids);
|
|
52337
54066
|
} catch (e) {
|
|
52338
|
-
|
|
54067
|
+
warn7(
|
|
52339
54068
|
`[lst-withdrawals] ${entry.brand} ${entry.symbol} (${entry.lst}) failed:`,
|
|
52340
54069
|
e?.message ?? e
|
|
52341
54070
|
);
|
|
@@ -52404,7 +54133,7 @@ var NavOracleReadAbi = [
|
|
|
52404
54133
|
|
|
52405
54134
|
// src/vaults/savings/readers/shared.ts
|
|
52406
54135
|
var ONE_E189 = 10n ** 18n;
|
|
52407
|
-
var
|
|
54136
|
+
var toBigInt15 = (v) => {
|
|
52408
54137
|
if (v === void 0 || v === null) return void 0;
|
|
52409
54138
|
if (typeof v === "bigint") return v;
|
|
52410
54139
|
if (typeof v === "number") return BigInt(v);
|
|
@@ -52435,9 +54164,9 @@ var readerErc46262 = (entry) => {
|
|
|
52435
54164
|
],
|
|
52436
54165
|
abis: [Erc4626ReadAbi2, TotalSupplyAbi2, Erc4626ReadAbi2],
|
|
52437
54166
|
parse: ([assets, supply, rate]) => {
|
|
52438
|
-
const totalAssets =
|
|
52439
|
-
const totalSupply =
|
|
52440
|
-
const convertToAssetsRaw =
|
|
54167
|
+
const totalAssets = toBigInt15(assets);
|
|
54168
|
+
const totalSupply = toBigInt15(supply);
|
|
54169
|
+
const convertToAssetsRaw = toBigInt15(rate);
|
|
52441
54170
|
if (totalAssets === void 0 || totalSupply === void 0 || convertToAssetsRaw === void 0) {
|
|
52442
54171
|
return void 0;
|
|
52443
54172
|
}
|
|
@@ -52531,13 +54260,13 @@ var readerErc4626Idle = (entry) => {
|
|
|
52531
54260
|
],
|
|
52532
54261
|
abis: [Erc4626ReadAbi2, TotalSupplyAbi2, Erc4626ReadAbi2, BalanceOfAbi],
|
|
52533
54262
|
parse: ([assets, supply, rate, inventoryBalance]) => {
|
|
52534
|
-
const totalAssets =
|
|
52535
|
-
const totalSupply =
|
|
52536
|
-
const convertToAssetsRaw =
|
|
54263
|
+
const totalAssets = toBigInt15(assets);
|
|
54264
|
+
const totalSupply = toBigInt15(supply);
|
|
54265
|
+
const convertToAssetsRaw = toBigInt15(rate);
|
|
52537
54266
|
if (totalAssets === void 0 || totalSupply === void 0 || convertToAssetsRaw === void 0) {
|
|
52538
54267
|
return void 0;
|
|
52539
54268
|
}
|
|
52540
|
-
const capacity =
|
|
54269
|
+
const capacity = toBigInt15(inventoryBalance);
|
|
52541
54270
|
return {
|
|
52542
54271
|
totalAssets,
|
|
52543
54272
|
totalSupply,
|
|
@@ -52568,10 +54297,10 @@ var readerNavOracle = (entry) => {
|
|
|
52568
54297
|
],
|
|
52569
54298
|
abis: [TotalSupplyAbi2, NavOracleReadAbi],
|
|
52570
54299
|
parse: ([supply, round]) => {
|
|
52571
|
-
const totalSupply =
|
|
54300
|
+
const totalSupply = toBigInt15(supply);
|
|
52572
54301
|
if (totalSupply === void 0) return void 0;
|
|
52573
54302
|
const raw = Array.isArray(round) ? round[1] : round?.answer;
|
|
52574
|
-
const exchangeRate =
|
|
54303
|
+
const exchangeRate = toBigInt15(raw);
|
|
52575
54304
|
if (exchangeRate === void 0 || exchangeRate <= 0n) return void 0;
|
|
52576
54305
|
return {
|
|
52577
54306
|
totalAssets: totalSupply * exchangeRate * underlyingUnit / (ONE_E189 * shareUnit),
|
|
@@ -52613,14 +54342,14 @@ var readerNativeWnlp = (entry) => {
|
|
|
52613
54342
|
NativeWithdrawQueueReadAbi
|
|
52614
54343
|
],
|
|
52615
54344
|
parse: ([supply, rate, feeBips, instantEnabled, inventory, window]) => {
|
|
52616
|
-
const totalSupply =
|
|
52617
|
-
const exchangeRate =
|
|
54345
|
+
const totalSupply = toBigInt15(supply);
|
|
54346
|
+
const exchangeRate = toBigInt15(rate);
|
|
52618
54347
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
52619
54348
|
return void 0;
|
|
52620
54349
|
}
|
|
52621
|
-
const capacity =
|
|
52622
|
-
const windowSeconds =
|
|
52623
|
-
const bips =
|
|
54350
|
+
const capacity = toBigInt15(inventory);
|
|
54351
|
+
const windowSeconds = toBigInt15(window);
|
|
54352
|
+
const bips = toBigInt15(feeBips);
|
|
52624
54353
|
return {
|
|
52625
54354
|
totalAssets: totalSupply * exchangeRate / ONE_E189,
|
|
52626
54355
|
totalSupply,
|
|
@@ -52678,9 +54407,9 @@ var fetchSavingsVaults = async (chainId, multicallRetry, prices = {}, tokenList
|
|
|
52678
54407
|
for (let i = 0; i < entries.length; i++) {
|
|
52679
54408
|
const entry = entries[i];
|
|
52680
54409
|
const reader = readers[i];
|
|
52681
|
-
const
|
|
54410
|
+
const slice2 = rawResults.slice(cursor, cursor + reader.calls.length);
|
|
52682
54411
|
cursor += reader.calls.length;
|
|
52683
|
-
const state = reader.parse(
|
|
54412
|
+
const state = reader.parse(slice2);
|
|
52684
54413
|
if (!state) continue;
|
|
52685
54414
|
const addressLc = entry.address.toLowerCase();
|
|
52686
54415
|
const underlyingLc = entry.underlying.toLowerCase();
|
|
@@ -52884,7 +54613,7 @@ var pickApr = (apr) => {
|
|
|
52884
54613
|
if (apr.inception != null) return { rate: apr.inception, window: "inception" };
|
|
52885
54614
|
return { rate: 0, window: "none" };
|
|
52886
54615
|
};
|
|
52887
|
-
var
|
|
54616
|
+
var num4 = (v) => typeof v === "number" && Number.isFinite(v) ? v : null;
|
|
52888
54617
|
function parseVault7(v, chainId, prices, tokenList) {
|
|
52889
54618
|
const address = (v?.address ?? "").toLowerCase();
|
|
52890
54619
|
const assetAddr = (v?.asset?.address ?? "").toLowerCase();
|
|
@@ -52900,14 +54629,14 @@ function parseVault7(v, chainId, prices, tokenList) {
|
|
|
52900
54629
|
parseRawAmount(totalAssetsRaw, assetDecimals)
|
|
52901
54630
|
);
|
|
52902
54631
|
const apr = {
|
|
52903
|
-
weekly:
|
|
52904
|
-
monthly:
|
|
52905
|
-
yearly:
|
|
52906
|
-
inception:
|
|
54632
|
+
weekly: num4(state.weeklyApr?.twrrNetApr),
|
|
54633
|
+
monthly: num4(state.monthlyApr?.twrrNetApr),
|
|
54634
|
+
yearly: num4(state.yearlyApr?.twrrNetApr),
|
|
54635
|
+
inception: num4(state.inceptionApr?.twrrNetApr)
|
|
52907
54636
|
};
|
|
52908
54637
|
const { rate: supplyRate, window: aprWindow } = pickApr(apr);
|
|
52909
54638
|
const oracleKey = toOracleKey(assetMeta?.assetGroup) ?? toGenericPriceKey(assetAddr, chainId);
|
|
52910
|
-
const apiTotalAssetsUsd =
|
|
54639
|
+
const apiTotalAssetsUsd = num4(state.totalAssetsUsd) ?? 0;
|
|
52911
54640
|
const impliedPriceUsd = totalAssetsFormatted > 0 ? apiTotalAssetsUsd / totalAssetsFormatted : 0;
|
|
52912
54641
|
const priceUsd = prices[oracleKey] ?? prices[assetAddr] ?? impliedPriceUsd;
|
|
52913
54642
|
const totalAssetsUsd = apiTotalAssetsUsd || totalAssetsFormatted * priceUsd;
|
|
@@ -52927,7 +54656,7 @@ function parseVault7(v, chainId, prices, tokenList) {
|
|
|
52927
54656
|
totalAssets: totalAssetsRaw,
|
|
52928
54657
|
totalSupply: totalSupplyRaw,
|
|
52929
54658
|
pricePerShare: state.pricePerShare?.toString() ?? "0",
|
|
52930
|
-
pricePerShareUsd:
|
|
54659
|
+
pricePerShareUsd: num4(state.pricePerShareUsd) ?? void 0,
|
|
52931
54660
|
supplyRate,
|
|
52932
54661
|
rewardsRate: 0,
|
|
52933
54662
|
depositRate: supplyRate,
|
|
@@ -53039,9 +54768,9 @@ async function fetchAaveEarnApiVaults(chainId, targets) {
|
|
|
53039
54768
|
const target = Number(chainId);
|
|
53040
54769
|
const byAddress = /* @__PURE__ */ new Map();
|
|
53041
54770
|
const keep = (it) => {
|
|
53042
|
-
const
|
|
53043
|
-
if (!
|
|
53044
|
-
if (!byAddress.has(
|
|
54771
|
+
const addr2 = it?.address?.toLowerCase();
|
|
54772
|
+
if (!addr2 || Number(it.chainId) !== target) return;
|
|
54773
|
+
if (!byAddress.has(addr2)) byAddress.set(addr2, it);
|
|
53045
54774
|
};
|
|
53046
54775
|
for (const owner of targets.owners) {
|
|
53047
54776
|
let cursor = null;
|
|
@@ -53110,7 +54839,7 @@ var resolveAaveEarnCuratorName = (chainId, owner) => {
|
|
|
53110
54839
|
|
|
53111
54840
|
// src/vaults/aave-earn/fetchPublic.ts
|
|
53112
54841
|
var BRAND2 = "Aave";
|
|
53113
|
-
var
|
|
54842
|
+
var toBigInt16 = (v) => {
|
|
53114
54843
|
if (v === void 0 || v === null) return void 0;
|
|
53115
54844
|
if (typeof v === "bigint") return v;
|
|
53116
54845
|
if (typeof v === "number") return BigInt(v);
|
|
@@ -53124,7 +54853,7 @@ var toBigInt15 = (v) => {
|
|
|
53124
54853
|
}
|
|
53125
54854
|
return void 0;
|
|
53126
54855
|
};
|
|
53127
|
-
var
|
|
54856
|
+
var num5 = (v) => {
|
|
53128
54857
|
const n = Number(v);
|
|
53129
54858
|
return Number.isFinite(n) ? n : 0;
|
|
53130
54859
|
};
|
|
@@ -53165,28 +54894,28 @@ var fetchAaveEarnVaults = async (chainId, multicallRetry, prices = {}, tokenList
|
|
|
53165
54894
|
for (let i = 0; i < usable.length; i++) {
|
|
53166
54895
|
const v = usable[i];
|
|
53167
54896
|
const base = i * CALLS_PER_VAULT2;
|
|
53168
|
-
const
|
|
54897
|
+
const slice2 = rawResults.slice(base, base + CALLS_PER_VAULT2);
|
|
53169
54898
|
const addressLc = v.address.toLowerCase();
|
|
53170
54899
|
const token = v.usedReserve.underlyingToken;
|
|
53171
54900
|
const underlyingLc = token.address.toLowerCase();
|
|
53172
54901
|
const assetDecimals = token.decimals;
|
|
53173
|
-
const shareDecOnChain =
|
|
54902
|
+
const shareDecOnChain = toBigInt16(slice2[1]);
|
|
53174
54903
|
const decimals = shareDecOnChain !== void 0 ? Number(shareDecOnChain) : assetDecimals;
|
|
53175
|
-
const totalSupply =
|
|
54904
|
+
const totalSupply = toBigInt16(slice2[2]);
|
|
53176
54905
|
if (totalSupply === void 0) continue;
|
|
53177
54906
|
const shareUnit = 10n ** BigInt(decimals);
|
|
53178
54907
|
const underlyingUnit = 10n ** BigInt(assetDecimals);
|
|
53179
|
-
const convertToAssets =
|
|
54908
|
+
const convertToAssets = toBigInt16(slice2[3]) ?? 0n;
|
|
53180
54909
|
const convertToShares = convertToAssets > 0n ? shareUnit * underlyingUnit / convertToAssets : 0n;
|
|
53181
|
-
const totalAssets =
|
|
54910
|
+
const totalAssets = toBigInt16(slice2[0]) ?? totalSupply * convertToAssets / shareUnit;
|
|
53182
54911
|
const totalAssetsFormatted = Number(totalAssets) / 10 ** assetDecimals;
|
|
53183
54912
|
const asset = tokenList[underlyingLc];
|
|
53184
|
-
const priceUsd = prices[underlyingLc] ?? (v.balance?.usdPerToken != null ?
|
|
54913
|
+
const priceUsd = prices[underlyingLc] ?? (v.balance?.usdPerToken != null ? num5(v.balance.usdPerToken) : void 0);
|
|
53185
54914
|
const totalAssetsUsd = priceUsd !== void 0 ? totalAssetsFormatted * priceUsd : 0;
|
|
53186
|
-
const supplyRate =
|
|
54915
|
+
const supplyRate = num5(v.vaultApr?.formatted);
|
|
53187
54916
|
const rewardsRate = 0;
|
|
53188
54917
|
const depositRate = supplyRate + rewardsRate;
|
|
53189
|
-
const fee =
|
|
54918
|
+
const fee = num5(v.fee?.value);
|
|
53190
54919
|
const symbol = (v.shareSymbol ?? "").trim();
|
|
53191
54920
|
const shareName = (v.shareName ?? "").trim();
|
|
53192
54921
|
const name = shareName || symbol;
|
|
@@ -53223,7 +54952,7 @@ var fetchAaveEarnVaults = async (chainId, multicallRetry, prices = {}, tokenList
|
|
|
53223
54952
|
};
|
|
53224
54953
|
|
|
53225
54954
|
// src/vaults/upshift/fetchPublic.ts
|
|
53226
|
-
var
|
|
54955
|
+
var num6 = (v) => typeof v === "number" && Number.isFinite(v) ? v : null;
|
|
53227
54956
|
var isEvmAddress = (a) => /^0x[0-9a-fA-F]{40}$/.test(a);
|
|
53228
54957
|
var derivePricePerShare = (totalAssetsRaw, totalSupplyRaw, shareDecimals) => {
|
|
53229
54958
|
try {
|
|
@@ -53250,12 +54979,12 @@ function parseVault8(v, chainId, prices, tokenList) {
|
|
|
53250
54979
|
const totalAssetsFormatted = Number(
|
|
53251
54980
|
parseRawAmount(totalAssetsRaw, assetDecimals)
|
|
53252
54981
|
);
|
|
53253
|
-
const base =
|
|
53254
|
-
const campaign =
|
|
54982
|
+
const base = num6(v.apy?.apy) ?? 0;
|
|
54983
|
+
const campaign = num6(v.apy?.campaignApy);
|
|
53255
54984
|
const supplyRate = apyToAprPercent(base);
|
|
53256
54985
|
const rewardsRate = campaign != null ? apyToAprPercent(campaign) : 0;
|
|
53257
54986
|
const oracleKey = toOracleKey(assetMeta?.assetGroup) ?? toGenericPriceKey(assetAddr, chainId);
|
|
53258
|
-
const apiTvlUsd =
|
|
54987
|
+
const apiTvlUsd = num6(v.latest_reported_tvl) ?? 0;
|
|
53259
54988
|
const impliedPriceUsd = totalAssetsFormatted > 0 ? apiTvlUsd / totalAssetsFormatted : 0;
|
|
53260
54989
|
const priceUsd = prices[oracleKey] ?? prices[assetAddr] ?? impliedPriceUsd;
|
|
53261
54990
|
const totalAssetsUsd = apiTvlUsd || totalAssetsFormatted * priceUsd;
|
|
@@ -53280,10 +55009,10 @@ function parseVault8(v, chainId, prices, tokenList) {
|
|
|
53280
55009
|
rewardsRate,
|
|
53281
55010
|
depositRate: supplyRate + rewardsRate,
|
|
53282
55011
|
apy: {
|
|
53283
|
-
base:
|
|
55012
|
+
base: num6(v.apy?.apy),
|
|
53284
55013
|
campaign,
|
|
53285
|
-
points:
|
|
53286
|
-
underlying:
|
|
55014
|
+
points: num6(v.apy?.pointsApy),
|
|
55015
|
+
underlying: num6(v.apy?.underlyingApy)
|
|
53287
55016
|
},
|
|
53288
55017
|
isDepositPaused: v.isDepositPaused ?? false,
|
|
53289
55018
|
isWithdrawalPaused: v.isWithdrawalPaused ?? false,
|
|
@@ -53392,9 +55121,9 @@ var asBig = (v) => {
|
|
|
53392
55121
|
return null;
|
|
53393
55122
|
}
|
|
53394
55123
|
};
|
|
53395
|
-
var
|
|
55124
|
+
var num7 = (v) => typeof v === "number" && Number.isFinite(v) ? v : null;
|
|
53396
55125
|
var toPct = (v) => {
|
|
53397
|
-
const n =
|
|
55126
|
+
const n = num7(v);
|
|
53398
55127
|
return n == null ? 0 : n * 100;
|
|
53399
55128
|
};
|
|
53400
55129
|
var deriveTotalSupply = (totalAssetsRaw, pricePerShareRaw, decimals) => {
|
|
@@ -53426,16 +55155,16 @@ function parseVault9(v, chainId, prices, tokenList) {
|
|
|
53426
55155
|
const totalAssetsFormatted = Number(
|
|
53427
55156
|
parseRawAmount(totalAssetsRaw, assetDecimals)
|
|
53428
55157
|
);
|
|
53429
|
-
const realized =
|
|
53430
|
-
const forward =
|
|
55158
|
+
const realized = num7(v.apr?.netAPR);
|
|
55159
|
+
const forward = num7(v.apr?.forwardAPR?.netAPR);
|
|
53431
55160
|
const isForwardApr = realized == null && forward != null;
|
|
53432
55161
|
const supplyRate = toPct(realized ?? forward);
|
|
53433
55162
|
const rewardsRate = toPct(v.apr?.extra?.stakingRewardsAPR);
|
|
53434
55163
|
const fee = toPct(v.apr?.fees?.performance);
|
|
53435
55164
|
const oracleKey = toOracleKey(assetMeta?.assetGroup) ?? toGenericPriceKey(assetAddr, chainId);
|
|
53436
|
-
const apiPrice =
|
|
55165
|
+
const apiPrice = num7(v.tvl?.price) ?? 0;
|
|
53437
55166
|
const priceUsd = prices[oracleKey] ?? prices[assetAddr] ?? apiPrice;
|
|
53438
|
-
const apiTvlUsd =
|
|
55167
|
+
const apiTvlUsd = num7(v.tvl?.tvl) ?? 0;
|
|
53439
55168
|
const totalAssetsUsd = apiTvlUsd || totalAssetsFormatted * priceUsd;
|
|
53440
55169
|
const name = (v.name ?? "").trim();
|
|
53441
55170
|
const symbol = (v.symbol ?? "").trim();
|
|
@@ -53871,6 +55600,7 @@ var stampVaultClassification = (data, chainId, tokenList = {}) => {
|
|
|
53871
55600
|
stampBag(data.lista, "lista");
|
|
53872
55601
|
stampBag(data.silo, "silo");
|
|
53873
55602
|
stampBag(data["euler-earn"], "euler-earn");
|
|
55603
|
+
stampBag(data.termmax, "termmax");
|
|
53874
55604
|
stampBag(data.lst, "lst");
|
|
53875
55605
|
stampBag(data.savings, "savings");
|
|
53876
55606
|
stampBag(data.lagoon, "lagoon");
|
|
@@ -54422,23 +56152,23 @@ var priceGmMarkets = async (chainId, multicallRetry, markets, prices) => {
|
|
|
54422
56152
|
const indexMax = price(prices, m.indexToken)?.max;
|
|
54423
56153
|
if (Array.isArray(dsRes) && longMax != null && shortMax != null) {
|
|
54424
56154
|
const base = i * SLOTS;
|
|
54425
|
-
const
|
|
56155
|
+
const big7 = (j) => typeof dsRes[base + j] === "bigint" ? dsRes[base + j] : 0n;
|
|
54426
56156
|
const cap = computeDepositCapacityUsd(
|
|
54427
|
-
[info?.longTokenAmount, longMax,
|
|
54428
|
-
[info?.shortTokenAmount, shortMax,
|
|
56157
|
+
[info?.longTokenAmount, longMax, big7(0), big7(2)],
|
|
56158
|
+
[info?.shortTokenAmount, shortMax, big7(1), big7(3)]
|
|
54429
56159
|
);
|
|
54430
56160
|
if (cap != null) value.depositCapacityUsd = cap;
|
|
54431
56161
|
if (indexMax != null) {
|
|
54432
56162
|
const divisor = m.longToken.toLowerCase() === m.shortToken.toLowerCase() ? 2n : 1n;
|
|
54433
|
-
const reservedUsdLong = (
|
|
54434
|
-
const reservedUsdShort = (
|
|
56163
|
+
const reservedUsdLong = (big7(4) + big7(5)) / divisor * indexMax;
|
|
56164
|
+
const reservedUsdShort = (big7(6) + big7(7)) / divisor;
|
|
54435
56165
|
const liq = computeLiquidityUsd(
|
|
54436
56166
|
info?.longTokenUsd,
|
|
54437
56167
|
info?.shortTokenUsd,
|
|
54438
56168
|
reservedUsdLong,
|
|
54439
56169
|
reservedUsdShort,
|
|
54440
|
-
|
|
54441
|
-
|
|
56170
|
+
big7(8),
|
|
56171
|
+
big7(9)
|
|
54442
56172
|
);
|
|
54443
56173
|
if (liq != null)
|
|
54444
56174
|
value.liquidityUsd = Math.max(0, Math.min(liq, value.tvlUsd));
|
|
@@ -54637,27 +56367,27 @@ var fetchGmxExecutionFees = async (chainId, multicallRetry, gasPriceWei) => {
|
|
|
54637
56367
|
} catch {
|
|
54638
56368
|
return void 0;
|
|
54639
56369
|
}
|
|
54640
|
-
const
|
|
54641
|
-
const base =
|
|
54642
|
-
const mult =
|
|
56370
|
+
const big7 = (i) => typeof res[i] === "bigint" ? res[i] : 0n;
|
|
56371
|
+
const base = big7(0);
|
|
56372
|
+
const mult = big7(1);
|
|
54643
56373
|
if (base === 0n && mult === 0n) return void 0;
|
|
54644
56374
|
const PRECISION = 10n ** 30n;
|
|
54645
56375
|
const adjusted = (opGas) => base + opGas * mult / PRECISION;
|
|
54646
56376
|
const fee = (opGas) => (adjusted(opGas) * gasPriceWei).toString();
|
|
54647
|
-
const glvExtra =
|
|
56377
|
+
const glvExtra = big7(6) * GLV_NOMINAL_MARKET_COUNT;
|
|
54648
56378
|
return {
|
|
54649
56379
|
chainId,
|
|
54650
56380
|
gasPriceWei: gasPriceWei.toString(),
|
|
54651
|
-
deposit: fee(
|
|
54652
|
-
withdrawal: fee(
|
|
54653
|
-
glvDeposit: fee(
|
|
54654
|
-
glvWithdrawal: fee(
|
|
56381
|
+
deposit: fee(big7(2)),
|
|
56382
|
+
withdrawal: fee(big7(3)),
|
|
56383
|
+
glvDeposit: fee(big7(4) + glvExtra),
|
|
56384
|
+
glvWithdrawal: fee(big7(5) + glvExtra)
|
|
54655
56385
|
};
|
|
54656
56386
|
};
|
|
54657
56387
|
|
|
54658
56388
|
// src/vaults/gmx/fetchPublic.ts
|
|
54659
56389
|
var GMX_TOKEN_DECIMALS = 18;
|
|
54660
|
-
var
|
|
56390
|
+
var num8 = (n) => typeof n === "number" && Number.isFinite(n) ? n : 0;
|
|
54661
56391
|
var minDefined = (a, b) => a == null ? b : b == null ? a : Math.min(a, b);
|
|
54662
56392
|
var glvMarketRoomUsd = (cap, priceUsd) => {
|
|
54663
56393
|
const currentUsd = Number(cap.balanceAmount) / 1e18 * priceUsd;
|
|
@@ -54691,9 +56421,9 @@ var fetchGmxVaults = async (chainId, multicallRetry, options) => {
|
|
|
54691
56421
|
indexToken: indexToken ? indexToken.toLowerCase() : void 0,
|
|
54692
56422
|
longSymbol,
|
|
54693
56423
|
shortSymbol,
|
|
54694
|
-
apy:
|
|
54695
|
-
baseApy:
|
|
54696
|
-
bonusApr:
|
|
56424
|
+
apy: num8(entry?.apy),
|
|
56425
|
+
baseApy: num8(entry?.baseApy),
|
|
56426
|
+
bonusApr: num8(entry?.bonusApr),
|
|
54697
56427
|
yieldProfile: "volatile",
|
|
54698
56428
|
denomination: denominationFor(longSymbol, shortSymbol)
|
|
54699
56429
|
};
|
|
@@ -54752,8 +56482,8 @@ var fetchGmxVaults = async (chainId, multicallRetry, options) => {
|
|
|
54752
56482
|
marketIndexToken
|
|
54753
56483
|
)
|
|
54754
56484
|
]);
|
|
54755
|
-
for (const [
|
|
54756
|
-
const e = out[
|
|
56485
|
+
for (const [addr2, v] of gmValues) {
|
|
56486
|
+
const e = out[addr2];
|
|
54757
56487
|
if (e) {
|
|
54758
56488
|
e.priceUsd = v.priceUsd;
|
|
54759
56489
|
e.tvlUsd = v.tvlUsd;
|
|
@@ -54761,12 +56491,12 @@ var fetchGmxVaults = async (chainId, multicallRetry, options) => {
|
|
|
54761
56491
|
e.depositCapacityUsd = v.depositCapacityUsd;
|
|
54762
56492
|
}
|
|
54763
56493
|
}
|
|
54764
|
-
for (const [
|
|
54765
|
-
const e = out[
|
|
56494
|
+
for (const [addr2, v] of glv.values) {
|
|
56495
|
+
const e = out[addr2];
|
|
54766
56496
|
if (!e) continue;
|
|
54767
56497
|
e.priceUsd = v.priceUsd;
|
|
54768
56498
|
e.tvlUsd = v.tvlUsd;
|
|
54769
|
-
const markets2 = glv.glvMarkets.get(
|
|
56499
|
+
const markets2 = glv.glvMarkets.get(addr2) ?? [];
|
|
54770
56500
|
let liqSum = 0;
|
|
54771
56501
|
let tvlSum = 0;
|
|
54772
56502
|
for (const m of markets2) {
|
|
@@ -54778,7 +56508,7 @@ var fetchGmxVaults = async (chainId, multicallRetry, options) => {
|
|
|
54778
56508
|
}
|
|
54779
56509
|
if (tvlSum > 0 && v.tvlUsd != null)
|
|
54780
56510
|
e.liquidityUsd = v.tvlUsd * (liqSum / tvlSum);
|
|
54781
|
-
const caps = glv.glvCaps.get(
|
|
56511
|
+
const caps = glv.glvCaps.get(addr2) ?? [];
|
|
54782
56512
|
let capacity = 0;
|
|
54783
56513
|
let known = false;
|
|
54784
56514
|
for (const cap of caps) {
|
|
@@ -54804,7 +56534,7 @@ var fetchGmxVaults = async (chainId, multicallRetry, options) => {
|
|
|
54804
56534
|
// src/vaults/gmx/fetchUser.ts
|
|
54805
56535
|
var DEFAULT_CAP = 50;
|
|
54806
56536
|
var isBig = (v) => typeof v === "bigint";
|
|
54807
|
-
var
|
|
56537
|
+
var str2 = (v) => isBig(v) ? v.toString() : "0";
|
|
54808
56538
|
var getGmxUserPositions = async (chainId, account, multicallRetry, options) => {
|
|
54809
56539
|
const empty = {
|
|
54810
56540
|
chainId,
|
|
@@ -54932,11 +56662,11 @@ var getGmxUserPositions = async (chainId, account, multicallRetry, options) => {
|
|
|
54932
56662
|
market: a.market.toLowerCase(),
|
|
54933
56663
|
initialLongToken: a.initialLongToken.toLowerCase(),
|
|
54934
56664
|
initialShortToken: a.initialShortToken.toLowerCase(),
|
|
54935
|
-
initialLongTokenAmount:
|
|
54936
|
-
initialShortTokenAmount:
|
|
54937
|
-
minOut:
|
|
54938
|
-
executionFee:
|
|
54939
|
-
updatedAtTime:
|
|
56665
|
+
initialLongTokenAmount: str2(n.initialLongTokenAmount),
|
|
56666
|
+
initialShortTokenAmount: str2(n.initialShortTokenAmount),
|
|
56667
|
+
minOut: str2(n.minMarketTokens),
|
|
56668
|
+
executionFee: str2(n.executionFee),
|
|
56669
|
+
updatedAtTime: str2(n.updatedAtTime)
|
|
54940
56670
|
});
|
|
54941
56671
|
});
|
|
54942
56672
|
withdrawalKeys.forEach((key, i) => {
|
|
@@ -54950,11 +56680,11 @@ var getGmxUserPositions = async (chainId, account, multicallRetry, options) => {
|
|
|
54950
56680
|
account: a.account.toLowerCase(),
|
|
54951
56681
|
receiver: a.receiver.toLowerCase(),
|
|
54952
56682
|
market: a.market.toLowerCase(),
|
|
54953
|
-
tokenAmount:
|
|
54954
|
-
minLongTokenAmount:
|
|
54955
|
-
minShortTokenAmount:
|
|
54956
|
-
executionFee:
|
|
54957
|
-
updatedAtTime:
|
|
56683
|
+
tokenAmount: str2(n.marketTokenAmount),
|
|
56684
|
+
minLongTokenAmount: str2(n.minLongTokenAmount),
|
|
56685
|
+
minShortTokenAmount: str2(n.minShortTokenAmount),
|
|
56686
|
+
executionFee: str2(n.executionFee),
|
|
56687
|
+
updatedAtTime: str2(n.updatedAtTime)
|
|
54958
56688
|
});
|
|
54959
56689
|
});
|
|
54960
56690
|
const glvDeposits = Array.isArray(glvRes[0]) ? glvRes[0] : [];
|
|
@@ -54971,11 +56701,11 @@ var getGmxUserPositions = async (chainId, account, multicallRetry, options) => {
|
|
|
54971
56701
|
glv: a.glv.toLowerCase(),
|
|
54972
56702
|
initialLongToken: a.initialLongToken.toLowerCase(),
|
|
54973
56703
|
initialShortToken: a.initialShortToken.toLowerCase(),
|
|
54974
|
-
initialLongTokenAmount:
|
|
54975
|
-
initialShortTokenAmount:
|
|
54976
|
-
minOut:
|
|
54977
|
-
executionFee:
|
|
54978
|
-
updatedAtTime:
|
|
56704
|
+
initialLongTokenAmount: str2(n.initialLongTokenAmount),
|
|
56705
|
+
initialShortTokenAmount: str2(n.initialShortTokenAmount),
|
|
56706
|
+
minOut: str2(n.minGlvTokens),
|
|
56707
|
+
executionFee: str2(n.executionFee),
|
|
56708
|
+
updatedAtTime: str2(n.updatedAtTime)
|
|
54979
56709
|
});
|
|
54980
56710
|
}
|
|
54981
56711
|
for (const w of glvWithdrawals) {
|
|
@@ -54988,11 +56718,11 @@ var getGmxUserPositions = async (chainId, account, multicallRetry, options) => {
|
|
|
54988
56718
|
receiver: a.receiver.toLowerCase(),
|
|
54989
56719
|
market: a.market.toLowerCase(),
|
|
54990
56720
|
glv: a.glv.toLowerCase(),
|
|
54991
|
-
tokenAmount:
|
|
54992
|
-
minLongTokenAmount:
|
|
54993
|
-
minShortTokenAmount:
|
|
54994
|
-
executionFee:
|
|
54995
|
-
updatedAtTime:
|
|
56721
|
+
tokenAmount: str2(n.glvTokenAmount),
|
|
56722
|
+
minLongTokenAmount: str2(n.minLongTokenAmount),
|
|
56723
|
+
minShortTokenAmount: str2(n.minShortTokenAmount),
|
|
56724
|
+
executionFee: str2(n.executionFee),
|
|
56725
|
+
updatedAtTime: str2(n.updatedAtTime)
|
|
54996
56726
|
});
|
|
54997
56727
|
}
|
|
54998
56728
|
return {
|
|
@@ -55083,11 +56813,11 @@ function buildVaultLookup(data) {
|
|
|
55083
56813
|
const addEntries = (bag, provider) => {
|
|
55084
56814
|
if (!bag) return;
|
|
55085
56815
|
for (const v of Object.values(bag)) {
|
|
55086
|
-
const
|
|
55087
|
-
if (map.has(
|
|
55088
|
-
map.set(
|
|
56816
|
+
const addr2 = v.address.toLowerCase();
|
|
56817
|
+
if (map.has(addr2)) continue;
|
|
56818
|
+
map.set(addr2, {
|
|
55089
56819
|
provider,
|
|
55090
|
-
address:
|
|
56820
|
+
address: addr2,
|
|
55091
56821
|
underlying: v.underlying.toLowerCase(),
|
|
55092
56822
|
symbol: v.symbol,
|
|
55093
56823
|
name: v.name,
|
|
@@ -55114,6 +56844,7 @@ function buildVaultLookup(data) {
|
|
|
55114
56844
|
addEntries(data.lista, "lista");
|
|
55115
56845
|
addEntries(data.silo, "silo");
|
|
55116
56846
|
addEntries(data["euler-earn"], "euler-earn");
|
|
56847
|
+
addEntries(data.termmax, "termmax");
|
|
55117
56848
|
addEntries(data.lst, "lst");
|
|
55118
56849
|
addEntries(data.savings, "savings");
|
|
55119
56850
|
addEntries(data.lagoon, "lagoon");
|
|
@@ -55122,7 +56853,7 @@ function buildVaultLookup(data) {
|
|
|
55122
56853
|
addEntries(data.yearn, "yearn");
|
|
55123
56854
|
return map;
|
|
55124
56855
|
}
|
|
55125
|
-
var
|
|
56856
|
+
var warn8 = (...args) => {
|
|
55126
56857
|
};
|
|
55127
56858
|
var HYPERCORE_PROVIDER_CHAIN = "999";
|
|
55128
56859
|
var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices = {}, tokenList = {}, options) => {
|
|
@@ -55135,7 +56866,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
55135
56866
|
fetchFluidFTokens(chainId, multicallRetry, prices, tokenList).then((res) => {
|
|
55136
56867
|
out.fluid = res;
|
|
55137
56868
|
}).catch((e) => {
|
|
55138
|
-
|
|
56869
|
+
warn8(
|
|
55139
56870
|
`[vaults] fluid fetch failed for chain ${chainId}:`,
|
|
55140
56871
|
e?.message ?? e
|
|
55141
56872
|
);
|
|
@@ -55147,7 +56878,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
55147
56878
|
fetchGearboxV3Pools(chainId, multicallRetry, prices, tokenList).then((res) => {
|
|
55148
56879
|
out.gearbox = res;
|
|
55149
56880
|
}).catch((e) => {
|
|
55150
|
-
|
|
56881
|
+
warn8(
|
|
55151
56882
|
`[vaults] gearbox fetch failed for chain ${chainId}:`,
|
|
55152
56883
|
e?.message ?? e
|
|
55153
56884
|
);
|
|
@@ -55159,7 +56890,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
55159
56890
|
fetchMorphoVaults(chainId, multicallRetry, prices, tokenList).then((res) => {
|
|
55160
56891
|
out.morpho = res;
|
|
55161
56892
|
}).catch((e) => {
|
|
55162
|
-
|
|
56893
|
+
warn8(
|
|
55163
56894
|
`[vaults] morpho fetch failed for chain ${chainId}:`,
|
|
55164
56895
|
e?.message ?? e
|
|
55165
56896
|
);
|
|
@@ -55171,7 +56902,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
55171
56902
|
fetchListaVaultsFromChain(chainId, multicallRetry, prices, tokenList).then((res) => {
|
|
55172
56903
|
out.lista = res;
|
|
55173
56904
|
}).catch((e) => {
|
|
55174
|
-
|
|
56905
|
+
warn8(
|
|
55175
56906
|
`[vaults] lista fetch failed for chain ${chainId}:`,
|
|
55176
56907
|
e?.message ?? e
|
|
55177
56908
|
);
|
|
@@ -55186,7 +56917,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
55186
56917
|
}).then((res) => {
|
|
55187
56918
|
out.silo = res;
|
|
55188
56919
|
}).catch((e) => {
|
|
55189
|
-
|
|
56920
|
+
warn8(
|
|
55190
56921
|
`[vaults] silo fetch failed for chain ${chainId}:`,
|
|
55191
56922
|
e?.message ?? e
|
|
55192
56923
|
);
|
|
@@ -55198,19 +56929,31 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
55198
56929
|
fetchEulerEarnVaults(chainId, prices, tokenList, multicallRetry).then((res) => {
|
|
55199
56930
|
out["euler-earn"] = res;
|
|
55200
56931
|
}).catch((e) => {
|
|
55201
|
-
|
|
56932
|
+
warn8(
|
|
55202
56933
|
`[vaults] euler-earn fetch failed for chain ${chainId}:`,
|
|
55203
56934
|
e?.message ?? e
|
|
55204
56935
|
);
|
|
55205
56936
|
})
|
|
55206
56937
|
);
|
|
55207
56938
|
}
|
|
56939
|
+
if (requested.has("termmax")) {
|
|
56940
|
+
tasks.push(
|
|
56941
|
+
fetchTermMaxVaults(chainId, multicallRetry, prices, tokenList).then((res) => {
|
|
56942
|
+
out.termmax = res;
|
|
56943
|
+
}).catch((e) => {
|
|
56944
|
+
warn8(
|
|
56945
|
+
`[vaults] termmax fetch failed for chain ${chainId}:`,
|
|
56946
|
+
e?.message ?? e
|
|
56947
|
+
);
|
|
56948
|
+
})
|
|
56949
|
+
);
|
|
56950
|
+
}
|
|
55208
56951
|
if (requested.has("lst")) {
|
|
55209
56952
|
tasks.push(
|
|
55210
56953
|
fetchLstShareTokens(chainId, multicallRetry, prices, tokenList).then((res) => {
|
|
55211
56954
|
out.lst = res;
|
|
55212
56955
|
}).catch((e) => {
|
|
55213
|
-
|
|
56956
|
+
warn8(
|
|
55214
56957
|
`[vaults] lst fetch failed for chain ${chainId}:`,
|
|
55215
56958
|
e?.message ?? e
|
|
55216
56959
|
);
|
|
@@ -55222,7 +56965,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
55222
56965
|
fetchSavingsVaults(chainId, multicallRetry, prices, tokenList).then((res) => {
|
|
55223
56966
|
out.savings = res;
|
|
55224
56967
|
}).catch((e) => {
|
|
55225
|
-
|
|
56968
|
+
warn8(
|
|
55226
56969
|
`[vaults] savings fetch failed for chain ${chainId}:`,
|
|
55227
56970
|
e?.message ?? e
|
|
55228
56971
|
);
|
|
@@ -55234,7 +56977,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
55234
56977
|
fetchLagoonVaults(chainId, prices, tokenList).then((res) => {
|
|
55235
56978
|
out.lagoon = res;
|
|
55236
56979
|
}).catch((e) => {
|
|
55237
|
-
|
|
56980
|
+
warn8(
|
|
55238
56981
|
`[vaults] lagoon fetch failed for chain ${chainId}:`,
|
|
55239
56982
|
e?.message ?? e
|
|
55240
56983
|
);
|
|
@@ -55246,7 +56989,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
55246
56989
|
fetchAaveEarnVaults(chainId, multicallRetry, prices, tokenList).then((res) => {
|
|
55247
56990
|
out["aave-earn"] = res;
|
|
55248
56991
|
}).catch((e) => {
|
|
55249
|
-
|
|
56992
|
+
warn8(
|
|
55250
56993
|
`[vaults] aave-earn fetch failed for chain ${chainId}:`,
|
|
55251
56994
|
e?.message ?? e
|
|
55252
56995
|
);
|
|
@@ -55258,7 +57001,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
55258
57001
|
fetchUpshiftVaults(chainId, prices, tokenList).then((res) => {
|
|
55259
57002
|
out.upshift = res;
|
|
55260
57003
|
}).catch((e) => {
|
|
55261
|
-
|
|
57004
|
+
warn8(
|
|
55262
57005
|
`[vaults] upshift fetch failed for chain ${chainId}:`,
|
|
55263
57006
|
e?.message ?? e
|
|
55264
57007
|
);
|
|
@@ -55270,7 +57013,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
55270
57013
|
fetchYearnVaults(chainId, multicallRetry, prices, tokenList).then((res) => {
|
|
55271
57014
|
out.yearn = res;
|
|
55272
57015
|
}).catch((e) => {
|
|
55273
|
-
|
|
57016
|
+
warn8(
|
|
55274
57017
|
`[vaults] yearn fetch failed for chain ${chainId}:`,
|
|
55275
57018
|
e?.message ?? e
|
|
55276
57019
|
);
|
|
@@ -55282,7 +57025,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
55282
57025
|
fetchHypercoreVaults().then((res) => {
|
|
55283
57026
|
out.hypercore = res;
|
|
55284
57027
|
}).catch((e) => {
|
|
55285
|
-
|
|
57028
|
+
warn8(
|
|
55286
57029
|
`[vaults] hypercore fetch failed for chain ${chainId}:`,
|
|
55287
57030
|
e?.message ?? e
|
|
55288
57031
|
);
|
|
@@ -55294,7 +57037,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
55294
57037
|
fetchGmxVaults(chainId, multicallRetry).then((res) => {
|
|
55295
57038
|
out.gmx = res;
|
|
55296
57039
|
}).catch((e) => {
|
|
55297
|
-
|
|
57040
|
+
warn8(
|
|
55298
57041
|
`[vaults] gmx fetch failed for chain ${chainId}:`,
|
|
55299
57042
|
e?.message ?? e
|
|
55300
57043
|
);
|
|
@@ -55310,7 +57053,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
55310
57053
|
);
|
|
55311
57054
|
if (fees) out.gmxExecutionFees = fees;
|
|
55312
57055
|
})().catch((e) => {
|
|
55313
|
-
|
|
57056
|
+
warn8(
|
|
55314
57057
|
`[vaults] gmx execution-fee fetch failed for chain ${chainId}:`,
|
|
55315
57058
|
e?.message ?? e
|
|
55316
57059
|
);
|
|
@@ -55618,32 +57361,32 @@ async function fetchTokenMetadata(chain, addrs) {
|
|
|
55618
57361
|
const results = await client.multicall({
|
|
55619
57362
|
allowFailure: false,
|
|
55620
57363
|
batchSize: 300,
|
|
55621
|
-
contracts: addrs.map((
|
|
57364
|
+
contracts: addrs.map((addr2) => [
|
|
55622
57365
|
{
|
|
55623
57366
|
abi: ERC20MetadataAbi,
|
|
55624
57367
|
functionName: "name",
|
|
55625
|
-
address:
|
|
57368
|
+
address: addr2,
|
|
55626
57369
|
args: []
|
|
55627
57370
|
},
|
|
55628
57371
|
{
|
|
55629
57372
|
abi: ERC20MetadataAbi,
|
|
55630
57373
|
functionName: "symbol",
|
|
55631
|
-
address:
|
|
57374
|
+
address: addr2,
|
|
55632
57375
|
args: []
|
|
55633
57376
|
},
|
|
55634
57377
|
{
|
|
55635
57378
|
abi: ERC20MetadataAbi,
|
|
55636
57379
|
functionName: "decimals",
|
|
55637
|
-
address:
|
|
57380
|
+
address: addr2,
|
|
55638
57381
|
args: []
|
|
55639
57382
|
}
|
|
55640
57383
|
]).flat()
|
|
55641
57384
|
});
|
|
55642
|
-
addrs.forEach((
|
|
57385
|
+
addrs.forEach((addr2, i) => {
|
|
55643
57386
|
const name = results[i * 3];
|
|
55644
57387
|
const symbol = results[i * 3 + 1];
|
|
55645
57388
|
const decimals = results[i * 3 + 2];
|
|
55646
|
-
const address =
|
|
57389
|
+
const address = addr2.toLowerCase();
|
|
55647
57390
|
tokens[address] = {
|
|
55648
57391
|
chainId: String(chain),
|
|
55649
57392
|
decimals,
|
|
@@ -55857,6 +57600,6 @@ async function fetchTokenBalances(chainId, account, tokens, options = {}) {
|
|
|
55857
57600
|
return parseTokenBalanceResult(rawResult, prepared.query);
|
|
55858
57601
|
}
|
|
55859
57602
|
|
|
55860
|
-
export { ApiBookSource, DEFAULT_MIDNIGHT_API, DEFAULT_OUTLIER_GUARD, DEFAULT_STALE_REJECT_SECONDS, 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, TELLER_CALLS_PER_BID, 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, buildTellerUserCall, buildVaultLookup, calculateLeverage, calculateNetApr, calculateOverallNetApr, calculateWeightedAverage, classifyFreshness, classifyReliability, classifyVault, collectFeedObservations, computeBorrowDelta2 as computeBorrowDelta, computeCloseTradeDeltas, computeCollateralSwapDeltas, computeDebtSwapDeltas, computeDepositDelta2 as computeDepositDelta, computeEModeAnalysis, computeOpenTradeDeltas, computePostTradeMetrics, computeRepayDelta2 as computeRepayDelta, computeSumerBorrowDelta, computeSumerDepositDelta, computeSumerRepayDelta, computeSumerWaterfall, computeSumerWithdrawDelta, computeVaultApr, computeWithdrawDelta2 as computeWithdrawDelta, computeZapTradeDeltas, consensusReference, convertExactlyMarketsToResponse, convertLenderUserDataResult, convertLiquityMarketsToResponse, convertRiverMarketsToResponse, convertTellerMarketsToResponse, convertTermMarketsToResponse, createMarketUid, createMidnightBookSource, createMulticallRpcCall, createRawRpcCalls, createTermBookSource, decodeListaMarkets, decodeMarkets, decodePackedListaUserDataset, decodePackedMorphoUserDataset, detectInterfaceKinds, encodeBalanceFetcherCalldata, exactlyLenderKey, exactlyMarketFromLenderKey, exactlyPairLtv, exactlyPenaltyRateToAprPercent, exactlyWadRateToPercent, feedKeyOf, feedStatKey, 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, fetchTellerMarkets, fetchTermMarkets, fetchTokenBalances, fetchTokenMetadata, fetchUpshiftApiVaults, fetchUpshiftVaults, fetchYearnApiVaults, fetchYearnVaults, filterActiveLenders, filterLendersByProtocol, fuseLenderData, generateLendingPools, getAavesForChain, getAssetConfig, getBalanceForMarketUid, getBorrowCapacity, getCachedLiquityTroves, getCachedTellerBids, 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, lenderApiOnly, lenderFamily, 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, probeAaveFeedTimestamps, pruneFeedStats, readVaultSharePrices, rejectOutliers as rejectPriceOutliers, resolveDerivation, resolveStCeloDepositGroup, riverKeyParts, riverLenderKey, selectAssetGroupPrices, stampVaultClassification, tellerBpsToPercent, tellerImpliedLtv, tellerLenderKey, tellerPoolFromLenderKey, termLenderKey, tickToAprNumber, tickToPrice, unflattenLenderData, updateFeedStats };
|
|
57603
|
+
export { ApiBookSource, DEFAULT_MIDNIGHT_API, DEFAULT_OUTLIER_GUARD, DEFAULT_STALE_REJECT_SECONDS, DEFAULT_TERMMAX_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, TELLER_CALLS_PER_BID, TERMMAX_CALLS_PER_ACCOUNT, DECIMAL_BASE as TERMMAX_DECIMAL_BASE, TERMMAX_LIQUIDATION_PENALTY, TERMMAX_LIQUIDATION_WINDOW_SECS, TERMMAX_LIQUIDATOR_BONUS, TERMMAX_PARTIAL_CLOSE_FACTOR, TERMMAX_PARTIAL_LIQUIDATION_THRESHOLD_USD, TermMaxApiSource, 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, buildTellerUserCall, buildTermMaxUserCall, buildVaultLookup, calculateLeverage, calculateNetApr, calculateOverallNetApr, calculateWeightedAverage, classifyFreshness, classifyReliability, classifyVault, collectFeedObservations, computeBorrowDelta2 as computeBorrowDelta, computeCloseTradeDeltas, computeCollateralSwapDeltas, computeDebtSwapDeltas, computeDepositDelta2 as computeDepositDelta, computeEModeAnalysis, computeOpenTradeDeltas, computePostTradeMetrics, computeRepayDelta2 as computeRepayDelta, computeSumerBorrowDelta, computeSumerDepositDelta, computeSumerRepayDelta, computeSumerWaterfall, computeSumerWithdrawDelta, computeVaultApr, computeWithdrawDelta2 as computeWithdrawDelta, computeZapTradeDeltas, consensusReference, convertExactlyMarketsToResponse, convertInverseMarketsToResponse, convertLenderUserDataResult, convertLiquityMarketsToResponse, convertRiverMarketsToResponse, convertTellerMarketsToResponse, convertTermMarketsToResponse, convertTermMaxMarketsToResponse, createMarketUid, createMidnightBookSource, createMulticallRpcCall, createRawRpcCalls, createTermBookSource, createTermMaxDataSource, decodeListaMarkets, decodeMarkets, decodePackedListaUserDataset, decodePackedMorphoUserDataset, detectInterfaceKinds, encodeBalanceFetcherCalldata, exactlyLenderKey, exactlyMarketFromLenderKey, exactlyPairLtv, exactlyPenaltyRateToAprPercent, exactlyWadRateToPercent, feedKeyOf, feedStatKey, fetchDolomiteAccountNumbers, fetchEulerEarnVaults, fetchEulerEarnVaultsFromSubgraph, fetchEulerSubAccountIndexes, fetchExactlyMarkets, fetchFlashLiquidityForChain, fetchFluidFTokens, fetchGeneralYields, fetchGeneralYieldsByMarketUid, fetchGmxExecutionFees, fetchGmxTickerPrices, fetchGmxVaults, fetchHypercoreVaults, fetchInverseMarkets, fetchLagoonApiVaults, fetchLagoonVaults, fetchLiquityMarkets, fetchListaVaultsFromChain, fetchMorphoUserBalances, fetchMorphoUserPositionMarkets, fetchMorphoVaults, fetchMorphoVaultsFromApi, fetchMorphoVaultsFromChain, fetchOraclePrices, fetchPendlePrices, fetchRiverMarkets, fetchSiloVaults, fetchTellerMarkets, fetchTermMarkets, fetchTermMaxMarkets, fetchTokenBalances, fetchTokenMetadata, fetchUpshiftApiVaults, fetchUpshiftVaults, fetchYearnApiVaults, fetchYearnVaults, filterActiveLenders, filterLendersByProtocol, fuseLenderData, generateLendingPools, getAavesForChain, getAssetConfig, getBalanceForMarketUid, getBorrowCapacity, getCachedLiquityTroves, getCachedTellerBids, getCachedTermMaxDiscovery, getCachedTermMaxMarket, getCachedTermMaxMarkets, getCoreValidators, getFluidFTokensConverter, getGmxApiHost, getGmxReadContracts, getGmxUserPositions, getHealthFactor, getHypercoreUserPositions, getHypercoreVaultRegistry, getLenderAssets, getLenderPublicData, getLenderPublicDataAll, getLenderPublicDataViaApi, getLenderUserDataMulti, getLenderUserDataResult, getLendersForChain, getLstDelegation, getLstValidators, getLstWithdrawalRegistry, getLstWithdrawalRequests, getMaxAmountClose, getMaxAmountCollateralSwap, getMaxAmountDebtSwap, getMaxAmountOpen, getMergedUserData, getMorphoTypeMarketConverter, getResolvedDolomiteAccountNumbers, getStCeloValidatorGroups, getSubAccountAddress, getSubAccountIndex, getVaultPublicDataAll, getVaultWithdrawalRequests, hasEulerEarnVaultSubgraph, hasLagoonVaults, hasMorphoPositionIndex, hasMorphoUserApi, hasMorphoUserSubgraph, hasUpshiftVaults, hasYearnVaults, inverseKeyParts, inverseLenderKey, isStablecoinSymbol, isYearnV3, keysFromMaps, lenderApiOnly, lenderFamily, liquityCandidateTroveIds, liquityKeyParts, liquityLenderKey, multicall3Abi, nanTo, needsLenderApproval, needsTokenApproval, noOpResult, normalizeToBytes, parseBalanceFetcherResult, parseMergedResult, parseMulticallRpcResponses, parseRawRpcBatchResponses, parseRawRpcResponses, parseTermMaxLtv, parseTokenBalanceResult, positivePart2 as positivePart, predictInverseEscrow, prepareLenderUserDataRpcCalls, prepareMergedMulticallParams, prepareMergedRpcCalls, prepareMulticallInputs, prepareTokenBalanceRpcCalls, priceGlvVaults, priceGmMarkets, probeAaveFeedTimestamps, pruneFeedStats, readVaultSharePrices, rejectOutliers as rejectPriceOutliers, resolveDerivation, resolveStCeloDepositGroup, riverKeyParts, riverLenderKey, selectAssetGroupPrices, stampVaultClassification, tellerBpsToPercent, tellerImpliedLtv, tellerLenderKey, tellerPoolFromLenderKey, termLenderKey, termMaxApiBase, borrowNif as termMaxBorrowNif, curveApr as termMaxCurveApr, curveAprNumber as termMaxCurveAprNumber, daysToMaturity as termMaxDaysToMaturity, lendNif as termMaxLendNif, mintGtFeeRatio as termMaxMintGtFeeRatio, ratioToNumber as termMaxRatioToNumber, ratioToPercent as termMaxRatioToPercent, tickToAprNumber, tickToPrice, unflattenLenderData, updateFeedStats };
|
|
55861
57604
|
//# sourceMappingURL=index.js.map
|
|
55862
57605
|
//# sourceMappingURL=index.js.map
|