@1delta/margin-fetcher 0.0.404 → 0.0.406
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 +590 -10
- package/dist/index.js +2292 -451
- package/dist/index.js.map +1 -1
- package/package.json +7 -7
- 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,244 @@ 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
|
+
// A missing entry means the payload changed shape — fall back to 18 so the
|
|
23072
|
+
// row still renders, but flag it so it is visible rather than silent.
|
|
23073
|
+
debtDecimals: assetDecimals.get(debtToken) ?? 18,
|
|
23074
|
+
debtDecimalsResolved: assetDecimals.has(debtToken),
|
|
23075
|
+
collateral,
|
|
23076
|
+
collateralDecimals: assetDecimals.get(collateral) ?? 18,
|
|
23077
|
+
collateralDecimalsResolved: assetDecimals.has(collateral),
|
|
23078
|
+
symbol: raw.symbol,
|
|
23079
|
+
maturity: toUnix(raw.maturity),
|
|
23080
|
+
maxLtv: String(raw.maxLtv ?? "0"),
|
|
23081
|
+
liquidationLtv: String(raw.liquidationLtv ?? "0"),
|
|
23082
|
+
liquidatable: raw.liquidatable !== false,
|
|
23083
|
+
liquidationWindowSeconds: toNum2(raw.liquidationWindowSeconds) || void 0,
|
|
23084
|
+
version: raw.version,
|
|
23085
|
+
feeConfig: parseFeeConfig(raw.defaultFeeConfig),
|
|
23086
|
+
isMatured: raw.isMatured === true,
|
|
23087
|
+
isEnabled: raw.isEnabled !== false
|
|
23088
|
+
};
|
|
23089
|
+
}
|
|
23090
|
+
function parseOrder(raw) {
|
|
23091
|
+
const oc = raw?.orderConfig?.contracts ?? raw?.orderInfo;
|
|
23092
|
+
const orderAddress = lower(oc?.orderAddr ?? raw?.orderInfo?.orderAddress);
|
|
23093
|
+
const marketAddress = lower(oc?.marketAddr ?? raw?.orderInfo?.marketAddress);
|
|
23094
|
+
if (!orderAddress || !marketAddress) return null;
|
|
23095
|
+
const state = raw?.orderInfo?.contractState ?? raw?.contractState ?? {};
|
|
23096
|
+
const meta = raw?.metadata ?? {};
|
|
23097
|
+
const term = raw?.priceInfo?.term ?? {};
|
|
23098
|
+
return {
|
|
23099
|
+
orderAddress,
|
|
23100
|
+
marketAddress,
|
|
23101
|
+
makerAddress: raw?.orderConfig?.makerAddress ? lower(raw.orderConfig.makerAddress) : void 0,
|
|
23102
|
+
makerIsVault: state.makerIsVault === true,
|
|
23103
|
+
virtualXtReserve: toBig4(state.virtualXtReserve),
|
|
23104
|
+
ftReserve: toBig4(state.ftReserve),
|
|
23105
|
+
xtReserve: toBig4(state.xtReserve),
|
|
23106
|
+
maxXtReserve: toBig4(state.maxXtReserve),
|
|
23107
|
+
gtId: toBig4(state.gtId),
|
|
23108
|
+
// ── the crossing ──
|
|
23109
|
+
takerLendCuts: parseCuts(state.borrowCurve),
|
|
23110
|
+
takerBorrowCuts: parseCuts(state.lendCurve),
|
|
23111
|
+
takerLendApr: term?.bcft?.apr != null ? toNum2(term.bcft.apr) : void 0,
|
|
23112
|
+
takerBorrowApr: term?.lcft?.apr != null ? toNum2(term.lcft.apr) : void 0,
|
|
23113
|
+
feeConfig: parseFeeConfig(state.feeConfig),
|
|
23114
|
+
lendCapacityUsd: toNum2(meta.lendCapacityValue),
|
|
23115
|
+
borrowCapacityUsd: toNum2(meta.borrowCapacityValue),
|
|
23116
|
+
lendCapacityAmount: toNum2(meta.lendCapacityAmount),
|
|
23117
|
+
borrowCapacityAmount: toNum2(meta.borrowCapacityAmount)
|
|
23118
|
+
};
|
|
23119
|
+
}
|
|
23120
|
+
function reduceTop2(orders) {
|
|
23121
|
+
let bestLendApr;
|
|
23122
|
+
let bestBorrowApr;
|
|
23123
|
+
let lendDepthUsd = 0;
|
|
23124
|
+
let borrowDepthUsd = 0;
|
|
23125
|
+
let lendDepthAmount = 0;
|
|
23126
|
+
let borrowDepthAmount = 0;
|
|
23127
|
+
for (const o of orders) {
|
|
23128
|
+
lendDepthUsd += o.lendCapacityUsd;
|
|
23129
|
+
borrowDepthUsd += o.borrowCapacityUsd;
|
|
23130
|
+
lendDepthAmount += o.lendCapacityAmount;
|
|
23131
|
+
borrowDepthAmount += o.borrowCapacityAmount;
|
|
23132
|
+
if (o.takerLendApr != null && o.takerLendApr > 0 && o.lendCapacityUsd > 0) {
|
|
23133
|
+
if (bestLendApr === void 0 || o.takerLendApr > bestLendApr) {
|
|
23134
|
+
bestLendApr = o.takerLendApr;
|
|
23135
|
+
}
|
|
23136
|
+
}
|
|
23137
|
+
if (o.takerBorrowApr != null && o.takerBorrowApr > 0 && o.borrowCapacityUsd > 0) {
|
|
23138
|
+
if (bestBorrowApr === void 0 || o.takerBorrowApr < bestBorrowApr) {
|
|
23139
|
+
bestBorrowApr = o.takerBorrowApr;
|
|
23140
|
+
}
|
|
23141
|
+
}
|
|
23142
|
+
}
|
|
23143
|
+
return {
|
|
23144
|
+
bestLendApr,
|
|
23145
|
+
bestBorrowApr,
|
|
23146
|
+
lendDepthUsd,
|
|
23147
|
+
borrowDepthUsd,
|
|
23148
|
+
lendDepthAmount,
|
|
23149
|
+
borrowDepthAmount
|
|
23150
|
+
};
|
|
23151
|
+
}
|
|
23152
|
+
var TermMaxApiSource = class {
|
|
23153
|
+
baseUrl;
|
|
23154
|
+
fetchImpl;
|
|
23155
|
+
constructor(baseUrl, fetchImpl = fetch) {
|
|
23156
|
+
this.baseUrl = baseUrl.replace(/\/+$/, "");
|
|
23157
|
+
this.fetchImpl = (input, init) => fetchImpl.call(globalThis, input, init);
|
|
23158
|
+
}
|
|
23159
|
+
async getChainMarkets(chainId) {
|
|
23160
|
+
const url = `${this.baseUrl}/market/data?chainId=${chainId}`;
|
|
23161
|
+
let json;
|
|
23162
|
+
try {
|
|
23163
|
+
const res = await this.fetchImpl(url);
|
|
23164
|
+
if (!res.ok) {
|
|
23165
|
+
warn3(`market/data ${chainId} \u2192 HTTP ${res.status}`);
|
|
23166
|
+
return null;
|
|
23167
|
+
}
|
|
23168
|
+
json = await res.json();
|
|
23169
|
+
} catch (e) {
|
|
23170
|
+
warn3(`market/data ${chainId} fetch failed:`, e?.message ?? e);
|
|
23171
|
+
return null;
|
|
23172
|
+
}
|
|
23173
|
+
const data = json?.data ?? json;
|
|
23174
|
+
if (!data) return null;
|
|
23175
|
+
const assetDecimals = /* @__PURE__ */ new Map();
|
|
23176
|
+
for (const a of Array.isArray(data.assetConfigs) ? data.assetConfigs : []) {
|
|
23177
|
+
const addr2 = lower(a?.contractAddress ?? a?.assetAddress);
|
|
23178
|
+
const dec = Number(a?.decimals ?? a?.assetDecimals);
|
|
23179
|
+
if (addr2 && Number.isFinite(dec)) assetDecimals.set(addr2, dec);
|
|
23180
|
+
}
|
|
23181
|
+
const markets = [];
|
|
23182
|
+
for (const m of Array.isArray(data.markets) ? data.markets : []) {
|
|
23183
|
+
const parsed = parseMarket(m, assetDecimals);
|
|
23184
|
+
if (parsed && parsed.isEnabled && !parsed.isMatured) markets.push(parsed);
|
|
23185
|
+
}
|
|
23186
|
+
if (markets.length === 0) return [];
|
|
23187
|
+
const ordersByMarket = /* @__PURE__ */ new Map();
|
|
23188
|
+
for (const o of Array.isArray(data.orders) ? data.orders : []) {
|
|
23189
|
+
const parsed = parseOrder(o);
|
|
23190
|
+
if (!parsed) continue;
|
|
23191
|
+
const list = ordersByMarket.get(parsed.marketAddress);
|
|
23192
|
+
if (list) list.push(parsed);
|
|
23193
|
+
else ordersByMarket.set(parsed.marketAddress, [parsed]);
|
|
23194
|
+
}
|
|
23195
|
+
return markets.map((config) => {
|
|
23196
|
+
const orders = ordersByMarket.get(config.market) ?? [];
|
|
23197
|
+
return { config, top: reduceTop2(orders), orders };
|
|
23198
|
+
});
|
|
23199
|
+
}
|
|
23200
|
+
};
|
|
23201
|
+
function createTermMaxDataSource(chainId, fetchImpl = fetch) {
|
|
23202
|
+
return new TermMaxApiSource(termMaxApiBase(chainId), fetchImpl);
|
|
23203
|
+
}
|
|
23204
|
+
|
|
23205
|
+
// src/lending/public-data/termmax/fetchPublic.ts
|
|
23206
|
+
var LKG_TTL_SEC3 = 30 * 60;
|
|
23207
|
+
var lastGood3 = /* @__PURE__ */ new Map();
|
|
23208
|
+
var MARKET_CACHE_TTL_MS = 10 * 6e4;
|
|
23209
|
+
var marketCache = /* @__PURE__ */ new Map();
|
|
23210
|
+
var marketKey = (chainId, market) => `${chainId}:${market.toLowerCase()}`;
|
|
23211
|
+
function rememberMarkets(chainId, raw) {
|
|
23212
|
+
const at = Date.now();
|
|
23213
|
+
for (const { config } of raw) {
|
|
23214
|
+
marketCache.set(marketKey(chainId, config.market), { config, at });
|
|
23215
|
+
}
|
|
23216
|
+
}
|
|
23217
|
+
function getCachedTermMaxMarket(chainId, market) {
|
|
23218
|
+
const hit = marketCache.get(marketKey(chainId, market));
|
|
23219
|
+
if (!hit || Date.now() - hit.at > MARKET_CACHE_TTL_MS) return void 0;
|
|
23220
|
+
return hit.config;
|
|
23221
|
+
}
|
|
23222
|
+
function getCachedTermMaxMarkets(chainId) {
|
|
23223
|
+
const prefix = `${chainId}:`;
|
|
23224
|
+
const now = Date.now();
|
|
23225
|
+
const out = [];
|
|
23226
|
+
for (const [key, hit] of marketCache) {
|
|
23227
|
+
if (!key.startsWith(prefix)) continue;
|
|
23228
|
+
if (now - hit.at > MARKET_CACHE_TTL_MS) continue;
|
|
23229
|
+
out.push(hit.config);
|
|
23230
|
+
}
|
|
23231
|
+
return out;
|
|
23232
|
+
}
|
|
23233
|
+
async function fetchTermMaxMarkets(chainId, source = createTermMaxDataSource(chainId)) {
|
|
23234
|
+
if (!termMaxConfigByChain(chainId)) return [];
|
|
23235
|
+
const nowSec9 = Math.floor(Date.now() / 1e3);
|
|
23236
|
+
const fresh = await source.getChainMarkets(chainId).catch(() => null);
|
|
23237
|
+
if (fresh) {
|
|
23238
|
+
const live = fresh.filter((m) => m.config.maturity > nowSec9);
|
|
23239
|
+
lastGood3.set(chainId, { markets: live, at: nowSec9 });
|
|
23240
|
+
rememberMarkets(chainId, live);
|
|
23241
|
+
return live;
|
|
23242
|
+
}
|
|
23243
|
+
const cached = lastGood3.get(chainId);
|
|
23244
|
+
if (cached && nowSec9 - cached.at <= LKG_TTL_SEC3) {
|
|
23245
|
+
const live = cached.markets.filter((m) => m.config.maturity > nowSec9);
|
|
23246
|
+
rememberMarkets(chainId, live);
|
|
23247
|
+
return live;
|
|
23248
|
+
}
|
|
23249
|
+
return [];
|
|
23250
|
+
}
|
|
22979
23251
|
|
|
22980
23252
|
// src/lending/public-data/teller/math.ts
|
|
22981
23253
|
function tellerBpsToPercent(bps) {
|
|
@@ -23006,8 +23278,8 @@ function tellerPoolFromLenderKey(lender) {
|
|
|
23006
23278
|
return body.length === 40 ? "0x" + body.toLowerCase() : void 0;
|
|
23007
23279
|
}
|
|
23008
23280
|
function currencyFor6(address, decimals, symbol, tokens) {
|
|
23009
|
-
const
|
|
23010
|
-
return tokens[
|
|
23281
|
+
const lower3 = address.toLowerCase();
|
|
23282
|
+
return tokens[lower3] ?? { address: lower3, symbol, name: symbol, decimals };
|
|
23011
23283
|
}
|
|
23012
23284
|
function fmtDuration2(sec) {
|
|
23013
23285
|
if (sec == null || sec <= 0) return "a short window";
|
|
@@ -23016,9 +23288,9 @@ function fmtDuration2(sec) {
|
|
|
23016
23288
|
return `${Math.round(sec / 86400)} day${sec < 172800 ? "" : "s"}`;
|
|
23017
23289
|
}
|
|
23018
23290
|
function priceFor(address, chainId, tokens, prices) {
|
|
23019
|
-
const
|
|
23020
|
-
const token = tokens[
|
|
23021
|
-
const key = toOracleKey(token?.assetGroup) || toGenericPriceKey(
|
|
23291
|
+
const lower3 = address.toLowerCase();
|
|
23292
|
+
const token = tokens[lower3];
|
|
23293
|
+
const key = toOracleKey(token?.assetGroup) || toGenericPriceKey(lower3, chainId);
|
|
23022
23294
|
return prices[key] ?? 0;
|
|
23023
23295
|
}
|
|
23024
23296
|
function convertTellerMarketsToResponse(raw, chainId, prices = {}, _additionalYields = {
|
|
@@ -23267,6 +23539,615 @@ function convertTellerMarketsToResponse(raw, chainId, prices = {}, _additionalYi
|
|
|
23267
23539
|
return out;
|
|
23268
23540
|
}
|
|
23269
23541
|
|
|
23542
|
+
// src/lending/public-data/termmax/math.ts
|
|
23543
|
+
var DECIMAL_BASE = 100000000n;
|
|
23544
|
+
var DAYS_IN_YEAR2 = 365n;
|
|
23545
|
+
var SECONDS_IN_DAY = 86400n;
|
|
23546
|
+
var MAX_FEE_RATIO = 20000000n;
|
|
23547
|
+
function daysToMaturity(maturity, nowSec9) {
|
|
23548
|
+
const remaining = BigInt(Math.trunc(maturity)) - BigInt(Math.trunc(nowSec9));
|
|
23549
|
+
if (remaining <= 0n) return 0n;
|
|
23550
|
+
return (remaining + SECONDS_IN_DAY - 1n) / SECONDS_IN_DAY;
|
|
23551
|
+
}
|
|
23552
|
+
function calcCutId(cuts, xtReserve) {
|
|
23553
|
+
let id = cuts.length;
|
|
23554
|
+
while (id > 0) {
|
|
23555
|
+
id--;
|
|
23556
|
+
if (xtReserve >= cuts[id].xtReserve) return id;
|
|
23557
|
+
}
|
|
23558
|
+
return cuts.length > 0 ? 0 : -1;
|
|
23559
|
+
}
|
|
23560
|
+
function intervalProps(netInterestFactor, days, cut, xtReserve) {
|
|
23561
|
+
if (days <= 0n) return null;
|
|
23562
|
+
const liqSquare = cut.liqSquare * days * netInterestFactor / (DAYS_IN_YEAR2 * DECIMAL_BASE);
|
|
23563
|
+
const vXtReserve = xtReserve + cut.offset;
|
|
23564
|
+
if (vXtReserve <= 0n) return null;
|
|
23565
|
+
return { liqSquare, vXtReserve, vFtReserve: liqSquare / vXtReserve };
|
|
23566
|
+
}
|
|
23567
|
+
function curveApr(cuts, virtualXtReserve, days) {
|
|
23568
|
+
if (cuts.length === 0 || days <= 0n) return 0n;
|
|
23569
|
+
const id = calcCutId(cuts, virtualXtReserve);
|
|
23570
|
+
if (id < 0) return 0n;
|
|
23571
|
+
const props = intervalProps(DECIMAL_BASE, days, cuts[id], virtualXtReserve);
|
|
23572
|
+
if (!props || props.vXtReserve === 0n) return 0n;
|
|
23573
|
+
return props.vFtReserve * DECIMAL_BASE * DAYS_IN_YEAR2 / (props.vXtReserve * days);
|
|
23574
|
+
}
|
|
23575
|
+
function ratioToNumber(v) {
|
|
23576
|
+
return Number(v) / Number(DECIMAL_BASE);
|
|
23577
|
+
}
|
|
23578
|
+
function ratioToPercent(v) {
|
|
23579
|
+
return Number(v) / Number(DECIMAL_BASE) * 100;
|
|
23580
|
+
}
|
|
23581
|
+
function curveAprNumber(cuts, virtualXtReserve, days) {
|
|
23582
|
+
return ratioToNumber(curveApr(cuts, virtualXtReserve, days));
|
|
23583
|
+
}
|
|
23584
|
+
function lendNif(fee) {
|
|
23585
|
+
const f = fee?.lendTakerFeeRatio ?? 0n;
|
|
23586
|
+
const nif = DECIMAL_BASE - (f > MAX_FEE_RATIO ? MAX_FEE_RATIO : f);
|
|
23587
|
+
return nif > 0n ? nif : DECIMAL_BASE;
|
|
23588
|
+
}
|
|
23589
|
+
function borrowNif(fee) {
|
|
23590
|
+
const f = fee?.borrowTakerFeeRatio ?? 0n;
|
|
23591
|
+
return DECIMAL_BASE + (f > MAX_FEE_RATIO ? MAX_FEE_RATIO : f);
|
|
23592
|
+
}
|
|
23593
|
+
function mintGtFeeRatio(fee, days) {
|
|
23594
|
+
if (!fee || days <= 0n) return 0n;
|
|
23595
|
+
const ratio = fee.mintGtFeeRatio ?? 0n;
|
|
23596
|
+
const ref = fee.mintGtFeeRef ?? 0n;
|
|
23597
|
+
const denom = DAYS_IN_YEAR2 * DECIMAL_BASE + ref * days;
|
|
23598
|
+
if (denom === 0n) return 0n;
|
|
23599
|
+
return days * ratio * ref / denom;
|
|
23600
|
+
}
|
|
23601
|
+
var TERMMAX_LIQUIDATION_PENALTY = 0.1;
|
|
23602
|
+
var TERMMAX_LIQUIDATOR_BONUS = 0.05;
|
|
23603
|
+
var TERMMAX_PARTIAL_LIQUIDATION_THRESHOLD_USD = 1e4;
|
|
23604
|
+
var TERMMAX_PARTIAL_CLOSE_FACTOR = 0.5;
|
|
23605
|
+
var TERMMAX_LIQUIDATION_WINDOW_SECS = 7200;
|
|
23606
|
+
function parseTermMaxLtv(v) {
|
|
23607
|
+
if (v === void 0 || v === null || v === "") return 0;
|
|
23608
|
+
try {
|
|
23609
|
+
return Number(BigInt(v)) / Number(DECIMAL_BASE);
|
|
23610
|
+
} catch {
|
|
23611
|
+
const n = Number(v);
|
|
23612
|
+
return Number.isFinite(n) ? n / Number(DECIMAL_BASE) : 0;
|
|
23613
|
+
}
|
|
23614
|
+
}
|
|
23615
|
+
|
|
23616
|
+
// src/lending/public-data/termmax/convertPublic.ts
|
|
23617
|
+
var nowSec4 = () => Math.floor(Date.now() / 1e3);
|
|
23618
|
+
function currencyFor7(address, decimals, tokens) {
|
|
23619
|
+
const lower3 = address.toLowerCase();
|
|
23620
|
+
return tokens[lower3] ?? {
|
|
23621
|
+
address: lower3,
|
|
23622
|
+
symbol: "",
|
|
23623
|
+
name: "",
|
|
23624
|
+
decimals
|
|
23625
|
+
};
|
|
23626
|
+
}
|
|
23627
|
+
function priceFor2(address, chainId, prices, tokens) {
|
|
23628
|
+
const asset = tokens[address];
|
|
23629
|
+
const key = toOracleKey(asset?.assetGroup) || toGenericPriceKey(address, chainId);
|
|
23630
|
+
return prices[key] ?? 0;
|
|
23631
|
+
}
|
|
23632
|
+
function convertTermMaxMarketsToResponse(raw, chainId, prices = {}, _additionalYields = {
|
|
23633
|
+
intrinsicYields: {},
|
|
23634
|
+
lenderRewards: {},
|
|
23635
|
+
loaded: true
|
|
23636
|
+
}, tokens = {}) {
|
|
23637
|
+
const out = {};
|
|
23638
|
+
const now = nowSec4();
|
|
23639
|
+
for (const { config, top, orders } of raw) {
|
|
23640
|
+
if (!config?.market || !config.debtToken || !config.collateral) continue;
|
|
23641
|
+
const m = termMaxLenderKey(config.market);
|
|
23642
|
+
const maturity = Number(config.maturity);
|
|
23643
|
+
const ttm = maturity - now;
|
|
23644
|
+
const matured = ttm <= 0;
|
|
23645
|
+
const days = daysToMaturity(maturity, now);
|
|
23646
|
+
const supplyAprPct = !matured ? (top?.bestLendApr ?? 0) * 100 : 0;
|
|
23647
|
+
const borrowAprPct = !matured ? (top?.bestBorrowApr ?? 0) * 100 : 0;
|
|
23648
|
+
const debtAddr = config.debtToken;
|
|
23649
|
+
const collAddr = config.collateral;
|
|
23650
|
+
priceFor2(debtAddr, chainId, prices, tokens);
|
|
23651
|
+
const collPrice = priceFor2(collAddr, chainId, prices, tokens);
|
|
23652
|
+
const supplyLiquidity = matured ? 0 : top?.lendDepthAmount ?? 0;
|
|
23653
|
+
const borrowLiquidity = matured ? 0 : top?.borrowDepthAmount ?? 0;
|
|
23654
|
+
const supplyLiquidityUSD = matured ? 0 : top?.lendDepthUsd ?? 0;
|
|
23655
|
+
const borrowLiquidityUSD = matured ? 0 : top?.borrowDepthUsd ?? 0;
|
|
23656
|
+
const maxLtv = parseTermMaxLtv(config.maxLtv);
|
|
23657
|
+
const liquidationLtv = parseTermMaxLtv(config.liquidationLtv);
|
|
23658
|
+
const closeFactor = borrowLiquidityUSD > TERMMAX_PARTIAL_LIQUIDATION_THRESHOLD_USD ? TERMMAX_PARTIAL_CLOSE_FACTOR : 1;
|
|
23659
|
+
const liquidationPenalty = config.liquidatable ? TERMMAX_LIQUIDATION_PENALTY : 0;
|
|
23660
|
+
const terms = borrowAprPct > 0 && !matured ? [
|
|
23661
|
+
{
|
|
23662
|
+
termId: maturity,
|
|
23663
|
+
durationSecs: Math.max(0, ttm),
|
|
23664
|
+
durationDays: ttm / 86400,
|
|
23665
|
+
apr: borrowAprPct
|
|
23666
|
+
}
|
|
23667
|
+
] : void 0;
|
|
23668
|
+
const originationFeePercent = ratioToPercent(
|
|
23669
|
+
mintGtFeeRatio(config.feeConfig, days)
|
|
23670
|
+
);
|
|
23671
|
+
const entry = { data: {} };
|
|
23672
|
+
const loanUid = createMarketUid(chainId, m, debtAddr);
|
|
23673
|
+
entry.data[loanUid] = {
|
|
23674
|
+
marketUid: loanUid,
|
|
23675
|
+
name: "Loan " + (tokens[debtAddr]?.symbol ?? ""),
|
|
23676
|
+
poolId: debtAddr,
|
|
23677
|
+
underlying: debtAddr,
|
|
23678
|
+
asset: currencyFor7(debtAddr, config.debtDecimals, tokens),
|
|
23679
|
+
totalDeposits: supplyLiquidity,
|
|
23680
|
+
totalDebtStable: 0,
|
|
23681
|
+
totalDebt: 0,
|
|
23682
|
+
totalLiquidity: borrowLiquidity,
|
|
23683
|
+
borrowLiquidity,
|
|
23684
|
+
totalLiquidityUSD: borrowLiquidityUSD,
|
|
23685
|
+
borrowLiquidityUSD,
|
|
23686
|
+
totalDepositsUSD: supplyLiquidityUSD,
|
|
23687
|
+
totalDebtStableUSD: 0,
|
|
23688
|
+
totalDebtUSD: 0,
|
|
23689
|
+
// No utilization curve — price comes from per-maker curves, not a pool.
|
|
23690
|
+
utilization: 0,
|
|
23691
|
+
depositRate: supplyAprPct,
|
|
23692
|
+
variableBorrowRate: borrowAprPct,
|
|
23693
|
+
rateModel: "fixedTerm",
|
|
23694
|
+
// Fixed-rate: mirror onto stableBorrowRate so fixed-rate consumers pick it
|
|
23695
|
+
// up as a term product.
|
|
23696
|
+
stableBorrowRate: borrowAprPct,
|
|
23697
|
+
intrinsicYield: 0,
|
|
23698
|
+
rewards: void 0,
|
|
23699
|
+
decimals: config.debtDecimals,
|
|
23700
|
+
config: {
|
|
23701
|
+
0: {
|
|
23702
|
+
category: 0,
|
|
23703
|
+
borrowCollateralFactor: 0,
|
|
23704
|
+
collateralFactor: 0,
|
|
23705
|
+
borrowFactor: 1,
|
|
23706
|
+
liquidationPenalty: 0,
|
|
23707
|
+
closeFactor,
|
|
23708
|
+
collateralDisabled: true,
|
|
23709
|
+
debtDisabled: false
|
|
23710
|
+
}
|
|
23711
|
+
},
|
|
23712
|
+
closeFactor,
|
|
23713
|
+
collateralActive: false,
|
|
23714
|
+
borrowingEnabled: !matured && borrowLiquidity > 0,
|
|
23715
|
+
depositsEnabled: !matured,
|
|
23716
|
+
hasStable: false,
|
|
23717
|
+
// Borrowing IS fixed-term (see `terms` + `fixedTerm`), but it is real
|
|
23718
|
+
// borrowing — do NOT set this, or borrowable-only filters hide the market.
|
|
23719
|
+
variableBorrowDisabled: false,
|
|
23720
|
+
isActive: true,
|
|
23721
|
+
isFrozen: false
|
|
23722
|
+
};
|
|
23723
|
+
const collUid = createMarketUid(chainId, m, collAddr);
|
|
23724
|
+
const collCapacityUSD = maxLtv > 0 ? borrowLiquidityUSD / maxLtv : borrowLiquidityUSD;
|
|
23725
|
+
const collCapacity = collPrice > 0 ? collCapacityUSD / collPrice : 0;
|
|
23726
|
+
entry.data[collUid] = {
|
|
23727
|
+
marketUid: collUid,
|
|
23728
|
+
name: "Collateral " + (tokens[collAddr]?.symbol ?? ""),
|
|
23729
|
+
poolId: collAddr,
|
|
23730
|
+
underlying: collAddr,
|
|
23731
|
+
asset: currencyFor7(collAddr, config.collateralDecimals, tokens),
|
|
23732
|
+
totalDeposits: collCapacity,
|
|
23733
|
+
totalDebtStable: 0,
|
|
23734
|
+
totalDebt: 0,
|
|
23735
|
+
totalLiquidity: collCapacity,
|
|
23736
|
+
borrowLiquidity: 0,
|
|
23737
|
+
totalLiquidityUSD: collCapacityUSD,
|
|
23738
|
+
borrowLiquidityUSD: 0,
|
|
23739
|
+
totalDepositsUSD: collCapacityUSD,
|
|
23740
|
+
totalDebtStableUSD: 0,
|
|
23741
|
+
totalDebtUSD: 0,
|
|
23742
|
+
utilization: 0,
|
|
23743
|
+
depositRate: 0,
|
|
23744
|
+
variableBorrowRate: 0,
|
|
23745
|
+
stableBorrowRate: 0,
|
|
23746
|
+
intrinsicYield: 0,
|
|
23747
|
+
rewards: void 0,
|
|
23748
|
+
decimals: config.collateralDecimals,
|
|
23749
|
+
config: {
|
|
23750
|
+
0: {
|
|
23751
|
+
category: 0,
|
|
23752
|
+
borrowCollateralFactor: liquidationLtv,
|
|
23753
|
+
collateralFactor: maxLtv,
|
|
23754
|
+
borrowFactor: 1,
|
|
23755
|
+
liquidationPenalty,
|
|
23756
|
+
closeFactor,
|
|
23757
|
+
collateralDisabled: false,
|
|
23758
|
+
debtDisabled: true
|
|
23759
|
+
}
|
|
23760
|
+
},
|
|
23761
|
+
closeFactor,
|
|
23762
|
+
collateralActive: true,
|
|
23763
|
+
borrowingEnabled: false,
|
|
23764
|
+
depositsEnabled: !matured,
|
|
23765
|
+
hasStable: false,
|
|
23766
|
+
isActive: true,
|
|
23767
|
+
isFrozen: false
|
|
23768
|
+
};
|
|
23769
|
+
entry.params = {
|
|
23770
|
+
market: {
|
|
23771
|
+
lender: m,
|
|
23772
|
+
name: config.symbol,
|
|
23773
|
+
loanDecimals: config.debtDecimals,
|
|
23774
|
+
collateralDecimals: config.collateralDecimals,
|
|
23775
|
+
id: config.market,
|
|
23776
|
+
lltv: config.liquidationLtv,
|
|
23777
|
+
oracle: config.oracle ?? zeroAddress,
|
|
23778
|
+
irm: zeroAddress,
|
|
23779
|
+
collateralAddress: collAddr,
|
|
23780
|
+
loanAddress: debtAddr,
|
|
23781
|
+
terms,
|
|
23782
|
+
// TermMax-specific extras consumed by the calldata / worker-api
|
|
23783
|
+
// resolvers. FT is the lend position, GT the borrow sub-account.
|
|
23784
|
+
maturity: String(config.maturity),
|
|
23785
|
+
ft: config.ft,
|
|
23786
|
+
xt: config.xt,
|
|
23787
|
+
gt: config.gt,
|
|
23788
|
+
maxLtv: config.maxLtv,
|
|
23789
|
+
liquidationLtv: config.liquidationLtv,
|
|
23790
|
+
liquidatable: config.liquidatable,
|
|
23791
|
+
liquidationWindowSeconds: config.liquidationWindowSeconds,
|
|
23792
|
+
version: config.version,
|
|
23793
|
+
// Executable order set, best-first per side — what a builder quotes
|
|
23794
|
+
// against. Depth caps are hard: an order can refuse beyond them.
|
|
23795
|
+
orders: orders.map((o) => ({
|
|
23796
|
+
order: o.orderAddress,
|
|
23797
|
+
maker: o.makerAddress,
|
|
23798
|
+
makerIsVault: o.makerIsVault,
|
|
23799
|
+
lendApr: o.takerLendApr,
|
|
23800
|
+
borrowApr: o.takerBorrowApr,
|
|
23801
|
+
lendCapacityUsd: o.lendCapacityUsd,
|
|
23802
|
+
borrowCapacityUsd: o.borrowCapacityUsd,
|
|
23803
|
+
lendCapacityAmount: o.lendCapacityAmount,
|
|
23804
|
+
borrowCapacityAmount: o.borrowCapacityAmount
|
|
23805
|
+
})),
|
|
23806
|
+
fixedTerm: {
|
|
23807
|
+
model: "termmax",
|
|
23808
|
+
maturity,
|
|
23809
|
+
fees: {
|
|
23810
|
+
// % of principal, charged once when the GT is minted.
|
|
23811
|
+
originationFeePercent
|
|
23812
|
+
},
|
|
23813
|
+
// Exit early by buying discounted FT and handing it back at par — a
|
|
23814
|
+
// market price, not a penalty. Same as Midnight.
|
|
23815
|
+
earlyRepay: { kind: "none" },
|
|
23816
|
+
// The term is an aggregate of many per-maker order contracts; there is
|
|
23817
|
+
// no single provider at the market level.
|
|
23818
|
+
provider: { kind: "orderbook" }
|
|
23819
|
+
}
|
|
23820
|
+
}
|
|
23821
|
+
};
|
|
23822
|
+
entry.chainId = chainId;
|
|
23823
|
+
out[m] = entry;
|
|
23824
|
+
}
|
|
23825
|
+
return out;
|
|
23826
|
+
}
|
|
23827
|
+
var FIXED_MARKETS_URL = "https://www.inverse.finance/api/f2/fixed-markets";
|
|
23828
|
+
var DBR_URL = "https://www.inverse.finance/api/dbr";
|
|
23829
|
+
var INVERSE_PUBLIC_READ_ABI = [
|
|
23830
|
+
...InverseMarketAbi,
|
|
23831
|
+
...InverseOracleAbi,
|
|
23832
|
+
...InverseDbrAbi,
|
|
23833
|
+
...Erc20Abi
|
|
23834
|
+
];
|
|
23835
|
+
var READS_PER_MARKET2 = 4;
|
|
23836
|
+
var fetchJson = async (url, timeoutMs = 6e3) => {
|
|
23837
|
+
const res = await fetch(url, {
|
|
23838
|
+
headers: { accept: "application/json" },
|
|
23839
|
+
signal: AbortSignal.timeout(timeoutMs)
|
|
23840
|
+
});
|
|
23841
|
+
if (!res.ok) throw new Error(`HTTP ${res.status}`);
|
|
23842
|
+
return res.json();
|
|
23843
|
+
};
|
|
23844
|
+
var fetchDbrPriceDola = async (snapshot) => {
|
|
23845
|
+
try {
|
|
23846
|
+
const d = await fetchJson(DBR_URL);
|
|
23847
|
+
const p = Number(d?.priceDola);
|
|
23848
|
+
if (Number.isFinite(p) && p > 0) return p;
|
|
23849
|
+
} catch {
|
|
23850
|
+
}
|
|
23851
|
+
const snap = Number(snapshot);
|
|
23852
|
+
return Number.isFinite(snap) && snap > 0 ? snap : null;
|
|
23853
|
+
};
|
|
23854
|
+
async function fetchInverseMarkets(lender, chainId) {
|
|
23855
|
+
const config = inverseConfigFor(lender, chainId);
|
|
23856
|
+
const chainData = inverseChainData(lender, chainId);
|
|
23857
|
+
const markets = chainData?.markets ?? [];
|
|
23858
|
+
const empty = {
|
|
23859
|
+
lender,
|
|
23860
|
+
config,
|
|
23861
|
+
chainData,
|
|
23862
|
+
dbrPriceDola: null,
|
|
23863
|
+
replenishmentPriceBps: null,
|
|
23864
|
+
markets: [],
|
|
23865
|
+
source: "none"
|
|
23866
|
+
};
|
|
23867
|
+
if (!config || markets.length === 0) return empty;
|
|
23868
|
+
const dbrPricePromise = fetchDbrPriceDola(config.dbrPriceDolaSnapshot);
|
|
23869
|
+
try {
|
|
23870
|
+
const api = await fetchJson(FIXED_MARKETS_URL);
|
|
23871
|
+
const byAddr = {};
|
|
23872
|
+
for (const m of api?.markets ?? []) {
|
|
23873
|
+
if (m?.address) byAddr[String(m.address).toLowerCase()] = m;
|
|
23874
|
+
}
|
|
23875
|
+
if (Object.keys(byAddr).length > 0) {
|
|
23876
|
+
const rows = markets.map((market) => {
|
|
23877
|
+
const m = byAddr[market.address.toLowerCase()];
|
|
23878
|
+
const num9 = (v) => typeof v === "number" && Number.isFinite(v) ? v : null;
|
|
23879
|
+
return {
|
|
23880
|
+
market,
|
|
23881
|
+
totalDebt: num9(m?.totalDebt),
|
|
23882
|
+
dolaLiquidity: num9(m?.dolaLiquidity),
|
|
23883
|
+
leftToBorrow: num9(m?.leftToBorrow),
|
|
23884
|
+
price: num9(m?.price),
|
|
23885
|
+
borrowPaused: typeof m?.borrowPaused === "boolean" ? m.borrowPaused : null,
|
|
23886
|
+
dailyBorrows: num9(m?.dailyBorrows)
|
|
23887
|
+
};
|
|
23888
|
+
});
|
|
23889
|
+
return {
|
|
23890
|
+
lender,
|
|
23891
|
+
config,
|
|
23892
|
+
chainData,
|
|
23893
|
+
dbrPriceDola: await dbrPricePromise,
|
|
23894
|
+
replenishmentPriceBps: num(api, "replenishmentPriceBps"),
|
|
23895
|
+
markets: rows,
|
|
23896
|
+
source: "api"
|
|
23897
|
+
};
|
|
23898
|
+
}
|
|
23899
|
+
} catch {
|
|
23900
|
+
}
|
|
23901
|
+
const calls = [
|
|
23902
|
+
{ address: config.dbr, name: "replenishmentPriceBps", params: [] },
|
|
23903
|
+
...markets.flatMap((m) => [
|
|
23904
|
+
{ address: m.address, name: "totalDebt", params: [] },
|
|
23905
|
+
{ address: m.address, name: "borrowPaused", params: [] },
|
|
23906
|
+
{ address: config.dola, name: "balanceOf", params: [m.address] },
|
|
23907
|
+
{
|
|
23908
|
+
address: config.oracle,
|
|
23909
|
+
name: "viewPrice",
|
|
23910
|
+
params: [m.collToken, BigInt(m.collateralFactorBps)]
|
|
23911
|
+
}
|
|
23912
|
+
])
|
|
23913
|
+
];
|
|
23914
|
+
try {
|
|
23915
|
+
const results = await multicallRetryUniversal({
|
|
23916
|
+
chain: chainId,
|
|
23917
|
+
calls,
|
|
23918
|
+
abi: INVERSE_PUBLIC_READ_ABI,
|
|
23919
|
+
allowFailure: true
|
|
23920
|
+
});
|
|
23921
|
+
const bigAt = (i) => {
|
|
23922
|
+
const r = results[i];
|
|
23923
|
+
if (typeof r === "bigint") return r;
|
|
23924
|
+
if (typeof r === "number") return BigInt(r);
|
|
23925
|
+
return null;
|
|
23926
|
+
};
|
|
23927
|
+
const debtDecimals = config.debtDecimals ?? 18;
|
|
23928
|
+
const rows = markets.map((market, i) => {
|
|
23929
|
+
const base = 1 + i * READS_PER_MARKET2;
|
|
23930
|
+
const totalDebt = bigAt(base);
|
|
23931
|
+
const paused = results[base + 1];
|
|
23932
|
+
const liq = bigAt(base + 2);
|
|
23933
|
+
const price2 = bigAt(base + 3);
|
|
23934
|
+
return {
|
|
23935
|
+
market,
|
|
23936
|
+
totalDebt: totalDebt !== null ? Number(totalDebt) / 10 ** debtDecimals : null,
|
|
23937
|
+
dolaLiquidity: liq !== null ? Number(liq) / 10 ** debtDecimals : null,
|
|
23938
|
+
// dailyBorrows lives on the BorrowController (day-bucketed
|
|
23939
|
+
// mapping) — the fallback conservatively caps by liquidity only.
|
|
23940
|
+
leftToBorrow: null,
|
|
23941
|
+
// viewPrice scales so that price * balance / 1e18 is USD-ish:
|
|
23942
|
+
// 10^(36 − collDecimals) per unit — normalize to USD per token.
|
|
23943
|
+
price: price2 !== null ? Number(price2) / 10 ** (36 - market.collDecimals) : null,
|
|
23944
|
+
borrowPaused: typeof paused === "boolean" ? paused : null,
|
|
23945
|
+
dailyBorrows: null
|
|
23946
|
+
};
|
|
23947
|
+
});
|
|
23948
|
+
return {
|
|
23949
|
+
lender,
|
|
23950
|
+
config,
|
|
23951
|
+
chainData,
|
|
23952
|
+
dbrPriceDola: await dbrPricePromise,
|
|
23953
|
+
replenishmentPriceBps: bigAt(0) !== null ? Number(bigAt(0)) : null,
|
|
23954
|
+
markets: rows,
|
|
23955
|
+
source: "chain"
|
|
23956
|
+
};
|
|
23957
|
+
} catch {
|
|
23958
|
+
return { ...empty, dbrPriceDola: await dbrPricePromise };
|
|
23959
|
+
}
|
|
23960
|
+
}
|
|
23961
|
+
function num(api, key) {
|
|
23962
|
+
const v = api?.[key];
|
|
23963
|
+
return typeof v === "number" && Number.isFinite(v) ? v : null;
|
|
23964
|
+
}
|
|
23965
|
+
|
|
23966
|
+
// src/lending/public-data/inverse/convertPublic.ts
|
|
23967
|
+
function inverseLenderKey(lender, market) {
|
|
23968
|
+
return `${lender}_${market.replace(/^0x/i, "").toUpperCase()}`;
|
|
23969
|
+
}
|
|
23970
|
+
function inverseKeyParts(key) {
|
|
23971
|
+
if (!key.startsWith("INVERSE_")) return void 0;
|
|
23972
|
+
const suffix = key.slice("INVERSE_".length);
|
|
23973
|
+
if (!/^[0-9A-F]{40}$/.test(suffix)) return void 0;
|
|
23974
|
+
return { lender: "INVERSE", market: "0x" + suffix.toLowerCase() };
|
|
23975
|
+
}
|
|
23976
|
+
function currencyFor8(address, decimals, symbol, tokens) {
|
|
23977
|
+
const lower3 = address.toLowerCase();
|
|
23978
|
+
return tokens[lower3] ?? { address: lower3, symbol, name: symbol, decimals };
|
|
23979
|
+
}
|
|
23980
|
+
function convertInverseMarketsToResponse(raw, chainId, prices = {}, _additionalYields = {
|
|
23981
|
+
intrinsicYields: {},
|
|
23982
|
+
lenderRewards: {},
|
|
23983
|
+
loaded: true
|
|
23984
|
+
}, tokens = {}) {
|
|
23985
|
+
const out = {};
|
|
23986
|
+
const cfg = raw?.config;
|
|
23987
|
+
const chainData = raw?.chainData;
|
|
23988
|
+
if (!cfg || !chainData) return out;
|
|
23989
|
+
const dolaAddr = cfg.dola.toLowerCase();
|
|
23990
|
+
const debtDecimals = cfg.debtDecimals ?? 18;
|
|
23991
|
+
const dolaToken = tokens[dolaAddr];
|
|
23992
|
+
const dolaPriceKey = toOracleKey(dolaToken?.assetGroup) || toGenericPriceKey(dolaAddr, chainId);
|
|
23993
|
+
const dolaPrice = prices[dolaPriceKey] || 1;
|
|
23994
|
+
const borrowAprPct = raw.dbrPriceDola !== null ? raw.dbrPriceDola * 100 : 0;
|
|
23995
|
+
for (const m of raw.markets ?? []) {
|
|
23996
|
+
const market = m.market;
|
|
23997
|
+
const lenderKey = inverseLenderKey(raw.lender, market.address);
|
|
23998
|
+
const collAddr = market.collToken.toLowerCase();
|
|
23999
|
+
const collDecimals = market.collDecimals;
|
|
24000
|
+
const collToken = tokens[collAddr];
|
|
24001
|
+
const collSymbol = collToken?.symbol ?? market.name ?? "COLL";
|
|
24002
|
+
const marketName = `DOLA / ${market.name ?? collSymbol}`;
|
|
24003
|
+
const collPriceKey = toOracleKey(collToken?.assetGroup) || toGenericPriceKey(collAddr, chainId);
|
|
24004
|
+
const collPrice = m.price ?? prices[collPriceKey] ?? 0;
|
|
24005
|
+
const totalDebt = m.totalDebt ?? 0;
|
|
24006
|
+
const paused = m.borrowPaused ?? !!market.borrowPaused;
|
|
24007
|
+
const ltv = Number(market.collateralFactorBps) / 1e4;
|
|
24008
|
+
const liqPenalty = Number(market.liquidationIncentiveBps) / 1e4;
|
|
24009
|
+
const closeFactor = Number(market.liquidationFactorBps) / 1e4 || 1;
|
|
24010
|
+
const collateralTotal = 0;
|
|
24011
|
+
let borrowLiquidity = m.leftToBorrow ?? m.dolaLiquidity ?? 0;
|
|
24012
|
+
if (paused) borrowLiquidity = 0;
|
|
24013
|
+
const entry = { data: {} };
|
|
24014
|
+
const collUid = createMarketUid(chainId, lenderKey, collAddr);
|
|
24015
|
+
entry.data[collUid] = {
|
|
24016
|
+
marketUid: collUid,
|
|
24017
|
+
name: "Collateral " + collSymbol,
|
|
24018
|
+
poolId: market.address.toLowerCase(),
|
|
24019
|
+
underlying: collAddr,
|
|
24020
|
+
asset: currencyFor8(collAddr, collDecimals, collSymbol, tokens),
|
|
24021
|
+
totalDeposits: collateralTotal,
|
|
24022
|
+
totalDebtStable: 0,
|
|
24023
|
+
totalDebt: 0,
|
|
24024
|
+
totalLiquidity: collateralTotal,
|
|
24025
|
+
borrowLiquidity: 0,
|
|
24026
|
+
totalLiquidityUSD: collateralTotal * collPrice,
|
|
24027
|
+
borrowLiquidityUSD: 0,
|
|
24028
|
+
totalDepositsUSD: collateralTotal * collPrice,
|
|
24029
|
+
totalDebtStableUSD: 0,
|
|
24030
|
+
totalDebtUSD: 0,
|
|
24031
|
+
utilization: 0,
|
|
24032
|
+
depositRate: 0,
|
|
24033
|
+
variableBorrowRate: 0,
|
|
24034
|
+
stableBorrowRate: 0,
|
|
24035
|
+
intrinsicYield: _additionalYields?.intrinsicYields?.[collToken?.assetGroup] ?? 0,
|
|
24036
|
+
rewards: void 0,
|
|
24037
|
+
decimals: collDecimals,
|
|
24038
|
+
config: {
|
|
24039
|
+
0: {
|
|
24040
|
+
category: 0,
|
|
24041
|
+
borrowCollateralFactor: ltv,
|
|
24042
|
+
collateralFactor: ltv,
|
|
24043
|
+
borrowFactor: 1,
|
|
24044
|
+
liquidationPenalty: liqPenalty,
|
|
24045
|
+
closeFactor,
|
|
24046
|
+
collateralDisabled: false,
|
|
24047
|
+
debtDisabled: true
|
|
24048
|
+
}
|
|
24049
|
+
},
|
|
24050
|
+
closeFactor,
|
|
24051
|
+
collateralActive: true,
|
|
24052
|
+
borrowingEnabled: false,
|
|
24053
|
+
depositsEnabled: true,
|
|
24054
|
+
hasStable: false,
|
|
24055
|
+
isActive: true,
|
|
24056
|
+
isFrozen: false
|
|
24057
|
+
};
|
|
24058
|
+
const loanUid = createMarketUid(chainId, lenderKey, dolaAddr);
|
|
24059
|
+
entry.data[loanUid] = {
|
|
24060
|
+
marketUid: loanUid,
|
|
24061
|
+
name: "DOLA",
|
|
24062
|
+
poolId: market.address.toLowerCase(),
|
|
24063
|
+
underlying: dolaAddr,
|
|
24064
|
+
asset: currencyFor8(dolaAddr, debtDecimals, "DOLA", tokens),
|
|
24065
|
+
totalDeposits: 0,
|
|
24066
|
+
totalDebtStable: 0,
|
|
24067
|
+
totalDebt,
|
|
24068
|
+
totalLiquidity: borrowLiquidity,
|
|
24069
|
+
borrowLiquidity,
|
|
24070
|
+
totalLiquidityUSD: borrowLiquidity * dolaPrice,
|
|
24071
|
+
borrowLiquidityUSD: borrowLiquidity * dolaPrice,
|
|
24072
|
+
totalDepositsUSD: 0,
|
|
24073
|
+
totalDebtStableUSD: 0,
|
|
24074
|
+
totalDebtUSD: totalDebt * dolaPrice,
|
|
24075
|
+
utilization: 0,
|
|
24076
|
+
depositRate: 0,
|
|
24077
|
+
// The DBR price IS the fixed borrow APR (percent). Debt principal
|
|
24078
|
+
// is static — interest burns the user's DBR balance instead.
|
|
24079
|
+
variableBorrowRate: borrowAprPct,
|
|
24080
|
+
stableBorrowRate: 0,
|
|
24081
|
+
rateModel: "dbr",
|
|
24082
|
+
intrinsicYield: 0,
|
|
24083
|
+
rewards: void 0,
|
|
24084
|
+
decimals: debtDecimals,
|
|
24085
|
+
config: {
|
|
24086
|
+
0: {
|
|
24087
|
+
category: 0,
|
|
24088
|
+
borrowCollateralFactor: 0,
|
|
24089
|
+
collateralFactor: 0,
|
|
24090
|
+
borrowFactor: 1,
|
|
24091
|
+
liquidationPenalty: liqPenalty,
|
|
24092
|
+
closeFactor,
|
|
24093
|
+
collateralDisabled: true,
|
|
24094
|
+
debtDisabled: paused
|
|
24095
|
+
}
|
|
24096
|
+
},
|
|
24097
|
+
closeFactor,
|
|
24098
|
+
collateralActive: false,
|
|
24099
|
+
borrowingEnabled: !paused,
|
|
24100
|
+
depositsEnabled: false,
|
|
24101
|
+
hasStable: false,
|
|
24102
|
+
variableBorrowDisabled: paused,
|
|
24103
|
+
isActive: true,
|
|
24104
|
+
isFrozen: false
|
|
24105
|
+
};
|
|
24106
|
+
entry.params = {
|
|
24107
|
+
market: {
|
|
24108
|
+
lender: lenderKey,
|
|
24109
|
+
name: marketName,
|
|
24110
|
+
loanDecimals: debtDecimals,
|
|
24111
|
+
collateralDecimals: collDecimals,
|
|
24112
|
+
// The Market contract doubles as the market id.
|
|
24113
|
+
id: market.address.toLowerCase(),
|
|
24114
|
+
lltv: String(ltv),
|
|
24115
|
+
oracle: cfg.oracle,
|
|
24116
|
+
irm: zeroAddress,
|
|
24117
|
+
collateralAddress: collAddr,
|
|
24118
|
+
loanAddress: dolaAddr,
|
|
24119
|
+
// --- FiRM descriptor (metadata + live snapshot; consumed by
|
|
24120
|
+
// calldata builders + worker-api resolvers) ---
|
|
24121
|
+
inverse: {
|
|
24122
|
+
escrowImplementation: market.escrowImplementation,
|
|
24123
|
+
/** DOLA units, human numbers as strings. */
|
|
24124
|
+
minDebt: market.minDebt,
|
|
24125
|
+
dailyLimit: market.dailyLimit,
|
|
24126
|
+
dailyBorrows: m.dailyBorrows !== null ? String(m.dailyBorrows) : void 0,
|
|
24127
|
+
dolaLiquidity: m.dolaLiquidity !== null ? String(m.dolaLiquidity) : void 0,
|
|
24128
|
+
leftToBorrow: m.leftToBorrow !== null ? String(m.leftToBorrow) : void 0,
|
|
24129
|
+
liquidationFactorBps: market.liquidationFactorBps,
|
|
24130
|
+
/** Fixed borrow APR as a DECIMAL (DBR price in DOLA). */
|
|
24131
|
+
dbrPriceDola: raw.dbrPriceDola !== null ? String(raw.dbrPriceDola) : void 0,
|
|
24132
|
+
/** Force-replenish penalty (5475 = 54.75% APR on missed DBR). */
|
|
24133
|
+
replenishmentPriceBps: raw.replenishmentPriceBps !== null ? String(raw.replenishmentPriceBps) : void 0,
|
|
24134
|
+
borrowPaused: paused,
|
|
24135
|
+
addresses: {
|
|
24136
|
+
market: market.address,
|
|
24137
|
+
dola: cfg.dola,
|
|
24138
|
+
dbr: cfg.dbr,
|
|
24139
|
+
oracle: cfg.oracle,
|
|
24140
|
+
borrowController: cfg.borrowController
|
|
24141
|
+
}
|
|
24142
|
+
}
|
|
24143
|
+
}
|
|
24144
|
+
};
|
|
24145
|
+
entry.chainId = chainId;
|
|
24146
|
+
out[lenderKey] = entry;
|
|
24147
|
+
}
|
|
24148
|
+
return out;
|
|
24149
|
+
}
|
|
24150
|
+
|
|
23270
24151
|
// src/lending/public-data/silo-v2/fetchPublic.ts
|
|
23271
24152
|
var BASE_URL2 = "https://api-v3.silo.finance";
|
|
23272
24153
|
var SILO_API_SUPPORTED_CHAIN_IDS = /* @__PURE__ */ new Set([
|
|
@@ -23863,7 +24744,7 @@ function convertDolomiteSubgraphMarkets(raw, chainId, prices, additionalYields,
|
|
|
23863
24744
|
}
|
|
23864
24745
|
return { data: result, chainId };
|
|
23865
24746
|
}
|
|
23866
|
-
var
|
|
24747
|
+
var warn4 = (...args) => {
|
|
23867
24748
|
};
|
|
23868
24749
|
async function getLenderDataFromApi(lender, chainId, prices, additionalYields, includeUnlisted = false) {
|
|
23869
24750
|
if (isMorphoType(lender))
|
|
@@ -23874,6 +24755,8 @@ async function getLenderDataFromApi(lender, chainId, prices, additionalYields, i
|
|
|
23874
24755
|
if (isLiquityFamily(lender)) return await fetchLiquityMarkets(lender, chainId);
|
|
23875
24756
|
if (isRiver(lender)) return await fetchRiverMarkets(lender, chainId);
|
|
23876
24757
|
if (isTeller(lender)) return await fetchTellerMarkets(chainId);
|
|
24758
|
+
if (isInverse(lender)) return await fetchInverseMarkets(lender, chainId);
|
|
24759
|
+
if (isTermMax(lender)) return await fetchTermMaxMarkets(chainId);
|
|
23877
24760
|
return {};
|
|
23878
24761
|
}
|
|
23879
24762
|
function convertLenderDataFromApi(lender, chainId, data, prices, additionalYields, list = {}) {
|
|
@@ -23927,6 +24810,22 @@ function convertLenderDataFromApi(lender, chainId, data, prices, additionalYield
|
|
|
23927
24810
|
additionalYields,
|
|
23928
24811
|
list
|
|
23929
24812
|
);
|
|
24813
|
+
if (isInverse(lender))
|
|
24814
|
+
return convertInverseMarketsToResponse(
|
|
24815
|
+
data,
|
|
24816
|
+
chainId,
|
|
24817
|
+
prices,
|
|
24818
|
+
additionalYields,
|
|
24819
|
+
list
|
|
24820
|
+
);
|
|
24821
|
+
if (isTermMax(lender))
|
|
24822
|
+
return convertTermMaxMarketsToResponse(
|
|
24823
|
+
data,
|
|
24824
|
+
chainId,
|
|
24825
|
+
prices,
|
|
24826
|
+
additionalYields,
|
|
24827
|
+
list
|
|
24828
|
+
);
|
|
23930
24829
|
return {};
|
|
23931
24830
|
}
|
|
23932
24831
|
var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYields, tokenList = async () => {
|
|
@@ -23967,7 +24866,7 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
|
|
|
23967
24866
|
const listResult = settled[0];
|
|
23968
24867
|
const list = listResult.status === "fulfilled" ? listResult.value : {};
|
|
23969
24868
|
if (listResult.status === "rejected") {
|
|
23970
|
-
|
|
24869
|
+
warn4(
|
|
23971
24870
|
`[lending] tokenList fetch failed on chain ${chainId}:`,
|
|
23972
24871
|
listResult.reason
|
|
23973
24872
|
);
|
|
@@ -23989,13 +24888,13 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
|
|
|
23989
24888
|
if (converted[lk]) lenderData[lk] = converted[lk];
|
|
23990
24889
|
}
|
|
23991
24890
|
} catch (e) {
|
|
23992
|
-
|
|
24891
|
+
warn4(
|
|
23993
24892
|
`[lending] Silo v2 API convert failed on chain ${chainId}:`,
|
|
23994
24893
|
e?.message ?? e
|
|
23995
24894
|
);
|
|
23996
24895
|
}
|
|
23997
24896
|
} else {
|
|
23998
|
-
|
|
24897
|
+
warn4(
|
|
23999
24898
|
`[lending] Silo v2 API fetch failed on chain ${chainId}:`,
|
|
24000
24899
|
siloV2Result.reason?.message ?? siloV2Result.reason
|
|
24001
24900
|
);
|
|
@@ -24017,13 +24916,13 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
|
|
|
24017
24916
|
if (converted[lk]) lenderData[lk] = converted[lk];
|
|
24018
24917
|
}
|
|
24019
24918
|
} catch (e) {
|
|
24020
|
-
|
|
24919
|
+
warn4(
|
|
24021
24920
|
`[lending] Silo v3 API convert failed on chain ${chainId}:`,
|
|
24022
24921
|
e?.message ?? e
|
|
24023
24922
|
);
|
|
24024
24923
|
}
|
|
24025
24924
|
} else {
|
|
24026
|
-
|
|
24925
|
+
warn4(
|
|
24027
24926
|
`[lending] Silo v3 API fetch failed on chain ${chainId}:`,
|
|
24028
24927
|
siloV3Result.reason?.message ?? siloV3Result.reason
|
|
24029
24928
|
);
|
|
@@ -24033,7 +24932,7 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
|
|
|
24033
24932
|
try {
|
|
24034
24933
|
const result = settled[i + 3];
|
|
24035
24934
|
if (result.status === "rejected") {
|
|
24036
|
-
|
|
24935
|
+
warn4(
|
|
24037
24936
|
`[lending] API fetch failed for ${otherLenders[i]} on chain ${chainId}:`,
|
|
24038
24937
|
result.reason?.message ?? result.reason
|
|
24039
24938
|
);
|
|
@@ -24077,13 +24976,13 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
|
|
|
24077
24976
|
);
|
|
24078
24977
|
for (const lk of dolomiteLenders) lenderData[lk] = converted;
|
|
24079
24978
|
} catch (e) {
|
|
24080
|
-
|
|
24979
|
+
warn4(
|
|
24081
24980
|
`[lending] Dolomite subgraph convert failed on chain ${chainId}:`,
|
|
24082
24981
|
e?.message ?? e
|
|
24083
24982
|
);
|
|
24084
24983
|
}
|
|
24085
24984
|
} else if (dolomiteResult.status === "rejected") {
|
|
24086
|
-
|
|
24985
|
+
warn4(
|
|
24087
24986
|
`[lending] Dolomite subgraph fetch failed on chain ${chainId}:`,
|
|
24088
24987
|
dolomiteResult.reason?.message ?? dolomiteResult.reason
|
|
24089
24988
|
);
|
|
@@ -24091,7 +24990,7 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
|
|
|
24091
24990
|
}
|
|
24092
24991
|
return lenderData;
|
|
24093
24992
|
};
|
|
24094
|
-
var
|
|
24993
|
+
var warn5 = (...args) => {
|
|
24095
24994
|
};
|
|
24096
24995
|
function lenderApiOnly(lender, chainId) {
|
|
24097
24996
|
if (lender === Lender.MORPHO_BLUE) {
|
|
@@ -24153,7 +25052,7 @@ var getLenderPublicDataAll = async (chainId, lenders, prices, additionalYields,
|
|
|
24153
25052
|
includeUnlistedMorphoMarkets
|
|
24154
25053
|
);
|
|
24155
25054
|
} catch (e) {
|
|
24156
|
-
|
|
25055
|
+
warn5(
|
|
24157
25056
|
`[lending] API fetch failed for chain ${chainId}:`,
|
|
24158
25057
|
e?.message ?? e
|
|
24159
25058
|
);
|
|
@@ -24176,7 +25075,7 @@ var getLenderPublicDataAll = async (chainId, lenders, prices, additionalYields,
|
|
|
24176
25075
|
tokenList
|
|
24177
25076
|
);
|
|
24178
25077
|
} catch (e) {
|
|
24179
|
-
|
|
25078
|
+
warn5(
|
|
24180
25079
|
`[lending] on-chain fetch failed for chain ${chainId}:`,
|
|
24181
25080
|
e?.message ?? e
|
|
24182
25081
|
);
|
|
@@ -24777,8 +25676,8 @@ function getSubAccountAddress(owner, index) {
|
|
|
24777
25676
|
const suffix = newLastByte.toString(16).padStart(2, "0");
|
|
24778
25677
|
return (prefix + suffix).toLowerCase();
|
|
24779
25678
|
}
|
|
24780
|
-
function getSubAccountIndex(
|
|
24781
|
-
const addrLastByte = parseInt(
|
|
25679
|
+
function getSubAccountIndex(addr2, owner) {
|
|
25680
|
+
const addrLastByte = parseInt(addr2.slice(40), 16);
|
|
24782
25681
|
if (!owner) return addrLastByte;
|
|
24783
25682
|
const ownerLastByte = parseInt(owner.slice(40), 16);
|
|
24784
25683
|
return (addrLastByte ^ ownerLastByte) & 255;
|
|
@@ -25277,6 +26176,46 @@ var buildRiverUserCall = (chainId, lender, account) => {
|
|
|
25277
26176
|
});
|
|
25278
26177
|
return calls;
|
|
25279
26178
|
};
|
|
26179
|
+
var INVERSE_CALLS_PER_MARKET = 4;
|
|
26180
|
+
var INVERSE_TAIL_CALLS = 3;
|
|
26181
|
+
var proxyInitCode = (impl) => concat([
|
|
26182
|
+
"0x3d602d80600a3d3981f3363d3d373d3d3d363d73",
|
|
26183
|
+
impl,
|
|
26184
|
+
"0x5af43d82803e903d91602b57fd5bf3"
|
|
26185
|
+
]);
|
|
26186
|
+
function predictInverseEscrow(market, escrowImplementation, user) {
|
|
26187
|
+
return getContractAddress({
|
|
26188
|
+
opcode: "CREATE2",
|
|
26189
|
+
from: market,
|
|
26190
|
+
salt: pad(user, { size: 32 }),
|
|
26191
|
+
bytecodeHash: keccak256(proxyInitCode(escrowImplementation))
|
|
26192
|
+
});
|
|
26193
|
+
}
|
|
26194
|
+
var buildInverseUserCall = (chainId, lender, account) => {
|
|
26195
|
+
const cfg = inverseConfigFor(lender, chainId);
|
|
26196
|
+
const markets = inverseChainData(lender, chainId)?.markets ?? [];
|
|
26197
|
+
if (!cfg || markets.length === 0) return [];
|
|
26198
|
+
const calls = markets.flatMap((m) => [
|
|
26199
|
+
{
|
|
26200
|
+
address: predictInverseEscrow(
|
|
26201
|
+
m.address,
|
|
26202
|
+
m.escrowImplementation,
|
|
26203
|
+
account
|
|
26204
|
+
),
|
|
26205
|
+
name: "balance",
|
|
26206
|
+
params: []
|
|
26207
|
+
},
|
|
26208
|
+
{ address: m.address, name: "debts", params: [account] },
|
|
26209
|
+
{ address: m.address, name: "getCreditLimit", params: [account] },
|
|
26210
|
+
{ address: m.address, name: "getWithdrawalLimit", params: [account] }
|
|
26211
|
+
]);
|
|
26212
|
+
calls.push(
|
|
26213
|
+
{ address: cfg.dbr, name: "balanceOf", params: [account] },
|
|
26214
|
+
{ address: cfg.dbr, name: "deficitOf", params: [account] },
|
|
26215
|
+
{ address: cfg.dbr, name: "signedBalanceOf", params: [account] }
|
|
26216
|
+
);
|
|
26217
|
+
return calls;
|
|
26218
|
+
};
|
|
25280
26219
|
var TELLER_CALLS_PER_BID = 4;
|
|
25281
26220
|
var CACHE_TTL_MS2 = 5 * 6e4;
|
|
25282
26221
|
var discoveryCache2 = /* @__PURE__ */ new Map();
|
|
@@ -25286,7 +26225,7 @@ var getCachedTellerBids = (chainId, account) => {
|
|
|
25286
26225
|
if (!hit || Date.now() - hit.at > CACHE_TTL_MS2) return void 0;
|
|
25287
26226
|
return hit;
|
|
25288
26227
|
};
|
|
25289
|
-
var
|
|
26228
|
+
var nowSec5 = () => Math.floor(Date.now() / 1e3);
|
|
25290
26229
|
var toBigints = (arr) => {
|
|
25291
26230
|
if (!Array.isArray(arr)) return [];
|
|
25292
26231
|
const out = [];
|
|
@@ -25352,7 +26291,7 @@ var buildTellerUserCall = async (chainId, _lender, account) => {
|
|
|
25352
26291
|
});
|
|
25353
26292
|
discoveryCache2.set(cacheKey2(chainId, account), { bids: kept, at: Date.now() });
|
|
25354
26293
|
if (kept.length === 0) return [];
|
|
25355
|
-
const ts =
|
|
26294
|
+
const ts = nowSec5();
|
|
25356
26295
|
const calls = [];
|
|
25357
26296
|
for (const b of kept) {
|
|
25358
26297
|
calls.push({ address: proto.tellerV2, name: "bids", params: [b.bidId] });
|
|
@@ -25374,6 +26313,40 @@ var buildTellerUserCall = async (chainId, _lender, account) => {
|
|
|
25374
26313
|
}
|
|
25375
26314
|
return calls;
|
|
25376
26315
|
};
|
|
26316
|
+
var TERMMAX_CALLS_PER_ACCOUNT = 1;
|
|
26317
|
+
var CACHE_TTL_MS3 = 5 * 6e4;
|
|
26318
|
+
var discoveryCache3 = /* @__PURE__ */ new Map();
|
|
26319
|
+
var cacheKey3 = (chainId, account) => `${chainId}:${account.toLowerCase()}`;
|
|
26320
|
+
var getCachedTermMaxDiscovery = (chainId, account) => {
|
|
26321
|
+
const hit = discoveryCache3.get(cacheKey3(chainId, account));
|
|
26322
|
+
if (!hit || Date.now() - hit.at > CACHE_TTL_MS3) return void 0;
|
|
26323
|
+
return hit;
|
|
26324
|
+
};
|
|
26325
|
+
var buildTermMaxUserCall = async (chainId, _lender, account) => {
|
|
26326
|
+
const proto = termMaxConfigByChain(chainId);
|
|
26327
|
+
if (!proto?.viewer) return [];
|
|
26328
|
+
let markets = getCachedTermMaxMarkets(chainId);
|
|
26329
|
+
if (markets.length === 0) {
|
|
26330
|
+
try {
|
|
26331
|
+
markets = (await fetchTermMaxMarkets(chainId)).map((m) => m.config);
|
|
26332
|
+
} catch {
|
|
26333
|
+
return [];
|
|
26334
|
+
}
|
|
26335
|
+
}
|
|
26336
|
+
if (markets.length === 0) {
|
|
26337
|
+
discoveryCache3.set(cacheKey3(chainId, account), { markets: [], at: Date.now() });
|
|
26338
|
+
return [];
|
|
26339
|
+
}
|
|
26340
|
+
markets = [...markets].sort((a, b) => a.market.localeCompare(b.market));
|
|
26341
|
+
discoveryCache3.set(cacheKey3(chainId, account), { markets, at: Date.now() });
|
|
26342
|
+
return [
|
|
26343
|
+
{
|
|
26344
|
+
address: proto.viewer,
|
|
26345
|
+
name: "getPositionDetails",
|
|
26346
|
+
params: [markets.map((m) => m.market), account]
|
|
26347
|
+
}
|
|
26348
|
+
];
|
|
26349
|
+
};
|
|
25377
26350
|
|
|
25378
26351
|
// src/lending/user-data/fetch-balances/prepare.ts
|
|
25379
26352
|
async function buildUserCall(chainId, lender, account, params, getClient) {
|
|
@@ -25396,6 +26369,8 @@ async function buildUserCall(chainId, lender, account, params, getClient) {
|
|
|
25396
26369
|
return buildLiquityUserCall(chainId, lender, account);
|
|
25397
26370
|
if (isRiver(lender)) return buildRiverUserCall(chainId, lender, account);
|
|
25398
26371
|
if (isTeller(lender)) return buildTellerUserCall(chainId, lender, account);
|
|
26372
|
+
if (isTermMax(lender)) return buildTermMaxUserCall(chainId, lender, account);
|
|
26373
|
+
if (isInverse(lender)) return buildInverseUserCall(chainId, lender, account);
|
|
25399
26374
|
if (isCompoundV3Type(lender))
|
|
25400
26375
|
return buildCompoundV3UserCall(chainId, lender, account);
|
|
25401
26376
|
if (isEulerType(lender))
|
|
@@ -25423,10 +26398,11 @@ function organizeUserQueries(queries) {
|
|
|
25423
26398
|
const liquity = queries.filter((q) => isLiquityFamily(q.lender));
|
|
25424
26399
|
const river = queries.filter((q) => isRiver(q.lender));
|
|
25425
26400
|
const teller = queries.filter((q) => isTeller(q.lender));
|
|
25426
|
-
|
|
26401
|
+
const termMax = queries.filter((q) => isTermMax(q.lender));
|
|
26402
|
+
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
26403
|
return queries;
|
|
25428
26404
|
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)
|
|
26405
|
+
(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
26406
|
);
|
|
25431
26407
|
const morphoBlue = morphos.filter((q) => q.lender.startsWith("MORPHO_BLUE"));
|
|
25432
26408
|
const moolah = morphos.filter((q) => q.lender.startsWith("LISTA_DAO"));
|
|
@@ -25495,6 +26471,14 @@ function organizeUserQueries(queries) {
|
|
|
25495
26471
|
assets: void 0
|
|
25496
26472
|
});
|
|
25497
26473
|
}
|
|
26474
|
+
if (termMax.length > 0) {
|
|
26475
|
+
result.push({
|
|
26476
|
+
lender: Lender.TERMMAX,
|
|
26477
|
+
account: termMax[0].account,
|
|
26478
|
+
params: termMax.map((p) => p.lender),
|
|
26479
|
+
assets: void 0
|
|
26480
|
+
});
|
|
26481
|
+
}
|
|
25498
26482
|
if (liquity.length > 0) {
|
|
25499
26483
|
for (const base of LIQUITY_FAMILY_LENDERS) {
|
|
25500
26484
|
const members = liquity.filter((q) => q.lender.startsWith(base));
|
|
@@ -27294,7 +28278,7 @@ function toBigInt7(v) {
|
|
|
27294
28278
|
}
|
|
27295
28279
|
}
|
|
27296
28280
|
var FLUID_EEE_LOWER2 = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";
|
|
27297
|
-
var normalizeUnderlying2 = (
|
|
28281
|
+
var normalizeUnderlying2 = (addr2) => addr2 === FLUID_EEE_LOWER2 ? zeroAddress : addr2;
|
|
27298
28282
|
function toBigInt8(v) {
|
|
27299
28283
|
if (v === void 0 || v === null || v === "0x") return 0n;
|
|
27300
28284
|
if (typeof v === "bigint") return v;
|
|
@@ -27695,8 +28679,8 @@ var WETH_BY_CHAIN = {
|
|
|
27695
28679
|
// populated by the meta's native handling; kept as a hook. Default: identity.
|
|
27696
28680
|
};
|
|
27697
28681
|
function normalizeUnderlying3(token) {
|
|
27698
|
-
const
|
|
27699
|
-
return Object.values(WETH_BY_CHAIN).includes(
|
|
28682
|
+
const lower3 = token.toLowerCase();
|
|
28683
|
+
return Object.values(WETH_BY_CHAIN).includes(lower3) ? zeroAddress : lower3;
|
|
27700
28684
|
}
|
|
27701
28685
|
function toBigInt10(v) {
|
|
27702
28686
|
if (v === void 0 || v === null || v === "0x") return 0n;
|
|
@@ -27961,7 +28945,7 @@ var getTermUserDataConverter = (_lender, chainId, account, meta) => {
|
|
|
27961
28945
|
totalCalls
|
|
27962
28946
|
];
|
|
27963
28947
|
};
|
|
27964
|
-
var
|
|
28948
|
+
var nowSec6 = () => Math.floor(Date.now() / 1e3);
|
|
27965
28949
|
function sumPreview(positions) {
|
|
27966
28950
|
return positions.reduce((acc, p) => acc + p.previewValue, 0n);
|
|
27967
28951
|
}
|
|
@@ -27983,7 +28967,7 @@ var getExactlyUserDataConverter = (_lender, chainId, account, meta) => {
|
|
|
27983
28967
|
const res = data[0];
|
|
27984
28968
|
if (!res || res === "0x" || !Array.isArray(res)) return void 0;
|
|
27985
28969
|
const markets = res;
|
|
27986
|
-
const now =
|
|
28970
|
+
const now = nowSec6();
|
|
27987
28971
|
const out = {};
|
|
27988
28972
|
for (const m of markets) {
|
|
27989
28973
|
const lenderKey = exactlyLenderKey(m.market);
|
|
@@ -28151,7 +29135,7 @@ var getLiquityUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
28151
29135
|
branches.forEach((branch, bi) => {
|
|
28152
29136
|
const troves = discovery.perBranch[bi] ?? [];
|
|
28153
29137
|
const callCount = liquityBranchCallCount(branch, troves.length);
|
|
28154
|
-
const
|
|
29138
|
+
const slice2 = data.slice(cursor, cursor + callCount);
|
|
28155
29139
|
cursor += callCount;
|
|
28156
29140
|
const lenderKey = liquityLenderKey(lender, chainId, branch.collIndex);
|
|
28157
29141
|
const metaMap = meta?.[lenderKey];
|
|
@@ -28172,8 +29156,8 @@ var getLiquityUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
28172
29156
|
const modes = {};
|
|
28173
29157
|
const hist = {};
|
|
28174
29158
|
troves.forEach((t, ti) => {
|
|
28175
|
-
const troveData =
|
|
28176
|
-
const ownerRaw =
|
|
29159
|
+
const troveData = slice2[ti * 2];
|
|
29160
|
+
const ownerRaw = slice2[ti * 2 + 1];
|
|
28177
29161
|
const owner = typeof ownerRaw === "string" ? ownerRaw.toLowerCase() : void 0;
|
|
28178
29162
|
if (owner !== accountLower) return;
|
|
28179
29163
|
if (!troveData || troveData === "0x") return;
|
|
@@ -28251,11 +29235,11 @@ var getLiquityUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
28251
29235
|
};
|
|
28252
29236
|
});
|
|
28253
29237
|
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(
|
|
29238
|
+
const spDeposit = big(slice2[spBase]);
|
|
29239
|
+
const spYield = big(slice2[spBase + 1]);
|
|
29240
|
+
const spCollGain = big(slice2[spBase + 2]);
|
|
29241
|
+
const spStashed = big(slice2[spBase + 3]);
|
|
29242
|
+
const collSurplus = branch.collSurplusPool ? big(slice2[spBase + 4]) : 0n;
|
|
28259
29243
|
const spStable = spDeposit + spYield;
|
|
28260
29244
|
const spColl = spCollGain + spStashed + collSurplus;
|
|
28261
29245
|
if (spStable > 0n || spColl > 0n) {
|
|
@@ -28468,10 +29452,125 @@ var getRiverUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
28468
29452
|
expected
|
|
28469
29453
|
];
|
|
28470
29454
|
};
|
|
29455
|
+
var big3 = (v) => {
|
|
29456
|
+
try {
|
|
29457
|
+
if (typeof v === "bigint") return v;
|
|
29458
|
+
if (typeof v === "number" || typeof v === "string") return BigInt(v);
|
|
29459
|
+
} catch {
|
|
29460
|
+
}
|
|
29461
|
+
return 0n;
|
|
29462
|
+
};
|
|
29463
|
+
var getInverseUserDataConverter = (lender, chainId, account, meta) => {
|
|
29464
|
+
const cfg = inverseConfigFor(lender, chainId);
|
|
29465
|
+
const markets = inverseChainData(lender, chainId)?.markets ?? [];
|
|
29466
|
+
const expected = cfg && markets.length > 0 ? markets.length * INVERSE_CALLS_PER_MARKET + INVERSE_TAIL_CALLS : 0;
|
|
29467
|
+
return [
|
|
29468
|
+
(data) => {
|
|
29469
|
+
if (!cfg || expected === 0) return void 0;
|
|
29470
|
+
if (!data || data.length < expected) return void 0;
|
|
29471
|
+
const dolaAddr = cfg.dola.toLowerCase();
|
|
29472
|
+
const debtDecimals = cfg.debtDecimals ?? 18;
|
|
29473
|
+
const tailBase = markets.length * INVERSE_CALLS_PER_MARKET;
|
|
29474
|
+
const dbrBalance = big3(data[tailBase]);
|
|
29475
|
+
const dbrDeficit = big3(data[tailBase + 1]);
|
|
29476
|
+
const dbrSignedRaw = data[tailBase + 2];
|
|
29477
|
+
const dbrSigned = isFailedCall(dbrSignedRaw) ? 0n : big3(dbrSignedRaw);
|
|
29478
|
+
const out = {};
|
|
29479
|
+
markets.forEach((market, i) => {
|
|
29480
|
+
const base = i * INVERSE_CALLS_PER_MARKET;
|
|
29481
|
+
const escrowBal = isFailedCall(data[base]) ? 0n : big3(data[base]);
|
|
29482
|
+
const debtRaw = data[base + 1];
|
|
29483
|
+
if (isFailedCall(debtRaw)) return;
|
|
29484
|
+
const debt = big3(debtRaw);
|
|
29485
|
+
if (escrowBal === 0n && debt === 0n) return;
|
|
29486
|
+
const creditLimit = isFailedCall(data[base + 2]) ? 0n : big3(data[base + 2]);
|
|
29487
|
+
const withdrawalLimit = isFailedCall(data[base + 3]) ? 0n : big3(data[base + 3]);
|
|
29488
|
+
const lenderKey = inverseLenderKey(lender, market.address);
|
|
29489
|
+
const metaMap = meta?.[lenderKey];
|
|
29490
|
+
if (!metaMap) return;
|
|
29491
|
+
const collAddr = market.collToken.toLowerCase();
|
|
29492
|
+
const collUid = createMarketUid(chainId, lenderKey, collAddr);
|
|
29493
|
+
const loanUid = createMarketUid(chainId, lenderKey, dolaAddr);
|
|
29494
|
+
const collMeta = metaMap[collUid];
|
|
29495
|
+
const loanMeta = metaMap[loanUid];
|
|
29496
|
+
const collDecimals = collMeta?.asset?.decimals ?? market.collDecimals;
|
|
29497
|
+
const collDisplay = collMeta ? getDisplayPrice(collMeta) : 0;
|
|
29498
|
+
const collOracle = collMeta ? getOraclePrice(collMeta) : 0;
|
|
29499
|
+
const collHist = collMeta?.price?.priceUsd24h ?? collDisplay;
|
|
29500
|
+
const loanDisplay = loanMeta ? getDisplayPrice(loanMeta) : 0;
|
|
29501
|
+
const loanOracle = loanMeta ? getOraclePrice(loanMeta) : 0;
|
|
29502
|
+
const loanHist = loanMeta?.price?.priceUsd24h ?? loanDisplay;
|
|
29503
|
+
const inverseInfo = {
|
|
29504
|
+
creditLimit: creditLimit.toString(),
|
|
29505
|
+
withdrawalLimit: withdrawalLimit.toString(),
|
|
29506
|
+
dbrBalance: dbrBalance.toString(),
|
|
29507
|
+
dbrDeficit: dbrDeficit.toString(),
|
|
29508
|
+
dbrSignedBalance: dbrSigned.toString()
|
|
29509
|
+
};
|
|
29510
|
+
const collStr = parseRawAmount(escrowBal.toString(), collDecimals);
|
|
29511
|
+
const collNum = Number(collStr);
|
|
29512
|
+
const debtStr = parseRawAmount(debt.toString(), debtDecimals);
|
|
29513
|
+
const debtNum = Number(debtStr);
|
|
29514
|
+
const lendingPositions = {
|
|
29515
|
+
"0": {
|
|
29516
|
+
[collUid]: {
|
|
29517
|
+
marketUid: collUid,
|
|
29518
|
+
underlying: collAddr,
|
|
29519
|
+
deposits: collStr,
|
|
29520
|
+
debt: "0",
|
|
29521
|
+
debtStable: "0",
|
|
29522
|
+
depositsUSD: collNum * collDisplay,
|
|
29523
|
+
debtUSD: 0,
|
|
29524
|
+
debtStableUSD: 0,
|
|
29525
|
+
depositsUSDOracle: collNum * collOracle,
|
|
29526
|
+
debtUSDOracle: 0,
|
|
29527
|
+
debtStableUSDOracle: 0,
|
|
29528
|
+
stableBorrowRate: "0",
|
|
29529
|
+
collateralEnabled: true,
|
|
29530
|
+
claimableRewards: 0
|
|
29531
|
+
},
|
|
29532
|
+
[loanUid]: {
|
|
29533
|
+
marketUid: loanUid,
|
|
29534
|
+
underlying: dolaAddr,
|
|
29535
|
+
deposits: "0",
|
|
29536
|
+
debt: debtStr,
|
|
29537
|
+
debtStable: "0",
|
|
29538
|
+
depositsUSD: 0,
|
|
29539
|
+
debtUSD: debtNum * loanDisplay,
|
|
29540
|
+
debtStableUSD: 0,
|
|
29541
|
+
depositsUSDOracle: 0,
|
|
29542
|
+
debtUSDOracle: debtNum * loanOracle,
|
|
29543
|
+
debtStableUSDOracle: 0,
|
|
29544
|
+
stableBorrowRate: "0",
|
|
29545
|
+
collateralEnabled: false,
|
|
29546
|
+
claimableRewards: 0,
|
|
29547
|
+
inverseInfo
|
|
29548
|
+
}
|
|
29549
|
+
}
|
|
29550
|
+
};
|
|
29551
|
+
const modes = { "0": 0 };
|
|
29552
|
+
const hist = {
|
|
29553
|
+
"0": {
|
|
29554
|
+
totalDeposits24h: collNum * collHist,
|
|
29555
|
+
totalDebt24h: debtNum * loanHist
|
|
29556
|
+
}
|
|
29557
|
+
};
|
|
29558
|
+
const userData = createMultiAccountTypeUserState(
|
|
29559
|
+
{ chainId, account, lendingPositions, modes },
|
|
29560
|
+
metaMap,
|
|
29561
|
+
hist
|
|
29562
|
+
);
|
|
29563
|
+
if (userData && userData.data.length > 0) out[lenderKey] = userData;
|
|
29564
|
+
});
|
|
29565
|
+
return Object.keys(out).length > 0 ? out : void 0;
|
|
29566
|
+
},
|
|
29567
|
+
expected
|
|
29568
|
+
];
|
|
29569
|
+
};
|
|
28471
29570
|
|
|
28472
29571
|
// src/lending/user-data/teller/userCallParse.ts
|
|
28473
|
-
var
|
|
28474
|
-
var
|
|
29572
|
+
var nowSec7 = () => Math.floor(Date.now() / 1e3);
|
|
29573
|
+
var big4 = (v) => {
|
|
28475
29574
|
try {
|
|
28476
29575
|
if (typeof v === "bigint") return v;
|
|
28477
29576
|
if (typeof v === "number" || typeof v === "string") return BigInt(v);
|
|
@@ -28487,13 +29586,13 @@ var getTellerUserDataConverter = (_lender, chainId, account, meta) => {
|
|
|
28487
29586
|
return [
|
|
28488
29587
|
(data) => {
|
|
28489
29588
|
if (expected === 0 || !data || data.length < expected) return void 0;
|
|
28490
|
-
const now =
|
|
29589
|
+
const now = nowSec7();
|
|
28491
29590
|
const perPool = {};
|
|
28492
29591
|
kept.forEach((b, i) => {
|
|
28493
29592
|
const base = i * TELLER_CALLS_PER_BID;
|
|
28494
29593
|
const bidRes = data[base];
|
|
28495
29594
|
const owed = data[base + 1];
|
|
28496
|
-
const collAmount =
|
|
29595
|
+
const collAmount = big4(data[base + 2]);
|
|
28497
29596
|
const defaulted = !!data[base + 3];
|
|
28498
29597
|
if (isFailedCall(bidRes) || isFailedCall(owed) || !bidRes) return;
|
|
28499
29598
|
const pool = b.pool;
|
|
@@ -28514,17 +29613,17 @@ var getTellerUserDataConverter = (_lender, chainId, account, meta) => {
|
|
|
28514
29613
|
const collDisplay = collMeta ? getDisplayPrice(collMeta) : 0;
|
|
28515
29614
|
const collOracle = collMeta ? getOraclePrice(collMeta) : 0;
|
|
28516
29615
|
const collHist = collMeta?.price?.priceUsd24h ?? collDisplay;
|
|
28517
|
-
const owedPrincipal =
|
|
28518
|
-
const owedInterest =
|
|
29616
|
+
const owedPrincipal = big4(field8(owed, "principal", 0));
|
|
29617
|
+
const owedInterest = big4(field8(owed, "interest", 1));
|
|
28519
29618
|
const owedTotal = owedPrincipal + owedInterest;
|
|
28520
29619
|
if (owedTotal === 0n && collAmount === 0n) return;
|
|
28521
29620
|
const loanDetails = field8(bidRes, "loanDetails", 5);
|
|
28522
29621
|
const terms = field8(bidRes, "terms", 6);
|
|
28523
29622
|
const acceptedTs = Number(
|
|
28524
|
-
|
|
29623
|
+
big4(field8(loanDetails, "acceptedTimestamp", 4))
|
|
28525
29624
|
);
|
|
28526
|
-
const loanDuration = Number(
|
|
28527
|
-
const aprBps = Number(
|
|
29625
|
+
const loanDuration = Number(big4(field8(loanDetails, "loanDuration", 6)));
|
|
29626
|
+
const aprBps = Number(big4(field8(terms, "APR", 2)));
|
|
28528
29627
|
const maturity = acceptedTs > 0 ? acceptedTs + loanDuration : void 0;
|
|
28529
29628
|
const isMatured = defaulted || maturity !== void 0 && maturity < now;
|
|
28530
29629
|
const collStr = parseRawAmount(collAmount.toString(), collDecimals);
|
|
@@ -28612,6 +29711,179 @@ var getTellerUserDataConverter = (_lender, chainId, account, meta) => {
|
|
|
28612
29711
|
expected
|
|
28613
29712
|
];
|
|
28614
29713
|
};
|
|
29714
|
+
var nowSec8 = () => Math.floor(Date.now() / 1e3);
|
|
29715
|
+
function toBigInt12(v) {
|
|
29716
|
+
if (v === void 0 || v === null || v === "0x") return 0n;
|
|
29717
|
+
if (typeof v === "bigint") return v;
|
|
29718
|
+
try {
|
|
29719
|
+
return BigInt(v);
|
|
29720
|
+
} catch {
|
|
29721
|
+
return 0n;
|
|
29722
|
+
}
|
|
29723
|
+
}
|
|
29724
|
+
function field9(res, name, index) {
|
|
29725
|
+
if (res && typeof res === "object" && !Array.isArray(res) && name in res) {
|
|
29726
|
+
return res[name];
|
|
29727
|
+
}
|
|
29728
|
+
if (Array.isArray(res)) return res[index];
|
|
29729
|
+
return void 0;
|
|
29730
|
+
}
|
|
29731
|
+
function parsePosition(res) {
|
|
29732
|
+
const ftBalance = toBigInt12(field9(res, "ftBalance", 2));
|
|
29733
|
+
const xtBalance = toBigInt12(field9(res, "xtBalance", 3));
|
|
29734
|
+
const rawGts = field9(res, "gtInfo", 4);
|
|
29735
|
+
const gts = [];
|
|
29736
|
+
if (Array.isArray(rawGts)) {
|
|
29737
|
+
for (const g of rawGts) {
|
|
29738
|
+
const loanId = toBigInt12(field9(g, "loanId", 0));
|
|
29739
|
+
if (loanId === 0n) continue;
|
|
29740
|
+
gts.push({
|
|
29741
|
+
loanId: loanId.toString(),
|
|
29742
|
+
collateralAmt: toBigInt12(field9(g, "collateralAmt", 1)),
|
|
29743
|
+
debtAmt: toBigInt12(field9(g, "debtAmt", 2))
|
|
29744
|
+
});
|
|
29745
|
+
}
|
|
29746
|
+
}
|
|
29747
|
+
return { ftBalance, xtBalance, gts };
|
|
29748
|
+
}
|
|
29749
|
+
var getTermMaxUserDataConverter = (_lender, chainId, account, meta) => {
|
|
29750
|
+
const discovery = getCachedTermMaxDiscovery(chainId, account);
|
|
29751
|
+
const markets = discovery?.markets ?? [];
|
|
29752
|
+
const expected = markets.length > 0 ? TERMMAX_CALLS_PER_ACCOUNT : 0;
|
|
29753
|
+
return [
|
|
29754
|
+
(data) => {
|
|
29755
|
+
if (expected === 0) return void 0;
|
|
29756
|
+
if (!data || data.length < expected) return void 0;
|
|
29757
|
+
const positions = data[0];
|
|
29758
|
+
if (!Array.isArray(positions)) return void 0;
|
|
29759
|
+
const now = nowSec8();
|
|
29760
|
+
const out = {};
|
|
29761
|
+
markets.forEach((market, i) => {
|
|
29762
|
+
const parsed = parsePosition(positions[i]);
|
|
29763
|
+
if (!parsed) return;
|
|
29764
|
+
if (parsed.ftBalance === 0n && parsed.gts.length === 0) return;
|
|
29765
|
+
const lenderKey = termMaxLenderKey(market.market);
|
|
29766
|
+
const metaMap = meta?.[lenderKey];
|
|
29767
|
+
if (!metaMap) return;
|
|
29768
|
+
const loanAddr = market.debtToken.toLowerCase();
|
|
29769
|
+
const collAddr = market.collateral.toLowerCase();
|
|
29770
|
+
const loanUid = createMarketUid(chainId, lenderKey, loanAddr);
|
|
29771
|
+
const collUid = createMarketUid(chainId, lenderKey, collAddr);
|
|
29772
|
+
const loanMeta = metaMap[loanUid];
|
|
29773
|
+
const collMeta = metaMap[collUid];
|
|
29774
|
+
const loanDisplay = loanMeta ? getDisplayPrice(loanMeta) : 0;
|
|
29775
|
+
const loanOracle = loanMeta ? getOraclePrice(loanMeta) : 0;
|
|
29776
|
+
const loanHist = loanMeta?.price?.priceUsd24h ?? loanDisplay;
|
|
29777
|
+
const collDisplay = collMeta ? getDisplayPrice(collMeta) : 0;
|
|
29778
|
+
const collOracle = collMeta ? getOraclePrice(collMeta) : 0;
|
|
29779
|
+
const collHist = collMeta?.price?.priceUsd24h ?? collDisplay;
|
|
29780
|
+
const loanDec = loanMeta?.asset?.decimals ?? market.debtDecimals;
|
|
29781
|
+
const collDec = collMeta?.asset?.decimals ?? market.collateralDecimals;
|
|
29782
|
+
const maturity = Number(market.maturity);
|
|
29783
|
+
const isMatured = maturity > 0 && maturity <= now;
|
|
29784
|
+
const positionsByAccount = {};
|
|
29785
|
+
const modes = {};
|
|
29786
|
+
const hist = {};
|
|
29787
|
+
if (parsed.ftBalance > 0n) {
|
|
29788
|
+
const ftStr = parseRawAmount(parsed.ftBalance.toString(), loanDec);
|
|
29789
|
+
const ftNum = Number(ftStr);
|
|
29790
|
+
positionsByAccount["0"] = {
|
|
29791
|
+
[loanUid]: {
|
|
29792
|
+
marketUid: loanUid,
|
|
29793
|
+
underlying: loanAddr,
|
|
29794
|
+
deposits: ftStr,
|
|
29795
|
+
debt: "0",
|
|
29796
|
+
debtStable: "0",
|
|
29797
|
+
depositsUSD: ftNum * loanDisplay,
|
|
29798
|
+
debtUSD: 0,
|
|
29799
|
+
debtStableUSD: 0,
|
|
29800
|
+
depositsUSDOracle: ftNum * loanOracle,
|
|
29801
|
+
debtUSDOracle: 0,
|
|
29802
|
+
debtStableUSDOracle: 0,
|
|
29803
|
+
stableBorrowRate: "0",
|
|
29804
|
+
// A TermMax lend position never collateralizes a borrow.
|
|
29805
|
+
collateralEnabled: false,
|
|
29806
|
+
claimableRewards: 0
|
|
29807
|
+
}
|
|
29808
|
+
};
|
|
29809
|
+
modes["0"] = 0;
|
|
29810
|
+
hist["0"] = { totalDeposits24h: ftNum * loanHist, totalDebt24h: 0 };
|
|
29811
|
+
}
|
|
29812
|
+
for (const gt of parsed.gts) {
|
|
29813
|
+
const collStr = parseRawAmount(gt.collateralAmt.toString(), collDec);
|
|
29814
|
+
const collNum = Number(collStr);
|
|
29815
|
+
const debtStr = parseRawAmount(gt.debtAmt.toString(), loanDec);
|
|
29816
|
+
const debtNum = Number(debtStr);
|
|
29817
|
+
if (gt.collateralAmt === 0n && gt.debtAmt === 0n) continue;
|
|
29818
|
+
positionsByAccount[gt.loanId] = {
|
|
29819
|
+
[collUid]: {
|
|
29820
|
+
marketUid: collUid,
|
|
29821
|
+
underlying: collAddr,
|
|
29822
|
+
deposits: collStr,
|
|
29823
|
+
debt: "0",
|
|
29824
|
+
debtStable: "0",
|
|
29825
|
+
depositsUSD: collNum * collDisplay,
|
|
29826
|
+
debtUSD: 0,
|
|
29827
|
+
debtStableUSD: 0,
|
|
29828
|
+
depositsUSDOracle: collNum * collOracle,
|
|
29829
|
+
debtUSDOracle: 0,
|
|
29830
|
+
debtStableUSDOracle: 0,
|
|
29831
|
+
stableBorrowRate: "0",
|
|
29832
|
+
collateralEnabled: true,
|
|
29833
|
+
claimableRewards: 0
|
|
29834
|
+
},
|
|
29835
|
+
[loanUid]: {
|
|
29836
|
+
marketUid: loanUid,
|
|
29837
|
+
underlying: loanAddr,
|
|
29838
|
+
deposits: "0",
|
|
29839
|
+
debt: "0",
|
|
29840
|
+
// Fixed-term debt → stable slot (Exactly / Lista / Teller convention).
|
|
29841
|
+
debtStable: debtStr,
|
|
29842
|
+
depositsUSD: 0,
|
|
29843
|
+
debtUSD: 0,
|
|
29844
|
+
debtStableUSD: debtNum * loanDisplay,
|
|
29845
|
+
depositsUSDOracle: 0,
|
|
29846
|
+
debtUSDOracle: 0,
|
|
29847
|
+
debtStableUSDOracle: debtNum * loanOracle,
|
|
29848
|
+
stableBorrowRate: "0",
|
|
29849
|
+
collateralEnabled: false,
|
|
29850
|
+
claimableRewards: 0,
|
|
29851
|
+
// Fixed-term loan detail. `loanId` = the gtId, which is the target
|
|
29852
|
+
// of every write op (repay / removeCollateral / …). Debt is a
|
|
29853
|
+
// STATIC face value: nothing accrues, so no accruedInterest.
|
|
29854
|
+
term: {
|
|
29855
|
+
loanId: gt.loanId,
|
|
29856
|
+
isDynamic: false,
|
|
29857
|
+
debt: debtStr,
|
|
29858
|
+
maturity: maturity || void 0,
|
|
29859
|
+
isMatured
|
|
29860
|
+
}
|
|
29861
|
+
}
|
|
29862
|
+
};
|
|
29863
|
+
modes[gt.loanId] = 0;
|
|
29864
|
+
hist[gt.loanId] = {
|
|
29865
|
+
totalDeposits24h: collNum * collHist,
|
|
29866
|
+
totalDebt24h: debtNum * loanHist
|
|
29867
|
+
};
|
|
29868
|
+
}
|
|
29869
|
+
if (Object.keys(positionsByAccount).length === 0) return;
|
|
29870
|
+
const userData = createMultiAccountTypeUserState(
|
|
29871
|
+
{
|
|
29872
|
+
chainId,
|
|
29873
|
+
account,
|
|
29874
|
+
lendingPositions: positionsByAccount,
|
|
29875
|
+
modes
|
|
29876
|
+
},
|
|
29877
|
+
metaMap,
|
|
29878
|
+
hist
|
|
29879
|
+
);
|
|
29880
|
+
if (userData && userData.data.length > 0) out[lenderKey] = userData;
|
|
29881
|
+
});
|
|
29882
|
+
return Object.keys(out).length > 0 ? out : void 0;
|
|
29883
|
+
},
|
|
29884
|
+
expected
|
|
29885
|
+
];
|
|
29886
|
+
};
|
|
28615
29887
|
|
|
28616
29888
|
// src/lending/user-data/fetch-balances/parse.ts
|
|
28617
29889
|
function getUserDataConverter(lender, chainId, account, params, meta) {
|
|
@@ -28645,6 +29917,10 @@ function getUserDataConverter(lender, chainId, account, params, meta) {
|
|
|
28645
29917
|
return getRiverUserDataConverter(lender, chainId, account, meta);
|
|
28646
29918
|
if (isTeller(lender))
|
|
28647
29919
|
return getTellerUserDataConverter(lender, chainId, account, meta);
|
|
29920
|
+
if (isTermMax(lender))
|
|
29921
|
+
return getTermMaxUserDataConverter(lender, chainId, account, meta);
|
|
29922
|
+
if (isInverse(lender))
|
|
29923
|
+
return getInverseUserDataConverter(lender, chainId, account, meta);
|
|
28648
29924
|
if (isCompoundV3Type(lender))
|
|
28649
29925
|
return getCompoundV3UserDataConverter(
|
|
28650
29926
|
lender,
|
|
@@ -33242,6 +34518,8 @@ var getAbi2 = (lender) => {
|
|
|
33242
34518
|
return [...RiverTroveManagerAbi, ...RiverStabilityPoolAbi];
|
|
33243
34519
|
if (isTeller(lender))
|
|
33244
34520
|
return [...TellerV2Abi, ...TellerCollateralManagerAbi];
|
|
34521
|
+
if (isInverse(lender))
|
|
34522
|
+
return [...InverseMarketAbi, ...InverseEscrowAbi, ...InverseDbrAbi];
|
|
33245
34523
|
if (isInit(lender)) return InitLensAbi;
|
|
33246
34524
|
if (isEulerType(lender)) return accountLensAbi;
|
|
33247
34525
|
if (isCompoundV2Type(lender))
|
|
@@ -33798,7 +35076,7 @@ var MORPHO_API_CHAIN_IDS = {
|
|
|
33798
35076
|
[Chain.UNICHAIN]: 130
|
|
33799
35077
|
};
|
|
33800
35078
|
var FETCH_TIMEOUT_MS = 3e3;
|
|
33801
|
-
var
|
|
35079
|
+
var CACHE_TTL_MS4 = 2e3;
|
|
33802
35080
|
var buildSubgraphQuery = (account) => `
|
|
33803
35081
|
{
|
|
33804
35082
|
account(id: "${account.toLowerCase()}") {
|
|
@@ -33853,11 +35131,11 @@ async function fetchJsonWithProxyFallback(url, body, proxyConfig) {
|
|
|
33853
35131
|
}
|
|
33854
35132
|
var inflight = /* @__PURE__ */ new Map();
|
|
33855
35133
|
var resolved = /* @__PURE__ */ new Map();
|
|
33856
|
-
function
|
|
35134
|
+
function cacheKey4(chainId, account) {
|
|
33857
35135
|
return `${chainId}:${account.toLowerCase()}`;
|
|
33858
35136
|
}
|
|
33859
35137
|
async function dedupedFetch(chainId, account, loader) {
|
|
33860
|
-
const key =
|
|
35138
|
+
const key = cacheKey4(chainId, account);
|
|
33861
35139
|
const now = Date.now();
|
|
33862
35140
|
const cached = resolved.get(key);
|
|
33863
35141
|
if (cached && cached.expiresAt > now) {
|
|
@@ -33866,7 +35144,7 @@ async function dedupedFetch(chainId, account, loader) {
|
|
|
33866
35144
|
const existing = inflight.get(key);
|
|
33867
35145
|
if (existing) return existing;
|
|
33868
35146
|
const promise = loader().then((value) => {
|
|
33869
|
-
resolved.set(key, { value, expiresAt: Date.now() +
|
|
35147
|
+
resolved.set(key, { value, expiresAt: Date.now() + CACHE_TTL_MS4 });
|
|
33870
35148
|
return value;
|
|
33871
35149
|
}).finally(() => {
|
|
33872
35150
|
inflight.delete(key);
|
|
@@ -33998,8 +35276,8 @@ function calculateOverallNetApr(totalDepositsUSD, totalDebtUSD, avgDepositApr, a
|
|
|
33998
35276
|
return (totalDepositsUSD * avgDepositApr - totalDebtUSD * avgBorrowApr) / Math.abs(totalNetWorth) * (totalNetWorth > 0 ? 1 : -1);
|
|
33999
35277
|
}
|
|
34000
35278
|
function calculateWeightedAprs(items) {
|
|
34001
|
-
const wa = (
|
|
34002
|
-
items.filter((i) => i[weightField] !== 0).map((i) => ({ value: i[
|
|
35279
|
+
const wa = (field10, weightField) => calculateWeightedAverage(
|
|
35280
|
+
items.filter((i) => i[weightField] !== 0).map((i) => ({ value: i[field10], weight: Math.abs(i[weightField]) }))
|
|
34003
35281
|
);
|
|
34004
35282
|
return {
|
|
34005
35283
|
apr: wa("apr", "nav"),
|
|
@@ -35743,8 +37021,8 @@ var TIMEOUT_MS = 8e3;
|
|
|
35743
37021
|
var slisBnbFetcher = {
|
|
35744
37022
|
label: "SLISBNB",
|
|
35745
37023
|
fetch: async () => {
|
|
35746
|
-
const
|
|
35747
|
-
const url = `${HISTORY_URL}?name=slisBNBRate&cycle=1&startTime=${
|
|
37024
|
+
const nowSec9 = Math.floor(Date.now() / 1e3);
|
|
37025
|
+
const url = `${HISTORY_URL}?name=slisBNBRate&cycle=1&startTime=${nowSec9 - LOOKBACK_SECONDS}&endTime=${nowSec9}`;
|
|
35748
37026
|
const controller = new AbortController();
|
|
35749
37027
|
const timer = setTimeout(() => controller.abort(), TIMEOUT_MS);
|
|
35750
37028
|
try {
|
|
@@ -38338,6 +39616,40 @@ var rwaFundsFetcher = {
|
|
|
38338
39616
|
}
|
|
38339
39617
|
};
|
|
38340
39618
|
|
|
39619
|
+
// src/yields/intrinsic/fetchers/inverse.ts
|
|
39620
|
+
var DOLA_STAKING_URL = "https://www.inverse.finance/api/dola-staking";
|
|
39621
|
+
var JDOLA_STAKING_URL = "https://www.inverse.finance/api/junior/jdola-staking";
|
|
39622
|
+
var SDOLA_KEY = "SDOLA";
|
|
39623
|
+
var SDOLA_GROUP_KEY = "sDOLA::SDOLA";
|
|
39624
|
+
var fetchJson2 = async (url) => {
|
|
39625
|
+
const res = await fetch(url, {
|
|
39626
|
+
headers: { accept: "application/json" },
|
|
39627
|
+
signal: AbortSignal.timeout(8e3)
|
|
39628
|
+
});
|
|
39629
|
+
if (!res.ok) throw new Error(`HTTP ${res.status}`);
|
|
39630
|
+
return res.json();
|
|
39631
|
+
};
|
|
39632
|
+
var fetchSdolaApyPercent = async () => {
|
|
39633
|
+
try {
|
|
39634
|
+
const d = await fetchJson2(DOLA_STAKING_URL);
|
|
39635
|
+
const apy = Number(d?.calculatedApy);
|
|
39636
|
+
if (Number.isFinite(apy) && apy > 0) return apy;
|
|
39637
|
+
throw new Error("calculatedApy missing");
|
|
39638
|
+
} catch {
|
|
39639
|
+
const d = await fetchJson2(JDOLA_STAKING_URL);
|
|
39640
|
+
const apy = Number(d?.sDolaApy);
|
|
39641
|
+
if (Number.isFinite(apy) && apy > 0) return apy;
|
|
39642
|
+
throw new Error("sDolaApy missing");
|
|
39643
|
+
}
|
|
39644
|
+
};
|
|
39645
|
+
var sdolaFetcher = {
|
|
39646
|
+
label: "SDOLA",
|
|
39647
|
+
fetch: async () => {
|
|
39648
|
+
const apr = apyToAprPercent(await fetchSdolaApyPercent());
|
|
39649
|
+
return { [SDOLA_KEY]: apr, [SDOLA_GROUP_KEY]: apr };
|
|
39650
|
+
}
|
|
39651
|
+
};
|
|
39652
|
+
|
|
38341
39653
|
// src/yields/intrinsic/fetchers/reProtocol.ts
|
|
38342
39654
|
var REUSD_KEY = "RE::reUSD";
|
|
38343
39655
|
var REUSDE_KEY = "RE::reUSDe";
|
|
@@ -39848,6 +41160,27 @@ var SINGLE_CHAIN_ENTRIES = {
|
|
|
39848
41160
|
yieldFetcher: fraxSavingsFetcher,
|
|
39849
41161
|
yieldKey: "SFRAX"
|
|
39850
41162
|
},
|
|
41163
|
+
{
|
|
41164
|
+
// Inverse sDOLA — 4626 auto-compounder over the DOLA Savings
|
|
41165
|
+
// Account; yield is FiRM's DBR revenue via a continuous on-chain
|
|
41166
|
+
// auction, no rehypothecation. Instant permissionless exit
|
|
41167
|
+
// (maxDeposit = uint.max verified 2026-08; ~6.9M DOLA TVL).
|
|
41168
|
+
// Ethereum-only; Inverse propagates the rate cross-chain via
|
|
41169
|
+
// CCIP, so bridged deployments may appear later. The jDOLA
|
|
41170
|
+
// junior tranche (48h exit window + fee, ~$28k) is deliberately
|
|
41171
|
+
// not registered.
|
|
41172
|
+
address: "0xb45ad160634c528cc3d2926d9807104fa3157305",
|
|
41173
|
+
underlying: "0x865377367054516e17014ccded1e7d814edc9ce4",
|
|
41174
|
+
// DOLA
|
|
41175
|
+
symbol: "sDOLA",
|
|
41176
|
+
brand: "Inverse",
|
|
41177
|
+
decimals: 18,
|
|
41178
|
+
isRebasing: false,
|
|
41179
|
+
isMintable: true,
|
|
41180
|
+
withdrawalMode: "instant",
|
|
41181
|
+
yieldFetcher: sdolaFetcher,
|
|
41182
|
+
yieldKey: SDOLA_GROUP_KEY
|
|
41183
|
+
},
|
|
39851
41184
|
{
|
|
39852
41185
|
address: "0x83f20f44975d03b1b09e64809b757c47f942beea",
|
|
39853
41186
|
underlying: "0x6b175474e89094c44da98b954eedeac495271d0f",
|
|
@@ -40382,13 +41715,13 @@ var gmxFetcher = {
|
|
|
40382
41715
|
fetch: async () => {
|
|
40383
41716
|
const { apy } = await fetchGmxRawData(GMX_CHAIN, GMX_DEFAULT_APY_PERIOD);
|
|
40384
41717
|
const rData = {};
|
|
40385
|
-
for (const [
|
|
40386
|
-
const a =
|
|
41718
|
+
for (const [addr2, d] of Object.entries(apy.markets ?? {})) {
|
|
41719
|
+
const a = addr2.toLowerCase();
|
|
40387
41720
|
if (a === gmx_eth_usd_address) rData[gmx_eth_usd] = apyToApr(d.apy) * 100;
|
|
40388
41721
|
if (a === gmx_btc_usd_address) rData[gmx_btc_usd] = apyToApr(d.apy) * 100;
|
|
40389
41722
|
}
|
|
40390
|
-
for (const [
|
|
40391
|
-
const a =
|
|
41723
|
+
for (const [addr2, d] of Object.entries(apy.glvs ?? {})) {
|
|
41724
|
+
const a = addr2.toLowerCase();
|
|
40392
41725
|
if (a === glv_wbtc_usdc_address)
|
|
40393
41726
|
rData[glv_wbtc_usdc] = apyToApr(d.apy) * 100;
|
|
40394
41727
|
if (a === glv_weth_usdc_address)
|
|
@@ -40872,8 +42205,8 @@ var yearnKatanaFetcher = {
|
|
|
40872
42205
|
YEARN_KATANA_URL
|
|
40873
42206
|
).then((r) => r.json());
|
|
40874
42207
|
let map = {};
|
|
40875
|
-
Object.entries(res).forEach(([
|
|
40876
|
-
const key = addressToAssetYearn[
|
|
42208
|
+
Object.entries(res).forEach(([addr2, data]) => {
|
|
42209
|
+
const key = addressToAssetYearn[addr2.toLowerCase()];
|
|
40877
42210
|
if (key) {
|
|
40878
42211
|
const apr = ((data.apr.netAPR ?? 0) + (data.apr.extra?.extrinsicYield ?? 0) + (data.apr.extra?.katanaNativeYield ?? 0)) * 100;
|
|
40879
42212
|
map[key] = apr;
|
|
@@ -42041,6 +43374,76 @@ var riverFetcher = {
|
|
|
42041
43374
|
parse: parseRiverResults,
|
|
42042
43375
|
getAbi: getRiverAbi
|
|
42043
43376
|
};
|
|
43377
|
+
function getInverseCalls(chainId) {
|
|
43378
|
+
const results = [];
|
|
43379
|
+
for (const lender of inverseLendersByChain(chainId)) {
|
|
43380
|
+
const config = inverseConfigFor(lender, chainId);
|
|
43381
|
+
const markets = inverseChainData(lender, chainId)?.markets ?? [];
|
|
43382
|
+
if (!config?.oracle || markets.length === 0) continue;
|
|
43383
|
+
for (const m of markets) {
|
|
43384
|
+
if (!m.address || !m.collToken) continue;
|
|
43385
|
+
const calls = [
|
|
43386
|
+
{
|
|
43387
|
+
address: config.oracle,
|
|
43388
|
+
name: "viewPrice",
|
|
43389
|
+
params: [m.collToken, BigInt(m.collateralFactorBps)]
|
|
43390
|
+
}
|
|
43391
|
+
];
|
|
43392
|
+
results.push({
|
|
43393
|
+
calls,
|
|
43394
|
+
meta: {
|
|
43395
|
+
lender,
|
|
43396
|
+
chainId,
|
|
43397
|
+
market: m.address.toLowerCase(),
|
|
43398
|
+
collToken: m.collToken.toLowerCase(),
|
|
43399
|
+
collDecimals: m.collDecimals,
|
|
43400
|
+
dola: config.dola?.toLowerCase()
|
|
43401
|
+
},
|
|
43402
|
+
lender: inverseLenderKey(lender, m.address)
|
|
43403
|
+
});
|
|
43404
|
+
}
|
|
43405
|
+
}
|
|
43406
|
+
return results;
|
|
43407
|
+
}
|
|
43408
|
+
function parseInverseResults(data, meta, context) {
|
|
43409
|
+
const { chainId } = context;
|
|
43410
|
+
const key = inverseLenderKey(meta.lender, meta.market);
|
|
43411
|
+
const entries = [];
|
|
43412
|
+
const raw = data?.[0];
|
|
43413
|
+
const price2 = typeof raw === "bigint" ? raw : raw != null && raw !== "0x" ? BigInt(raw) : 0n;
|
|
43414
|
+
const collUSD = Number(price2) / 10 ** (36 - meta.collDecimals);
|
|
43415
|
+
if (collUSD > 0 && collUSD < 1e9) {
|
|
43416
|
+
entries.push({
|
|
43417
|
+
asset: meta.collToken,
|
|
43418
|
+
price: collUSD,
|
|
43419
|
+
priceUSD: collUSD,
|
|
43420
|
+
marketUid: createMarketUid(chainId, key, meta.collToken),
|
|
43421
|
+
targetLender: key,
|
|
43422
|
+
description: "Inverse FiRM pessimistic oracle (USD, ~2-day low)"
|
|
43423
|
+
});
|
|
43424
|
+
}
|
|
43425
|
+
if (meta.dola) {
|
|
43426
|
+
entries.push({
|
|
43427
|
+
asset: meta.dola,
|
|
43428
|
+
price: 1,
|
|
43429
|
+
priceUSD: 1,
|
|
43430
|
+
marketUid: createMarketUid(chainId, key, meta.dola),
|
|
43431
|
+
targetLender: key,
|
|
43432
|
+
description: "Inverse DOLA (par)",
|
|
43433
|
+
staticBase: true,
|
|
43434
|
+
baseAsset: meta.dola
|
|
43435
|
+
});
|
|
43436
|
+
}
|
|
43437
|
+
return entries;
|
|
43438
|
+
}
|
|
43439
|
+
function getInverseAbi() {
|
|
43440
|
+
return InverseOracleAbi;
|
|
43441
|
+
}
|
|
43442
|
+
var inverseFetcher = {
|
|
43443
|
+
getCalls: getInverseCalls,
|
|
43444
|
+
parse: parseInverseResults,
|
|
43445
|
+
getAbi: getInverseAbi
|
|
43446
|
+
};
|
|
42044
43447
|
function getTellerCalls(chainId) {
|
|
42045
43448
|
const pools = tellerPoolsByChain(chainId);
|
|
42046
43449
|
if (pools.length === 0) return [];
|
|
@@ -42075,9 +43478,9 @@ function parseTellerResults(data, meta, context) {
|
|
|
42075
43478
|
const principal = meta.principal;
|
|
42076
43479
|
const collateral = meta.collateral;
|
|
42077
43480
|
const lenderKey = tellerLenderKey(meta.pool);
|
|
42078
|
-
const usdOf = (
|
|
42079
|
-
const key = tokenList?.[
|
|
42080
|
-
return usdPrices[key] ?? usdPrices[
|
|
43481
|
+
const usdOf = (addr2) => {
|
|
43482
|
+
const key = tokenList?.[addr2]?.assetGroup ?? `${chainId}-${addr2}`;
|
|
43483
|
+
return usdPrices[key] ?? usdPrices[addr2];
|
|
42081
43484
|
};
|
|
42082
43485
|
const principalUSD = usdOf(principal);
|
|
42083
43486
|
const collateralUSD = usdOf(collateral);
|
|
@@ -42143,6 +43546,86 @@ var tellerFetcher = {
|
|
|
42143
43546
|
parse: parseTellerResults,
|
|
42144
43547
|
getAbi: getTellerAbi
|
|
42145
43548
|
};
|
|
43549
|
+
function getTermMaxCalls(chainId) {
|
|
43550
|
+
const proto = termMaxConfigByChain(chainId);
|
|
43551
|
+
if (!proto?.oracleAggregatorV2) return [];
|
|
43552
|
+
const markets = getCachedTermMaxMarkets(chainId);
|
|
43553
|
+
if (markets.length === 0) return [];
|
|
43554
|
+
const oracle = proto.oracleAggregatorV2;
|
|
43555
|
+
const results = [];
|
|
43556
|
+
for (const m of markets) {
|
|
43557
|
+
if (!m.market || !m.debtToken || !m.collateral) continue;
|
|
43558
|
+
const calls = [
|
|
43559
|
+
{ address: oracle, name: "getPrice", params: [m.debtToken] },
|
|
43560
|
+
{ address: oracle, name: "getPrice", params: [m.collateral] }
|
|
43561
|
+
];
|
|
43562
|
+
results.push({
|
|
43563
|
+
calls,
|
|
43564
|
+
meta: {
|
|
43565
|
+
market: m.market.toLowerCase(),
|
|
43566
|
+
debtToken: m.debtToken.toLowerCase(),
|
|
43567
|
+
collateral: m.collateral.toLowerCase()
|
|
43568
|
+
},
|
|
43569
|
+
lender: termMaxLenderKey(m.market)
|
|
43570
|
+
});
|
|
43571
|
+
}
|
|
43572
|
+
return results;
|
|
43573
|
+
}
|
|
43574
|
+
function readUsdPrice(res) {
|
|
43575
|
+
if (res == null || res === "0x") return void 0;
|
|
43576
|
+
let raw;
|
|
43577
|
+
let dec;
|
|
43578
|
+
if (Array.isArray(res)) {
|
|
43579
|
+
raw = res[0];
|
|
43580
|
+
dec = res[1];
|
|
43581
|
+
} else if (typeof res === "object") {
|
|
43582
|
+
raw = res.price;
|
|
43583
|
+
dec = res.decimals;
|
|
43584
|
+
} else {
|
|
43585
|
+
return void 0;
|
|
43586
|
+
}
|
|
43587
|
+
let price2;
|
|
43588
|
+
try {
|
|
43589
|
+
price2 = BigInt(raw);
|
|
43590
|
+
} catch {
|
|
43591
|
+
return void 0;
|
|
43592
|
+
}
|
|
43593
|
+
if (price2 <= 0n) return void 0;
|
|
43594
|
+
const decimals = Number(dec);
|
|
43595
|
+
if (!Number.isFinite(decimals) || decimals < 0 || decimals > 36) return void 0;
|
|
43596
|
+
const usd = Number(price2) / 10 ** decimals;
|
|
43597
|
+
return Number.isFinite(usd) && usd > 0 ? usd : void 0;
|
|
43598
|
+
}
|
|
43599
|
+
function parseTermMaxResults(data, meta, context) {
|
|
43600
|
+
const { chainId } = context;
|
|
43601
|
+
const lenderKey = termMaxLenderKey(meta.market);
|
|
43602
|
+
const entries = [];
|
|
43603
|
+
const legs = [
|
|
43604
|
+
[meta.debtToken, data?.[0], "TermMax oracle (debt asset)"],
|
|
43605
|
+
[meta.collateral, data?.[1], "TermMax oracle (collateral)"]
|
|
43606
|
+
];
|
|
43607
|
+
for (const [asset, res, description] of legs) {
|
|
43608
|
+
const usd = readUsdPrice(res);
|
|
43609
|
+
if (usd === void 0) continue;
|
|
43610
|
+
entries.push({
|
|
43611
|
+
asset,
|
|
43612
|
+
price: usd,
|
|
43613
|
+
priceUSD: usd,
|
|
43614
|
+
marketUid: createMarketUid(chainId, lenderKey, asset),
|
|
43615
|
+
targetLender: lenderKey,
|
|
43616
|
+
description
|
|
43617
|
+
});
|
|
43618
|
+
}
|
|
43619
|
+
return entries;
|
|
43620
|
+
}
|
|
43621
|
+
function getTermMaxAbi() {
|
|
43622
|
+
return TermMaxOracleAggregatorV2Abi;
|
|
43623
|
+
}
|
|
43624
|
+
var termMaxFetcher = {
|
|
43625
|
+
getCalls: getTermMaxCalls,
|
|
43626
|
+
parse: parseTermMaxResults,
|
|
43627
|
+
getAbi: getTermMaxAbi
|
|
43628
|
+
};
|
|
42146
43629
|
var CompoundV2OracleAbi = [
|
|
42147
43630
|
{
|
|
42148
43631
|
inputs: [{ internalType: "address", name: "cToken", type: "address" }],
|
|
@@ -42482,8 +43965,8 @@ var priceLensAbi = [
|
|
|
42482
43965
|
// src/prices/oracle-prices/fetchers/euler.ts
|
|
42483
43966
|
var MAX_VIRTUAL_ADDRESS = 65535;
|
|
42484
43967
|
var MAX_SANE_PRICE_USD = 1e7;
|
|
42485
|
-
function isUsdUnitOfAccount(
|
|
42486
|
-
const numeric = parseInt(
|
|
43968
|
+
function isUsdUnitOfAccount(addr2) {
|
|
43969
|
+
const numeric = parseInt(addr2, 16);
|
|
42487
43970
|
return numeric <= MAX_VIRTUAL_ADDRESS;
|
|
42488
43971
|
}
|
|
42489
43972
|
var PRICE_LENS_ADDRESS = "0x6392892f3C57c658d2c748fc64c6fe57680E889F";
|
|
@@ -43041,7 +44524,7 @@ var siloV3Fetcher = {
|
|
|
43041
44524
|
getAbi: getSiloV3Abi
|
|
43042
44525
|
};
|
|
43043
44526
|
var FLUID_EEE_LOWER3 = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";
|
|
43044
|
-
var normalizeUnderlying4 = (
|
|
44527
|
+
var normalizeUnderlying4 = (addr2) => addr2 === FLUID_EEE_LOWER3 ? zeroAddress : addr2;
|
|
43045
44528
|
function priceColInDebt(raw, colDec, debtDec) {
|
|
43046
44529
|
return formatMorphoPrice(raw, debtDec, colDec + 9);
|
|
43047
44530
|
}
|
|
@@ -43699,8 +45182,6 @@ function resolveDerivation(entry, groupDefault) {
|
|
|
43699
45182
|
if (entry.baseAsset && !entry.staticBase) return "quoted";
|
|
43700
45183
|
return groupDefault ?? "direct";
|
|
43701
45184
|
}
|
|
43702
|
-
|
|
43703
|
-
// src/prices/oracle-prices/fetchOraclePrices.ts
|
|
43704
45185
|
function countFailures(data, offset, count) {
|
|
43705
45186
|
let failures = 0;
|
|
43706
45187
|
for (let i = offset; i < offset + count; i++) {
|
|
@@ -43812,6 +45293,9 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
43812
45293
|
const multicallErrors = [];
|
|
43813
45294
|
const active = onlyFetchers ? new Set(onlyFetchers.map((f) => f.toLowerCase())) : null;
|
|
43814
45295
|
const isActive = (name) => !active || active.has(name);
|
|
45296
|
+
if (isActive("termmax") && termMaxConfigByChain(chainId)) {
|
|
45297
|
+
await fetchTermMaxMarkets(chainId).catch(() => []);
|
|
45298
|
+
}
|
|
43815
45299
|
const aaveResults = isActive("aave") ? safeGetCalls(
|
|
43816
45300
|
"aave",
|
|
43817
45301
|
() => aaveFetcher.getCalls(chainId),
|
|
@@ -43881,11 +45365,21 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
43881
45365
|
() => riverFetcher.getCalls(chainId),
|
|
43882
45366
|
getCallsErrors
|
|
43883
45367
|
) : [];
|
|
45368
|
+
const inverseResults = isActive("inverse") ? safeGetCalls(
|
|
45369
|
+
"inverse",
|
|
45370
|
+
() => inverseFetcher.getCalls(chainId),
|
|
45371
|
+
getCallsErrors
|
|
45372
|
+
) : [];
|
|
43884
45373
|
const tellerResults = isActive("teller") ? safeGetCalls(
|
|
43885
45374
|
"teller",
|
|
43886
45375
|
() => tellerFetcher.getCalls(chainId),
|
|
43887
45376
|
getCallsErrors
|
|
43888
45377
|
) : [];
|
|
45378
|
+
const termMaxResults = isActive("termmax") ? safeGetCalls(
|
|
45379
|
+
"termmax",
|
|
45380
|
+
() => termMaxFetcher.getCalls(chainId),
|
|
45381
|
+
getCallsErrors
|
|
45382
|
+
) : [];
|
|
43889
45383
|
const siloV2Results = isActive("silov2") ? safeGetCalls(
|
|
43890
45384
|
"siloV2",
|
|
43891
45385
|
() => siloV2Fetcher.getCalls(chainId),
|
|
@@ -43995,6 +45489,13 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
43995
45489
|
getRiverAbi(),
|
|
43996
45490
|
"direct"
|
|
43997
45491
|
);
|
|
45492
|
+
const inverseGroup = buildGroup(
|
|
45493
|
+
"inverse",
|
|
45494
|
+
inverseResults,
|
|
45495
|
+
inverseFetcher.parse,
|
|
45496
|
+
getInverseAbi(),
|
|
45497
|
+
"direct"
|
|
45498
|
+
);
|
|
43998
45499
|
const tellerGroup = buildGroup(
|
|
43999
45500
|
"teller",
|
|
44000
45501
|
tellerResults,
|
|
@@ -44002,6 +45503,15 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
44002
45503
|
getTellerAbi(),
|
|
44003
45504
|
"derived"
|
|
44004
45505
|
);
|
|
45506
|
+
const termMaxGroup = buildGroup(
|
|
45507
|
+
"termmax",
|
|
45508
|
+
termMaxResults,
|
|
45509
|
+
termMaxFetcher.parse,
|
|
45510
|
+
getTermMaxAbi(),
|
|
45511
|
+
// DIRECT: `OracleAggregatorV2.getPrice` returns a USD price outright —
|
|
45512
|
+
// nothing is derived from another asset's price.
|
|
45513
|
+
"direct"
|
|
45514
|
+
);
|
|
44005
45515
|
const siloV2Group = buildGroup(
|
|
44006
45516
|
"siloV2",
|
|
44007
45517
|
siloV2Results,
|
|
@@ -44050,7 +45560,9 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
44050
45560
|
termGroup,
|
|
44051
45561
|
liquityGroup,
|
|
44052
45562
|
riverGroup,
|
|
45563
|
+
inverseGroup,
|
|
44053
45564
|
tellerGroup,
|
|
45565
|
+
termMaxGroup,
|
|
44054
45566
|
siloV2Group,
|
|
44055
45567
|
siloV3Group,
|
|
44056
45568
|
fluidGroup,
|
|
@@ -44096,7 +45608,9 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
44096
45608
|
termData,
|
|
44097
45609
|
liquityData,
|
|
44098
45610
|
riverData,
|
|
45611
|
+
inverseData,
|
|
44099
45612
|
tellerData,
|
|
45613
|
+
termMaxData,
|
|
44100
45614
|
morphoGqlEntries,
|
|
44101
45615
|
siloV2GqlEntries,
|
|
44102
45616
|
siloV3GqlEntries
|
|
@@ -44213,6 +45727,14 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
44213
45727
|
allowFailure,
|
|
44214
45728
|
rpcOverrides
|
|
44215
45729
|
),
|
|
45730
|
+
executeGroup(
|
|
45731
|
+
inverseGroup,
|
|
45732
|
+
chainId,
|
|
45733
|
+
chainBatchSize,
|
|
45734
|
+
retries,
|
|
45735
|
+
allowFailure,
|
|
45736
|
+
rpcOverrides
|
|
45737
|
+
),
|
|
44216
45738
|
executeGroup(
|
|
44217
45739
|
tellerGroup,
|
|
44218
45740
|
chainId,
|
|
@@ -44221,6 +45743,14 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
44221
45743
|
allowFailure,
|
|
44222
45744
|
rpcOverrides
|
|
44223
45745
|
),
|
|
45746
|
+
executeGroup(
|
|
45747
|
+
termMaxGroup,
|
|
45748
|
+
chainId,
|
|
45749
|
+
chainBatchSize,
|
|
45750
|
+
retries,
|
|
45751
|
+
allowFailure,
|
|
45752
|
+
rpcOverrides
|
|
45753
|
+
),
|
|
44224
45754
|
morphoGqlPromise,
|
|
44225
45755
|
siloV2GqlPromise,
|
|
44226
45756
|
siloV3GqlPromise
|
|
@@ -44273,6 +45803,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
44273
45803
|
{ group: dolomiteGroup, data: dolomiteData },
|
|
44274
45804
|
{ group: midnightGroup, data: midnightData },
|
|
44275
45805
|
{ group: tellerGroup, data: tellerData },
|
|
45806
|
+
{ group: termMaxGroup, data: termMaxData },
|
|
44276
45807
|
...siloV2GqlEntries != null ? [] : [{ group: siloV2Group, data: siloV2Data }],
|
|
44277
45808
|
...siloV3GqlEntries != null ? [] : [{ group: siloV3Group, data: siloV3Data }],
|
|
44278
45809
|
// In hybrid mode the on-chain multicall ran too — surface its errors.
|
|
@@ -44332,6 +45863,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
44332
45863
|
parseTrackers(listaGroup, listaData.results);
|
|
44333
45864
|
parseTrackers(eulerGroup, eulerData.results);
|
|
44334
45865
|
parseTrackers(aaveV4Group, aaveV4Data.results);
|
|
45866
|
+
parseTrackers(termMaxGroup, termMaxData.results);
|
|
44335
45867
|
parseTrackers(
|
|
44336
45868
|
aaveGroup,
|
|
44337
45869
|
aaveData.results,
|
|
@@ -44345,6 +45877,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
44345
45877
|
parseTrackers(termGroup, termData.results);
|
|
44346
45878
|
parseTrackers(liquityGroup, liquityData.results);
|
|
44347
45879
|
parseTrackers(riverGroup, riverData.results);
|
|
45880
|
+
parseTrackers(inverseGroup, inverseData.results);
|
|
44348
45881
|
if (siloV2GqlEntries != null) {
|
|
44349
45882
|
const diag2 = {
|
|
44350
45883
|
lender: "SILO_V2 (GraphQL)",
|
|
@@ -44581,9 +46114,9 @@ function rejectOutliers(candidates, guard = DEFAULT_OUTLIER_GUARD) {
|
|
|
44581
46114
|
const reference = consensusReference(candidates, guard);
|
|
44582
46115
|
if (reference === void 0) return candidates;
|
|
44583
46116
|
const upper = reference * guard.rejectFactor;
|
|
44584
|
-
const
|
|
46117
|
+
const lower3 = reference / guard.rejectFactor;
|
|
44585
46118
|
const kept = candidates.filter(
|
|
44586
|
-
(c) => c.priceUSD <= upper && c.priceUSD >=
|
|
46119
|
+
(c) => c.priceUSD <= upper && c.priceUSD >= lower3
|
|
44587
46120
|
);
|
|
44588
46121
|
return kept.length > 0 ? kept : candidates;
|
|
44589
46122
|
}
|
|
@@ -44942,10 +46475,10 @@ function createAssetArrayPerChain() {
|
|
|
44942
46475
|
return assetsPerChain;
|
|
44943
46476
|
}
|
|
44944
46477
|
var RELEVANT_LENDING_ASSETS = () => createAssetArrayPerChain();
|
|
44945
|
-
function createSimpleArrayPerChain(fork,
|
|
46478
|
+
function createSimpleArrayPerChain(fork, field10 = void 0) {
|
|
44946
46479
|
let pools = {};
|
|
44947
46480
|
Object.entries(fork ?? {}).forEach(([b2, data]) => {
|
|
44948
|
-
Object.entries(
|
|
46481
|
+
Object.entries(field10 ? data[field10] : data).forEach(
|
|
44949
46482
|
([chainId, address]) => {
|
|
44950
46483
|
if (!pools[chainId]) pools[chainId] = [];
|
|
44951
46484
|
pools[chainId] = uniq2([...pools[chainId], { address, pool: b2 }]);
|
|
@@ -45301,7 +46834,7 @@ var composeVaultDisplayName = (brand, curatorName, asset, fallbackName) => {
|
|
|
45301
46834
|
|
|
45302
46835
|
// src/vaults/fluid/publicCallParse.ts
|
|
45303
46836
|
var FLUID_EEE_LOWER4 = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";
|
|
45304
|
-
var normalizeUnderlying5 = (
|
|
46837
|
+
var normalizeUnderlying5 = (addr2) => addr2 === FLUID_EEE_LOWER4 ? zeroAddress : addr2;
|
|
45305
46838
|
var FLUID_RATE_SCALE2 = 100;
|
|
45306
46839
|
var scaleFluidRate2 = (raw) => {
|
|
45307
46840
|
if (raw === void 0 || raw === null) return 0;
|
|
@@ -45542,10 +47075,10 @@ function deriveConvertToAssets(totalAssetsRaw, totalSupplyRaw, shareDecimals) {
|
|
|
45542
47075
|
|
|
45543
47076
|
// src/vaults/gearbox/publicCallParse.ts
|
|
45544
47077
|
var WETH_MAINNET = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2";
|
|
45545
|
-
var normalizeUnderlying6 = (
|
|
45546
|
-
const
|
|
45547
|
-
if (chainId === "1" &&
|
|
45548
|
-
return
|
|
47078
|
+
var normalizeUnderlying6 = (addr2, chainId) => {
|
|
47079
|
+
const lower3 = addr2.toLowerCase();
|
|
47080
|
+
if (chainId === "1" && lower3 === WETH_MAINNET) return zeroAddress;
|
|
47081
|
+
return lower3;
|
|
45549
47082
|
};
|
|
45550
47083
|
var RAY_TO_PERCENT2 = 1e25;
|
|
45551
47084
|
var scaleRate = (raw) => {
|
|
@@ -46004,9 +47537,9 @@ var VAULT_V2_ADAPTER_ABI = parseAbi([
|
|
|
46004
47537
|
]);
|
|
46005
47538
|
var PHASE1_ABI = [...MetaMorphoAbi, ...VAULT_V2_PHASE1_ABI];
|
|
46006
47539
|
var FEE_SCALE = 1e18;
|
|
46007
|
-
var isHex40 = (
|
|
47540
|
+
var isHex40 = (addr2) => typeof addr2 === "string" && /^0x[0-9a-f]{40}$/i.test(addr2);
|
|
46008
47541
|
var isHex64 = (v) => typeof v === "string" && /^0x[0-9a-f]{64}$/i.test(v);
|
|
46009
|
-
var lcOrUndefined = (
|
|
47542
|
+
var lcOrUndefined = (addr2) => isHex40(addr2) ? addr2.toLowerCase() : void 0;
|
|
46010
47543
|
var toNumberSafe = (raw, fallback = 0) => {
|
|
46011
47544
|
if (raw === void 0 || raw === null) return fallback;
|
|
46012
47545
|
const n = Number(raw);
|
|
@@ -46153,12 +47686,12 @@ var fetchMorphoVaultsFromChain = async (chainId, multicallRetry, prices = {}, to
|
|
|
46153
47686
|
for (let i = 0; i < entries.length; i++) {
|
|
46154
47687
|
const { entry } = entries[i];
|
|
46155
47688
|
const base = i * PHASE1_PER_VAULT;
|
|
46156
|
-
const
|
|
47689
|
+
const slice2 = phase1.slice(base, base + CALLS_PER_VAULT);
|
|
46157
47690
|
const v2 = isV2[i] ? v2ByVault.get(entry.vault.toLowerCase()) ?? null : null;
|
|
46158
47691
|
const v2FeePercent = isV2[i] ? toNumberSafe(phase1[base + PERFORMANCE_FEE_INDEX]) / FEE_SCALE * 100 : void 0;
|
|
46159
47692
|
const parsed = parseVault3(
|
|
46160
47693
|
entry,
|
|
46161
|
-
|
|
47694
|
+
slice2,
|
|
46162
47695
|
chainId,
|
|
46163
47696
|
prices,
|
|
46164
47697
|
tokenList,
|
|
@@ -46544,11 +48077,11 @@ var PHASE1_CALLS2 = [
|
|
|
46544
48077
|
var PHASE1_PER_VAULT2 = PHASE1_CALLS2.length;
|
|
46545
48078
|
var WITHDRAW_QUEUE_LENGTH_INDEX2 = 8;
|
|
46546
48079
|
var FEE_SCALE2 = 1e18;
|
|
46547
|
-
var isHex402 = (
|
|
46548
|
-
var lcOrUndefined2 = (
|
|
46549
|
-
if (!isHex402(
|
|
46550
|
-
const
|
|
46551
|
-
return
|
|
48080
|
+
var isHex402 = (addr2) => typeof addr2 === "string" && /^0x[0-9a-f]{40}$/i.test(addr2);
|
|
48081
|
+
var lcOrUndefined2 = (addr2) => {
|
|
48082
|
+
if (!isHex402(addr2)) return void 0;
|
|
48083
|
+
const lower3 = addr2.toLowerCase();
|
|
48084
|
+
return lower3 === zeroAddress ? void 0 : lower3;
|
|
46552
48085
|
};
|
|
46553
48086
|
var isHex642 = (val) => typeof val === "string" && /^0x[0-9a-f]{64}$/i.test(val);
|
|
46554
48087
|
var toNumberSafe2 = (raw, fallback = 0) => {
|
|
@@ -46659,10 +48192,10 @@ var fetchListaVaultsFromChain = async (chainId, multicallRetry, prices = {}, tok
|
|
|
46659
48192
|
const out = {};
|
|
46660
48193
|
for (let i = 0; i < entries.length; i++) {
|
|
46661
48194
|
const entry = entries[i];
|
|
46662
|
-
const
|
|
48195
|
+
const slice2 = phase1.slice(i * PHASE1_PER_VAULT2, (i + 1) * PHASE1_PER_VAULT2);
|
|
46663
48196
|
const parsed = parseVault4(
|
|
46664
48197
|
entry,
|
|
46665
|
-
|
|
48198
|
+
slice2,
|
|
46666
48199
|
curatorAddrByVault[i],
|
|
46667
48200
|
chainId,
|
|
46668
48201
|
prices,
|
|
@@ -47154,9 +48687,9 @@ query EvkByAssets($assets: [Bytes!]!) {
|
|
|
47154
48687
|
`;
|
|
47155
48688
|
var ZERO = 0n;
|
|
47156
48689
|
var RAY_TO_PERCENT3 = 1e25;
|
|
47157
|
-
function readAddress2(
|
|
47158
|
-
if (!
|
|
47159
|
-
return
|
|
48690
|
+
function readAddress2(field10) {
|
|
48691
|
+
if (!field10) return void 0;
|
|
48692
|
+
return field10.toLowerCase();
|
|
47160
48693
|
}
|
|
47161
48694
|
function parseVaultFee(v) {
|
|
47162
48695
|
if (v.performanceFee == null) return 0;
|
|
@@ -47515,6 +49048,300 @@ var fetchEulerEarnVaults = async (chainId, prices = {}, tokenList = {}, multical
|
|
|
47515
49048
|
).catch(() => void 0);
|
|
47516
49049
|
return isNonEmpty(fromSubgraph) ? fromSubgraph : fromApi ?? {};
|
|
47517
49050
|
};
|
|
49051
|
+
var warn6 = (...args) => {
|
|
49052
|
+
};
|
|
49053
|
+
var num2 = (v) => {
|
|
49054
|
+
const n = Number(v);
|
|
49055
|
+
return Number.isFinite(n) ? n : 0;
|
|
49056
|
+
};
|
|
49057
|
+
var big5 = (v) => {
|
|
49058
|
+
try {
|
|
49059
|
+
if (v === void 0 || v === null || v === "") return "0";
|
|
49060
|
+
const s = String(v);
|
|
49061
|
+
return BigInt(s.includes(".") ? s.slice(0, s.indexOf(".")) : s).toString();
|
|
49062
|
+
} catch {
|
|
49063
|
+
return "0";
|
|
49064
|
+
}
|
|
49065
|
+
};
|
|
49066
|
+
var lower2 = (v) => String(v ?? "").toLowerCase();
|
|
49067
|
+
async function fetchTermMaxVaultsFromApi(chainId, prices = {}, tokenList = {}, fetchImpl = fetch) {
|
|
49068
|
+
const url = `${termMaxApiBase(chainId)}/vault/list?chainId=${chainId}`;
|
|
49069
|
+
let rows;
|
|
49070
|
+
try {
|
|
49071
|
+
const res = await fetchImpl.call(globalThis, url);
|
|
49072
|
+
if (!res.ok) {
|
|
49073
|
+
warn6(`vault/list ${chainId} \u2192 HTTP ${res.status}`);
|
|
49074
|
+
return null;
|
|
49075
|
+
}
|
|
49076
|
+
const json = await res.json();
|
|
49077
|
+
rows = Array.isArray(json?.data) ? json.data : [];
|
|
49078
|
+
} catch (e) {
|
|
49079
|
+
warn6(`vault/list ${chainId} failed:`, e?.message ?? e);
|
|
49080
|
+
return null;
|
|
49081
|
+
}
|
|
49082
|
+
const out = {};
|
|
49083
|
+
for (const r of rows) {
|
|
49084
|
+
const address = lower2(r?.vaultAddress);
|
|
49085
|
+
const underlying = lower2(r?.asset?.contractAddress);
|
|
49086
|
+
if (!address || !underlying) continue;
|
|
49087
|
+
if (r.isEnabled === false) continue;
|
|
49088
|
+
const assetDecimals = num2(r?.asset?.decimals) || 18;
|
|
49089
|
+
const scale = 10 ** assetDecimals;
|
|
49090
|
+
const assetEntry = tokenList[underlying];
|
|
49091
|
+
const priceKey = toOracleKey(assetEntry?.assetGroup) || toGenericPriceKey(underlying, chainId);
|
|
49092
|
+
const priceUsd = prices[priceKey];
|
|
49093
|
+
const totalAssets = big5(r.totalAssets);
|
|
49094
|
+
const totalSupply = big5(r.totalSupplyAmt);
|
|
49095
|
+
const totalAssetsFormatted = Number(totalAssets) / scale;
|
|
49096
|
+
const supplyRate = num2(r.apr) * 100;
|
|
49097
|
+
const rewardsRate = num2(r?.incentiveData?.TMX_APR) * 100;
|
|
49098
|
+
const rawLiquidity = BigInt(big5(r.redeemableAmt ?? r.idleFunds ?? "0"));
|
|
49099
|
+
const totalAssetsBig = BigInt(totalAssets);
|
|
49100
|
+
const liquidity = (rawLiquidity > totalAssetsBig ? totalAssetsBig : rawLiquidity).toString();
|
|
49101
|
+
const liquidityFormatted = Number(liquidity) / scale;
|
|
49102
|
+
const totalSupplyValue = num2(r.totalSupplyValue);
|
|
49103
|
+
out[address] = {
|
|
49104
|
+
address,
|
|
49105
|
+
underlying,
|
|
49106
|
+
symbol: String(r.symbol ?? ""),
|
|
49107
|
+
name: String(r.name ?? ""),
|
|
49108
|
+
// Share decimals are not reported; TermMax vault shares track the
|
|
49109
|
+
// asset's decimals (verified on-chain: 6-dec USDC vault, 18-dec WETH).
|
|
49110
|
+
decimals: assetDecimals,
|
|
49111
|
+
assetDecimals,
|
|
49112
|
+
totalAssets,
|
|
49113
|
+
totalSupply,
|
|
49114
|
+
convertToAssets: BigInt(totalSupply) > 0n ? (BigInt(totalAssets) * 10n ** BigInt(assetDecimals) / BigInt(totalSupply)).toString() : "0",
|
|
49115
|
+
supplyRate,
|
|
49116
|
+
rewardsRate,
|
|
49117
|
+
depositRate: supplyRate + rewardsRate,
|
|
49118
|
+
// 1e8-scaled upstream (10000000 = 10%).
|
|
49119
|
+
fee: num2(r.performanceFeeRate) / 1e6,
|
|
49120
|
+
timelock: num2(r.timeLockSeconds) || void 0,
|
|
49121
|
+
curator: r?.curator?.curatorAddress ? lower2(r.curator.curatorAddress) : void 0,
|
|
49122
|
+
// The API is the ONLY source for this — do not derive it from `name`.
|
|
49123
|
+
curatorName: r?.curator?.name || void 0,
|
|
49124
|
+
guardian: r?.guardianAddress ? lower2(r.guardianAddress) : void 0,
|
|
49125
|
+
asset: assetEntry,
|
|
49126
|
+
priceUsd,
|
|
49127
|
+
totalAssetsFormatted,
|
|
49128
|
+
totalAssetsUsd: totalSupplyValue > 0 ? totalSupplyValue : priceUsd ? totalAssetsFormatted * priceUsd : 0,
|
|
49129
|
+
liquidity,
|
|
49130
|
+
liquidityFormatted,
|
|
49131
|
+
liquidityUsd: priceUsd ? liquidityFormatted * priceUsd : 0,
|
|
49132
|
+
version: r.version,
|
|
49133
|
+
isPaused: r.isPaused === true || void 0,
|
|
49134
|
+
supplyCap: r.capacity ? big5(r.capacity) : void 0,
|
|
49135
|
+
basePool: r.poolAddress ? lower2(r.poolAddress) : void 0
|
|
49136
|
+
};
|
|
49137
|
+
}
|
|
49138
|
+
return out;
|
|
49139
|
+
}
|
|
49140
|
+
|
|
49141
|
+
// src/vaults/termmax/abi.ts
|
|
49142
|
+
var TermMaxVaultAbi = [
|
|
49143
|
+
{ type: "function", name: "name", stateMutability: "view", inputs: [], outputs: [{ type: "string" }] },
|
|
49144
|
+
{ type: "function", name: "symbol", stateMutability: "view", inputs: [], outputs: [{ type: "string" }] },
|
|
49145
|
+
{ type: "function", name: "decimals", stateMutability: "view", inputs: [], outputs: [{ type: "uint8" }] },
|
|
49146
|
+
{ type: "function", name: "asset", stateMutability: "view", inputs: [], outputs: [{ type: "address" }] },
|
|
49147
|
+
{ type: "function", name: "totalAssets", stateMutability: "view", inputs: [], outputs: [{ type: "uint256" }] },
|
|
49148
|
+
{ type: "function", name: "totalSupply", stateMutability: "view", inputs: [], outputs: [{ type: "uint256" }] },
|
|
49149
|
+
{
|
|
49150
|
+
type: "function",
|
|
49151
|
+
name: "convertToAssets",
|
|
49152
|
+
stateMutability: "view",
|
|
49153
|
+
inputs: [{ name: "shares", type: "uint256" }],
|
|
49154
|
+
outputs: [{ type: "uint256" }]
|
|
49155
|
+
},
|
|
49156
|
+
{
|
|
49157
|
+
type: "function",
|
|
49158
|
+
name: "balanceOf",
|
|
49159
|
+
stateMutability: "view",
|
|
49160
|
+
inputs: [{ name: "account", type: "address" }],
|
|
49161
|
+
outputs: [{ type: "uint256" }]
|
|
49162
|
+
},
|
|
49163
|
+
// GROSS annual interest in underlying units. The performance fee is deducted
|
|
49164
|
+
// from it on accrual, so it must be netted before publishing a rate.
|
|
49165
|
+
{ type: "function", name: "annualizedInterest", stateMutability: "view", inputs: [], outputs: [{ type: "uint256" }] },
|
|
49166
|
+
// Depositors' accruing claim — the correct APR denominator. REVERTS on 2.0.0.
|
|
49167
|
+
{ type: "function", name: "accretingPrincipal", stateMutability: "view", inputs: [], outputs: [{ type: "uint256" }] },
|
|
49168
|
+
// 1e8-scaled (0.1e8 = 10%).
|
|
49169
|
+
{ type: "function", name: "performanceFeeRate", stateMutability: "view", inputs: [], outputs: [{ type: "uint64" }] },
|
|
49170
|
+
// Pre-computed net APY. REVERTS on 2.0.0 — we derive instead.
|
|
49171
|
+
{ type: "function", name: "apr", stateMutability: "view", inputs: [], outputs: [{ type: "uint256" }] },
|
|
49172
|
+
{ type: "function", name: "curator", stateMutability: "view", inputs: [], outputs: [{ type: "address" }] },
|
|
49173
|
+
{ type: "function", name: "guardian", stateMutability: "view", inputs: [], outputs: [{ type: "address" }] },
|
|
49174
|
+
{ type: "function", name: "timelock", stateMutability: "view", inputs: [], outputs: [{ type: "uint256" }] },
|
|
49175
|
+
{ type: "function", name: "getVersion", stateMutability: "pure", inputs: [], outputs: [{ type: "string" }] }
|
|
49176
|
+
];
|
|
49177
|
+
var Erc20DecimalsBalanceAbi = [
|
|
49178
|
+
{ type: "function", name: "decimals", stateMutability: "view", inputs: [], outputs: [{ type: "uint8" }] },
|
|
49179
|
+
{
|
|
49180
|
+
type: "function",
|
|
49181
|
+
name: "balanceOf",
|
|
49182
|
+
stateMutability: "view",
|
|
49183
|
+
inputs: [{ name: "account", type: "address" }],
|
|
49184
|
+
outputs: [{ type: "uint256" }]
|
|
49185
|
+
}
|
|
49186
|
+
];
|
|
49187
|
+
|
|
49188
|
+
// src/vaults/termmax/fetchFromChain.ts
|
|
49189
|
+
var DECIMAL_BASE2 = 100000000n;
|
|
49190
|
+
var big6 = (v) => {
|
|
49191
|
+
if (v === void 0 || v === null || v === "0x") return 0n;
|
|
49192
|
+
try {
|
|
49193
|
+
return typeof v === "bigint" ? v : BigInt(v);
|
|
49194
|
+
} catch {
|
|
49195
|
+
return 0n;
|
|
49196
|
+
}
|
|
49197
|
+
};
|
|
49198
|
+
var num3 = (v) => {
|
|
49199
|
+
const n = Number(v);
|
|
49200
|
+
return Number.isFinite(n) ? n : void 0;
|
|
49201
|
+
};
|
|
49202
|
+
var str = (v) => typeof v === "string" && v.length > 0 ? v : void 0;
|
|
49203
|
+
var addr = (v) => typeof v === "string" && /^0x[0-9a-fA-F]{40}$/.test(v) && !/^0x0{40}$/.test(v) ? v.toLowerCase() : void 0;
|
|
49204
|
+
async function discoverVaultAddresses(chainId) {
|
|
49205
|
+
const markets = await fetchTermMaxMarkets(chainId).catch(() => []);
|
|
49206
|
+
const seen = /* @__PURE__ */ new Set();
|
|
49207
|
+
for (const m of markets) {
|
|
49208
|
+
for (const o of m.orders) {
|
|
49209
|
+
if (!o.makerIsVault) continue;
|
|
49210
|
+
const maker = addr(o.makerAddress);
|
|
49211
|
+
if (maker) seen.add(maker);
|
|
49212
|
+
}
|
|
49213
|
+
}
|
|
49214
|
+
return [...seen];
|
|
49215
|
+
}
|
|
49216
|
+
var VAULT_READS = [
|
|
49217
|
+
"name",
|
|
49218
|
+
"symbol",
|
|
49219
|
+
"decimals",
|
|
49220
|
+
"asset",
|
|
49221
|
+
"totalAssets",
|
|
49222
|
+
"totalSupply",
|
|
49223
|
+
"annualizedInterest",
|
|
49224
|
+
"accretingPrincipal",
|
|
49225
|
+
"performanceFeeRate",
|
|
49226
|
+
"apr",
|
|
49227
|
+
"curator",
|
|
49228
|
+
"guardian",
|
|
49229
|
+
"timelock",
|
|
49230
|
+
"getVersion"
|
|
49231
|
+
];
|
|
49232
|
+
var READS_PER_VAULT = VAULT_READS.length;
|
|
49233
|
+
var fetchTermMaxVaultsFromChain = async (chainId, multicallRetry, prices = {}, tokenList = {}) => {
|
|
49234
|
+
if (!termMaxConfigByChain(chainId)) return {};
|
|
49235
|
+
const vaults = await discoverVaultAddresses(chainId);
|
|
49236
|
+
if (vaults.length === 0) return {};
|
|
49237
|
+
const calls = vaults.flatMap(
|
|
49238
|
+
(address) => VAULT_READS.map((name) => ({
|
|
49239
|
+
address,
|
|
49240
|
+
name,
|
|
49241
|
+
params: []
|
|
49242
|
+
}))
|
|
49243
|
+
);
|
|
49244
|
+
const res = await multicallRetry({
|
|
49245
|
+
chain: chainId,
|
|
49246
|
+
calls,
|
|
49247
|
+
abi: TermMaxVaultAbi,
|
|
49248
|
+
allowFailure: true
|
|
49249
|
+
});
|
|
49250
|
+
const rows = [];
|
|
49251
|
+
vaults.forEach((address, i) => {
|
|
49252
|
+
const at = (k) => res[i * READS_PER_VAULT + VAULT_READS.indexOf(k)];
|
|
49253
|
+
const asset = addr(at("asset"));
|
|
49254
|
+
const totalAssets = big6(at("totalAssets"));
|
|
49255
|
+
if (!asset || totalAssets === 0n) return;
|
|
49256
|
+
rows.push({
|
|
49257
|
+
address,
|
|
49258
|
+
name: str(at("name")),
|
|
49259
|
+
symbol: str(at("symbol")),
|
|
49260
|
+
decimals: num3(at("decimals")) ?? 18,
|
|
49261
|
+
asset,
|
|
49262
|
+
totalAssets,
|
|
49263
|
+
totalSupply: big6(at("totalSupply")),
|
|
49264
|
+
annualizedInterest: big6(at("annualizedInterest")),
|
|
49265
|
+
accretingPrincipal: big6(at("accretingPrincipal")),
|
|
49266
|
+
performanceFeeRate: big6(at("performanceFeeRate")),
|
|
49267
|
+
aprRaw: at("apr") != null ? big6(at("apr")) : void 0,
|
|
49268
|
+
curator: addr(at("curator")),
|
|
49269
|
+
guardian: addr(at("guardian")),
|
|
49270
|
+
timelock: num3(at("timelock")),
|
|
49271
|
+
version: str(at("getVersion"))
|
|
49272
|
+
});
|
|
49273
|
+
});
|
|
49274
|
+
if (rows.length === 0) return {};
|
|
49275
|
+
const round2 = rows.flatMap((r) => [
|
|
49276
|
+
{ address: r.asset, name: "decimals", params: [] },
|
|
49277
|
+
{ address: r.asset, name: "balanceOf", params: [r.address] }
|
|
49278
|
+
]);
|
|
49279
|
+
const res2 = await multicallRetry({
|
|
49280
|
+
chain: chainId,
|
|
49281
|
+
calls: round2,
|
|
49282
|
+
abi: Erc20DecimalsBalanceAbi,
|
|
49283
|
+
allowFailure: true
|
|
49284
|
+
});
|
|
49285
|
+
const out = {};
|
|
49286
|
+
rows.forEach((r, i) => {
|
|
49287
|
+
const assetDecimals = num3(res2[i * 2]) ?? r.decimals;
|
|
49288
|
+
const idle = big6(res2[i * 2 + 1]);
|
|
49289
|
+
const assetEntry = tokenList[r.asset];
|
|
49290
|
+
const priceKey = toOracleKey(assetEntry?.assetGroup) || toGenericPriceKey(r.asset, chainId);
|
|
49291
|
+
const priceUsd = prices[priceKey];
|
|
49292
|
+
const denominator = r.accretingPrincipal > 0n ? r.accretingPrincipal : r.totalAssets;
|
|
49293
|
+
const feeRate = r.performanceFeeRate;
|
|
49294
|
+
let supplyRate = 0;
|
|
49295
|
+
if (denominator > 0n && r.annualizedInterest > 0n) {
|
|
49296
|
+
const netAnnual = r.annualizedInterest * (DECIMAL_BASE2 - feeRate) / DECIMAL_BASE2;
|
|
49297
|
+
supplyRate = Number(netAnnual) / Number(denominator) * 100;
|
|
49298
|
+
}
|
|
49299
|
+
if (r.aprRaw !== void 0 && r.aprRaw > 0n) {
|
|
49300
|
+
supplyRate = Number(r.aprRaw) / Number(DECIMAL_BASE2) * 100;
|
|
49301
|
+
}
|
|
49302
|
+
const scale = 10 ** assetDecimals;
|
|
49303
|
+
const totalAssetsFormatted = Number(r.totalAssets) / scale;
|
|
49304
|
+
const liquidityFormatted = Number(idle) / scale;
|
|
49305
|
+
const convertToAssets = r.totalSupply > 0n ? (r.totalAssets * 10n ** BigInt(r.decimals) / r.totalSupply).toString() : "0";
|
|
49306
|
+
const entry = {
|
|
49307
|
+
address: r.address,
|
|
49308
|
+
underlying: r.asset,
|
|
49309
|
+
symbol: r.symbol ?? "",
|
|
49310
|
+
name: r.name ?? "",
|
|
49311
|
+
decimals: r.decimals,
|
|
49312
|
+
assetDecimals,
|
|
49313
|
+
totalAssets: r.totalAssets.toString(),
|
|
49314
|
+
totalSupply: r.totalSupply.toString(),
|
|
49315
|
+
convertToAssets,
|
|
49316
|
+
supplyRate,
|
|
49317
|
+
rewardsRate: 0,
|
|
49318
|
+
depositRate: supplyRate,
|
|
49319
|
+
fee: Number(feeRate) / Number(DECIMAL_BASE2) * 100,
|
|
49320
|
+
timelock: r.timelock,
|
|
49321
|
+
curator: r.curator,
|
|
49322
|
+
curatorName: curatorNameFromVaultName(r.name),
|
|
49323
|
+
guardian: r.guardian,
|
|
49324
|
+
asset: assetEntry,
|
|
49325
|
+
priceUsd,
|
|
49326
|
+
totalAssetsFormatted,
|
|
49327
|
+
totalAssetsUsd: priceUsd ? totalAssetsFormatted * priceUsd : 0,
|
|
49328
|
+
liquidity: idle.toString(),
|
|
49329
|
+
liquidityFormatted,
|
|
49330
|
+
liquidityUsd: priceUsd ? liquidityFormatted * priceUsd : 0,
|
|
49331
|
+
version: r.version
|
|
49332
|
+
};
|
|
49333
|
+
out[r.address] = entry;
|
|
49334
|
+
});
|
|
49335
|
+
return out;
|
|
49336
|
+
};
|
|
49337
|
+
|
|
49338
|
+
// src/vaults/termmax/fetchPublic.ts
|
|
49339
|
+
var fetchTermMaxVaults = async (chainId, multicallRetry, prices = {}, tokenList = {}) => {
|
|
49340
|
+
if (!termMaxConfigByChain(chainId)) return {};
|
|
49341
|
+
const fromApi = await fetchTermMaxVaultsFromApi(chainId, prices, tokenList);
|
|
49342
|
+
if (fromApi !== null) return fromApi;
|
|
49343
|
+
return fetchTermMaxVaultsFromChain(chainId, multicallRetry, prices, tokenList);
|
|
49344
|
+
};
|
|
47518
49345
|
|
|
47519
49346
|
// src/vaults/lst/abis/beets.ts
|
|
47520
49347
|
var BeetsStSAbi = [
|
|
@@ -47590,7 +49417,7 @@ var Multicall3BalanceAbi = [
|
|
|
47590
49417
|
outputs: [{ type: "uint256" }]
|
|
47591
49418
|
}
|
|
47592
49419
|
];
|
|
47593
|
-
var
|
|
49420
|
+
var toBigInt13 = (v) => {
|
|
47594
49421
|
if (v === void 0 || v === null) return void 0;
|
|
47595
49422
|
if (typeof v === "bigint") return v;
|
|
47596
49423
|
if (typeof v === "number") return BigInt(v);
|
|
@@ -47614,12 +49441,12 @@ var readerBeetsStS = (entry) => ({
|
|
|
47614
49441
|
],
|
|
47615
49442
|
abis: [TotalSupplyAbi, BeetsStSAbi, BeetsStSAbi],
|
|
47616
49443
|
parse: ([supply, rate, pool]) => {
|
|
47617
|
-
const totalSupply =
|
|
47618
|
-
const exchangeRate =
|
|
49444
|
+
const totalSupply = toBigInt13(supply);
|
|
49445
|
+
const exchangeRate = toBigInt13(rate);
|
|
47619
49446
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
47620
49447
|
return void 0;
|
|
47621
49448
|
}
|
|
47622
|
-
const liquidity =
|
|
49449
|
+
const liquidity = toBigInt13(pool);
|
|
47623
49450
|
return {
|
|
47624
49451
|
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
47625
49452
|
totalSupply,
|
|
@@ -47660,12 +49487,12 @@ var readerBenqiSavax = (entry) => ({
|
|
|
47660
49487
|
],
|
|
47661
49488
|
abis: [TotalSupplyAbi, BenqiSavaxAbi, BenqiSavaxAbi],
|
|
47662
49489
|
parse: ([supply, rate, totalPooled]) => {
|
|
47663
|
-
const totalSupply =
|
|
47664
|
-
const exchangeRate =
|
|
49490
|
+
const totalSupply = toBigInt13(supply);
|
|
49491
|
+
const exchangeRate = toBigInt13(rate);
|
|
47665
49492
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
47666
49493
|
return void 0;
|
|
47667
49494
|
}
|
|
47668
|
-
const totalAssets =
|
|
49495
|
+
const totalAssets = toBigInt13(totalPooled) ?? totalSupply * exchangeRate / ONE_E187;
|
|
47669
49496
|
return {
|
|
47670
49497
|
totalAssets,
|
|
47671
49498
|
totalSupply,
|
|
@@ -47679,7 +49506,7 @@ var readerBgtWrapper1to1 = (entry) => ({
|
|
|
47679
49506
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
47680
49507
|
abis: [TotalSupplyAbi],
|
|
47681
49508
|
parse: ([supply]) => {
|
|
47682
|
-
const totalSupply =
|
|
49509
|
+
const totalSupply = toBigInt13(supply);
|
|
47683
49510
|
if (totalSupply === void 0) return void 0;
|
|
47684
49511
|
return {
|
|
47685
49512
|
totalAssets: totalSupply,
|
|
@@ -47708,8 +49535,8 @@ var readerDineroBeraEth = (entry) => ({
|
|
|
47708
49535
|
],
|
|
47709
49536
|
abis: [TotalSupplyAbi, DineroBeraEthAbi],
|
|
47710
49537
|
parse: ([supply, rate]) => {
|
|
47711
|
-
const totalSupply =
|
|
47712
|
-
const exchangeRate =
|
|
49538
|
+
const totalSupply = toBigInt13(supply);
|
|
49539
|
+
const exchangeRate = toBigInt13(rate);
|
|
47713
49540
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
47714
49541
|
return void 0;
|
|
47715
49542
|
}
|
|
@@ -47730,9 +49557,9 @@ var readerErc4626 = (entry) => ({
|
|
|
47730
49557
|
],
|
|
47731
49558
|
abis: [Erc4626ReadAbi, TotalSupplyAbi, Erc4626ReadAbi],
|
|
47732
49559
|
parse: ([assets, supply, rate]) => {
|
|
47733
|
-
const totalAssets =
|
|
47734
|
-
const totalSupply =
|
|
47735
|
-
const exchangeRate =
|
|
49560
|
+
const totalAssets = toBigInt13(assets);
|
|
49561
|
+
const totalSupply = toBigInt13(supply);
|
|
49562
|
+
const exchangeRate = toBigInt13(rate);
|
|
47736
49563
|
if (totalAssets === void 0 || totalSupply === void 0 || exchangeRate === void 0) {
|
|
47737
49564
|
return void 0;
|
|
47738
49565
|
}
|
|
@@ -47747,9 +49574,9 @@ var readerErc4626PreviewRedeem = (entry) => ({
|
|
|
47747
49574
|
],
|
|
47748
49575
|
abis: [Erc4626PreviewRedeemAbi, TotalSupplyAbi, Erc4626PreviewRedeemAbi],
|
|
47749
49576
|
parse: ([assets, supply, rate]) => {
|
|
47750
|
-
const totalAssets =
|
|
47751
|
-
const totalSupply =
|
|
47752
|
-
const exchangeRate =
|
|
49577
|
+
const totalAssets = toBigInt13(assets);
|
|
49578
|
+
const totalSupply = toBigInt13(supply);
|
|
49579
|
+
const exchangeRate = toBigInt13(rate);
|
|
47753
49580
|
if (totalAssets === void 0 || totalSupply === void 0 || exchangeRate === void 0) {
|
|
47754
49581
|
return void 0;
|
|
47755
49582
|
}
|
|
@@ -47808,16 +49635,16 @@ var readerEtherFiWeEth = (entry) => {
|
|
|
47808
49635
|
return {
|
|
47809
49636
|
calls,
|
|
47810
49637
|
abis,
|
|
47811
|
-
parse: (
|
|
47812
|
-
const totalSupply =
|
|
47813
|
-
const exchangeRate =
|
|
49638
|
+
parse: (slice2) => {
|
|
49639
|
+
const totalSupply = toBigInt13(slice2[0]);
|
|
49640
|
+
const exchangeRate = toBigInt13(slice2[1]);
|
|
47814
49641
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
47815
49642
|
return void 0;
|
|
47816
49643
|
}
|
|
47817
49644
|
let liquidity;
|
|
47818
49645
|
if (lp) {
|
|
47819
|
-
const lpBalance =
|
|
47820
|
-
const locked =
|
|
49646
|
+
const lpBalance = toBigInt13(slice2[2]);
|
|
49647
|
+
const locked = toBigInt13(slice2[3]);
|
|
47821
49648
|
if (lpBalance !== void 0 && locked !== void 0) {
|
|
47822
49649
|
liquidity = lpBalance > locked ? lpBalance - locked : 0n;
|
|
47823
49650
|
}
|
|
@@ -47851,7 +49678,7 @@ var readerHyperbeatBeHype = (entry) => {
|
|
|
47851
49678
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
47852
49679
|
abis: [TotalSupplyAbi],
|
|
47853
49680
|
parse: ([supply]) => {
|
|
47854
|
-
const totalSupply =
|
|
49681
|
+
const totalSupply = toBigInt13(supply);
|
|
47855
49682
|
if (totalSupply === void 0) return void 0;
|
|
47856
49683
|
return {
|
|
47857
49684
|
totalAssets: totalSupply,
|
|
@@ -47868,8 +49695,8 @@ var readerHyperbeatBeHype = (entry) => {
|
|
|
47868
49695
|
],
|
|
47869
49696
|
abis: [TotalSupplyAbi, HyperbeatStakingCoreAbi],
|
|
47870
49697
|
parse: ([supply, rate]) => {
|
|
47871
|
-
const totalSupply =
|
|
47872
|
-
const exchangeRate =
|
|
49698
|
+
const totalSupply = toBigInt13(supply);
|
|
49699
|
+
const exchangeRate = toBigInt13(rate);
|
|
47873
49700
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
47874
49701
|
return void 0;
|
|
47875
49702
|
}
|
|
@@ -47901,7 +49728,7 @@ var readerKelpRsEth = (entry) => {
|
|
|
47901
49728
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
47902
49729
|
abis: [TotalSupplyAbi],
|
|
47903
49730
|
parse: ([supply]) => {
|
|
47904
|
-
const totalSupply =
|
|
49731
|
+
const totalSupply = toBigInt13(supply);
|
|
47905
49732
|
if (totalSupply === void 0) return void 0;
|
|
47906
49733
|
return {
|
|
47907
49734
|
totalAssets: totalSupply,
|
|
@@ -47918,8 +49745,8 @@ var readerKelpRsEth = (entry) => {
|
|
|
47918
49745
|
],
|
|
47919
49746
|
abis: [TotalSupplyAbi, KelpLrtOracleAbi],
|
|
47920
49747
|
parse: ([supply, rate]) => {
|
|
47921
|
-
const totalSupply =
|
|
47922
|
-
const exchangeRate =
|
|
49748
|
+
const totalSupply = toBigInt13(supply);
|
|
49749
|
+
const exchangeRate = toBigInt13(rate);
|
|
47923
49750
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
47924
49751
|
return void 0;
|
|
47925
49752
|
}
|
|
@@ -47951,7 +49778,7 @@ var readerKinetiqKHype = (entry) => {
|
|
|
47951
49778
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
47952
49779
|
abis: [TotalSupplyAbi],
|
|
47953
49780
|
parse: ([supply]) => {
|
|
47954
|
-
const totalSupply =
|
|
49781
|
+
const totalSupply = toBigInt13(supply);
|
|
47955
49782
|
if (totalSupply === void 0) return void 0;
|
|
47956
49783
|
return {
|
|
47957
49784
|
totalAssets: totalSupply,
|
|
@@ -47968,8 +49795,8 @@ var readerKinetiqKHype = (entry) => {
|
|
|
47968
49795
|
],
|
|
47969
49796
|
abis: [TotalSupplyAbi, KinetiqStakingAccountantAbi],
|
|
47970
49797
|
parse: ([supply, rate]) => {
|
|
47971
|
-
const totalSupply =
|
|
47972
|
-
const exchangeRate =
|
|
49798
|
+
const totalSupply = toBigInt13(supply);
|
|
49799
|
+
const exchangeRate = toBigInt13(rate);
|
|
47973
49800
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
47974
49801
|
return void 0;
|
|
47975
49802
|
}
|
|
@@ -48009,12 +49836,12 @@ var readerLairStKaia = (entry) => ({
|
|
|
48009
49836
|
],
|
|
48010
49837
|
abis: [TotalSupplyAbi, LairStKaiaAbi, LairStKaiaAbi],
|
|
48011
49838
|
parse: ([supply, rate, totalStaking]) => {
|
|
48012
|
-
const totalSupply =
|
|
48013
|
-
const exchangeRate =
|
|
49839
|
+
const totalSupply = toBigInt13(supply);
|
|
49840
|
+
const exchangeRate = toBigInt13(rate);
|
|
48014
49841
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
48015
49842
|
return void 0;
|
|
48016
49843
|
}
|
|
48017
|
-
const totalAssets =
|
|
49844
|
+
const totalAssets = toBigInt13(totalStaking) ?? totalSupply * exchangeRate / ONE_E187;
|
|
48018
49845
|
return {
|
|
48019
49846
|
totalAssets,
|
|
48020
49847
|
totalSupply,
|
|
@@ -48042,8 +49869,8 @@ var readerLidoWstEth = (entry) => ({
|
|
|
48042
49869
|
],
|
|
48043
49870
|
abis: [TotalSupplyAbi, LidoWstEthAbi],
|
|
48044
49871
|
parse: ([supply, rate]) => {
|
|
48045
|
-
const totalSupply =
|
|
48046
|
-
const exchangeRate =
|
|
49872
|
+
const totalSupply = toBigInt13(supply);
|
|
49873
|
+
const exchangeRate = toBigInt13(rate);
|
|
48047
49874
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
48048
49875
|
return void 0;
|
|
48049
49876
|
}
|
|
@@ -48081,7 +49908,7 @@ var readerListaSlisBnb = (entry) => {
|
|
|
48081
49908
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
48082
49909
|
abis: [TotalSupplyAbi],
|
|
48083
49910
|
parse: ([supply]) => {
|
|
48084
|
-
const totalSupply =
|
|
49911
|
+
const totalSupply = toBigInt13(supply);
|
|
48085
49912
|
if (totalSupply === void 0) return void 0;
|
|
48086
49913
|
return {
|
|
48087
49914
|
totalAssets: totalSupply,
|
|
@@ -48099,12 +49926,12 @@ var readerListaSlisBnb = (entry) => {
|
|
|
48099
49926
|
],
|
|
48100
49927
|
abis: [TotalSupplyAbi, ListaStakeManagerReadAbi, ListaStakeManagerReadAbi],
|
|
48101
49928
|
parse: ([supply, rate, pooled]) => {
|
|
48102
|
-
const totalSupply =
|
|
48103
|
-
const exchangeRate =
|
|
49929
|
+
const totalSupply = toBigInt13(supply);
|
|
49930
|
+
const exchangeRate = toBigInt13(rate);
|
|
48104
49931
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
48105
49932
|
return void 0;
|
|
48106
49933
|
}
|
|
48107
|
-
const pooledBnb =
|
|
49934
|
+
const pooledBnb = toBigInt13(pooled);
|
|
48108
49935
|
const totalAssets = pooledBnb ?? totalSupply * exchangeRate / ONE_E187;
|
|
48109
49936
|
return { totalAssets, totalSupply, exchangeRate };
|
|
48110
49937
|
}
|
|
@@ -48130,7 +49957,7 @@ var readerMantleMEth = (entry) => {
|
|
|
48130
49957
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
48131
49958
|
abis: [TotalSupplyAbi],
|
|
48132
49959
|
parse: ([supply]) => {
|
|
48133
|
-
const totalSupply =
|
|
49960
|
+
const totalSupply = toBigInt13(supply);
|
|
48134
49961
|
if (totalSupply === void 0) return void 0;
|
|
48135
49962
|
return {
|
|
48136
49963
|
totalAssets: totalSupply,
|
|
@@ -48147,8 +49974,8 @@ var readerMantleMEth = (entry) => {
|
|
|
48147
49974
|
],
|
|
48148
49975
|
abis: [TotalSupplyAbi, MantleStakingAbi],
|
|
48149
49976
|
parse: ([supply, rate]) => {
|
|
48150
|
-
const totalSupply =
|
|
48151
|
-
const exchangeRate =
|
|
49977
|
+
const totalSupply = toBigInt13(supply);
|
|
49978
|
+
const exchangeRate = toBigInt13(rate);
|
|
48152
49979
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
48153
49980
|
return void 0;
|
|
48154
49981
|
}
|
|
@@ -48169,7 +49996,7 @@ var readerOffChain = (entry) => {
|
|
|
48169
49996
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
48170
49997
|
abis: [TotalSupplyAbi],
|
|
48171
49998
|
parse: ([supply]) => {
|
|
48172
|
-
const totalSupply =
|
|
49999
|
+
const totalSupply = toBigInt13(supply);
|
|
48173
50000
|
if (totalSupply === void 0) return void 0;
|
|
48174
50001
|
return {
|
|
48175
50002
|
totalAssets: rescaleDecimals(totalSupply, shareDec, underlyingDec),
|
|
@@ -48203,7 +50030,7 @@ var readerRenzoEzEth = (entry) => {
|
|
|
48203
50030
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
48204
50031
|
abis: [TotalSupplyAbi],
|
|
48205
50032
|
parse: ([supply]) => {
|
|
48206
|
-
const totalSupply =
|
|
50033
|
+
const totalSupply = toBigInt13(supply);
|
|
48207
50034
|
if (totalSupply === void 0) return void 0;
|
|
48208
50035
|
return {
|
|
48209
50036
|
totalAssets: totalSupply,
|
|
@@ -48220,9 +50047,9 @@ var readerRenzoEzEth = (entry) => {
|
|
|
48220
50047
|
],
|
|
48221
50048
|
abis: [TotalSupplyAbi, RenzoRestakeManagerAbi],
|
|
48222
50049
|
parse: ([supply, tvls]) => {
|
|
48223
|
-
const totalSupply =
|
|
50050
|
+
const totalSupply = toBigInt13(supply);
|
|
48224
50051
|
if (totalSupply === void 0 || totalSupply === 0n) return void 0;
|
|
48225
|
-
const totalTvl = Array.isArray(tvls) && tvls.length >= 3 ?
|
|
50052
|
+
const totalTvl = Array.isArray(tvls) && tvls.length >= 3 ? toBigInt13(tvls[2]) : void 0;
|
|
48226
50053
|
if (totalTvl === void 0) return void 0;
|
|
48227
50054
|
return {
|
|
48228
50055
|
totalAssets: totalTvl,
|
|
@@ -48275,13 +50102,13 @@ var readerRocketReth = (entry) => {
|
|
|
48275
50102
|
return {
|
|
48276
50103
|
calls,
|
|
48277
50104
|
abis,
|
|
48278
|
-
parse: (
|
|
48279
|
-
const totalSupply =
|
|
48280
|
-
const exchangeRate =
|
|
50105
|
+
parse: (slice2) => {
|
|
50106
|
+
const totalSupply = toBigInt13(slice2[0]);
|
|
50107
|
+
const exchangeRate = toBigInt13(slice2[1]);
|
|
48281
50108
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
48282
50109
|
return void 0;
|
|
48283
50110
|
}
|
|
48284
|
-
const liquidity = depositPool ?
|
|
50111
|
+
const liquidity = depositPool ? toBigInt13(slice2[2]) : void 0;
|
|
48285
50112
|
return {
|
|
48286
50113
|
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
48287
50114
|
totalSupply,
|
|
@@ -48320,7 +50147,7 @@ var readerStaderEthx = (entry) => {
|
|
|
48320
50147
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
48321
50148
|
abis: [TotalSupplyAbi],
|
|
48322
50149
|
parse: ([supply]) => {
|
|
48323
|
-
const totalSupply =
|
|
50150
|
+
const totalSupply = toBigInt13(supply);
|
|
48324
50151
|
if (totalSupply === void 0) return void 0;
|
|
48325
50152
|
return {
|
|
48326
50153
|
totalAssets: totalSupply,
|
|
@@ -48337,8 +50164,8 @@ var readerStaderEthx = (entry) => {
|
|
|
48337
50164
|
],
|
|
48338
50165
|
abis: [TotalSupplyAbi, StaderEthxAbi],
|
|
48339
50166
|
parse: ([supply, rate]) => {
|
|
48340
|
-
const totalSupply =
|
|
48341
|
-
const exchangeRate =
|
|
50167
|
+
const totalSupply = toBigInt13(supply);
|
|
50168
|
+
const exchangeRate = toBigInt13(rate);
|
|
48342
50169
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
48343
50170
|
return void 0;
|
|
48344
50171
|
}
|
|
@@ -48366,10 +50193,10 @@ var readerStaderMaticX = (entry) => {
|
|
|
48366
50193
|
],
|
|
48367
50194
|
abis: [TotalSupplyAbi, StaderMaticXAbi],
|
|
48368
50195
|
parse: ([supply, tup]) => {
|
|
48369
|
-
const totalSupply =
|
|
50196
|
+
const totalSupply = toBigInt13(supply);
|
|
48370
50197
|
if (!Array.isArray(tup) || tup.length < 3) return void 0;
|
|
48371
|
-
const amountInMatic =
|
|
48372
|
-
const totalPooledMatic =
|
|
50198
|
+
const amountInMatic = toBigInt13(tup[0]);
|
|
50199
|
+
const totalPooledMatic = toBigInt13(tup[2]);
|
|
48373
50200
|
if (totalSupply === void 0 || amountInMatic === void 0) {
|
|
48374
50201
|
return void 0;
|
|
48375
50202
|
}
|
|
@@ -48402,7 +50229,7 @@ var readerStakeWiseOsEth = (entry) => {
|
|
|
48402
50229
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
48403
50230
|
abis: [TotalSupplyAbi],
|
|
48404
50231
|
parse: ([supply]) => {
|
|
48405
|
-
const totalSupply =
|
|
50232
|
+
const totalSupply = toBigInt13(supply);
|
|
48406
50233
|
if (totalSupply === void 0) return void 0;
|
|
48407
50234
|
return {
|
|
48408
50235
|
totalAssets: totalSupply,
|
|
@@ -48419,8 +50246,8 @@ var readerStakeWiseOsEth = (entry) => {
|
|
|
48419
50246
|
],
|
|
48420
50247
|
abis: [TotalSupplyAbi, StakeWiseOsTokenAbi],
|
|
48421
50248
|
parse: ([supply, rate]) => {
|
|
48422
|
-
const totalSupply =
|
|
48423
|
-
const exchangeRate =
|
|
50249
|
+
const totalSupply = toBigInt13(supply);
|
|
50250
|
+
const exchangeRate = toBigInt13(rate);
|
|
48424
50251
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
48425
50252
|
return void 0;
|
|
48426
50253
|
}
|
|
@@ -48452,7 +50279,7 @@ var readerStCelo = (entry) => {
|
|
|
48452
50279
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
48453
50280
|
abis: [TotalSupplyAbi],
|
|
48454
50281
|
parse: ([supply]) => {
|
|
48455
|
-
const totalSupply =
|
|
50282
|
+
const totalSupply = toBigInt13(supply);
|
|
48456
50283
|
if (totalSupply === void 0) return void 0;
|
|
48457
50284
|
return {
|
|
48458
50285
|
totalAssets: totalSupply,
|
|
@@ -48469,8 +50296,8 @@ var readerStCelo = (entry) => {
|
|
|
48469
50296
|
],
|
|
48470
50297
|
abis: [TotalSupplyAbi, StCeloManagerAbi],
|
|
48471
50298
|
parse: ([supply, rate]) => {
|
|
48472
|
-
const totalSupply =
|
|
48473
|
-
const exchangeRate =
|
|
50299
|
+
const totalSupply = toBigInt13(supply);
|
|
50300
|
+
const exchangeRate = toBigInt13(rate);
|
|
48474
50301
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
48475
50302
|
return void 0;
|
|
48476
50303
|
}
|
|
@@ -48502,8 +50329,8 @@ var readerSwellGetRate = (entry) => ({
|
|
|
48502
50329
|
],
|
|
48503
50330
|
abis: [TotalSupplyAbi, SwellGetRateAbi],
|
|
48504
50331
|
parse: ([supply, rate]) => {
|
|
48505
|
-
const totalSupply =
|
|
48506
|
-
const exchangeRate =
|
|
50332
|
+
const totalSupply = toBigInt13(supply);
|
|
50333
|
+
const exchangeRate = toBigInt13(rate);
|
|
48507
50334
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
48508
50335
|
return void 0;
|
|
48509
50336
|
}
|
|
@@ -48534,7 +50361,7 @@ var readerValantisWstHype = (entry) => {
|
|
|
48534
50361
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
48535
50362
|
abis: [TotalSupplyAbi],
|
|
48536
50363
|
parse: ([supply]) => {
|
|
48537
|
-
const totalSupply =
|
|
50364
|
+
const totalSupply = toBigInt13(supply);
|
|
48538
50365
|
if (totalSupply === void 0) return void 0;
|
|
48539
50366
|
return {
|
|
48540
50367
|
totalAssets: totalSupply,
|
|
@@ -48551,8 +50378,8 @@ var readerValantisWstHype = (entry) => {
|
|
|
48551
50378
|
],
|
|
48552
50379
|
abis: [TotalSupplyAbi, ValantisStHypeAbi],
|
|
48553
50380
|
parse: ([supply, rate]) => {
|
|
48554
|
-
const totalSupply =
|
|
48555
|
-
const exchangeRate =
|
|
50381
|
+
const totalSupply = toBigInt13(supply);
|
|
50382
|
+
const exchangeRate = toBigInt13(rate);
|
|
48556
50383
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
48557
50384
|
return void 0;
|
|
48558
50385
|
}
|
|
@@ -48586,7 +50413,7 @@ var readerVedaAccountant = (entry) => {
|
|
|
48586
50413
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
48587
50414
|
abis: [TotalSupplyAbi],
|
|
48588
50415
|
parse: ([supply]) => {
|
|
48589
|
-
const totalSupply =
|
|
50416
|
+
const totalSupply = toBigInt13(supply);
|
|
48590
50417
|
if (totalSupply === void 0) return void 0;
|
|
48591
50418
|
return {
|
|
48592
50419
|
totalAssets: rescaleDecimals(totalSupply, shareDec, underlyingDec),
|
|
@@ -48604,8 +50431,8 @@ var readerVedaAccountant = (entry) => {
|
|
|
48604
50431
|
],
|
|
48605
50432
|
abis: [TotalSupplyAbi, VedaAccountantGetRateAbi],
|
|
48606
50433
|
parse: ([supply, rate]) => {
|
|
48607
|
-
const totalSupply =
|
|
48608
|
-
const rawRate =
|
|
50434
|
+
const totalSupply = toBigInt13(supply);
|
|
50435
|
+
const rawRate = toBigInt13(rate);
|
|
48609
50436
|
if (totalSupply === void 0 || rawRate === void 0) return void 0;
|
|
48610
50437
|
const exchangeRate = rawRate * scale;
|
|
48611
50438
|
return {
|
|
@@ -48640,8 +50467,8 @@ var readerAnkrRatio = (entry) => ({
|
|
|
48640
50467
|
],
|
|
48641
50468
|
abis: [TotalSupplyAbi, AnkrRatioAbi],
|
|
48642
50469
|
parse: ([supply, ratio]) => {
|
|
48643
|
-
const totalSupply =
|
|
48644
|
-
const r =
|
|
50470
|
+
const totalSupply = toBigInt13(supply);
|
|
50471
|
+
const r = toBigInt13(ratio);
|
|
48645
50472
|
if (totalSupply === void 0 || r === void 0 || r === 0n) {
|
|
48646
50473
|
return void 0;
|
|
48647
50474
|
}
|
|
@@ -48684,8 +50511,8 @@ var readerCoreEarnRate = (entry) => {
|
|
|
48684
50511
|
],
|
|
48685
50512
|
abis: [CoreEarnRateAbi, TotalSupplyAbi],
|
|
48686
50513
|
parse: ([rate, supply]) => {
|
|
48687
|
-
const r =
|
|
48688
|
-
const totalSupply =
|
|
50514
|
+
const r = toBigInt13(rate);
|
|
50515
|
+
const totalSupply = toBigInt13(supply);
|
|
48689
50516
|
if (r === void 0 || r === 0n || totalSupply === void 0) {
|
|
48690
50517
|
return void 0;
|
|
48691
50518
|
}
|
|
@@ -48706,8 +50533,8 @@ var readerCoreStakedRatio = (entry) => {
|
|
|
48706
50533
|
],
|
|
48707
50534
|
abis: [CoreTotalStakedAbi, TotalSupplyAbi],
|
|
48708
50535
|
parse: ([staked, supply]) => {
|
|
48709
|
-
const totalStaked =
|
|
48710
|
-
const totalSupply =
|
|
50536
|
+
const totalStaked = toBigInt13(staked);
|
|
50537
|
+
const totalSupply = toBigInt13(supply);
|
|
48711
50538
|
if (totalStaked === void 0 || totalSupply === void 0 || totalSupply === 0n) {
|
|
48712
50539
|
return void 0;
|
|
48713
50540
|
}
|
|
@@ -48751,12 +50578,12 @@ var readerStellaStDot = (entry) => ({
|
|
|
48751
50578
|
],
|
|
48752
50579
|
abis: [TotalSupplyAbi, StellaStDotAbi, StellaStDotAbi],
|
|
48753
50580
|
parse: ([supply, rate, pooled]) => {
|
|
48754
|
-
const totalSupply =
|
|
48755
|
-
const exchangeRate =
|
|
50581
|
+
const totalSupply = toBigInt13(supply);
|
|
50582
|
+
const exchangeRate = toBigInt13(rate);
|
|
48756
50583
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
48757
50584
|
return void 0;
|
|
48758
50585
|
}
|
|
48759
|
-
const totalAssets =
|
|
50586
|
+
const totalAssets = toBigInt13(pooled) ?? totalSupply * exchangeRate / ONE_E187;
|
|
48760
50587
|
return {
|
|
48761
50588
|
totalAssets,
|
|
48762
50589
|
totalSupply,
|
|
@@ -48791,8 +50618,8 @@ var readerKintsuSMon = (entry) => ({
|
|
|
48791
50618
|
],
|
|
48792
50619
|
abis: [KintsuSMonAbi, KintsuSMonAbi],
|
|
48793
50620
|
parse: ([pooled, shares]) => {
|
|
48794
|
-
const totalAssets =
|
|
48795
|
-
const totalSupply =
|
|
50621
|
+
const totalAssets = toBigInt13(pooled);
|
|
50622
|
+
const totalSupply = toBigInt13(shares);
|
|
48796
50623
|
if (totalAssets === void 0 || totalSupply === void 0) return void 0;
|
|
48797
50624
|
const exchangeRate = totalSupply > 0n ? totalAssets * ONE_E187 / totalSupply : ONE_E187;
|
|
48798
50625
|
return { totalAssets, totalSupply, exchangeRate };
|
|
@@ -49313,7 +51140,7 @@ var fetchLstShareTokens = async (chainId, multicallRetry, prices = {}, tokenList
|
|
|
49313
51140
|
const validatorsByAddress = new Map(validatorEntries);
|
|
49314
51141
|
const idleByAddress = /* @__PURE__ */ new Map();
|
|
49315
51142
|
idleEntries.forEach((e, i) => {
|
|
49316
|
-
const bal =
|
|
51143
|
+
const bal = toBigInt13(idleResults[i]);
|
|
49317
51144
|
if (bal !== void 0) idleByAddress.set(e.address.toLowerCase(), bal);
|
|
49318
51145
|
});
|
|
49319
51146
|
const rawResults = new Array(allCalls.length);
|
|
@@ -49328,9 +51155,9 @@ var fetchLstShareTokens = async (chainId, multicallRetry, prices = {}, tokenList
|
|
|
49328
51155
|
for (let i = 0; i < entries.length; i++) {
|
|
49329
51156
|
const entry = entries[i];
|
|
49330
51157
|
const reader = readers[i];
|
|
49331
|
-
const
|
|
51158
|
+
const slice2 = rawResults.slice(cursor, cursor + reader.calls.length);
|
|
49332
51159
|
cursor += reader.calls.length;
|
|
49333
|
-
const state = reader.parse(
|
|
51160
|
+
const state = reader.parse(slice2);
|
|
49334
51161
|
if (!state) continue;
|
|
49335
51162
|
const addressLc = entry.address.toLowerCase();
|
|
49336
51163
|
const underlyingLc = entry.underlying.toLowerCase();
|
|
@@ -49443,7 +51270,7 @@ var BeetsStSWithdrawalAbi = [
|
|
|
49443
51270
|
];
|
|
49444
51271
|
|
|
49445
51272
|
// src/vaults/lst/withdrawals/readers/shared.ts
|
|
49446
|
-
var
|
|
51273
|
+
var toBigInt14 = (v) => {
|
|
49447
51274
|
if (v === void 0 || v === null) return void 0;
|
|
49448
51275
|
if (typeof v === "bigint") return v;
|
|
49449
51276
|
if (typeof v === "number") return BigInt(v);
|
|
@@ -49458,7 +51285,7 @@ var toBigInt13 = (v) => {
|
|
|
49458
51285
|
return void 0;
|
|
49459
51286
|
};
|
|
49460
51287
|
var toNumber = (v) => {
|
|
49461
|
-
const b =
|
|
51288
|
+
const b = toBigInt14(v);
|
|
49462
51289
|
if (b === void 0) return void 0;
|
|
49463
51290
|
if (b > BigInt(Number.MAX_SAFE_INTEGER)) return void 0;
|
|
49464
51291
|
return Number(b);
|
|
@@ -49495,7 +51322,7 @@ var readerBeets = {
|
|
|
49495
51322
|
const out = [];
|
|
49496
51323
|
for (let i = 0; i < reqs.length; i++) {
|
|
49497
51324
|
const r = reqs[i];
|
|
49498
|
-
const amount =
|
|
51325
|
+
const amount = toBigInt14(r.assetAmount);
|
|
49499
51326
|
const ts = toNumber(r.requestTimestamp);
|
|
49500
51327
|
const isWithdrawn = Boolean(r.isWithdrawn);
|
|
49501
51328
|
if (amount === void 0 || ts === void 0) continue;
|
|
@@ -49587,13 +51414,13 @@ var readerBeHype = {
|
|
|
49587
51414
|
const q = stage2[i * 2];
|
|
49588
51415
|
const canClaim = Boolean(stage2[i * 2 + 1]);
|
|
49589
51416
|
if (!q) continue;
|
|
49590
|
-
const hypeAmount = Array.isArray(q) ?
|
|
51417
|
+
const hypeAmount = Array.isArray(q) ? toBigInt14(q[2]) : toBigInt14(q.hypeAmount);
|
|
49591
51418
|
if (hypeAmount === void 0) continue;
|
|
49592
51419
|
out.push({
|
|
49593
51420
|
lst: entry.lst,
|
|
49594
51421
|
brand: entry.brand,
|
|
49595
51422
|
symbol: entry.symbol,
|
|
49596
|
-
requestId: String(
|
|
51423
|
+
requestId: String(toBigInt14(ids[i]) ?? i),
|
|
49597
51424
|
amountUnderlying: hypeAmount.toString(),
|
|
49598
51425
|
status: canClaim ? "claimable" : "pending"
|
|
49599
51426
|
});
|
|
@@ -49696,7 +51523,7 @@ var readerBenqi = {
|
|
|
49696
51523
|
for (let i = 0; i < reqs.length; i++) {
|
|
49697
51524
|
const r = reqs[i];
|
|
49698
51525
|
const startedAt = toNumber(r.startedAt);
|
|
49699
|
-
const shareAmount =
|
|
51526
|
+
const shareAmount = toBigInt14(r.shareAmount);
|
|
49700
51527
|
if (startedAt === void 0 || shareAmount === void 0) continue;
|
|
49701
51528
|
const readyAt = startedAt + cooldown;
|
|
49702
51529
|
const expiresAt = readyAt + claimWindow;
|
|
@@ -49759,8 +51586,8 @@ var readerBeraPaw = {
|
|
|
49759
51586
|
}
|
|
49760
51587
|
const pos = res[0];
|
|
49761
51588
|
if (!pos) return [];
|
|
49762
|
-
const queued = Array.isArray(pos) ?
|
|
49763
|
-
const available = Array.isArray(pos) ?
|
|
51589
|
+
const queued = Array.isArray(pos) ? toBigInt14(pos[0]) : toBigInt14(pos.queued);
|
|
51590
|
+
const available = Array.isArray(pos) ? toBigInt14(pos[1]) : toBigInt14(pos.available);
|
|
49764
51591
|
const out = [];
|
|
49765
51592
|
if (available !== void 0 && available > 0n) {
|
|
49766
51593
|
out.push({
|
|
@@ -49842,7 +51669,7 @@ var readerIbera = {
|
|
|
49842
51669
|
return [];
|
|
49843
51670
|
}
|
|
49844
51671
|
const length = toNumber(stage1[0]) ?? 0;
|
|
49845
|
-
const frontier =
|
|
51672
|
+
const frontier = toBigInt14(stage1[1]) ?? 0n;
|
|
49846
51673
|
if (length === 0) return [];
|
|
49847
51674
|
const start = length > MAX_SCAN ? length - MAX_SCAN : 0;
|
|
49848
51675
|
const ids = Array.from({ length: length - start }, (_3, k) => start + k);
|
|
@@ -49866,7 +51693,7 @@ var readerIbera = {
|
|
|
49866
51693
|
const r = stage2[k];
|
|
49867
51694
|
if (!r) continue;
|
|
49868
51695
|
const receiver = Array.isArray(r) ? r[2] : r.receiver;
|
|
49869
|
-
const amount = Array.isArray(r) ?
|
|
51696
|
+
const amount = Array.isArray(r) ? toBigInt14(r[3]) : toBigInt14(r.amount);
|
|
49870
51697
|
if (typeof receiver !== "string" || receiver.toLowerCase() !== target || amount === void 0 || amount === 0n) {
|
|
49871
51698
|
continue;
|
|
49872
51699
|
}
|
|
@@ -49939,7 +51766,7 @@ var readerPrimeStaking = {
|
|
|
49939
51766
|
return [];
|
|
49940
51767
|
}
|
|
49941
51768
|
const length = toNumber(stage1[0]) ?? 0;
|
|
49942
|
-
const frontier =
|
|
51769
|
+
const frontier = toBigInt14(stage1[1]) ?? 0n;
|
|
49943
51770
|
if (length === 0) return [];
|
|
49944
51771
|
const start = length > MAX_SCAN2 ? length - MAX_SCAN2 : 0;
|
|
49945
51772
|
const ids = Array.from({ length: length - start }, (_3, k) => start + k);
|
|
@@ -49963,7 +51790,7 @@ var readerPrimeStaking = {
|
|
|
49963
51790
|
const r = stage2[k];
|
|
49964
51791
|
if (!r) continue;
|
|
49965
51792
|
const receiver = Array.isArray(r) ? r[1] : r.receiver;
|
|
49966
|
-
const assets = Array.isArray(r) ?
|
|
51793
|
+
const assets = Array.isArray(r) ? toBigInt14(r[3]) : toBigInt14(r.assets);
|
|
49967
51794
|
const processed = Array.isArray(r) ? r[4] : r.processed;
|
|
49968
51795
|
if (typeof receiver !== "string" || receiver.toLowerCase() !== target || assets === void 0 || assets === 0n) {
|
|
49969
51796
|
continue;
|
|
@@ -50033,8 +51860,8 @@ var readerErc7540 = {
|
|
|
50033
51860
|
],
|
|
50034
51861
|
abi: [Erc7540Abi, Erc7540Abi]
|
|
50035
51862
|
});
|
|
50036
|
-
const pending =
|
|
50037
|
-
const claimable =
|
|
51863
|
+
const pending = toBigInt14(stage1[0]) ?? 0n;
|
|
51864
|
+
const claimable = toBigInt14(stage1[1]) ?? 0n;
|
|
50038
51865
|
const out = [];
|
|
50039
51866
|
if (claimable > 0n) {
|
|
50040
51867
|
const stage2 = await multicallRetry({
|
|
@@ -50048,7 +51875,7 @@ var readerErc7540 = {
|
|
|
50048
51875
|
],
|
|
50049
51876
|
abi: [Erc7540Abi]
|
|
50050
51877
|
});
|
|
50051
|
-
const amount =
|
|
51878
|
+
const amount = toBigInt14(stage2[0]) ?? claimable;
|
|
50052
51879
|
out.push({
|
|
50053
51880
|
lst: entry.lst,
|
|
50054
51881
|
brand: entry.brand,
|
|
@@ -50102,11 +51929,11 @@ var readerEthenaCooldown = {
|
|
|
50102
51929
|
let cooldownEnd;
|
|
50103
51930
|
let amount;
|
|
50104
51931
|
if (Array.isArray(cell)) {
|
|
50105
|
-
cooldownEnd =
|
|
50106
|
-
amount =
|
|
51932
|
+
cooldownEnd = toBigInt14(cell[0]);
|
|
51933
|
+
amount = toBigInt14(cell[1]);
|
|
50107
51934
|
} else if (cell && typeof cell === "object") {
|
|
50108
|
-
cooldownEnd =
|
|
50109
|
-
amount =
|
|
51935
|
+
cooldownEnd = toBigInt14(cell.cooldownEnd);
|
|
51936
|
+
amount = toBigInt14(cell.underlyingAmount);
|
|
50110
51937
|
}
|
|
50111
51938
|
if (!amount || amount === 0n) return [];
|
|
50112
51939
|
const readyAt = Number(cooldownEnd ?? 0n);
|
|
@@ -50201,7 +52028,7 @@ var readerEtherFi = {
|
|
|
50201
52028
|
calls: enumCalls,
|
|
50202
52029
|
abi: enumCalls.map(() => EtherFiWithdrawRequestAbi)
|
|
50203
52030
|
});
|
|
50204
|
-
const ids = stage2.map(
|
|
52031
|
+
const ids = stage2.map(toBigInt14).filter((v) => v !== void 0);
|
|
50205
52032
|
if (ids.length === 0) return [];
|
|
50206
52033
|
const detailCalls = ids.flatMap((id) => [
|
|
50207
52034
|
{ address: entry.withdrawalContract, name: "getRequest", params: [id] },
|
|
@@ -50221,7 +52048,7 @@ var readerEtherFi = {
|
|
|
50221
52048
|
const isValid = Boolean(stage3[i * 3 + 2]);
|
|
50222
52049
|
if (!req) continue;
|
|
50223
52050
|
if (!isValid) continue;
|
|
50224
|
-
const amount =
|
|
52051
|
+
const amount = toBigInt14(req.amountOfEEth);
|
|
50225
52052
|
if (amount === void 0) continue;
|
|
50226
52053
|
out.push({
|
|
50227
52054
|
lst: entry.lst,
|
|
@@ -50316,7 +52143,7 @@ var readerKelp = {
|
|
|
50316
52143
|
}
|
|
50317
52144
|
],
|
|
50318
52145
|
abi: [KelpWithdrawalManagerAbi]
|
|
50319
|
-
}).then((res) =>
|
|
52146
|
+
}).then((res) => toBigInt14(res[0]) ?? 0n)
|
|
50320
52147
|
]);
|
|
50321
52148
|
lengths = storageReads;
|
|
50322
52149
|
currentBlock = block;
|
|
@@ -50346,9 +52173,9 @@ var readerKelp = {
|
|
|
50346
52173
|
for (let i = 0; i < detailCalls.length; i++) {
|
|
50347
52174
|
const r = stage2[i];
|
|
50348
52175
|
if (!r) continue;
|
|
50349
|
-
const expected = Array.isArray(r) ?
|
|
50350
|
-
const startBlock = Array.isArray(r) ?
|
|
50351
|
-
const nonce = Array.isArray(r) ?
|
|
52176
|
+
const expected = Array.isArray(r) ? toBigInt14(r[1]) : toBigInt14(r.expectedAssetAmount);
|
|
52177
|
+
const startBlock = Array.isArray(r) ? toBigInt14(r[2]) : toBigInt14(r.withdrawalStartBlock);
|
|
52178
|
+
const nonce = Array.isArray(r) ? toBigInt14(r[3]) : toBigInt14(r.userNonce);
|
|
50352
52179
|
if (expected === void 0 || startBlock === void 0) continue;
|
|
50353
52180
|
const claimable = currentBlock >= startBlock + delayBlocks;
|
|
50354
52181
|
out.push({
|
|
@@ -50425,7 +52252,7 @@ var readerLido = {
|
|
|
50425
52252
|
abi: [LidoWithdrawalQueueAbi, LidoWithdrawalQueueAbi]
|
|
50426
52253
|
});
|
|
50427
52254
|
const ids = stage1[0];
|
|
50428
|
-
const frontier =
|
|
52255
|
+
const frontier = toBigInt14(stage1[1]) ?? 0n;
|
|
50429
52256
|
if (!Array.isArray(ids) || ids.length === 0) return [];
|
|
50430
52257
|
const stage2 = await multicallRetry({
|
|
50431
52258
|
chain: chainId,
|
|
@@ -50442,10 +52269,10 @@ var readerLido = {
|
|
|
50442
52269
|
if (!Array.isArray(statuses)) return [];
|
|
50443
52270
|
const out = [];
|
|
50444
52271
|
for (let i = 0; i < ids.length; i++) {
|
|
50445
|
-
const id =
|
|
52272
|
+
const id = toBigInt14(ids[i]);
|
|
50446
52273
|
const s = statuses[i];
|
|
50447
52274
|
if (id === void 0 || !s) continue;
|
|
50448
|
-
const amountOfStETH =
|
|
52275
|
+
const amountOfStETH = toBigInt14(s.amountOfStETH);
|
|
50449
52276
|
const isFinalized = Boolean(s.isFinalized);
|
|
50450
52277
|
const isClaimed = Boolean(s.isClaimed);
|
|
50451
52278
|
if (amountOfStETH === void 0) continue;
|
|
@@ -50554,11 +52381,11 @@ var readerLista = {
|
|
|
50554
52381
|
const status = stage2[i];
|
|
50555
52382
|
if (!status) continue;
|
|
50556
52383
|
const isClaimable = Array.isArray(status) ? Boolean(status[0]) : Boolean(status._isClaimable);
|
|
50557
|
-
const bnbAmount = Array.isArray(status) ?
|
|
50558
|
-
const snbnbAmount = Array.isArray(req) ?
|
|
52384
|
+
const bnbAmount = Array.isArray(status) ? toBigInt14(status[1]) : toBigInt14(status._amount);
|
|
52385
|
+
const snbnbAmount = Array.isArray(req) ? toBigInt14(req[1]) : toBigInt14(req?.amountInSnBnb);
|
|
50559
52386
|
const amount = bnbAmount ?? snbnbAmount;
|
|
50560
52387
|
if (amount === void 0) continue;
|
|
50561
|
-
const uuid = Array.isArray(req) ?
|
|
52388
|
+
const uuid = Array.isArray(req) ? toBigInt14(req[0]) : toBigInt14(req?.uuid);
|
|
50562
52389
|
out.push({
|
|
50563
52390
|
lst: entry.lst,
|
|
50564
52391
|
brand: entry.brand,
|
|
@@ -50643,7 +52470,7 @@ var readerRenzo = {
|
|
|
50643
52470
|
for (let i = 0; i < count; i++) {
|
|
50644
52471
|
const tup = stage2[i];
|
|
50645
52472
|
if (!Array.isArray(tup) || tup.length < 5) continue;
|
|
50646
|
-
const amountToRedeem =
|
|
52473
|
+
const amountToRedeem = toBigInt14(tup[2]);
|
|
50647
52474
|
const createdAt = toNumber(tup[4]);
|
|
50648
52475
|
if (amountToRedeem === void 0 || createdAt === void 0) continue;
|
|
50649
52476
|
const readyAt = createdAt + cooldown;
|
|
@@ -50716,9 +52543,9 @@ var readerStaderEthx2 = {
|
|
|
50716
52543
|
]
|
|
50717
52544
|
});
|
|
50718
52545
|
const ids = stage1[0];
|
|
50719
|
-
const frontier =
|
|
52546
|
+
const frontier = toBigInt14(stage1[1]) ?? 0n;
|
|
50720
52547
|
if (!Array.isArray(ids) || ids.length === 0) return [];
|
|
50721
|
-
const idBigInts = ids.map(
|
|
52548
|
+
const idBigInts = ids.map(toBigInt14).filter((v) => v !== void 0);
|
|
50722
52549
|
const detailCalls = idBigInts.map((id) => ({
|
|
50723
52550
|
address: entry.withdrawalContract,
|
|
50724
52551
|
name: "userWithdrawRequests",
|
|
@@ -50734,8 +52561,8 @@ var readerStaderEthx2 = {
|
|
|
50734
52561
|
const id = idBigInts[i];
|
|
50735
52562
|
const tup = stage2[i];
|
|
50736
52563
|
if (!Array.isArray(tup) || tup.length < 5) continue;
|
|
50737
|
-
const ethExpected =
|
|
50738
|
-
const ethFinalized =
|
|
52564
|
+
const ethExpected = toBigInt14(tup[2]) ?? 0n;
|
|
52565
|
+
const ethFinalized = toBigInt14(tup[3]) ?? 0n;
|
|
50739
52566
|
const isFinalized = id < frontier && ethFinalized > 0n;
|
|
50740
52567
|
const queuePosition = isFinalized ? 0 : Number(id - frontier);
|
|
50741
52568
|
out.push({
|
|
@@ -50814,13 +52641,13 @@ var readerStaderMaticX2 = {
|
|
|
50814
52641
|
});
|
|
50815
52642
|
const arr = stage1[0];
|
|
50816
52643
|
if (!Array.isArray(arr)) return [];
|
|
50817
|
-
const currentEpoch = stakeManager ?
|
|
50818
|
-
const delay = stakeManager ?
|
|
52644
|
+
const currentEpoch = stakeManager ? toBigInt14(stage1[1]) ?? 0n : 0n;
|
|
52645
|
+
const delay = stakeManager ? toBigInt14(stage1[2]) ?? 0n : 0n;
|
|
50819
52646
|
const out = [];
|
|
50820
52647
|
for (let i = 0; i < arr.length; i++) {
|
|
50821
52648
|
const r = arr[i];
|
|
50822
|
-
const amount =
|
|
50823
|
-
const requestEpoch =
|
|
52649
|
+
const amount = toBigInt14(r.amount) ?? 0n;
|
|
52650
|
+
const requestEpoch = toBigInt14(r.requestEpoch);
|
|
50824
52651
|
if (requestEpoch === void 0) continue;
|
|
50825
52652
|
const ready = stakeManager ? currentEpoch >= requestEpoch + delay : false;
|
|
50826
52653
|
out.push({
|
|
@@ -50907,9 +52734,9 @@ var readerMantle = {
|
|
|
50907
52734
|
if (typeof requester === "string" && requester.toLowerCase() !== lcUser) {
|
|
50908
52735
|
continue;
|
|
50909
52736
|
}
|
|
50910
|
-
const ethRequested = Array.isArray(detail) ?
|
|
52737
|
+
const ethRequested = Array.isArray(detail) ? toBigInt14(detail[3]) : toBigInt14(detail.ethRequested);
|
|
50911
52738
|
const isFinalized = Array.isArray(info) ? Boolean(info[0]) : Boolean(info.isFinalized);
|
|
50912
|
-
const claimable = Array.isArray(info) ?
|
|
52739
|
+
const claimable = Array.isArray(info) ? toBigInt14(info[1]) : toBigInt14(info.claimableAmount);
|
|
50913
52740
|
if (ethRequested === void 0) continue;
|
|
50914
52741
|
out.push({
|
|
50915
52742
|
lst: entry.lst,
|
|
@@ -50988,8 +52815,8 @@ var readerPuffer = {
|
|
|
50988
52815
|
calls,
|
|
50989
52816
|
abi: calls.map(() => PufferWithdrawalManagerAbi)
|
|
50990
52817
|
});
|
|
50991
|
-
const finalizedBatch =
|
|
50992
|
-
const batchSize =
|
|
52818
|
+
const finalizedBatch = toBigInt14(results[detailCalls.length]) ?? 0n;
|
|
52819
|
+
const batchSize = toBigInt14(results[detailCalls.length + 1]) ?? 0n;
|
|
50993
52820
|
const out = [];
|
|
50994
52821
|
const lcUser = user.toLowerCase();
|
|
50995
52822
|
for (let i = 0; i < ids.length; i++) {
|
|
@@ -50999,7 +52826,7 @@ var readerPuffer = {
|
|
|
50999
52826
|
if (typeof recipient === "string" && recipient.toLowerCase() !== lcUser) {
|
|
51000
52827
|
continue;
|
|
51001
52828
|
}
|
|
51002
|
-
const pufETHAmount = Array.isArray(d) ?
|
|
52829
|
+
const pufETHAmount = Array.isArray(d) ? toBigInt14(d[0]) : toBigInt14(d.pufETHAmount);
|
|
51003
52830
|
if (pufETHAmount === void 0) continue;
|
|
51004
52831
|
const batchIdx = batchSize > 0n ? ids[i] / batchSize : 0n;
|
|
51005
52832
|
const claimable = batchIdx <= finalizedBatch;
|
|
@@ -51097,7 +52924,7 @@ var readerKinetiq = {
|
|
|
51097
52924
|
for (let i = 0; i < count; i++) {
|
|
51098
52925
|
const r = stage2[i];
|
|
51099
52926
|
if (!r) continue;
|
|
51100
|
-
const hypeAmount = Array.isArray(r) ?
|
|
52927
|
+
const hypeAmount = Array.isArray(r) ? toBigInt14(r[0]) : toBigInt14(r.hypeAmount);
|
|
51101
52928
|
const timestamp = Array.isArray(r) ? toNumber(r[4]) : toNumber(r.timestamp);
|
|
51102
52929
|
if (hypeAmount === void 0 || hypeAmount === 0n || timestamp === void 0) {
|
|
51103
52930
|
continue;
|
|
@@ -51225,7 +53052,7 @@ var readerStakeWise = {
|
|
|
51225
53052
|
const claimedByIdx = /* @__PURE__ */ new Map();
|
|
51226
53053
|
for (let i = 0; i < onChainChecks.length; i++) {
|
|
51227
53054
|
const cell = checkResults[i];
|
|
51228
|
-
const claimed = Array.isArray(cell) ?
|
|
53055
|
+
const claimed = Array.isArray(cell) ? toBigInt14(cell[2]) : toBigInt14(cell?.claimedAssets);
|
|
51229
53056
|
if (claimed !== void 0 && claimed > 0n) {
|
|
51230
53057
|
claimedByIdx.set(onChainChecks[i].idx, claimed);
|
|
51231
53058
|
}
|
|
@@ -51233,7 +53060,7 @@ var readerStakeWise = {
|
|
|
51233
53060
|
const out = [];
|
|
51234
53061
|
for (let i = 0; i < requests.length; i++) {
|
|
51235
53062
|
const r = requests[i];
|
|
51236
|
-
const amount =
|
|
53063
|
+
const amount = toBigInt14(r.totalAssets) ?? 0n;
|
|
51237
53064
|
const onChainClaimed = claimedByIdx.get(i);
|
|
51238
53065
|
const claimable = onChainClaimed !== void 0 || r.isClaimable;
|
|
51239
53066
|
out.push({
|
|
@@ -51290,7 +53117,7 @@ var readerStCelo2 = {
|
|
|
51290
53117
|
const timestamps = cell[1] ?? [];
|
|
51291
53118
|
const out = [];
|
|
51292
53119
|
for (let i = 0; i < values.length; i++) {
|
|
51293
|
-
const amount =
|
|
53120
|
+
const amount = toBigInt14(values[i]);
|
|
51294
53121
|
const readyAt = toNumber(timestamps[i]);
|
|
51295
53122
|
if (amount === void 0 || readyAt === void 0) continue;
|
|
51296
53123
|
out.push({
|
|
@@ -51335,11 +53162,11 @@ var readerStellaUnbond = {
|
|
|
51335
53162
|
let waiting;
|
|
51336
53163
|
let unbonded;
|
|
51337
53164
|
if (Array.isArray(cell)) {
|
|
51338
|
-
waiting =
|
|
51339
|
-
unbonded =
|
|
53165
|
+
waiting = toBigInt14(cell[0]);
|
|
53166
|
+
unbonded = toBigInt14(cell[1]);
|
|
51340
53167
|
} else if (cell && typeof cell === "object") {
|
|
51341
|
-
waiting =
|
|
51342
|
-
unbonded =
|
|
53168
|
+
waiting = toBigInt14(cell.waiting);
|
|
53169
|
+
unbonded = toBigInt14(cell.unbonded);
|
|
51343
53170
|
}
|
|
51344
53171
|
const out = [];
|
|
51345
53172
|
if (unbonded && unbonded > 0n) {
|
|
@@ -51429,7 +53256,7 @@ var readerSwell = {
|
|
|
51429
53256
|
abi: [SwellRswExitAbi, SwellRswExitAbi]
|
|
51430
53257
|
});
|
|
51431
53258
|
const count = toNumber(stage1[0]) ?? 0;
|
|
51432
|
-
const lastProcessed =
|
|
53259
|
+
const lastProcessed = toBigInt14(stage1[1]) ?? 0n;
|
|
51433
53260
|
if (count === 0) return [];
|
|
51434
53261
|
const enumCalls = Array.from({ length: count }, (_3, i) => ({
|
|
51435
53262
|
address: entry.withdrawalContract,
|
|
@@ -51441,7 +53268,7 @@ var readerSwell = {
|
|
|
51441
53268
|
calls: enumCalls,
|
|
51442
53269
|
abi: enumCalls.map(() => SwellRswExitAbi)
|
|
51443
53270
|
});
|
|
51444
|
-
const ids = stage2.map(
|
|
53271
|
+
const ids = stage2.map(toBigInt14).filter((v) => v !== void 0);
|
|
51445
53272
|
if (ids.length === 0) return [];
|
|
51446
53273
|
const detailCalls = ids.map((id) => ({
|
|
51447
53274
|
address: entry.withdrawalContract,
|
|
@@ -51458,7 +53285,7 @@ var readerSwell = {
|
|
|
51458
53285
|
const id = ids[i];
|
|
51459
53286
|
const r = stage3[i];
|
|
51460
53287
|
if (!r) continue;
|
|
51461
|
-
const amount =
|
|
53288
|
+
const amount = toBigInt14(r.amount);
|
|
51462
53289
|
if (amount === void 0) continue;
|
|
51463
53290
|
const claimable = id <= lastProcessed;
|
|
51464
53291
|
out.push({
|
|
@@ -51532,14 +53359,14 @@ var readerValantis = {
|
|
|
51532
53359
|
for (let i = 0; i < burns.length; i++) {
|
|
51533
53360
|
const b = burns[i];
|
|
51534
53361
|
if (!b) continue;
|
|
51535
|
-
const amount = Array.isArray(b) ?
|
|
53362
|
+
const amount = Array.isArray(b) ? toBigInt14(b[0]) : toBigInt14(b.amount);
|
|
51536
53363
|
const completed = Array.isArray(b) ? Boolean(b[2]) : Boolean(b.completed);
|
|
51537
53364
|
if (amount === void 0 || completed) continue;
|
|
51538
53365
|
out.push({
|
|
51539
53366
|
lst: entry.lst,
|
|
51540
53367
|
brand: entry.brand,
|
|
51541
53368
|
symbol: entry.symbol,
|
|
51542
|
-
requestId: String(
|
|
53369
|
+
requestId: String(toBigInt14(ids[i]) ?? i),
|
|
51543
53370
|
amountUnderlying: amount.toString(),
|
|
51544
53371
|
status: redeemable[i] ? "claimable" : "pending"
|
|
51545
53372
|
});
|
|
@@ -51612,7 +53439,7 @@ var readerTruFin = {
|
|
|
51612
53439
|
if (typeof recipient === "string" && recipient.toLowerCase() !== lcUser) {
|
|
51613
53440
|
continue;
|
|
51614
53441
|
}
|
|
51615
|
-
const amount = Array.isArray(w) ?
|
|
53442
|
+
const amount = Array.isArray(w) ? toBigInt14(w[1]) : toBigInt14(w.amount);
|
|
51616
53443
|
if (amount === void 0 || amount === 0n) continue;
|
|
51617
53444
|
out.push({
|
|
51618
53445
|
lst: entry.lst,
|
|
@@ -51708,7 +53535,7 @@ var readerYieldNest = {
|
|
|
51708
53535
|
calls: enumCalls,
|
|
51709
53536
|
abi: enumCalls.map(() => YieldNestWithdrawalQueueAbi)
|
|
51710
53537
|
});
|
|
51711
|
-
const ids = stage2.map(
|
|
53538
|
+
const ids = stage2.map(toBigInt14).filter((v) => v !== void 0);
|
|
51712
53539
|
if (ids.length === 0) return [];
|
|
51713
53540
|
const detailCalls = ids.map((id) => ({
|
|
51714
53541
|
address: entry.withdrawalContract,
|
|
@@ -51727,7 +53554,7 @@ var readerYieldNest = {
|
|
|
51727
53554
|
const id = ids[i];
|
|
51728
53555
|
const r = stage3[i];
|
|
51729
53556
|
if (!r) continue;
|
|
51730
|
-
const amount =
|
|
53557
|
+
const amount = toBigInt14(r.amount);
|
|
51731
53558
|
const created = toNumber(r.creationTimestamp);
|
|
51732
53559
|
const processed = Boolean(r.processed);
|
|
51733
53560
|
if (amount === void 0 || created === void 0) continue;
|
|
@@ -52320,7 +54147,7 @@ var getLstWithdrawalRegistry = (chainId, extraEntries) => {
|
|
|
52320
54147
|
const extra = extraEntries.filter((e) => !seen.has(e.lst.toLowerCase()));
|
|
52321
54148
|
return extra.length === 0 ? base : [...base, ...extra];
|
|
52322
54149
|
};
|
|
52323
|
-
var
|
|
54150
|
+
var warn7 = (...args) => {
|
|
52324
54151
|
};
|
|
52325
54152
|
var getLstWithdrawalRequests = async (user, chainId, multicallRetry, options) => {
|
|
52326
54153
|
const entries = getLstWithdrawalRegistry(chainId, options?.extraEntries);
|
|
@@ -52335,7 +54162,7 @@ var getLstWithdrawalRequests = async (user, chainId, multicallRetry, options) =>
|
|
|
52335
54162
|
try {
|
|
52336
54163
|
return await reader.fetch(lcUser, multicallRetry, chainId, entry, ids);
|
|
52337
54164
|
} catch (e) {
|
|
52338
|
-
|
|
54165
|
+
warn7(
|
|
52339
54166
|
`[lst-withdrawals] ${entry.brand} ${entry.symbol} (${entry.lst}) failed:`,
|
|
52340
54167
|
e?.message ?? e
|
|
52341
54168
|
);
|
|
@@ -52404,7 +54231,7 @@ var NavOracleReadAbi = [
|
|
|
52404
54231
|
|
|
52405
54232
|
// src/vaults/savings/readers/shared.ts
|
|
52406
54233
|
var ONE_E189 = 10n ** 18n;
|
|
52407
|
-
var
|
|
54234
|
+
var toBigInt15 = (v) => {
|
|
52408
54235
|
if (v === void 0 || v === null) return void 0;
|
|
52409
54236
|
if (typeof v === "bigint") return v;
|
|
52410
54237
|
if (typeof v === "number") return BigInt(v);
|
|
@@ -52435,9 +54262,9 @@ var readerErc46262 = (entry) => {
|
|
|
52435
54262
|
],
|
|
52436
54263
|
abis: [Erc4626ReadAbi2, TotalSupplyAbi2, Erc4626ReadAbi2],
|
|
52437
54264
|
parse: ([assets, supply, rate]) => {
|
|
52438
|
-
const totalAssets =
|
|
52439
|
-
const totalSupply =
|
|
52440
|
-
const convertToAssetsRaw =
|
|
54265
|
+
const totalAssets = toBigInt15(assets);
|
|
54266
|
+
const totalSupply = toBigInt15(supply);
|
|
54267
|
+
const convertToAssetsRaw = toBigInt15(rate);
|
|
52441
54268
|
if (totalAssets === void 0 || totalSupply === void 0 || convertToAssetsRaw === void 0) {
|
|
52442
54269
|
return void 0;
|
|
52443
54270
|
}
|
|
@@ -52531,13 +54358,13 @@ var readerErc4626Idle = (entry) => {
|
|
|
52531
54358
|
],
|
|
52532
54359
|
abis: [Erc4626ReadAbi2, TotalSupplyAbi2, Erc4626ReadAbi2, BalanceOfAbi],
|
|
52533
54360
|
parse: ([assets, supply, rate, inventoryBalance]) => {
|
|
52534
|
-
const totalAssets =
|
|
52535
|
-
const totalSupply =
|
|
52536
|
-
const convertToAssetsRaw =
|
|
54361
|
+
const totalAssets = toBigInt15(assets);
|
|
54362
|
+
const totalSupply = toBigInt15(supply);
|
|
54363
|
+
const convertToAssetsRaw = toBigInt15(rate);
|
|
52537
54364
|
if (totalAssets === void 0 || totalSupply === void 0 || convertToAssetsRaw === void 0) {
|
|
52538
54365
|
return void 0;
|
|
52539
54366
|
}
|
|
52540
|
-
const capacity =
|
|
54367
|
+
const capacity = toBigInt15(inventoryBalance);
|
|
52541
54368
|
return {
|
|
52542
54369
|
totalAssets,
|
|
52543
54370
|
totalSupply,
|
|
@@ -52568,10 +54395,10 @@ var readerNavOracle = (entry) => {
|
|
|
52568
54395
|
],
|
|
52569
54396
|
abis: [TotalSupplyAbi2, NavOracleReadAbi],
|
|
52570
54397
|
parse: ([supply, round]) => {
|
|
52571
|
-
const totalSupply =
|
|
54398
|
+
const totalSupply = toBigInt15(supply);
|
|
52572
54399
|
if (totalSupply === void 0) return void 0;
|
|
52573
54400
|
const raw = Array.isArray(round) ? round[1] : round?.answer;
|
|
52574
|
-
const exchangeRate =
|
|
54401
|
+
const exchangeRate = toBigInt15(raw);
|
|
52575
54402
|
if (exchangeRate === void 0 || exchangeRate <= 0n) return void 0;
|
|
52576
54403
|
return {
|
|
52577
54404
|
totalAssets: totalSupply * exchangeRate * underlyingUnit / (ONE_E189 * shareUnit),
|
|
@@ -52613,14 +54440,14 @@ var readerNativeWnlp = (entry) => {
|
|
|
52613
54440
|
NativeWithdrawQueueReadAbi
|
|
52614
54441
|
],
|
|
52615
54442
|
parse: ([supply, rate, feeBips, instantEnabled, inventory, window]) => {
|
|
52616
|
-
const totalSupply =
|
|
52617
|
-
const exchangeRate =
|
|
54443
|
+
const totalSupply = toBigInt15(supply);
|
|
54444
|
+
const exchangeRate = toBigInt15(rate);
|
|
52618
54445
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
52619
54446
|
return void 0;
|
|
52620
54447
|
}
|
|
52621
|
-
const capacity =
|
|
52622
|
-
const windowSeconds =
|
|
52623
|
-
const bips =
|
|
54448
|
+
const capacity = toBigInt15(inventory);
|
|
54449
|
+
const windowSeconds = toBigInt15(window);
|
|
54450
|
+
const bips = toBigInt15(feeBips);
|
|
52624
54451
|
return {
|
|
52625
54452
|
totalAssets: totalSupply * exchangeRate / ONE_E189,
|
|
52626
54453
|
totalSupply,
|
|
@@ -52678,9 +54505,9 @@ var fetchSavingsVaults = async (chainId, multicallRetry, prices = {}, tokenList
|
|
|
52678
54505
|
for (let i = 0; i < entries.length; i++) {
|
|
52679
54506
|
const entry = entries[i];
|
|
52680
54507
|
const reader = readers[i];
|
|
52681
|
-
const
|
|
54508
|
+
const slice2 = rawResults.slice(cursor, cursor + reader.calls.length);
|
|
52682
54509
|
cursor += reader.calls.length;
|
|
52683
|
-
const state = reader.parse(
|
|
54510
|
+
const state = reader.parse(slice2);
|
|
52684
54511
|
if (!state) continue;
|
|
52685
54512
|
const addressLc = entry.address.toLowerCase();
|
|
52686
54513
|
const underlyingLc = entry.underlying.toLowerCase();
|
|
@@ -52884,7 +54711,7 @@ var pickApr = (apr) => {
|
|
|
52884
54711
|
if (apr.inception != null) return { rate: apr.inception, window: "inception" };
|
|
52885
54712
|
return { rate: 0, window: "none" };
|
|
52886
54713
|
};
|
|
52887
|
-
var
|
|
54714
|
+
var num4 = (v) => typeof v === "number" && Number.isFinite(v) ? v : null;
|
|
52888
54715
|
function parseVault7(v, chainId, prices, tokenList) {
|
|
52889
54716
|
const address = (v?.address ?? "").toLowerCase();
|
|
52890
54717
|
const assetAddr = (v?.asset?.address ?? "").toLowerCase();
|
|
@@ -52900,14 +54727,14 @@ function parseVault7(v, chainId, prices, tokenList) {
|
|
|
52900
54727
|
parseRawAmount(totalAssetsRaw, assetDecimals)
|
|
52901
54728
|
);
|
|
52902
54729
|
const apr = {
|
|
52903
|
-
weekly:
|
|
52904
|
-
monthly:
|
|
52905
|
-
yearly:
|
|
52906
|
-
inception:
|
|
54730
|
+
weekly: num4(state.weeklyApr?.twrrNetApr),
|
|
54731
|
+
monthly: num4(state.monthlyApr?.twrrNetApr),
|
|
54732
|
+
yearly: num4(state.yearlyApr?.twrrNetApr),
|
|
54733
|
+
inception: num4(state.inceptionApr?.twrrNetApr)
|
|
52907
54734
|
};
|
|
52908
54735
|
const { rate: supplyRate, window: aprWindow } = pickApr(apr);
|
|
52909
54736
|
const oracleKey = toOracleKey(assetMeta?.assetGroup) ?? toGenericPriceKey(assetAddr, chainId);
|
|
52910
|
-
const apiTotalAssetsUsd =
|
|
54737
|
+
const apiTotalAssetsUsd = num4(state.totalAssetsUsd) ?? 0;
|
|
52911
54738
|
const impliedPriceUsd = totalAssetsFormatted > 0 ? apiTotalAssetsUsd / totalAssetsFormatted : 0;
|
|
52912
54739
|
const priceUsd = prices[oracleKey] ?? prices[assetAddr] ?? impliedPriceUsd;
|
|
52913
54740
|
const totalAssetsUsd = apiTotalAssetsUsd || totalAssetsFormatted * priceUsd;
|
|
@@ -52927,7 +54754,7 @@ function parseVault7(v, chainId, prices, tokenList) {
|
|
|
52927
54754
|
totalAssets: totalAssetsRaw,
|
|
52928
54755
|
totalSupply: totalSupplyRaw,
|
|
52929
54756
|
pricePerShare: state.pricePerShare?.toString() ?? "0",
|
|
52930
|
-
pricePerShareUsd:
|
|
54757
|
+
pricePerShareUsd: num4(state.pricePerShareUsd) ?? void 0,
|
|
52931
54758
|
supplyRate,
|
|
52932
54759
|
rewardsRate: 0,
|
|
52933
54760
|
depositRate: supplyRate,
|
|
@@ -53039,9 +54866,9 @@ async function fetchAaveEarnApiVaults(chainId, targets) {
|
|
|
53039
54866
|
const target = Number(chainId);
|
|
53040
54867
|
const byAddress = /* @__PURE__ */ new Map();
|
|
53041
54868
|
const keep = (it) => {
|
|
53042
|
-
const
|
|
53043
|
-
if (!
|
|
53044
|
-
if (!byAddress.has(
|
|
54869
|
+
const addr2 = it?.address?.toLowerCase();
|
|
54870
|
+
if (!addr2 || Number(it.chainId) !== target) return;
|
|
54871
|
+
if (!byAddress.has(addr2)) byAddress.set(addr2, it);
|
|
53045
54872
|
};
|
|
53046
54873
|
for (const owner of targets.owners) {
|
|
53047
54874
|
let cursor = null;
|
|
@@ -53110,7 +54937,7 @@ var resolveAaveEarnCuratorName = (chainId, owner) => {
|
|
|
53110
54937
|
|
|
53111
54938
|
// src/vaults/aave-earn/fetchPublic.ts
|
|
53112
54939
|
var BRAND2 = "Aave";
|
|
53113
|
-
var
|
|
54940
|
+
var toBigInt16 = (v) => {
|
|
53114
54941
|
if (v === void 0 || v === null) return void 0;
|
|
53115
54942
|
if (typeof v === "bigint") return v;
|
|
53116
54943
|
if (typeof v === "number") return BigInt(v);
|
|
@@ -53124,7 +54951,7 @@ var toBigInt15 = (v) => {
|
|
|
53124
54951
|
}
|
|
53125
54952
|
return void 0;
|
|
53126
54953
|
};
|
|
53127
|
-
var
|
|
54954
|
+
var num5 = (v) => {
|
|
53128
54955
|
const n = Number(v);
|
|
53129
54956
|
return Number.isFinite(n) ? n : 0;
|
|
53130
54957
|
};
|
|
@@ -53165,28 +54992,28 @@ var fetchAaveEarnVaults = async (chainId, multicallRetry, prices = {}, tokenList
|
|
|
53165
54992
|
for (let i = 0; i < usable.length; i++) {
|
|
53166
54993
|
const v = usable[i];
|
|
53167
54994
|
const base = i * CALLS_PER_VAULT2;
|
|
53168
|
-
const
|
|
54995
|
+
const slice2 = rawResults.slice(base, base + CALLS_PER_VAULT2);
|
|
53169
54996
|
const addressLc = v.address.toLowerCase();
|
|
53170
54997
|
const token = v.usedReserve.underlyingToken;
|
|
53171
54998
|
const underlyingLc = token.address.toLowerCase();
|
|
53172
54999
|
const assetDecimals = token.decimals;
|
|
53173
|
-
const shareDecOnChain =
|
|
55000
|
+
const shareDecOnChain = toBigInt16(slice2[1]);
|
|
53174
55001
|
const decimals = shareDecOnChain !== void 0 ? Number(shareDecOnChain) : assetDecimals;
|
|
53175
|
-
const totalSupply =
|
|
55002
|
+
const totalSupply = toBigInt16(slice2[2]);
|
|
53176
55003
|
if (totalSupply === void 0) continue;
|
|
53177
55004
|
const shareUnit = 10n ** BigInt(decimals);
|
|
53178
55005
|
const underlyingUnit = 10n ** BigInt(assetDecimals);
|
|
53179
|
-
const convertToAssets =
|
|
55006
|
+
const convertToAssets = toBigInt16(slice2[3]) ?? 0n;
|
|
53180
55007
|
const convertToShares = convertToAssets > 0n ? shareUnit * underlyingUnit / convertToAssets : 0n;
|
|
53181
|
-
const totalAssets =
|
|
55008
|
+
const totalAssets = toBigInt16(slice2[0]) ?? totalSupply * convertToAssets / shareUnit;
|
|
53182
55009
|
const totalAssetsFormatted = Number(totalAssets) / 10 ** assetDecimals;
|
|
53183
55010
|
const asset = tokenList[underlyingLc];
|
|
53184
|
-
const priceUsd = prices[underlyingLc] ?? (v.balance?.usdPerToken != null ?
|
|
55011
|
+
const priceUsd = prices[underlyingLc] ?? (v.balance?.usdPerToken != null ? num5(v.balance.usdPerToken) : void 0);
|
|
53185
55012
|
const totalAssetsUsd = priceUsd !== void 0 ? totalAssetsFormatted * priceUsd : 0;
|
|
53186
|
-
const supplyRate =
|
|
55013
|
+
const supplyRate = num5(v.vaultApr?.formatted);
|
|
53187
55014
|
const rewardsRate = 0;
|
|
53188
55015
|
const depositRate = supplyRate + rewardsRate;
|
|
53189
|
-
const fee =
|
|
55016
|
+
const fee = num5(v.fee?.value);
|
|
53190
55017
|
const symbol = (v.shareSymbol ?? "").trim();
|
|
53191
55018
|
const shareName = (v.shareName ?? "").trim();
|
|
53192
55019
|
const name = shareName || symbol;
|
|
@@ -53223,7 +55050,7 @@ var fetchAaveEarnVaults = async (chainId, multicallRetry, prices = {}, tokenList
|
|
|
53223
55050
|
};
|
|
53224
55051
|
|
|
53225
55052
|
// src/vaults/upshift/fetchPublic.ts
|
|
53226
|
-
var
|
|
55053
|
+
var num6 = (v) => typeof v === "number" && Number.isFinite(v) ? v : null;
|
|
53227
55054
|
var isEvmAddress = (a) => /^0x[0-9a-fA-F]{40}$/.test(a);
|
|
53228
55055
|
var derivePricePerShare = (totalAssetsRaw, totalSupplyRaw, shareDecimals) => {
|
|
53229
55056
|
try {
|
|
@@ -53250,12 +55077,12 @@ function parseVault8(v, chainId, prices, tokenList) {
|
|
|
53250
55077
|
const totalAssetsFormatted = Number(
|
|
53251
55078
|
parseRawAmount(totalAssetsRaw, assetDecimals)
|
|
53252
55079
|
);
|
|
53253
|
-
const base =
|
|
53254
|
-
const campaign =
|
|
55080
|
+
const base = num6(v.apy?.apy) ?? 0;
|
|
55081
|
+
const campaign = num6(v.apy?.campaignApy);
|
|
53255
55082
|
const supplyRate = apyToAprPercent(base);
|
|
53256
55083
|
const rewardsRate = campaign != null ? apyToAprPercent(campaign) : 0;
|
|
53257
55084
|
const oracleKey = toOracleKey(assetMeta?.assetGroup) ?? toGenericPriceKey(assetAddr, chainId);
|
|
53258
|
-
const apiTvlUsd =
|
|
55085
|
+
const apiTvlUsd = num6(v.latest_reported_tvl) ?? 0;
|
|
53259
55086
|
const impliedPriceUsd = totalAssetsFormatted > 0 ? apiTvlUsd / totalAssetsFormatted : 0;
|
|
53260
55087
|
const priceUsd = prices[oracleKey] ?? prices[assetAddr] ?? impliedPriceUsd;
|
|
53261
55088
|
const totalAssetsUsd = apiTvlUsd || totalAssetsFormatted * priceUsd;
|
|
@@ -53280,10 +55107,10 @@ function parseVault8(v, chainId, prices, tokenList) {
|
|
|
53280
55107
|
rewardsRate,
|
|
53281
55108
|
depositRate: supplyRate + rewardsRate,
|
|
53282
55109
|
apy: {
|
|
53283
|
-
base:
|
|
55110
|
+
base: num6(v.apy?.apy),
|
|
53284
55111
|
campaign,
|
|
53285
|
-
points:
|
|
53286
|
-
underlying:
|
|
55112
|
+
points: num6(v.apy?.pointsApy),
|
|
55113
|
+
underlying: num6(v.apy?.underlyingApy)
|
|
53287
55114
|
},
|
|
53288
55115
|
isDepositPaused: v.isDepositPaused ?? false,
|
|
53289
55116
|
isWithdrawalPaused: v.isWithdrawalPaused ?? false,
|
|
@@ -53392,9 +55219,9 @@ var asBig = (v) => {
|
|
|
53392
55219
|
return null;
|
|
53393
55220
|
}
|
|
53394
55221
|
};
|
|
53395
|
-
var
|
|
55222
|
+
var num7 = (v) => typeof v === "number" && Number.isFinite(v) ? v : null;
|
|
53396
55223
|
var toPct = (v) => {
|
|
53397
|
-
const n =
|
|
55224
|
+
const n = num7(v);
|
|
53398
55225
|
return n == null ? 0 : n * 100;
|
|
53399
55226
|
};
|
|
53400
55227
|
var deriveTotalSupply = (totalAssetsRaw, pricePerShareRaw, decimals) => {
|
|
@@ -53426,16 +55253,16 @@ function parseVault9(v, chainId, prices, tokenList) {
|
|
|
53426
55253
|
const totalAssetsFormatted = Number(
|
|
53427
55254
|
parseRawAmount(totalAssetsRaw, assetDecimals)
|
|
53428
55255
|
);
|
|
53429
|
-
const realized =
|
|
53430
|
-
const forward =
|
|
55256
|
+
const realized = num7(v.apr?.netAPR);
|
|
55257
|
+
const forward = num7(v.apr?.forwardAPR?.netAPR);
|
|
53431
55258
|
const isForwardApr = realized == null && forward != null;
|
|
53432
55259
|
const supplyRate = toPct(realized ?? forward);
|
|
53433
55260
|
const rewardsRate = toPct(v.apr?.extra?.stakingRewardsAPR);
|
|
53434
55261
|
const fee = toPct(v.apr?.fees?.performance);
|
|
53435
55262
|
const oracleKey = toOracleKey(assetMeta?.assetGroup) ?? toGenericPriceKey(assetAddr, chainId);
|
|
53436
|
-
const apiPrice =
|
|
55263
|
+
const apiPrice = num7(v.tvl?.price) ?? 0;
|
|
53437
55264
|
const priceUsd = prices[oracleKey] ?? prices[assetAddr] ?? apiPrice;
|
|
53438
|
-
const apiTvlUsd =
|
|
55265
|
+
const apiTvlUsd = num7(v.tvl?.tvl) ?? 0;
|
|
53439
55266
|
const totalAssetsUsd = apiTvlUsd || totalAssetsFormatted * priceUsd;
|
|
53440
55267
|
const name = (v.name ?? "").trim();
|
|
53441
55268
|
const symbol = (v.symbol ?? "").trim();
|
|
@@ -53871,6 +55698,7 @@ var stampVaultClassification = (data, chainId, tokenList = {}) => {
|
|
|
53871
55698
|
stampBag(data.lista, "lista");
|
|
53872
55699
|
stampBag(data.silo, "silo");
|
|
53873
55700
|
stampBag(data["euler-earn"], "euler-earn");
|
|
55701
|
+
stampBag(data.termmax, "termmax");
|
|
53874
55702
|
stampBag(data.lst, "lst");
|
|
53875
55703
|
stampBag(data.savings, "savings");
|
|
53876
55704
|
stampBag(data.lagoon, "lagoon");
|
|
@@ -54422,23 +56250,23 @@ var priceGmMarkets = async (chainId, multicallRetry, markets, prices) => {
|
|
|
54422
56250
|
const indexMax = price(prices, m.indexToken)?.max;
|
|
54423
56251
|
if (Array.isArray(dsRes) && longMax != null && shortMax != null) {
|
|
54424
56252
|
const base = i * SLOTS;
|
|
54425
|
-
const
|
|
56253
|
+
const big7 = (j) => typeof dsRes[base + j] === "bigint" ? dsRes[base + j] : 0n;
|
|
54426
56254
|
const cap = computeDepositCapacityUsd(
|
|
54427
|
-
[info?.longTokenAmount, longMax,
|
|
54428
|
-
[info?.shortTokenAmount, shortMax,
|
|
56255
|
+
[info?.longTokenAmount, longMax, big7(0), big7(2)],
|
|
56256
|
+
[info?.shortTokenAmount, shortMax, big7(1), big7(3)]
|
|
54429
56257
|
);
|
|
54430
56258
|
if (cap != null) value.depositCapacityUsd = cap;
|
|
54431
56259
|
if (indexMax != null) {
|
|
54432
56260
|
const divisor = m.longToken.toLowerCase() === m.shortToken.toLowerCase() ? 2n : 1n;
|
|
54433
|
-
const reservedUsdLong = (
|
|
54434
|
-
const reservedUsdShort = (
|
|
56261
|
+
const reservedUsdLong = (big7(4) + big7(5)) / divisor * indexMax;
|
|
56262
|
+
const reservedUsdShort = (big7(6) + big7(7)) / divisor;
|
|
54435
56263
|
const liq = computeLiquidityUsd(
|
|
54436
56264
|
info?.longTokenUsd,
|
|
54437
56265
|
info?.shortTokenUsd,
|
|
54438
56266
|
reservedUsdLong,
|
|
54439
56267
|
reservedUsdShort,
|
|
54440
|
-
|
|
54441
|
-
|
|
56268
|
+
big7(8),
|
|
56269
|
+
big7(9)
|
|
54442
56270
|
);
|
|
54443
56271
|
if (liq != null)
|
|
54444
56272
|
value.liquidityUsd = Math.max(0, Math.min(liq, value.tvlUsd));
|
|
@@ -54637,27 +56465,27 @@ var fetchGmxExecutionFees = async (chainId, multicallRetry, gasPriceWei) => {
|
|
|
54637
56465
|
} catch {
|
|
54638
56466
|
return void 0;
|
|
54639
56467
|
}
|
|
54640
|
-
const
|
|
54641
|
-
const base =
|
|
54642
|
-
const mult =
|
|
56468
|
+
const big7 = (i) => typeof res[i] === "bigint" ? res[i] : 0n;
|
|
56469
|
+
const base = big7(0);
|
|
56470
|
+
const mult = big7(1);
|
|
54643
56471
|
if (base === 0n && mult === 0n) return void 0;
|
|
54644
56472
|
const PRECISION = 10n ** 30n;
|
|
54645
56473
|
const adjusted = (opGas) => base + opGas * mult / PRECISION;
|
|
54646
56474
|
const fee = (opGas) => (adjusted(opGas) * gasPriceWei).toString();
|
|
54647
|
-
const glvExtra =
|
|
56475
|
+
const glvExtra = big7(6) * GLV_NOMINAL_MARKET_COUNT;
|
|
54648
56476
|
return {
|
|
54649
56477
|
chainId,
|
|
54650
56478
|
gasPriceWei: gasPriceWei.toString(),
|
|
54651
|
-
deposit: fee(
|
|
54652
|
-
withdrawal: fee(
|
|
54653
|
-
glvDeposit: fee(
|
|
54654
|
-
glvWithdrawal: fee(
|
|
56479
|
+
deposit: fee(big7(2)),
|
|
56480
|
+
withdrawal: fee(big7(3)),
|
|
56481
|
+
glvDeposit: fee(big7(4) + glvExtra),
|
|
56482
|
+
glvWithdrawal: fee(big7(5) + glvExtra)
|
|
54655
56483
|
};
|
|
54656
56484
|
};
|
|
54657
56485
|
|
|
54658
56486
|
// src/vaults/gmx/fetchPublic.ts
|
|
54659
56487
|
var GMX_TOKEN_DECIMALS = 18;
|
|
54660
|
-
var
|
|
56488
|
+
var num8 = (n) => typeof n === "number" && Number.isFinite(n) ? n : 0;
|
|
54661
56489
|
var minDefined = (a, b) => a == null ? b : b == null ? a : Math.min(a, b);
|
|
54662
56490
|
var glvMarketRoomUsd = (cap, priceUsd) => {
|
|
54663
56491
|
const currentUsd = Number(cap.balanceAmount) / 1e18 * priceUsd;
|
|
@@ -54691,9 +56519,9 @@ var fetchGmxVaults = async (chainId, multicallRetry, options) => {
|
|
|
54691
56519
|
indexToken: indexToken ? indexToken.toLowerCase() : void 0,
|
|
54692
56520
|
longSymbol,
|
|
54693
56521
|
shortSymbol,
|
|
54694
|
-
apy:
|
|
54695
|
-
baseApy:
|
|
54696
|
-
bonusApr:
|
|
56522
|
+
apy: num8(entry?.apy),
|
|
56523
|
+
baseApy: num8(entry?.baseApy),
|
|
56524
|
+
bonusApr: num8(entry?.bonusApr),
|
|
54697
56525
|
yieldProfile: "volatile",
|
|
54698
56526
|
denomination: denominationFor(longSymbol, shortSymbol)
|
|
54699
56527
|
};
|
|
@@ -54752,8 +56580,8 @@ var fetchGmxVaults = async (chainId, multicallRetry, options) => {
|
|
|
54752
56580
|
marketIndexToken
|
|
54753
56581
|
)
|
|
54754
56582
|
]);
|
|
54755
|
-
for (const [
|
|
54756
|
-
const e = out[
|
|
56583
|
+
for (const [addr2, v] of gmValues) {
|
|
56584
|
+
const e = out[addr2];
|
|
54757
56585
|
if (e) {
|
|
54758
56586
|
e.priceUsd = v.priceUsd;
|
|
54759
56587
|
e.tvlUsd = v.tvlUsd;
|
|
@@ -54761,12 +56589,12 @@ var fetchGmxVaults = async (chainId, multicallRetry, options) => {
|
|
|
54761
56589
|
e.depositCapacityUsd = v.depositCapacityUsd;
|
|
54762
56590
|
}
|
|
54763
56591
|
}
|
|
54764
|
-
for (const [
|
|
54765
|
-
const e = out[
|
|
56592
|
+
for (const [addr2, v] of glv.values) {
|
|
56593
|
+
const e = out[addr2];
|
|
54766
56594
|
if (!e) continue;
|
|
54767
56595
|
e.priceUsd = v.priceUsd;
|
|
54768
56596
|
e.tvlUsd = v.tvlUsd;
|
|
54769
|
-
const markets2 = glv.glvMarkets.get(
|
|
56597
|
+
const markets2 = glv.glvMarkets.get(addr2) ?? [];
|
|
54770
56598
|
let liqSum = 0;
|
|
54771
56599
|
let tvlSum = 0;
|
|
54772
56600
|
for (const m of markets2) {
|
|
@@ -54778,7 +56606,7 @@ var fetchGmxVaults = async (chainId, multicallRetry, options) => {
|
|
|
54778
56606
|
}
|
|
54779
56607
|
if (tvlSum > 0 && v.tvlUsd != null)
|
|
54780
56608
|
e.liquidityUsd = v.tvlUsd * (liqSum / tvlSum);
|
|
54781
|
-
const caps = glv.glvCaps.get(
|
|
56609
|
+
const caps = glv.glvCaps.get(addr2) ?? [];
|
|
54782
56610
|
let capacity = 0;
|
|
54783
56611
|
let known = false;
|
|
54784
56612
|
for (const cap of caps) {
|
|
@@ -54804,7 +56632,7 @@ var fetchGmxVaults = async (chainId, multicallRetry, options) => {
|
|
|
54804
56632
|
// src/vaults/gmx/fetchUser.ts
|
|
54805
56633
|
var DEFAULT_CAP = 50;
|
|
54806
56634
|
var isBig = (v) => typeof v === "bigint";
|
|
54807
|
-
var
|
|
56635
|
+
var str2 = (v) => isBig(v) ? v.toString() : "0";
|
|
54808
56636
|
var getGmxUserPositions = async (chainId, account, multicallRetry, options) => {
|
|
54809
56637
|
const empty = {
|
|
54810
56638
|
chainId,
|
|
@@ -54932,11 +56760,11 @@ var getGmxUserPositions = async (chainId, account, multicallRetry, options) => {
|
|
|
54932
56760
|
market: a.market.toLowerCase(),
|
|
54933
56761
|
initialLongToken: a.initialLongToken.toLowerCase(),
|
|
54934
56762
|
initialShortToken: a.initialShortToken.toLowerCase(),
|
|
54935
|
-
initialLongTokenAmount:
|
|
54936
|
-
initialShortTokenAmount:
|
|
54937
|
-
minOut:
|
|
54938
|
-
executionFee:
|
|
54939
|
-
updatedAtTime:
|
|
56763
|
+
initialLongTokenAmount: str2(n.initialLongTokenAmount),
|
|
56764
|
+
initialShortTokenAmount: str2(n.initialShortTokenAmount),
|
|
56765
|
+
minOut: str2(n.minMarketTokens),
|
|
56766
|
+
executionFee: str2(n.executionFee),
|
|
56767
|
+
updatedAtTime: str2(n.updatedAtTime)
|
|
54940
56768
|
});
|
|
54941
56769
|
});
|
|
54942
56770
|
withdrawalKeys.forEach((key, i) => {
|
|
@@ -54950,11 +56778,11 @@ var getGmxUserPositions = async (chainId, account, multicallRetry, options) => {
|
|
|
54950
56778
|
account: a.account.toLowerCase(),
|
|
54951
56779
|
receiver: a.receiver.toLowerCase(),
|
|
54952
56780
|
market: a.market.toLowerCase(),
|
|
54953
|
-
tokenAmount:
|
|
54954
|
-
minLongTokenAmount:
|
|
54955
|
-
minShortTokenAmount:
|
|
54956
|
-
executionFee:
|
|
54957
|
-
updatedAtTime:
|
|
56781
|
+
tokenAmount: str2(n.marketTokenAmount),
|
|
56782
|
+
minLongTokenAmount: str2(n.minLongTokenAmount),
|
|
56783
|
+
minShortTokenAmount: str2(n.minShortTokenAmount),
|
|
56784
|
+
executionFee: str2(n.executionFee),
|
|
56785
|
+
updatedAtTime: str2(n.updatedAtTime)
|
|
54958
56786
|
});
|
|
54959
56787
|
});
|
|
54960
56788
|
const glvDeposits = Array.isArray(glvRes[0]) ? glvRes[0] : [];
|
|
@@ -54971,11 +56799,11 @@ var getGmxUserPositions = async (chainId, account, multicallRetry, options) => {
|
|
|
54971
56799
|
glv: a.glv.toLowerCase(),
|
|
54972
56800
|
initialLongToken: a.initialLongToken.toLowerCase(),
|
|
54973
56801
|
initialShortToken: a.initialShortToken.toLowerCase(),
|
|
54974
|
-
initialLongTokenAmount:
|
|
54975
|
-
initialShortTokenAmount:
|
|
54976
|
-
minOut:
|
|
54977
|
-
executionFee:
|
|
54978
|
-
updatedAtTime:
|
|
56802
|
+
initialLongTokenAmount: str2(n.initialLongTokenAmount),
|
|
56803
|
+
initialShortTokenAmount: str2(n.initialShortTokenAmount),
|
|
56804
|
+
minOut: str2(n.minGlvTokens),
|
|
56805
|
+
executionFee: str2(n.executionFee),
|
|
56806
|
+
updatedAtTime: str2(n.updatedAtTime)
|
|
54979
56807
|
});
|
|
54980
56808
|
}
|
|
54981
56809
|
for (const w of glvWithdrawals) {
|
|
@@ -54988,11 +56816,11 @@ var getGmxUserPositions = async (chainId, account, multicallRetry, options) => {
|
|
|
54988
56816
|
receiver: a.receiver.toLowerCase(),
|
|
54989
56817
|
market: a.market.toLowerCase(),
|
|
54990
56818
|
glv: a.glv.toLowerCase(),
|
|
54991
|
-
tokenAmount:
|
|
54992
|
-
minLongTokenAmount:
|
|
54993
|
-
minShortTokenAmount:
|
|
54994
|
-
executionFee:
|
|
54995
|
-
updatedAtTime:
|
|
56819
|
+
tokenAmount: str2(n.glvTokenAmount),
|
|
56820
|
+
minLongTokenAmount: str2(n.minLongTokenAmount),
|
|
56821
|
+
minShortTokenAmount: str2(n.minShortTokenAmount),
|
|
56822
|
+
executionFee: str2(n.executionFee),
|
|
56823
|
+
updatedAtTime: str2(n.updatedAtTime)
|
|
54996
56824
|
});
|
|
54997
56825
|
}
|
|
54998
56826
|
return {
|
|
@@ -55083,11 +56911,11 @@ function buildVaultLookup(data) {
|
|
|
55083
56911
|
const addEntries = (bag, provider) => {
|
|
55084
56912
|
if (!bag) return;
|
|
55085
56913
|
for (const v of Object.values(bag)) {
|
|
55086
|
-
const
|
|
55087
|
-
if (map.has(
|
|
55088
|
-
map.set(
|
|
56914
|
+
const addr2 = v.address.toLowerCase();
|
|
56915
|
+
if (map.has(addr2)) continue;
|
|
56916
|
+
map.set(addr2, {
|
|
55089
56917
|
provider,
|
|
55090
|
-
address:
|
|
56918
|
+
address: addr2,
|
|
55091
56919
|
underlying: v.underlying.toLowerCase(),
|
|
55092
56920
|
symbol: v.symbol,
|
|
55093
56921
|
name: v.name,
|
|
@@ -55114,6 +56942,7 @@ function buildVaultLookup(data) {
|
|
|
55114
56942
|
addEntries(data.lista, "lista");
|
|
55115
56943
|
addEntries(data.silo, "silo");
|
|
55116
56944
|
addEntries(data["euler-earn"], "euler-earn");
|
|
56945
|
+
addEntries(data.termmax, "termmax");
|
|
55117
56946
|
addEntries(data.lst, "lst");
|
|
55118
56947
|
addEntries(data.savings, "savings");
|
|
55119
56948
|
addEntries(data.lagoon, "lagoon");
|
|
@@ -55122,7 +56951,7 @@ function buildVaultLookup(data) {
|
|
|
55122
56951
|
addEntries(data.yearn, "yearn");
|
|
55123
56952
|
return map;
|
|
55124
56953
|
}
|
|
55125
|
-
var
|
|
56954
|
+
var warn8 = (...args) => {
|
|
55126
56955
|
};
|
|
55127
56956
|
var HYPERCORE_PROVIDER_CHAIN = "999";
|
|
55128
56957
|
var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices = {}, tokenList = {}, options) => {
|
|
@@ -55135,7 +56964,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
55135
56964
|
fetchFluidFTokens(chainId, multicallRetry, prices, tokenList).then((res) => {
|
|
55136
56965
|
out.fluid = res;
|
|
55137
56966
|
}).catch((e) => {
|
|
55138
|
-
|
|
56967
|
+
warn8(
|
|
55139
56968
|
`[vaults] fluid fetch failed for chain ${chainId}:`,
|
|
55140
56969
|
e?.message ?? e
|
|
55141
56970
|
);
|
|
@@ -55147,7 +56976,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
55147
56976
|
fetchGearboxV3Pools(chainId, multicallRetry, prices, tokenList).then((res) => {
|
|
55148
56977
|
out.gearbox = res;
|
|
55149
56978
|
}).catch((e) => {
|
|
55150
|
-
|
|
56979
|
+
warn8(
|
|
55151
56980
|
`[vaults] gearbox fetch failed for chain ${chainId}:`,
|
|
55152
56981
|
e?.message ?? e
|
|
55153
56982
|
);
|
|
@@ -55159,7 +56988,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
55159
56988
|
fetchMorphoVaults(chainId, multicallRetry, prices, tokenList).then((res) => {
|
|
55160
56989
|
out.morpho = res;
|
|
55161
56990
|
}).catch((e) => {
|
|
55162
|
-
|
|
56991
|
+
warn8(
|
|
55163
56992
|
`[vaults] morpho fetch failed for chain ${chainId}:`,
|
|
55164
56993
|
e?.message ?? e
|
|
55165
56994
|
);
|
|
@@ -55171,7 +57000,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
55171
57000
|
fetchListaVaultsFromChain(chainId, multicallRetry, prices, tokenList).then((res) => {
|
|
55172
57001
|
out.lista = res;
|
|
55173
57002
|
}).catch((e) => {
|
|
55174
|
-
|
|
57003
|
+
warn8(
|
|
55175
57004
|
`[vaults] lista fetch failed for chain ${chainId}:`,
|
|
55176
57005
|
e?.message ?? e
|
|
55177
57006
|
);
|
|
@@ -55186,7 +57015,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
55186
57015
|
}).then((res) => {
|
|
55187
57016
|
out.silo = res;
|
|
55188
57017
|
}).catch((e) => {
|
|
55189
|
-
|
|
57018
|
+
warn8(
|
|
55190
57019
|
`[vaults] silo fetch failed for chain ${chainId}:`,
|
|
55191
57020
|
e?.message ?? e
|
|
55192
57021
|
);
|
|
@@ -55198,19 +57027,31 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
55198
57027
|
fetchEulerEarnVaults(chainId, prices, tokenList, multicallRetry).then((res) => {
|
|
55199
57028
|
out["euler-earn"] = res;
|
|
55200
57029
|
}).catch((e) => {
|
|
55201
|
-
|
|
57030
|
+
warn8(
|
|
55202
57031
|
`[vaults] euler-earn fetch failed for chain ${chainId}:`,
|
|
55203
57032
|
e?.message ?? e
|
|
55204
57033
|
);
|
|
55205
57034
|
})
|
|
55206
57035
|
);
|
|
55207
57036
|
}
|
|
57037
|
+
if (requested.has("termmax")) {
|
|
57038
|
+
tasks.push(
|
|
57039
|
+
fetchTermMaxVaults(chainId, multicallRetry, prices, tokenList).then((res) => {
|
|
57040
|
+
out.termmax = res;
|
|
57041
|
+
}).catch((e) => {
|
|
57042
|
+
warn8(
|
|
57043
|
+
`[vaults] termmax fetch failed for chain ${chainId}:`,
|
|
57044
|
+
e?.message ?? e
|
|
57045
|
+
);
|
|
57046
|
+
})
|
|
57047
|
+
);
|
|
57048
|
+
}
|
|
55208
57049
|
if (requested.has("lst")) {
|
|
55209
57050
|
tasks.push(
|
|
55210
57051
|
fetchLstShareTokens(chainId, multicallRetry, prices, tokenList).then((res) => {
|
|
55211
57052
|
out.lst = res;
|
|
55212
57053
|
}).catch((e) => {
|
|
55213
|
-
|
|
57054
|
+
warn8(
|
|
55214
57055
|
`[vaults] lst fetch failed for chain ${chainId}:`,
|
|
55215
57056
|
e?.message ?? e
|
|
55216
57057
|
);
|
|
@@ -55222,7 +57063,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
55222
57063
|
fetchSavingsVaults(chainId, multicallRetry, prices, tokenList).then((res) => {
|
|
55223
57064
|
out.savings = res;
|
|
55224
57065
|
}).catch((e) => {
|
|
55225
|
-
|
|
57066
|
+
warn8(
|
|
55226
57067
|
`[vaults] savings fetch failed for chain ${chainId}:`,
|
|
55227
57068
|
e?.message ?? e
|
|
55228
57069
|
);
|
|
@@ -55234,7 +57075,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
55234
57075
|
fetchLagoonVaults(chainId, prices, tokenList).then((res) => {
|
|
55235
57076
|
out.lagoon = res;
|
|
55236
57077
|
}).catch((e) => {
|
|
55237
|
-
|
|
57078
|
+
warn8(
|
|
55238
57079
|
`[vaults] lagoon fetch failed for chain ${chainId}:`,
|
|
55239
57080
|
e?.message ?? e
|
|
55240
57081
|
);
|
|
@@ -55246,7 +57087,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
55246
57087
|
fetchAaveEarnVaults(chainId, multicallRetry, prices, tokenList).then((res) => {
|
|
55247
57088
|
out["aave-earn"] = res;
|
|
55248
57089
|
}).catch((e) => {
|
|
55249
|
-
|
|
57090
|
+
warn8(
|
|
55250
57091
|
`[vaults] aave-earn fetch failed for chain ${chainId}:`,
|
|
55251
57092
|
e?.message ?? e
|
|
55252
57093
|
);
|
|
@@ -55258,7 +57099,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
55258
57099
|
fetchUpshiftVaults(chainId, prices, tokenList).then((res) => {
|
|
55259
57100
|
out.upshift = res;
|
|
55260
57101
|
}).catch((e) => {
|
|
55261
|
-
|
|
57102
|
+
warn8(
|
|
55262
57103
|
`[vaults] upshift fetch failed for chain ${chainId}:`,
|
|
55263
57104
|
e?.message ?? e
|
|
55264
57105
|
);
|
|
@@ -55270,7 +57111,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
55270
57111
|
fetchYearnVaults(chainId, multicallRetry, prices, tokenList).then((res) => {
|
|
55271
57112
|
out.yearn = res;
|
|
55272
57113
|
}).catch((e) => {
|
|
55273
|
-
|
|
57114
|
+
warn8(
|
|
55274
57115
|
`[vaults] yearn fetch failed for chain ${chainId}:`,
|
|
55275
57116
|
e?.message ?? e
|
|
55276
57117
|
);
|
|
@@ -55282,7 +57123,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
55282
57123
|
fetchHypercoreVaults().then((res) => {
|
|
55283
57124
|
out.hypercore = res;
|
|
55284
57125
|
}).catch((e) => {
|
|
55285
|
-
|
|
57126
|
+
warn8(
|
|
55286
57127
|
`[vaults] hypercore fetch failed for chain ${chainId}:`,
|
|
55287
57128
|
e?.message ?? e
|
|
55288
57129
|
);
|
|
@@ -55294,7 +57135,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
55294
57135
|
fetchGmxVaults(chainId, multicallRetry).then((res) => {
|
|
55295
57136
|
out.gmx = res;
|
|
55296
57137
|
}).catch((e) => {
|
|
55297
|
-
|
|
57138
|
+
warn8(
|
|
55298
57139
|
`[vaults] gmx fetch failed for chain ${chainId}:`,
|
|
55299
57140
|
e?.message ?? e
|
|
55300
57141
|
);
|
|
@@ -55310,7 +57151,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
55310
57151
|
);
|
|
55311
57152
|
if (fees) out.gmxExecutionFees = fees;
|
|
55312
57153
|
})().catch((e) => {
|
|
55313
|
-
|
|
57154
|
+
warn8(
|
|
55314
57155
|
`[vaults] gmx execution-fee fetch failed for chain ${chainId}:`,
|
|
55315
57156
|
e?.message ?? e
|
|
55316
57157
|
);
|
|
@@ -55618,32 +57459,32 @@ async function fetchTokenMetadata(chain, addrs) {
|
|
|
55618
57459
|
const results = await client.multicall({
|
|
55619
57460
|
allowFailure: false,
|
|
55620
57461
|
batchSize: 300,
|
|
55621
|
-
contracts: addrs.map((
|
|
57462
|
+
contracts: addrs.map((addr2) => [
|
|
55622
57463
|
{
|
|
55623
57464
|
abi: ERC20MetadataAbi,
|
|
55624
57465
|
functionName: "name",
|
|
55625
|
-
address:
|
|
57466
|
+
address: addr2,
|
|
55626
57467
|
args: []
|
|
55627
57468
|
},
|
|
55628
57469
|
{
|
|
55629
57470
|
abi: ERC20MetadataAbi,
|
|
55630
57471
|
functionName: "symbol",
|
|
55631
|
-
address:
|
|
57472
|
+
address: addr2,
|
|
55632
57473
|
args: []
|
|
55633
57474
|
},
|
|
55634
57475
|
{
|
|
55635
57476
|
abi: ERC20MetadataAbi,
|
|
55636
57477
|
functionName: "decimals",
|
|
55637
|
-
address:
|
|
57478
|
+
address: addr2,
|
|
55638
57479
|
args: []
|
|
55639
57480
|
}
|
|
55640
57481
|
]).flat()
|
|
55641
57482
|
});
|
|
55642
|
-
addrs.forEach((
|
|
57483
|
+
addrs.forEach((addr2, i) => {
|
|
55643
57484
|
const name = results[i * 3];
|
|
55644
57485
|
const symbol = results[i * 3 + 1];
|
|
55645
57486
|
const decimals = results[i * 3 + 2];
|
|
55646
|
-
const address =
|
|
57487
|
+
const address = addr2.toLowerCase();
|
|
55647
57488
|
tokens[address] = {
|
|
55648
57489
|
chainId: String(chain),
|
|
55649
57490
|
decimals,
|
|
@@ -55857,6 +57698,6 @@ async function fetchTokenBalances(chainId, account, tokens, options = {}) {
|
|
|
55857
57698
|
return parseTokenBalanceResult(rawResult, prepared.query);
|
|
55858
57699
|
}
|
|
55859
57700
|
|
|
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 };
|
|
57701
|
+
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
57702
|
//# sourceMappingURL=index.js.map
|
|
55862
57703
|
//# sourceMappingURL=index.js.map
|