@1delta/margin-fetcher 5.0.58 → 5.0.59
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-UXZECBO3.js +5 -0
- package/dist/{ccip-VK5PCUV6.js.map → ccip-UXZECBO3.js.map} +1 -1
- package/dist/{chunk-YILYOOYB.js → chunk-JUYF2XLF.js} +52 -4
- package/dist/chunk-JUYF2XLF.js.map +1 -0
- package/dist/index.d.ts +316 -19
- package/dist/index.js +1963 -893
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
- package/dist/ccip-VK5PCUV6.js +0 -5
- package/dist/chunk-YILYOOYB.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { parseAbi, keccak256, encodeAbiParameters, formatEther, BaseError, erc20Abi, stringToHex, isAddress, pad, encodeFunctionData, formatUnits, getAddress, decodeFunctionResult, decodeAbiParameters, concat, AbiEncodingLengthMismatchError, concatHex, toBytes, slice, hexToString, InvalidAddressError, boolToHex, integerRegex, numberToHex, bytesRegex, BytesSizeMismatchError, arrayRegex, UnsupportedPackedAbiType } from './chunk-
|
|
1
|
+
import { parseAbi, keccak256, encodeAbiParameters, formatEther, BaseError, erc20Abi, stringToHex, isAddress, pad, encodeFunctionData, formatUnits, getAddress, decodeFunctionResult, decodeAbiParameters, concat, AbiEncodingLengthMismatchError, concatHex, toBytes, slice, hexToString, parseAbiParameters, InvalidAddressError, boolToHex, integerRegex, numberToHex, bytesRegex, BytesSizeMismatchError, arrayRegex, UnsupportedPackedAbiType } from './chunk-JUYF2XLF.js';
|
|
2
2
|
import './chunk-BYTNVMX7.js';
|
|
3
3
|
import './chunk-PR4QN5HX.js';
|
|
4
4
|
import { Lender, isExactly, isMidnight, isTerm, isTermMax, isTeller, isListaDao, isLiquityFamily, isRiver, isInverse, isCooler, isDssType, isCompoundV3Type, isFluid, isGearboxV3, isLlamaLend, isFrankencoin, isResupply, isCurvance, isTwyne, isFraxlend, LIQUITY_FAMILY_LENDERS, isAaveType, isCompoundV3, isMultiMarket, isSiloV2Type, isSiloV3Type, isDolomite, hasCrossMarginRisk, isEulerType, isAaveV4Type, isInit, isMorphoType, isCompoundV2Type, isVenusType, isSumerType, AAVE_V3_LENDERS, AAVE_V2_LENDERS, isMorphoBlue, isAaveV2Type, isAaveV32Type, isAaveV3Type, isUsdd, isSky, isYLDR, isLista, hasSubAccounts, isTectonicType, isKineticType, isBenqiType } from '@1delta/lender-registry';
|
|
5
5
|
export { hasCrossMarginRisk, 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, inverseLendersByChain, coolerLendersByChain, llamaLendLendersByChain, usddLendersByChain, skyLendersByChain, frankencoinLendersByChain, resupplyLendersByChain, curvanceLendersByChain, fraxlendLendersByChain, twyneLendersByChain, tellerConfigByChain, tellerPoolsByChain, termMaxConfigByChain, aaveReserves, compoundV3Reserves, liquityConfigFor, liquityBranchesByChain, riverConfigFor, riverChainData, termMaxApiBaseUrl, termMaxLenderKey, inverseConfigFor, inverseChainData, coolerConfigFor, llamaLendConfigFor, llamaLendChainData, llamaLendApiBaseUrl, resupplyConfigFor, fraxlendConfigFor, dssConfigFor, dssChainData, dssDebtToken, dssDebtJoin, frankencoinConfigFor, frankencoinChainData, aaveOracles, morphoTypeMarkets, resolveMidnightApiBase,
|
|
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, coolerLendersByChain, llamaLendLendersByChain, usddLendersByChain, skyLendersByChain, frankencoinLendersByChain, resupplyLendersByChain, curvanceLendersByChain, fraxlendLendersByChain, twyneLendersByChain, tellerConfigByChain, tellerPoolsByChain, termMaxConfigByChain, aaveReserves, compoundV3Reserves, resolveTermApiBase, liquityConfigFor, liquityBranchesByChain, riverConfigFor, riverChainData, termMaxApiBaseUrl, termMaxLenderKey, inverseConfigFor, inverseChainData, coolerConfigFor, llamaLendConfigFor, llamaLendChainData, llamaLendApiBaseUrl, resupplyConfigFor, fraxlendConfigFor, dssConfigFor, dssChainData, dssDebtToken, dssDebtJoin, frankencoinConfigFor, frankencoinChainData, aaveOracles, morphoTypeMarkets, resolveMidnightApiBase, llamaLendMarketByVault, getSiloV2MarketEntry, getSiloV3MarketEntry, dolomiteEmode, curvanceConfigFor, aaveTokens, morphoTypeVaults, listaCollateralProvider, eulerConfigs, gearboxMarketCompressor, gearboxMarketConfigurators, gearboxV3LenderKey, midnightMarketsByChain, twyneConfigFor, twyneChainData, parseAaveV4SpokeLenderKey, fraxlendPairsFor, gearboxAccountCompressor, compoundV2Tokens, exactlyMarketsByChain, aaveOraclesConfig, compoundV2Oracles, compoundV2TokenArray, compoundV2OraclesConfig, compoundV3OraclesData, compoundV3BaseData, compoundV2Reserves, aaveV4Oracles, morphoTypeOracles } from '@1delta/data-sdk';
|
|
7
7
|
import lodash from 'lodash';
|
|
8
8
|
import { Chain } from '@1delta/chain-registry';
|
|
9
9
|
import { multicallRetryUniversal, getEvmClient, getEvmChain, getEvmClientUniversal } from '@1delta/providers';
|
|
@@ -7224,15 +7224,15 @@ var getAaveV2ReservesDataConverter = (lender, chainId, prices, additionalYields,
|
|
|
7224
7224
|
isActive: configData?.[8 /* isActive */],
|
|
7225
7225
|
isFrozen: configData?.[9 /* isFrozen */]
|
|
7226
7226
|
};
|
|
7227
|
-
const
|
|
7228
|
-
if (!!
|
|
7227
|
+
const aaveTokens3 = aaveTokenMap[asset];
|
|
7228
|
+
if (!!aaveTokens3) {
|
|
7229
7229
|
resultReserves[marketUid] = {
|
|
7230
7230
|
...resultReserves[marketUid],
|
|
7231
7231
|
params: {
|
|
7232
7232
|
metadata: {
|
|
7233
|
-
aToken:
|
|
7234
|
-
vToken:
|
|
7235
|
-
sToken:
|
|
7233
|
+
aToken: aaveTokens3.aToken,
|
|
7234
|
+
vToken: aaveTokens3.vToken,
|
|
7235
|
+
sToken: aaveTokens3.sToken
|
|
7236
7236
|
}
|
|
7237
7237
|
}
|
|
7238
7238
|
};
|
|
@@ -7457,15 +7457,15 @@ var getAaveV3ReservesDataConverter = (lender, chainId, prices, additionalYields,
|
|
|
7457
7457
|
};
|
|
7458
7458
|
})()
|
|
7459
7459
|
};
|
|
7460
|
-
const
|
|
7461
|
-
if (!!
|
|
7460
|
+
const aaveTokens3 = aaveTokenMap[asset];
|
|
7461
|
+
if (!!aaveTokens3) {
|
|
7462
7462
|
resultReserves[marketUid] = {
|
|
7463
7463
|
...resultReserves[marketUid],
|
|
7464
7464
|
params: {
|
|
7465
7465
|
metadata: {
|
|
7466
|
-
aToken:
|
|
7467
|
-
vToken:
|
|
7468
|
-
sToken:
|
|
7466
|
+
aToken: aaveTokens3.aToken,
|
|
7467
|
+
vToken: aaveTokens3.vToken,
|
|
7468
|
+
sToken: aaveTokens3.sToken
|
|
7469
7469
|
}
|
|
7470
7470
|
}
|
|
7471
7471
|
};
|
|
@@ -7692,15 +7692,15 @@ function parseYLDRCall(chainId, lender, additionalYields, prices, tokenList) {
|
|
|
7692
7692
|
isActive: configData?.[7 /* isActive */],
|
|
7693
7693
|
isFrozen: configData?.[8 /* isFrozen */]
|
|
7694
7694
|
};
|
|
7695
|
-
const
|
|
7696
|
-
if (!!
|
|
7695
|
+
const aaveTokens3 = aaveTokenMap[asset];
|
|
7696
|
+
if (!!aaveTokens3) {
|
|
7697
7697
|
resultReserves[marketUid] = {
|
|
7698
7698
|
...resultReserves[marketUid],
|
|
7699
7699
|
params: {
|
|
7700
7700
|
metadata: {
|
|
7701
|
-
aToken:
|
|
7702
|
-
vToken:
|
|
7703
|
-
sToken:
|
|
7701
|
+
aToken: aaveTokens3.aToken,
|
|
7702
|
+
vToken: aaveTokens3.vToken,
|
|
7703
|
+
sToken: aaveTokens3.sToken
|
|
7704
7704
|
}
|
|
7705
7705
|
}
|
|
7706
7706
|
};
|
|
@@ -7888,15 +7888,15 @@ function parseAave32(chainId, lender, prices, additionalYields, tokenList) {
|
|
|
7888
7888
|
};
|
|
7889
7889
|
})()
|
|
7890
7890
|
};
|
|
7891
|
-
const
|
|
7892
|
-
if (!!
|
|
7891
|
+
const aaveTokens3 = aaveTokenMap[asset];
|
|
7892
|
+
if (!!aaveTokens3) {
|
|
7893
7893
|
resultReserves[marketUid] = {
|
|
7894
7894
|
...resultReserves[marketUid],
|
|
7895
7895
|
params: {
|
|
7896
7896
|
metadata: {
|
|
7897
|
-
aToken:
|
|
7898
|
-
vToken:
|
|
7899
|
-
sToken:
|
|
7897
|
+
aToken: aaveTokens3.aToken,
|
|
7898
|
+
vToken: aaveTokens3.vToken,
|
|
7899
|
+
sToken: aaveTokens3.sToken
|
|
7900
7900
|
}
|
|
7901
7901
|
}
|
|
7902
7902
|
};
|
|
@@ -18816,7 +18816,7 @@ var getSiloV2ReservesDataConverter = (lender, chainId, prices, additionalYields,
|
|
|
18816
18816
|
{ self: market.silo0, other: market.silo1 },
|
|
18817
18817
|
{ self: market.silo1, other: market.silo0 }
|
|
18818
18818
|
];
|
|
18819
|
-
const
|
|
18819
|
+
const toBigInt17 = (v) => {
|
|
18820
18820
|
if (v === void 0 || v === null || v === "0x") return 0n;
|
|
18821
18821
|
if (typeof v === "bigint") return v;
|
|
18822
18822
|
try {
|
|
@@ -18828,8 +18828,8 @@ var getSiloV2ReservesDataConverter = (lender, chainId, prices, additionalYields,
|
|
|
18828
18828
|
for (let s = 0; s < 2; s++) {
|
|
18829
18829
|
const { self, other } = sides[s];
|
|
18830
18830
|
const slot = s * SILO_V2_CALLS_PER_SIDE;
|
|
18831
|
-
const totalAssetsRaw =
|
|
18832
|
-
const debtAssetsRaw =
|
|
18831
|
+
const totalAssetsRaw = toBigInt17(data[slot]);
|
|
18832
|
+
const debtAssetsRaw = toBigInt17(data[slot + 1]);
|
|
18833
18833
|
const irmConfigRaw = data[slot + 2];
|
|
18834
18834
|
const decimals = self.decimals;
|
|
18835
18835
|
const totalDeposits = Number(formatUnits(totalAssetsRaw, decimals));
|
|
@@ -18984,7 +18984,7 @@ var getSiloV3ReservesDataConverter = (lender, chainId, prices, additionalYields,
|
|
|
18984
18984
|
{ self: market.silo0, other: market.silo1 },
|
|
18985
18985
|
{ self: market.silo1, other: market.silo0 }
|
|
18986
18986
|
];
|
|
18987
|
-
const
|
|
18987
|
+
const toBigInt17 = (v) => {
|
|
18988
18988
|
if (v === void 0 || v === null || v === "0x") return 0n;
|
|
18989
18989
|
if (typeof v === "bigint") return v;
|
|
18990
18990
|
try {
|
|
@@ -18996,8 +18996,8 @@ var getSiloV3ReservesDataConverter = (lender, chainId, prices, additionalYields,
|
|
|
18996
18996
|
for (let s = 0; s < 2; s++) {
|
|
18997
18997
|
const { self, other } = sides[s];
|
|
18998
18998
|
const slot = s * SILO_V3_CALLS_PER_SIDE;
|
|
18999
|
-
const totalAssetsRaw =
|
|
19000
|
-
const debtAssetsRaw =
|
|
18999
|
+
const totalAssetsRaw = toBigInt17(data[slot]);
|
|
19000
|
+
const debtAssetsRaw = toBigInt17(data[slot + 1]);
|
|
19001
19001
|
const irmConfigRaw = data[slot + 2];
|
|
19002
19002
|
const decimals = self.decimals;
|
|
19003
19003
|
const totalDeposits = Number(formatUnits(totalAssetsRaw, decimals));
|
|
@@ -20904,12 +20904,12 @@ function convertMidnightMarketsToResponse(raw, chainId, prices = {}, _additional
|
|
|
20904
20904
|
isFrozen: false
|
|
20905
20905
|
};
|
|
20906
20906
|
});
|
|
20907
|
-
const
|
|
20907
|
+
const toLevels2 = (levels) => (levels ?? []).map((l) => ({
|
|
20908
20908
|
apr: tickToAprNumber(l.tick, ttmBig) * 100,
|
|
20909
20909
|
units: l.units.toString(),
|
|
20910
20910
|
assets: formatNr(l.assets, config.loanDecimals)
|
|
20911
20911
|
}));
|
|
20912
|
-
const marketBook = book && !matured ? { bids:
|
|
20912
|
+
const marketBook = book && !matured ? { bids: toLevels2(book.bids), asks: toLevels2(book.asks) } : void 0;
|
|
20913
20913
|
const primaryCollateral = config.collateralParams[0];
|
|
20914
20914
|
entry.params = {
|
|
20915
20915
|
market: {
|
|
@@ -21216,6 +21216,144 @@ function createTermBookSource(chainId, fetchImpl = fetch) {
|
|
|
21216
21216
|
return new TermSubgraphSource(termApiBaseUrl(chainId), fetchImpl);
|
|
21217
21217
|
}
|
|
21218
21218
|
|
|
21219
|
+
// src/lending/public-data/term/math.ts
|
|
21220
|
+
var WAD4 = 1e18;
|
|
21221
|
+
function termMaintenanceRatioToLtv(maintenanceRatio) {
|
|
21222
|
+
if (!maintenanceRatio) return 0;
|
|
21223
|
+
let r;
|
|
21224
|
+
try {
|
|
21225
|
+
r = BigInt(maintenanceRatio);
|
|
21226
|
+
} catch {
|
|
21227
|
+
return 0;
|
|
21228
|
+
}
|
|
21229
|
+
if (r <= 0n) return 0;
|
|
21230
|
+
const ratio = Number(r) / WAD4;
|
|
21231
|
+
return ratio > 0 ? 1 / ratio : 0;
|
|
21232
|
+
}
|
|
21233
|
+
function termLiquidatedDamagesToPenalty(liquidatedDamages) {
|
|
21234
|
+
if (!liquidatedDamages) return 0;
|
|
21235
|
+
try {
|
|
21236
|
+
return Number(BigInt(liquidatedDamages)) / WAD4;
|
|
21237
|
+
} catch {
|
|
21238
|
+
return 0;
|
|
21239
|
+
}
|
|
21240
|
+
}
|
|
21241
|
+
function termOfferRateToAprPct(offerRate) {
|
|
21242
|
+
if (!offerRate) return 0;
|
|
21243
|
+
let r;
|
|
21244
|
+
try {
|
|
21245
|
+
r = BigInt(offerRate);
|
|
21246
|
+
} catch {
|
|
21247
|
+
return 0;
|
|
21248
|
+
}
|
|
21249
|
+
if (r <= 0n) return 0;
|
|
21250
|
+
return Number(r) / WAD4 * 100;
|
|
21251
|
+
}
|
|
21252
|
+
|
|
21253
|
+
// src/lending/public-data/term/orderStore.ts
|
|
21254
|
+
var DEFAULT_TERM_ORDER_STORE = "https://api.global.termfinance.io/protocol";
|
|
21255
|
+
var TERM_ORDER_STORE_OVERRIDE_KEY = "__1delta_term_order_store_base__";
|
|
21256
|
+
function termOrderStoreBaseUrl(chainId) {
|
|
21257
|
+
const override = globalThis[TERM_ORDER_STORE_OVERRIDE_KEY];
|
|
21258
|
+
if (typeof override === "string" && override.length > 0) {
|
|
21259
|
+
return override.replace(/\/+$/, "");
|
|
21260
|
+
}
|
|
21261
|
+
const cfg = termConfig()?.[chainId]?.orderStoreUrl;
|
|
21262
|
+
if (typeof cfg === "string" && cfg.length > 0) {
|
|
21263
|
+
return cfg.replace(/\/+$/, "");
|
|
21264
|
+
}
|
|
21265
|
+
return DEFAULT_TERM_ORDER_STORE;
|
|
21266
|
+
}
|
|
21267
|
+
var ZERO_ADDRESS6 = "0x0000000000000000000000000000000000000000";
|
|
21268
|
+
var DEFAULT_TIMEOUT_MS = 5e3;
|
|
21269
|
+
function fillableRemaining(order, nowSec9) {
|
|
21270
|
+
if (order.taker && order.taker.toLowerCase() !== ZERO_ADDRESS6) return 0n;
|
|
21271
|
+
if (order.hasSufficientApproval === false) return 0n;
|
|
21272
|
+
let remaining;
|
|
21273
|
+
let expiry;
|
|
21274
|
+
try {
|
|
21275
|
+
remaining = BigInt(order.remainingAmount ?? order.purchaseTokenAmount);
|
|
21276
|
+
expiry = BigInt(order.expiry ?? "0");
|
|
21277
|
+
} catch {
|
|
21278
|
+
return 0n;
|
|
21279
|
+
}
|
|
21280
|
+
if (expiry <= BigInt(nowSec9)) return 0n;
|
|
21281
|
+
if (remaining <= 0n) return 0n;
|
|
21282
|
+
if (order.cachedAvailableBalance != null) {
|
|
21283
|
+
try {
|
|
21284
|
+
const avail = BigInt(order.cachedAvailableBalance);
|
|
21285
|
+
if (avail < remaining) remaining = avail;
|
|
21286
|
+
} catch {
|
|
21287
|
+
}
|
|
21288
|
+
}
|
|
21289
|
+
return remaining;
|
|
21290
|
+
}
|
|
21291
|
+
async function fetchTermStoreOrders(chainId, fetchImpl = fetch, filter = "fillable") {
|
|
21292
|
+
const base = termOrderStoreBaseUrl(chainId);
|
|
21293
|
+
const url = `${base}/orders?chainId=${chainId}`;
|
|
21294
|
+
try {
|
|
21295
|
+
const res = await fetchImpl.call(globalThis, url, {
|
|
21296
|
+
signal: AbortSignal.timeout(DEFAULT_TIMEOUT_MS)
|
|
21297
|
+
});
|
|
21298
|
+
if (!res.ok) return null;
|
|
21299
|
+
const json = await res.json();
|
|
21300
|
+
const orders = Array.isArray(json?.orders) ? json.orders : Array.isArray(json) ? json : [];
|
|
21301
|
+
const nowSec9 = Math.floor(Date.now() / 1e3);
|
|
21302
|
+
const byServicer = /* @__PURE__ */ new Map();
|
|
21303
|
+
for (const order of orders) {
|
|
21304
|
+
if (!order?.repoServicer) continue;
|
|
21305
|
+
if (order.orderKind !== "lend" && order.orderKind !== "borrow") continue;
|
|
21306
|
+
if (filter === "fillable" && fillableRemaining(order, nowSec9) <= 0n)
|
|
21307
|
+
continue;
|
|
21308
|
+
const key3 = order.repoServicer.toLowerCase();
|
|
21309
|
+
const list = byServicer.get(key3);
|
|
21310
|
+
if (list) list.push(order);
|
|
21311
|
+
else byServicer.set(key3, [order]);
|
|
21312
|
+
}
|
|
21313
|
+
return byServicer;
|
|
21314
|
+
} catch {
|
|
21315
|
+
return null;
|
|
21316
|
+
}
|
|
21317
|
+
}
|
|
21318
|
+
function toLevels(orders, loanDecimals, nowSec9) {
|
|
21319
|
+
const scale3 = 10 ** loanDecimals;
|
|
21320
|
+
return orders.map((o) => {
|
|
21321
|
+
const units = fillableRemaining(o, nowSec9);
|
|
21322
|
+
return {
|
|
21323
|
+
apr: termOfferRateToAprPct(o.offerRate),
|
|
21324
|
+
units: units.toString(),
|
|
21325
|
+
assets: Number(units) / scale3
|
|
21326
|
+
};
|
|
21327
|
+
});
|
|
21328
|
+
}
|
|
21329
|
+
function reduceSide(levels) {
|
|
21330
|
+
if (levels.length === 0) return void 0;
|
|
21331
|
+
let units = 0n;
|
|
21332
|
+
let assets = 0;
|
|
21333
|
+
for (const l of levels) {
|
|
21334
|
+
units += BigInt(l.units);
|
|
21335
|
+
assets += l.assets;
|
|
21336
|
+
}
|
|
21337
|
+
return { aprPct: levels[0].apr, units: units.toString(), assets, levels };
|
|
21338
|
+
}
|
|
21339
|
+
function toTermFillNow(orders, loanDecimals, nowSec9 = Math.floor(Date.now() / 1e3)) {
|
|
21340
|
+
if (!orders || orders.length === 0) return null;
|
|
21341
|
+
const borrowLevels = toLevels(
|
|
21342
|
+
orders.filter((o) => o.orderKind === "lend").sort((a, b) => Number(BigInt(a.offerRate) - BigInt(b.offerRate))),
|
|
21343
|
+
loanDecimals,
|
|
21344
|
+
nowSec9
|
|
21345
|
+
);
|
|
21346
|
+
const lendLevels = toLevels(
|
|
21347
|
+
orders.filter((o) => o.orderKind === "borrow").sort((a, b) => Number(BigInt(b.offerRate) - BigInt(a.offerRate))),
|
|
21348
|
+
loanDecimals,
|
|
21349
|
+
nowSec9
|
|
21350
|
+
);
|
|
21351
|
+
const borrow = reduceSide(borrowLevels);
|
|
21352
|
+
const lend = reduceSide(lendLevels);
|
|
21353
|
+
if (!borrow && !lend) return null;
|
|
21354
|
+
return { borrow, lend };
|
|
21355
|
+
}
|
|
21356
|
+
|
|
21219
21357
|
// src/lending/public-data/term/fetchPublic.ts
|
|
21220
21358
|
var TERM_BOOK_LEVELS = 20;
|
|
21221
21359
|
var LKG_TTL_SEC2 = 30 * 60;
|
|
@@ -21245,14 +21383,15 @@ async function fetchTopAndBookWithFallback2(source, chainId, config, nowSec9) {
|
|
|
21245
21383
|
}
|
|
21246
21384
|
return { top: null, book: null, auction: null };
|
|
21247
21385
|
}
|
|
21248
|
-
async function fetchTermMarkets(chainId, source = createTermBookSource(chainId)) {
|
|
21386
|
+
async function fetchTermMarkets(chainId, source = createTermBookSource(chainId), fetchOrders = fetchTermStoreOrders) {
|
|
21249
21387
|
const markets = termMarketsByChain(chainId);
|
|
21250
21388
|
if (markets.length === 0) return [];
|
|
21251
21389
|
const nowSec9 = Math.floor(Date.now() / 1e3);
|
|
21390
|
+
const storeOrders = await fetchOrders(chainId).catch(() => null);
|
|
21252
21391
|
return Promise.all(
|
|
21253
21392
|
markets.map(async (config) => {
|
|
21254
21393
|
if (Number(config.maturity) <= nowSec9) {
|
|
21255
|
-
return { config, top: null, book: null, auction: null };
|
|
21394
|
+
return { config, top: null, book: null, auction: null, fillNow: null };
|
|
21256
21395
|
}
|
|
21257
21396
|
const { top, book, auction } = await fetchTopAndBookWithFallback2(
|
|
21258
21397
|
source,
|
|
@@ -21260,34 +21399,16 @@ async function fetchTermMarkets(chainId, source = createTermBookSource(chainId))
|
|
|
21260
21399
|
config,
|
|
21261
21400
|
nowSec9
|
|
21262
21401
|
);
|
|
21263
|
-
|
|
21402
|
+
const fillNow = storeOrders ? toTermFillNow(
|
|
21403
|
+
storeOrders.get(config.servicer.toLowerCase()),
|
|
21404
|
+
config.loanDecimals,
|
|
21405
|
+
nowSec9
|
|
21406
|
+
) : null;
|
|
21407
|
+
return { config, top, book, auction, fillNow };
|
|
21264
21408
|
})
|
|
21265
21409
|
);
|
|
21266
21410
|
}
|
|
21267
21411
|
|
|
21268
|
-
// src/lending/public-data/term/math.ts
|
|
21269
|
-
var WAD4 = 1e18;
|
|
21270
|
-
function termMaintenanceRatioToLtv(maintenanceRatio) {
|
|
21271
|
-
if (!maintenanceRatio) return 0;
|
|
21272
|
-
let r;
|
|
21273
|
-
try {
|
|
21274
|
-
r = BigInt(maintenanceRatio);
|
|
21275
|
-
} catch {
|
|
21276
|
-
return 0;
|
|
21277
|
-
}
|
|
21278
|
-
if (r <= 0n) return 0;
|
|
21279
|
-
const ratio = Number(r) / WAD4;
|
|
21280
|
-
return ratio > 0 ? 1 / ratio : 0;
|
|
21281
|
-
}
|
|
21282
|
-
function termLiquidatedDamagesToPenalty(liquidatedDamages) {
|
|
21283
|
-
if (!liquidatedDamages) return 0;
|
|
21284
|
-
try {
|
|
21285
|
-
return Number(BigInt(liquidatedDamages)) / WAD4;
|
|
21286
|
-
} catch {
|
|
21287
|
-
return 0;
|
|
21288
|
-
}
|
|
21289
|
-
}
|
|
21290
|
-
|
|
21291
21412
|
// src/lending/public-data/term/convertPublic.ts
|
|
21292
21413
|
var nowSec2 = () => Math.floor(Date.now() / 1e3);
|
|
21293
21414
|
function termLenderKey(termRepoId) {
|
|
@@ -21299,7 +21420,7 @@ function fmtDuration(secs) {
|
|
|
21299
21420
|
if (secs >= 2 * 3600) return `${Math.round(secs / 3600)} hours`;
|
|
21300
21421
|
return `${Math.max(1, Math.round(secs / 60))} minutes`;
|
|
21301
21422
|
}
|
|
21302
|
-
function auctionImplications(status, matured, secondsUntilClose) {
|
|
21423
|
+
function auctionImplications(status, matured, secondsUntilClose, fillNowBorrow = false) {
|
|
21303
21424
|
const out = [];
|
|
21304
21425
|
if (matured) {
|
|
21305
21426
|
out.push(
|
|
@@ -21307,44 +21428,56 @@ function auctionImplications(status, matured, secondsUntilClose) {
|
|
|
21307
21428
|
);
|
|
21308
21429
|
return out;
|
|
21309
21430
|
}
|
|
21310
|
-
if (
|
|
21431
|
+
if (fillNowBorrow) {
|
|
21311
21432
|
out.push(
|
|
21312
|
-
|
|
21433
|
+
"Borrowing can be filled INSTANTLY against standing limit orders \u2014 the shown borrow rate is the best standing order and is the rate you actually get."
|
|
21313
21434
|
);
|
|
21435
|
+
}
|
|
21436
|
+
if (status === "open") {
|
|
21314
21437
|
out.push(
|
|
21315
|
-
"
|
|
21438
|
+
`${fillNowBorrow ? "Alternatively, borrowing" : "\u26A0 Borrowing"} is a SEALED BID into an auction${fillNowBorrow ? "" : ", not an instant loan"}. Submissions close in ${secondsUntilClose != null ? fmtDuration(secondsUntilClose) : "a limited window"}${fillNowBorrow ? "." : "; after that nothing can be borrowed until the next round is listed."}`
|
|
21316
21439
|
);
|
|
21440
|
+
if (!fillNowBorrow)
|
|
21441
|
+
out.push(
|
|
21442
|
+
"Your rate is NOT the rate shown \u2014 the shown figure is the last round\u2019s clearing rate. Your actual rate is set when this round clears, and a bid above the clearing rate may not be filled at all."
|
|
21443
|
+
);
|
|
21317
21444
|
} else if (status === "revealing") {
|
|
21318
21445
|
out.push(
|
|
21319
|
-
|
|
21446
|
+
`\u26A0 Bidding has CLOSED for this round \u2014 sealed prices are being revealed and the auction is clearing.${fillNowBorrow ? "" : " No new borrows until the next round is listed."}`
|
|
21320
21447
|
);
|
|
21321
21448
|
} else if (status === "upcoming") {
|
|
21322
21449
|
out.push(
|
|
21323
|
-
|
|
21450
|
+
`An auction round is scheduled but not yet accepting bids.${fillNowBorrow ? "" : " Borrowing becomes possible when it opens."}`
|
|
21324
21451
|
);
|
|
21325
|
-
} else {
|
|
21452
|
+
} else if (!fillNowBorrow) {
|
|
21326
21453
|
out.push(
|
|
21327
|
-
"\u26A0 NO auction is open, so this market CANNOT be borrowed right now.
|
|
21454
|
+
"\u26A0 NO auction is open and no instant limit-order liquidity is standing, so this market CANNOT be borrowed right now."
|
|
21328
21455
|
);
|
|
21329
21456
|
out.push(
|
|
21330
21457
|
"Any borrow rate shown is the last round\u2019s clearing rate \u2014 historical, not obtainable."
|
|
21331
21458
|
);
|
|
21332
21459
|
}
|
|
21333
21460
|
out.push(
|
|
21334
|
-
"Lending is still possible between rounds by buying repo tokens on the secondary market; only borrowing depends on the auction window."
|
|
21461
|
+
"Lending is still possible between rounds by buying repo tokens on the secondary market; only borrowing depends on the auction window or standing limit orders."
|
|
21335
21462
|
);
|
|
21336
21463
|
out.push(
|
|
21337
21464
|
"Fixed maturity: the debt is a static face value with no interest accrual, repayable up to the end of the repurchase window."
|
|
21338
21465
|
);
|
|
21339
21466
|
return out;
|
|
21340
21467
|
}
|
|
21341
|
-
function toFixedTermAuction(auction, now, matured = false) {
|
|
21342
|
-
const
|
|
21468
|
+
function toFixedTermAuction(auction, now, matured = false, fillNow) {
|
|
21469
|
+
const fillNowBorrow = !matured && !!fillNow?.borrow;
|
|
21470
|
+
const base = { canBorrow: fillNowBorrow, canLend: !matured };
|
|
21343
21471
|
if (!auction || auction.endTime <= now) {
|
|
21344
21472
|
return {
|
|
21345
21473
|
status: "closed",
|
|
21346
21474
|
...base,
|
|
21347
|
-
implications: auctionImplications(
|
|
21475
|
+
implications: auctionImplications(
|
|
21476
|
+
"closed",
|
|
21477
|
+
matured,
|
|
21478
|
+
void 0,
|
|
21479
|
+
fillNowBorrow
|
|
21480
|
+
)
|
|
21348
21481
|
};
|
|
21349
21482
|
}
|
|
21350
21483
|
const status = now < auction.startTime ? "upcoming" : now < auction.revealTime ? "open" : "revealing";
|
|
@@ -21353,9 +21486,14 @@ function toFixedTermAuction(auction, now, matured = false) {
|
|
|
21353
21486
|
status,
|
|
21354
21487
|
...base,
|
|
21355
21488
|
// A matured repo is never borrowable, whatever the round says.
|
|
21356
|
-
canBorrow: status === "open" && !matured,
|
|
21489
|
+
canBorrow: (status === "open" || fillNowBorrow) && !matured,
|
|
21357
21490
|
secondsUntilClose,
|
|
21358
|
-
implications: auctionImplications(
|
|
21491
|
+
implications: auctionImplications(
|
|
21492
|
+
status,
|
|
21493
|
+
matured,
|
|
21494
|
+
secondsUntilClose,
|
|
21495
|
+
fillNowBorrow
|
|
21496
|
+
),
|
|
21359
21497
|
id: auction.id,
|
|
21360
21498
|
startTime: auction.startTime,
|
|
21361
21499
|
revealTime: auction.revealTime,
|
|
@@ -21368,6 +21506,28 @@ function currencyFor2(address, decimals, tokens) {
|
|
|
21368
21506
|
const lower4 = address.toLowerCase();
|
|
21369
21507
|
return tokens[lower4] ?? { address: lower4, symbol: "", name: "", decimals };
|
|
21370
21508
|
}
|
|
21509
|
+
function toFixedTermFillNow(fillNow, canLendAtAll) {
|
|
21510
|
+
if (!fillNow || !fillNow.borrow && !fillNow.lend) return void 0;
|
|
21511
|
+
return {
|
|
21512
|
+
canBorrow: !!fillNow.borrow,
|
|
21513
|
+
canLend: canLendAtAll && !!fillNow.lend,
|
|
21514
|
+
borrowAprPct: fillNow.borrow?.aprPct,
|
|
21515
|
+
lendAprPct: fillNow.lend?.aprPct,
|
|
21516
|
+
borrowLiquidity: fillNow.borrow?.assets,
|
|
21517
|
+
lendLiquidity: fillNow.lend?.assets
|
|
21518
|
+
};
|
|
21519
|
+
}
|
|
21520
|
+
function mergeTermBook(book, fillNow) {
|
|
21521
|
+
if (!book && !fillNow) return void 0;
|
|
21522
|
+
const asks = [...book?.asks ?? [], ...fillNow?.lend?.levels ?? []].sort(
|
|
21523
|
+
(a, b) => b.apr - a.apr
|
|
21524
|
+
);
|
|
21525
|
+
const bids = [...book?.bids ?? [], ...fillNow?.borrow?.levels ?? []].sort(
|
|
21526
|
+
(a, b) => a.apr - b.apr
|
|
21527
|
+
);
|
|
21528
|
+
if (asks.length === 0 && bids.length === 0) return void 0;
|
|
21529
|
+
return { bids, asks };
|
|
21530
|
+
}
|
|
21371
21531
|
function convertTermMarketsToResponse(raw, chainId, prices = {}, _additionalYields = {
|
|
21372
21532
|
intrinsicYields: {},
|
|
21373
21533
|
lenderRewards: {},
|
|
@@ -21375,30 +21535,33 @@ function convertTermMarketsToResponse(raw, chainId, prices = {}, _additionalYiel
|
|
|
21375
21535
|
}, tokens = {}) {
|
|
21376
21536
|
const out = {};
|
|
21377
21537
|
const now = nowSec2();
|
|
21378
|
-
for (const { config, top, book, auction } of raw) {
|
|
21538
|
+
for (const { config, top, book, auction, fillNow: fillNowRaw } of raw) {
|
|
21379
21539
|
if (!config?.termRepoId || !config.purchaseToken) continue;
|
|
21380
21540
|
const m = termLenderKey(config.termRepoId);
|
|
21381
21541
|
const maturity = Number(config.maturity);
|
|
21382
21542
|
const ttm = maturity - now;
|
|
21383
21543
|
const matured = ttm <= 0;
|
|
21384
|
-
const
|
|
21385
|
-
const
|
|
21386
|
-
const
|
|
21387
|
-
const
|
|
21388
|
-
const
|
|
21544
|
+
const fillNow = matured ? null : fillNowRaw ?? null;
|
|
21545
|
+
const supplyAprPct = !matured ? Math.max(top?.supplyAprPct ?? 0, fillNow?.lend?.aprPct ?? 0) : 0;
|
|
21546
|
+
const borrowAprPct = !matured ? fillNow?.borrow?.aprPct ?? top?.borrowAprPct ?? 0 : 0;
|
|
21547
|
+
const auctionInfo = toFixedTermAuction(auction, now, matured, fillNow);
|
|
21548
|
+
const roundOpen = auctionInfo.status === "open" && !matured;
|
|
21549
|
+
const canBorrowNow = auctionInfo.canBorrow;
|
|
21550
|
+
const cardApr = fillNow?.borrow ? fillNow.borrow.aprPct : borrowAprPct;
|
|
21551
|
+
const terms = canBorrowNow && cardApr > 0 && (fillNow?.borrow || roundOpen) ? [
|
|
21389
21552
|
{
|
|
21390
21553
|
termId: 0,
|
|
21391
21554
|
durationSecs: Math.max(0, ttm),
|
|
21392
21555
|
durationDays: ttm / 86400,
|
|
21393
|
-
apr:
|
|
21556
|
+
apr: cardApr
|
|
21394
21557
|
}
|
|
21395
21558
|
] : void 0;
|
|
21396
21559
|
const loanAddr = config.purchaseToken.toLowerCase();
|
|
21397
21560
|
const loanAsset = tokens[loanAddr];
|
|
21398
21561
|
const loanKey = toOracleKey(loanAsset?.assetGroup) || toGenericPriceKey(loanAddr, chainId);
|
|
21399
21562
|
const loanPrice = prices[loanKey] ?? 0;
|
|
21400
|
-
const supplyLiquidity = top?.supplyLiquidity ?? 0;
|
|
21401
|
-
const borrowLiquidity = top?.borrowLiquidity ?? 0;
|
|
21563
|
+
const supplyLiquidity = (top?.supplyLiquidity ?? 0) + (fillNow?.lend?.assets ?? 0);
|
|
21564
|
+
const borrowLiquidity = (top?.borrowLiquidity ?? 0) + (fillNow?.borrow?.assets ?? 0);
|
|
21402
21565
|
const entry = { data: {} };
|
|
21403
21566
|
const loanUid = createMarketUid(chainId, m, loanAddr);
|
|
21404
21567
|
entry.data[loanUid] = {
|
|
@@ -21440,10 +21603,10 @@ function convertTermMarketsToResponse(raw, chainId, prices = {}, _additionalYiel
|
|
|
21440
21603
|
},
|
|
21441
21604
|
closeFactor: 1,
|
|
21442
21605
|
collateralActive: false,
|
|
21443
|
-
// Borrow needs a
|
|
21444
|
-
// `depositsEnabled` stays on the maturity alone:
|
|
21445
|
-
//
|
|
21446
|
-
borrowingEnabled:
|
|
21606
|
+
// Borrow needs a live path: an OPEN auction round OR standing Terminal 1
|
|
21607
|
+
// lend orders to fill. `depositsEnabled` stays on the maturity alone:
|
|
21608
|
+
// lending also works between rounds via the secondary repo-token book.
|
|
21609
|
+
borrowingEnabled: canBorrowNow,
|
|
21447
21610
|
depositsEnabled: auctionInfo.canLend,
|
|
21448
21611
|
hasStable: false,
|
|
21449
21612
|
// Term has no variable rate at all; between auctions there is no
|
|
@@ -21533,15 +21696,18 @@ function convertTermMarketsToResponse(raw, chainId, prices = {}, _additionalYiel
|
|
|
21533
21696
|
// per-repo servicer is the market-level venue reference.
|
|
21534
21697
|
provider: { kind: "auction", address: config.servicer },
|
|
21535
21698
|
// The origination window. `closed` (the common state between rounds)
|
|
21536
|
-
//
|
|
21537
|
-
//
|
|
21538
|
-
auction: auctionInfo
|
|
21699
|
+
// used to mean display-only; with Terminal 1, `canBorrow` can be true
|
|
21700
|
+
// while the round is closed — `fillNow` carries the instant path.
|
|
21701
|
+
auction: auctionInfo,
|
|
21702
|
+
fillNow: toFixedTermFillNow(fillNow, auctionInfo.canLend)
|
|
21539
21703
|
},
|
|
21540
21704
|
collateralParams: config.collateralParams,
|
|
21541
|
-
// Bounded book slice (top-N open orders/side) for later filtering.
|
|
21542
|
-
//
|
|
21543
|
-
//
|
|
21544
|
-
|
|
21705
|
+
// Bounded book slice (top-N open orders/side) for later filtering.
|
|
21706
|
+
// `asks` = lend-side venues (secondary repo-token orders at the
|
|
21707
|
+
// clearing APR + Terminal 1 borrow orders at their own rates, best
|
|
21708
|
+
// rate first); `bids` = borrow-side (Terminal 1 lend orders, cheapest
|
|
21709
|
+
// first — the legacy auction book has no standing bids).
|
|
21710
|
+
book: !matured ? mergeTermBook(book ?? void 0, fillNow ?? void 0) : void 0
|
|
21545
21711
|
}
|
|
21546
21712
|
};
|
|
21547
21713
|
entry.chainId = chainId;
|
|
@@ -22681,10 +22847,113 @@ var TermMaxApiSource = class {
|
|
|
22681
22847
|
function createTermMaxDataSource(chainId, fetchImpl = fetch) {
|
|
22682
22848
|
return new TermMaxApiSource(termMaxApiBase(chainId), fetchImpl);
|
|
22683
22849
|
}
|
|
22850
|
+
var RESIDUE_TTL_MS = 60 * 6e4;
|
|
22851
|
+
var RESIDUE_FAILURE_TTL_MS = 5 * 6e4;
|
|
22852
|
+
var API_TIMEOUT_MS = 4e3;
|
|
22853
|
+
var residueCache = /* @__PURE__ */ new Map();
|
|
22854
|
+
var inFlight = /* @__PURE__ */ new Map();
|
|
22855
|
+
var isStale = (e) => !e || Date.now() - e.at > (e.failed ? RESIDUE_FAILURE_TTL_MS : RESIDUE_TTL_MS);
|
|
22856
|
+
function getTermMaxMaturedResidue(chainId) {
|
|
22857
|
+
const hit = residueCache.get(chainId);
|
|
22858
|
+
if (isStale(hit)) void refreshTermMaxMaturedResidue(chainId);
|
|
22859
|
+
return hit?.markets ?? [];
|
|
22860
|
+
}
|
|
22861
|
+
function refreshTermMaxMaturedResidue(chainId) {
|
|
22862
|
+
const running = inFlight.get(chainId);
|
|
22863
|
+
if (running) return running;
|
|
22864
|
+
const p = sweep(chainId).finally(() => inFlight.delete(chainId));
|
|
22865
|
+
inFlight.set(chainId, p);
|
|
22866
|
+
return p;
|
|
22867
|
+
}
|
|
22868
|
+
var API = "https://api.termmax.ts.finance";
|
|
22869
|
+
async function fetchFullHistory(chainId) {
|
|
22870
|
+
const ctl = new AbortController();
|
|
22871
|
+
const timer = setTimeout(() => ctl.abort(), API_TIMEOUT_MS);
|
|
22872
|
+
try {
|
|
22873
|
+
const res = await fetch(
|
|
22874
|
+
`${API}/market/config/market/list?chainId=${chainId}&includeInactive=true`,
|
|
22875
|
+
{ signal: ctl.signal, headers: { Accept: "application/json" } }
|
|
22876
|
+
);
|
|
22877
|
+
if (!res.ok) return [];
|
|
22878
|
+
const body = await res.json();
|
|
22879
|
+
return Array.isArray(body?.data) ? body.data : [];
|
|
22880
|
+
} catch {
|
|
22881
|
+
return [];
|
|
22882
|
+
} finally {
|
|
22883
|
+
clearTimeout(timer);
|
|
22884
|
+
}
|
|
22885
|
+
}
|
|
22886
|
+
var TOTAL_SUPPLY_ABI = [
|
|
22887
|
+
{
|
|
22888
|
+
name: "totalSupply",
|
|
22889
|
+
type: "function",
|
|
22890
|
+
stateMutability: "view",
|
|
22891
|
+
inputs: [],
|
|
22892
|
+
outputs: [{ name: "", type: "uint256" }]
|
|
22893
|
+
}
|
|
22894
|
+
];
|
|
22895
|
+
var toConfig = (m) => {
|
|
22896
|
+
const c = m?.contracts;
|
|
22897
|
+
if (!c?.marketAddr || !c?.ftAddr || !c?.gtAddr) return void 0;
|
|
22898
|
+
return {
|
|
22899
|
+
market: String(c.marketAddr).toLowerCase(),
|
|
22900
|
+
ft: String(c.ftAddr).toLowerCase(),
|
|
22901
|
+
xt: String(c.xtAddr ?? "").toLowerCase(),
|
|
22902
|
+
gt: String(c.gtAddr).toLowerCase(),
|
|
22903
|
+
collateral: String(c.collateralAddr ?? "").toLowerCase(),
|
|
22904
|
+
debtToken: String(c.underlyingAddr ?? "").toLowerCase(),
|
|
22905
|
+
maturity: Math.floor(Date.parse(m.maturity) / 1e3),
|
|
22906
|
+
symbol: m.symbol
|
|
22907
|
+
};
|
|
22908
|
+
};
|
|
22909
|
+
async function sweep(chainId) {
|
|
22910
|
+
if (!termMaxConfigByChain(chainId)) return;
|
|
22911
|
+
const hit = residueCache.get(chainId);
|
|
22912
|
+
const nowSec9 = Math.floor(Date.now() / 1e3);
|
|
22913
|
+
const all = await fetchFullHistory(chainId);
|
|
22914
|
+
const matured = all.map(toConfig).filter((m) => !!m && m.maturity <= nowSec9);
|
|
22915
|
+
if (matured.length === 0) {
|
|
22916
|
+
if (!hit || hit.failed) {
|
|
22917
|
+
residueCache.set(chainId, { markets: hit?.markets ?? [], at: Date.now(), failed: true });
|
|
22918
|
+
}
|
|
22919
|
+
return;
|
|
22920
|
+
}
|
|
22921
|
+
const calls = matured.flatMap((m) => [
|
|
22922
|
+
{ address: m.ft, name: "totalSupply", params: [] },
|
|
22923
|
+
{ address: m.gt, name: "totalSupply", params: [] }
|
|
22924
|
+
]);
|
|
22925
|
+
let res;
|
|
22926
|
+
try {
|
|
22927
|
+
res = await multicallRetryUniversal({
|
|
22928
|
+
chain: chainId,
|
|
22929
|
+
calls,
|
|
22930
|
+
abi: TOTAL_SUPPLY_ABI,
|
|
22931
|
+
allowFailure: true
|
|
22932
|
+
});
|
|
22933
|
+
} catch {
|
|
22934
|
+
if (!hit || hit.failed) {
|
|
22935
|
+
residueCache.set(chainId, { markets: hit?.markets ?? [], at: Date.now(), failed: true });
|
|
22936
|
+
}
|
|
22937
|
+
return;
|
|
22938
|
+
}
|
|
22939
|
+
const markets = [];
|
|
22940
|
+
for (let i = 0; i < matured.length; i++) {
|
|
22941
|
+
const ft = res[2 * i];
|
|
22942
|
+
const gt = res[2 * i + 1];
|
|
22943
|
+
const ftUnknown = typeof ft !== "bigint";
|
|
22944
|
+
const gtUnknown = typeof gt !== "bigint";
|
|
22945
|
+
if (ftUnknown || gtUnknown || ft > 0n || gt > 0n) markets.push(matured[i]);
|
|
22946
|
+
}
|
|
22947
|
+
residueCache.set(chainId, { markets, at: Date.now() });
|
|
22948
|
+
}
|
|
22684
22949
|
|
|
22685
22950
|
// src/lending/public-data/termmax/fetchPublic.ts
|
|
22686
22951
|
var LKG_TTL_SEC3 = 30 * 60;
|
|
22687
22952
|
var lastGood3 = /* @__PURE__ */ new Map();
|
|
22953
|
+
var SWR_FRESH_MS = 6e4;
|
|
22954
|
+
var REFRESH_RETRY_MS = 3e4;
|
|
22955
|
+
var lastRefreshAttempt = /* @__PURE__ */ new Map();
|
|
22956
|
+
var refreshInFlight = /* @__PURE__ */ new Map();
|
|
22688
22957
|
var MARKET_CACHE_TTL_MS = 10 * 6e4;
|
|
22689
22958
|
var marketCache = /* @__PURE__ */ new Map();
|
|
22690
22959
|
var marketKey = (chainId, market) => `${chainId}:${market.toLowerCase()}`;
|
|
@@ -22710,23 +22979,48 @@ function getCachedTermMaxMarkets(chainId) {
|
|
|
22710
22979
|
}
|
|
22711
22980
|
return out;
|
|
22712
22981
|
}
|
|
22713
|
-
|
|
22714
|
-
|
|
22715
|
-
|
|
22716
|
-
|
|
22717
|
-
|
|
22982
|
+
function refreshLiveMarkets(chainId, source) {
|
|
22983
|
+
const running = refreshInFlight.get(chainId);
|
|
22984
|
+
if (running) return running;
|
|
22985
|
+
lastRefreshAttempt.set(chainId, Date.now());
|
|
22986
|
+
const p = source.getChainMarkets(chainId).then((fresh) => {
|
|
22987
|
+
if (!fresh) return;
|
|
22988
|
+
const nowSec9 = Math.floor(Date.now() / 1e3);
|
|
22718
22989
|
const live = fresh.filter((m) => m.config.maturity > nowSec9);
|
|
22719
22990
|
lastGood3.set(chainId, { markets: live, at: nowSec9 });
|
|
22720
22991
|
rememberMarkets(chainId, live);
|
|
22721
|
-
|
|
22722
|
-
|
|
22992
|
+
}).catch(() => void 0).finally(() => refreshInFlight.delete(chainId));
|
|
22993
|
+
refreshInFlight.set(chainId, p);
|
|
22994
|
+
return p;
|
|
22995
|
+
}
|
|
22996
|
+
async function fetchTermMaxMarkets(chainId, source = createTermMaxDataSource(chainId), options) {
|
|
22997
|
+
if (!termMaxConfigByChain(chainId)) return [];
|
|
22998
|
+
const nowSec9 = Math.floor(Date.now() / 1e3);
|
|
22723
22999
|
const cached = lastGood3.get(chainId);
|
|
22724
|
-
|
|
22725
|
-
|
|
22726
|
-
|
|
22727
|
-
|
|
23000
|
+
const ageSec = cached ? nowSec9 - cached.at : Infinity;
|
|
23001
|
+
let live;
|
|
23002
|
+
if (cached && ageSec <= LKG_TTL_SEC3) {
|
|
23003
|
+
live = cached.markets.filter((m) => m.config.maturity > nowSec9);
|
|
23004
|
+
const attemptedAt = lastRefreshAttempt.get(chainId) ?? 0;
|
|
23005
|
+
if (ageSec * 1e3 > SWR_FRESH_MS && Date.now() - attemptedAt > REFRESH_RETRY_MS) {
|
|
23006
|
+
void refreshLiveMarkets(chainId, source);
|
|
23007
|
+
}
|
|
23008
|
+
} else {
|
|
23009
|
+
await refreshLiveMarkets(chainId, source);
|
|
23010
|
+
const after = lastGood3.get(chainId);
|
|
23011
|
+
if (!after || nowSec9 - after.at > LKG_TTL_SEC3) return [];
|
|
23012
|
+
live = after.markets.filter((m) => m.config.maturity > nowSec9);
|
|
22728
23013
|
}
|
|
22729
|
-
|
|
23014
|
+
const markets = options?.includeMatured ? [...live, ...maturedRows(chainId, live)] : live;
|
|
23015
|
+
rememberMarkets(chainId, markets);
|
|
23016
|
+
return markets;
|
|
23017
|
+
}
|
|
23018
|
+
function maturedRows(chainId, live) {
|
|
23019
|
+
const seen = new Set(live.map((m) => m.config.market.toLowerCase()));
|
|
23020
|
+
const residue = getTermMaxMaturedResidue(chainId);
|
|
23021
|
+
return residue.filter(
|
|
23022
|
+
(config) => !seen.has(config.market.toLowerCase())
|
|
23023
|
+
).map((config) => ({ config, top: null, orders: [] }));
|
|
22730
23024
|
}
|
|
22731
23025
|
|
|
22732
23026
|
// src/lending/public-data/teller/math.ts
|
|
@@ -23221,7 +23515,23 @@ function convertTermMaxMarketsToResponse(raw, chainId, prices = {}, _additionalY
|
|
|
23221
23515
|
// product", which does not change with book depth.
|
|
23222
23516
|
variableBorrowDisabled: true,
|
|
23223
23517
|
isActive: true,
|
|
23224
|
-
isFrozen: false
|
|
23518
|
+
isFrozen: false,
|
|
23519
|
+
/**
|
|
23520
|
+
* ZERO CAPACITY once matured, stated explicitly rather than left implicit.
|
|
23521
|
+
*
|
|
23522
|
+
* `depositsEnabled: false` says it, but not every consumer reads it: the
|
|
23523
|
+
* pairs view deliberately does NOT gate on that flag (it would delete
|
|
23524
|
+
* ~3.2k Dolomite and ~480 Gearbox pairs, whose collateral-only tokens
|
|
23525
|
+
* carry `deposits_enabled = false` while staying valid collateral) and
|
|
23526
|
+
* gates on CAPACITY instead — "a provider that switches supply off must
|
|
23527
|
+
* express it as ZERO CAPACITY". Without a cap, `depositable` is computed
|
|
23528
|
+
* as NULL, which that view reads as UNLIMITED.
|
|
23529
|
+
*
|
|
23530
|
+
* Today a matured market is kept out of pairs by its disabled debt leg, so
|
|
23531
|
+
* this changes nothing there — it removes the dependence on that one flag
|
|
23532
|
+
* being the thing that saves us.
|
|
23533
|
+
*/
|
|
23534
|
+
...matured ? { supplyCap: 0, borrowCap: 0 } : {}
|
|
23225
23535
|
};
|
|
23226
23536
|
const collUid = createMarketUid(chainId, m, collAddr);
|
|
23227
23537
|
const collCapacityUSD = maxLtv > 0 ? borrowLiquidityUSD / maxLtv : borrowLiquidityUSD;
|
|
@@ -23265,6 +23575,22 @@ function convertTermMaxMarketsToResponse(raw, chainId, prices = {}, _additionalY
|
|
|
23265
23575
|
collateralActive: true,
|
|
23266
23576
|
borrowingEnabled: false,
|
|
23267
23577
|
depositsEnabled: !matured,
|
|
23578
|
+
/**
|
|
23579
|
+
* ZERO CAPACITY once matured, stated explicitly rather than left implicit.
|
|
23580
|
+
*
|
|
23581
|
+
* `depositsEnabled: false` says it, but not every consumer reads it: the
|
|
23582
|
+
* pairs view deliberately does NOT gate on that flag (it would delete
|
|
23583
|
+
* ~3.2k Dolomite and ~480 Gearbox pairs, whose collateral-only tokens
|
|
23584
|
+
* carry `deposits_enabled = false` while staying valid collateral) and
|
|
23585
|
+
* gates on CAPACITY instead — "a provider that switches supply off must
|
|
23586
|
+
* express it as ZERO CAPACITY". Without a cap, `depositable` is computed
|
|
23587
|
+
* as NULL, which that view reads as UNLIMITED.
|
|
23588
|
+
*
|
|
23589
|
+
* Today a matured market is kept out of pairs by its disabled debt leg, so
|
|
23590
|
+
* this changes nothing there — it removes the dependence on that one flag
|
|
23591
|
+
* being the thing that saves us.
|
|
23592
|
+
*/
|
|
23593
|
+
...matured ? { supplyCap: 0, borrowCap: 0 } : {},
|
|
23268
23594
|
hasStable: false,
|
|
23269
23595
|
isActive: true,
|
|
23270
23596
|
isFrozen: false
|
|
@@ -27740,7 +28066,7 @@ function bigintToLtv(v) {
|
|
|
27740
28066
|
return Number.isFinite(n) ? n / 1e18 : 0;
|
|
27741
28067
|
}
|
|
27742
28068
|
}
|
|
27743
|
-
var
|
|
28069
|
+
var ZERO_ADDRESS7 = "0x0000000000000000000000000000000000000000";
|
|
27744
28070
|
function convertSiloV3MarketsToPublicResponse(apiItems, chainId, prices, additionalYields = {
|
|
27745
28071
|
intrinsicYields: {},
|
|
27746
28072
|
lenderRewards: {},
|
|
@@ -27843,8 +28169,8 @@ function convertSiloV3MarketsToPublicResponse(apiItems, chainId, prices, additio
|
|
|
27843
28169
|
silo: self.silo.toLowerCase(),
|
|
27844
28170
|
counterpartySilo: other.silo.toLowerCase(),
|
|
27845
28171
|
siloConfig: registryEntry.siloConfig.toLowerCase(),
|
|
27846
|
-
oracle: (api.solvencyOracleAddress || self.solvencyOracle ||
|
|
27847
|
-
irm: (api.interestRateModelId || self.interestRateModel ||
|
|
28172
|
+
oracle: (api.solvencyOracleAddress || self.solvencyOracle || ZERO_ADDRESS7).toLowerCase(),
|
|
28173
|
+
irm: (api.interestRateModelId || self.interestRateModel || ZERO_ADDRESS7).toLowerCase(),
|
|
27848
28174
|
shareTokens: {
|
|
27849
28175
|
collateral: self.collateralShareToken,
|
|
27850
28176
|
protected: self.protectedShareToken,
|
|
@@ -28024,7 +28350,10 @@ async function getLenderDataFromApi(lender, chainId, prices, additionalYields, i
|
|
|
28024
28350
|
if (isCurvance(lender)) return await fetchCurvanceMarkets(lender, chainId);
|
|
28025
28351
|
if (isTwyne(lender)) return await fetchTwyneMarkets(lender, chainId);
|
|
28026
28352
|
if (isFraxlend(lender)) return await fetchFraxlendPairs(lender, chainId);
|
|
28027
|
-
if (isTermMax(lender))
|
|
28353
|
+
if (isTermMax(lender))
|
|
28354
|
+
return await fetchTermMaxMarkets(chainId, void 0, {
|
|
28355
|
+
includeMatured: true
|
|
28356
|
+
});
|
|
28028
28357
|
if (isDssType(lender)) return await fetchDssMarkets(lender, chainId);
|
|
28029
28358
|
if (isFrankencoin(lender))
|
|
28030
28359
|
return await fetchFrankencoinMarkets(lender, chainId);
|
|
@@ -28557,121 +28886,6 @@ var buildAaveV2UserCall = (chainId, lender, account) => {
|
|
|
28557
28886
|
}
|
|
28558
28887
|
}
|
|
28559
28888
|
};
|
|
28560
|
-
var getBaseAaveV3Calls = (chainId, account, lender, assetsToQuery) => {
|
|
28561
|
-
return assetsToQuery.flatMap((tk) => [
|
|
28562
|
-
{
|
|
28563
|
-
address: getAaveTypePoolDataProviderAddress(chainId, lender),
|
|
28564
|
-
name: "getUserReserveData",
|
|
28565
|
-
params: [tk, account]
|
|
28566
|
-
}
|
|
28567
|
-
]);
|
|
28568
|
-
};
|
|
28569
|
-
var buildAaveV3UserCall = (chainId, lender, account) => {
|
|
28570
|
-
const assetsToQuery = getAaveAssets(chainId, lender).sort(
|
|
28571
|
-
(a, b) => a.toLowerCase().localeCompare(b.toLowerCase())
|
|
28572
|
-
);
|
|
28573
|
-
const calls = [...getBaseAaveV3Calls(chainId, account, lender, assetsToQuery)];
|
|
28574
|
-
if (!isYLDR(lender)) {
|
|
28575
|
-
const callDataEmode = {
|
|
28576
|
-
address: getAaveTypePoolAddress(chainId, lender),
|
|
28577
|
-
name: "getUserEMode",
|
|
28578
|
-
params: [account]
|
|
28579
|
-
};
|
|
28580
|
-
calls.push(callDataEmode);
|
|
28581
|
-
}
|
|
28582
|
-
return calls;
|
|
28583
|
-
};
|
|
28584
|
-
var buildInitUserCall = (chainId, lender, account) => {
|
|
28585
|
-
const lensContract = getInitLensAddress(chainId);
|
|
28586
|
-
const calls = [];
|
|
28587
|
-
const legacyBroker = InitMarginAddresses.getLegacyFlashAggregator(chainId);
|
|
28588
|
-
if (legacyBroker) {
|
|
28589
|
-
calls.push({
|
|
28590
|
-
address: lensContract,
|
|
28591
|
-
name: "getUserPositionData",
|
|
28592
|
-
params: [account, legacyBroker]
|
|
28593
|
-
});
|
|
28594
|
-
}
|
|
28595
|
-
const currentBroker = InitMarginAddresses.getFlashAggregator(chainId);
|
|
28596
|
-
if (currentBroker) {
|
|
28597
|
-
calls.push({
|
|
28598
|
-
address: lensContract,
|
|
28599
|
-
name: "getUserPositionData",
|
|
28600
|
-
params: [account, currentBroker]
|
|
28601
|
-
});
|
|
28602
|
-
}
|
|
28603
|
-
return calls;
|
|
28604
|
-
};
|
|
28605
|
-
|
|
28606
|
-
// src/lending/user-data/compound-v3/userCallBuild.ts
|
|
28607
|
-
var buildCompoundV3UserCall = (chainId, lender, account) => {
|
|
28608
|
-
const baseAsset = getCompoundV3BaseAsset(lender, chainId)?.baseAsset;
|
|
28609
|
-
const cometContractAddress = getCompoundV3CometAddress(chainId, lender);
|
|
28610
|
-
const assets = getLenderAssets(chainId, lender).sort(
|
|
28611
|
-
(a, b) => a.toLowerCase().localeCompare(b.toLowerCase())
|
|
28612
|
-
);
|
|
28613
|
-
const assetsNoBase = assets.filter((a) => a !== baseAsset);
|
|
28614
|
-
const baseCalls = [
|
|
28615
|
-
{
|
|
28616
|
-
address: cometContractAddress,
|
|
28617
|
-
name: "balanceOf",
|
|
28618
|
-
params: [account]
|
|
28619
|
-
},
|
|
28620
|
-
{
|
|
28621
|
-
address: cometContractAddress,
|
|
28622
|
-
name: "borrowBalanceOf",
|
|
28623
|
-
params: [account]
|
|
28624
|
-
}
|
|
28625
|
-
];
|
|
28626
|
-
const callsNonBase = assetsNoBase.map((tk) => {
|
|
28627
|
-
return {
|
|
28628
|
-
address: cometContractAddress,
|
|
28629
|
-
name: "userCollateral",
|
|
28630
|
-
params: [account, tk]
|
|
28631
|
-
};
|
|
28632
|
-
});
|
|
28633
|
-
const callEarnedBalances = {
|
|
28634
|
-
address: getCompoundV3CometRewardsAddress(chainId),
|
|
28635
|
-
name: "getRewardOwed",
|
|
28636
|
-
params: [cometContractAddress, account]
|
|
28637
|
-
};
|
|
28638
|
-
const calls = [...callsNonBase, ...baseCalls, callEarnedBalances];
|
|
28639
|
-
return calls;
|
|
28640
|
-
};
|
|
28641
|
-
|
|
28642
|
-
// src/lending/user-data/compound-v2/userCallBuild.ts
|
|
28643
|
-
var buildCompoundV2UserCall = (chainId, lender, account) => {
|
|
28644
|
-
const tokens = getCompoundV2Tokens(chainId, lender).sort(
|
|
28645
|
-
(a, b) => a.cToken.toLowerCase().localeCompare(b.cToken.toLowerCase())
|
|
28646
|
-
);
|
|
28647
|
-
const comptroller = getCompoundV2Comptroller(chainId, lender);
|
|
28648
|
-
let calls = tokens.flatMap((tk) => [
|
|
28649
|
-
{
|
|
28650
|
-
address: tk.cToken,
|
|
28651
|
-
name: "balanceOfUnderlying",
|
|
28652
|
-
params: [account]
|
|
28653
|
-
},
|
|
28654
|
-
{
|
|
28655
|
-
address: tk.cToken,
|
|
28656
|
-
name: "borrowBalanceCurrent",
|
|
28657
|
-
params: [account]
|
|
28658
|
-
},
|
|
28659
|
-
{
|
|
28660
|
-
address: tk.cToken,
|
|
28661
|
-
name: "balanceOf",
|
|
28662
|
-
params: [account]
|
|
28663
|
-
}
|
|
28664
|
-
]);
|
|
28665
|
-
calls = [
|
|
28666
|
-
...calls,
|
|
28667
|
-
{
|
|
28668
|
-
address: comptroller,
|
|
28669
|
-
name: "getAssetsIn",
|
|
28670
|
-
params: [account]
|
|
28671
|
-
}
|
|
28672
|
-
];
|
|
28673
|
-
return calls;
|
|
28674
|
-
};
|
|
28675
28889
|
var MULTICALL_DEFAULT_BATCH_SIZE = 4096;
|
|
28676
28890
|
var CELO_MULTICALL_ADDRESS = "0x633987602DE5C4F337e3DbF265303A1080324204";
|
|
28677
28891
|
var BNB_MULTICALL_ADDRESS = "0x963Df249eD09c358A4819E39d9Cd5736c3087184";
|
|
@@ -28828,7 +29042,6 @@ var toSlots = (returnData, allowFailure) => {
|
|
|
28828
29042
|
}
|
|
28829
29043
|
);
|
|
28830
29044
|
};
|
|
28831
|
-
var slotValues = (slots) => slots.map((s) => s.value);
|
|
28832
29045
|
var recordPermanentFailures = (slots, offset, collector) => {
|
|
28833
29046
|
if (!collector) return;
|
|
28834
29047
|
for (let i = 0; i < slots.length; i++) {
|
|
@@ -28897,116 +29110,7 @@ var repairFailedSlots = async (chainId, contracts, slots, getEvmClient17, nextRp
|
|
|
28897
29110
|
}
|
|
28898
29111
|
return slots;
|
|
28899
29112
|
};
|
|
28900
|
-
var multicallViemAbiArray = async (chainId, abi, calls, getEvmClient17, retry = true, providerId = 0, retries = maxRetries, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, logs = false, retryFailed = false, permanentFailures, options) => {
|
|
28901
|
-
const tried = options?.tried ?? /* @__PURE__ */ new Set();
|
|
28902
|
-
const endpoint = resolveEndpoint(chainId, getEvmClient17, providerId, tried);
|
|
28903
|
-
if (!endpoint) throw new Error("No usable RPC endpoint for " + chainId);
|
|
28904
|
-
const endpointOptions = {
|
|
28905
|
-
tried,
|
|
28906
|
-
onEndpointFailure: options?.onEndpointFailure
|
|
28907
|
-
};
|
|
28908
|
-
try {
|
|
28909
|
-
const abiIsArray = isArray(abi[0]);
|
|
28910
|
-
const contracts = calls.map(({ address, name, params }, i) => ({
|
|
28911
|
-
abi: abiIsArray ? abi?.[i] : abi,
|
|
28912
|
-
address,
|
|
28913
|
-
functionName: name,
|
|
28914
|
-
args: params
|
|
28915
|
-
}));
|
|
28916
|
-
const returnData = await endpoint.client.multicall({
|
|
28917
|
-
allowFailure,
|
|
28918
|
-
batchSize,
|
|
28919
|
-
contracts
|
|
28920
|
-
});
|
|
28921
|
-
if (!allowFailure) return returnData;
|
|
28922
|
-
const slots = toSlots(returnData, true);
|
|
28923
|
-
if (retries > 0 && slots.length > 0 && slots.every((s) => isFailedCall(s.value) && !s.permanent)) {
|
|
28924
|
-
if (logs)
|
|
28925
|
-
console.log(
|
|
28926
|
-
`multicall fully failed on rpc ${endpoint.rpcId} for chain ${chainId}, failing over`
|
|
28927
|
-
);
|
|
28928
|
-
options?.onEndpointFailure?.({
|
|
28929
|
-
chainId,
|
|
28930
|
-
url: endpoint.url,
|
|
28931
|
-
rpcId: endpoint.rpcId,
|
|
28932
|
-
kind: "slots"
|
|
28933
|
-
});
|
|
28934
|
-
await sleep(backoffForRound(0));
|
|
28935
|
-
return multicallViemAbiArray(
|
|
28936
|
-
chainId,
|
|
28937
|
-
abi,
|
|
28938
|
-
calls,
|
|
28939
|
-
getEvmClient17,
|
|
28940
|
-
retry,
|
|
28941
|
-
endpoint.rpcId + 1,
|
|
28942
|
-
retries - 1,
|
|
28943
|
-
allowFailure,
|
|
28944
|
-
batchSize,
|
|
28945
|
-
logs,
|
|
28946
|
-
retryFailed,
|
|
28947
|
-
permanentFailures,
|
|
28948
|
-
endpointOptions
|
|
28949
|
-
);
|
|
28950
|
-
}
|
|
28951
|
-
const finalSlots = retryFailed ? await repairFailedSlots(
|
|
28952
|
-
chainId,
|
|
28953
|
-
contracts,
|
|
28954
|
-
slots,
|
|
28955
|
-
getEvmClient17,
|
|
28956
|
-
endpoint.rpcId + 1,
|
|
28957
|
-
batchSize,
|
|
28958
|
-
logs,
|
|
28959
|
-
MULTICALL_REPAIR_ROUNDS,
|
|
28960
|
-
endpointOptions
|
|
28961
|
-
) : slots;
|
|
28962
|
-
recordPermanentFailures(finalSlots, 0, permanentFailures);
|
|
28963
|
-
return slotValues(finalSlots);
|
|
28964
|
-
} catch (error) {
|
|
28965
|
-
if (logs) console.log("error in multicall", error);
|
|
28966
|
-
options?.onEndpointFailure?.({
|
|
28967
|
-
chainId,
|
|
28968
|
-
url: endpoint.url,
|
|
28969
|
-
rpcId: endpoint.rpcId,
|
|
28970
|
-
kind: "transport"
|
|
28971
|
-
});
|
|
28972
|
-
retries--;
|
|
28973
|
-
if (retries < 0) throw new Error("Failed too often");
|
|
28974
|
-
await sleep(backoffForRound(0));
|
|
28975
|
-
return multicallViemAbiArray(
|
|
28976
|
-
chainId,
|
|
28977
|
-
abi,
|
|
28978
|
-
calls,
|
|
28979
|
-
getEvmClient17,
|
|
28980
|
-
retry,
|
|
28981
|
-
endpoint.rpcId + 1,
|
|
28982
|
-
retries,
|
|
28983
|
-
allowFailure,
|
|
28984
|
-
batchSize,
|
|
28985
|
-
logs,
|
|
28986
|
-
retryFailed,
|
|
28987
|
-
permanentFailures,
|
|
28988
|
-
endpointOptions
|
|
28989
|
-
);
|
|
28990
|
-
}
|
|
28991
|
-
};
|
|
28992
29113
|
var multicallShardedAbiArray = async (chainId, abi, calls, getEvmClient17, poolSize, retries = maxRetries, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, logs = false, retryFailed = false, permanentFailures, options) => {
|
|
28993
|
-
if (poolSize <= 1) {
|
|
28994
|
-
return multicallViemAbiArray(
|
|
28995
|
-
chainId,
|
|
28996
|
-
abi,
|
|
28997
|
-
calls,
|
|
28998
|
-
getEvmClient17,
|
|
28999
|
-
true,
|
|
29000
|
-
0,
|
|
29001
|
-
retries,
|
|
29002
|
-
allowFailure,
|
|
29003
|
-
batchSize,
|
|
29004
|
-
logs,
|
|
29005
|
-
retryFailed,
|
|
29006
|
-
permanentFailures,
|
|
29007
|
-
options
|
|
29008
|
-
);
|
|
29009
|
-
}
|
|
29010
29114
|
const abiIsArray = isArray(abi[0]);
|
|
29011
29115
|
const contracts = calls.map(({ address, name, params }, i) => ({
|
|
29012
29116
|
abi: abiIsArray ? abi?.[i] : abi,
|
|
@@ -29215,13 +29319,484 @@ function prepareMulticallInputs(abi, calls) {
|
|
|
29215
29319
|
abi: abiIsArray ? abi[i] : abi
|
|
29216
29320
|
}));
|
|
29217
29321
|
}
|
|
29322
|
+
var POSITION_LENS_V3 = "0xb05B8adB2675A43513A0198B962F5abAF3bc9edf";
|
|
29323
|
+
var LENS_FAMILY = {
|
|
29324
|
+
COMPOUND_V2: 1,
|
|
29325
|
+
SILO: 2,
|
|
29326
|
+
LLAMALEND: 3,
|
|
29327
|
+
/**
|
|
29328
|
+
* Liquity family (Liquity V2 + every fork). Implemented in `PositionLens.sol`
|
|
29329
|
+
* but **not in any deployed contract** — v1 carries families 1-3, and adding a
|
|
29330
|
+
* family changes the creation code and therefore the address.
|
|
29331
|
+
*
|
|
29332
|
+
* Declared here on purpose, and deliberately absent from `V1_FAMILIES`: a
|
|
29333
|
+
* caller that wires this family gets `undefined` from `getPositionLensFor` on
|
|
29334
|
+
* every chain and takes the per-market probe, which is exactly right until a v2
|
|
29335
|
+
* is deployed and the map below is updated per chain.
|
|
29336
|
+
*/
|
|
29337
|
+
LIQUITY: 4,
|
|
29338
|
+
/** Aave V2 + V3 (shared `getUserReserveData` shape). Not in any deployed contract. */
|
|
29339
|
+
AAVE: 5,
|
|
29340
|
+
/** Compound V3 / Comet. Not in any deployed contract. */
|
|
29341
|
+
COMET: 6,
|
|
29342
|
+
/**
|
|
29343
|
+
* Morpho Blue + Lista/Moolah, ported from the standalone `MorphoLens` so both
|
|
29344
|
+
* can share ONE address. The packed layout is byte-identical to that contract's
|
|
29345
|
+
* `getUserDataCompact` — verified against the live deployment — so the existing
|
|
29346
|
+
* decoder keeps working unchanged. Not in any deployed PositionLens yet: until
|
|
29347
|
+
* one declares it, Morpho keeps using `MORPHO_LENS`.
|
|
29348
|
+
*/
|
|
29349
|
+
MORPHO: 7,
|
|
29350
|
+
/** Aave V4, per spoke. Not in any deployed contract. */
|
|
29351
|
+
AAVE_V4: 8,
|
|
29352
|
+
/** Term Finance. Not in any deployed contract. */
|
|
29353
|
+
TERM: 9,
|
|
29354
|
+
/** Inverse FiRM. Not in any deployed contract. */
|
|
29355
|
+
INVERSE: 10,
|
|
29356
|
+
/** Fraxlend. Not in any deployed contract. */
|
|
29357
|
+
FRAXLEND: 11,
|
|
29358
|
+
/** River (Satoshi). Not in any deployed contract. */
|
|
29359
|
+
RIVER: 12,
|
|
29360
|
+
/** Morpho Midnight. Not in any deployed contract. */
|
|
29361
|
+
MIDNIGHT: 13,
|
|
29362
|
+
/**
|
|
29363
|
+
* Teller — DISCOVERY FOLDED IN. Its builder costs ~1.7 s across six chains and
|
|
29364
|
+
* issues zero batch calls: it is entirely pre-flight. Not deployed yet.
|
|
29365
|
+
*/
|
|
29366
|
+
TELLER: 14,
|
|
29367
|
+
/**
|
|
29368
|
+
* Resupply — discovery folded in, and the roster is read from the chain: there
|
|
29369
|
+
* is no published pair list, `getAllPairAddresses` IS the discovery. Not
|
|
29370
|
+
* deployed yet.
|
|
29371
|
+
*/
|
|
29372
|
+
RESUPPLY: 15
|
|
29373
|
+
};
|
|
29374
|
+
var V3_WITHHELD = /* @__PURE__ */ new Set([
|
|
29375
|
+
LENS_FAMILY.AAVE,
|
|
29376
|
+
LENS_FAMILY.AAVE_V4
|
|
29377
|
+
]);
|
|
29378
|
+
var V3_FAMILIES = new Set(
|
|
29379
|
+
Object.values(LENS_FAMILY).filter(
|
|
29380
|
+
(f) => !V3_WITHHELD.has(f)
|
|
29381
|
+
)
|
|
29382
|
+
);
|
|
29383
|
+
var v3 = () => ({
|
|
29384
|
+
address: POSITION_LENS_V3,
|
|
29385
|
+
families: V3_FAMILIES
|
|
29386
|
+
});
|
|
29387
|
+
var POSITION_LENS = {
|
|
29388
|
+
[Chain.ETHEREUM_MAINNET]: v3(),
|
|
29389
|
+
[Chain.ARBITRUM_ONE]: v3(),
|
|
29390
|
+
[Chain.AVALANCHE_C_CHAIN]: v3(),
|
|
29391
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]: v3(),
|
|
29392
|
+
[Chain.BASE]: v3(),
|
|
29393
|
+
[Chain.SONIC_MAINNET]: v3(),
|
|
29394
|
+
[Chain.SEI_NETWORK]: v3(),
|
|
29395
|
+
[Chain.KATANA]: v3(),
|
|
29396
|
+
[Chain.HYPEREVM]: v3(),
|
|
29397
|
+
[Chain.MANTLE]: v3(),
|
|
29398
|
+
[Chain.XDC_NETWORK]: v3(),
|
|
29399
|
+
[Chain.OP_MAINNET]: v3(),
|
|
29400
|
+
[Chain.POLYGON_MAINNET]: v3(),
|
|
29401
|
+
[Chain.LINEA]: v3(),
|
|
29402
|
+
[Chain.SONEIUM]: v3(),
|
|
29403
|
+
[Chain.PLASMA_MAINNET]: v3(),
|
|
29404
|
+
[Chain.HEMI_NETWORK]: v3(),
|
|
29405
|
+
[Chain.SCROLL]: v3(),
|
|
29406
|
+
[Chain.FLARE_MAINNET]: v3(),
|
|
29407
|
+
[Chain.KAIA_MAINNET]: v3()
|
|
29408
|
+
};
|
|
29409
|
+
var getPositionLensFor = (chainId, family) => {
|
|
29410
|
+
const dep = POSITION_LENS[chainId];
|
|
29411
|
+
if (!dep || !dep.families.has(family)) return void 0;
|
|
29412
|
+
return dep.address;
|
|
29413
|
+
};
|
|
29414
|
+
var PositionLensAbi = [
|
|
29415
|
+
{
|
|
29416
|
+
inputs: [
|
|
29417
|
+
{
|
|
29418
|
+
components: [
|
|
29419
|
+
{ name: "family", type: "uint8" },
|
|
29420
|
+
{ name: "payload", type: "bytes" }
|
|
29421
|
+
],
|
|
29422
|
+
name: "queries",
|
|
29423
|
+
type: "tuple[]"
|
|
29424
|
+
},
|
|
29425
|
+
{ name: "user", type: "address" }
|
|
29426
|
+
],
|
|
29427
|
+
name: "getUserData",
|
|
29428
|
+
outputs: [{ name: "", type: "bytes[]" }],
|
|
29429
|
+
stateMutability: "nonpayable",
|
|
29430
|
+
type: "function"
|
|
29431
|
+
}
|
|
29432
|
+
];
|
|
29433
|
+
var WORD = 32;
|
|
29434
|
+
function readBE(buf, off, len) {
|
|
29435
|
+
let v = 0n;
|
|
29436
|
+
for (let i = 0; i < len; i++) v = v << 8n | BigInt(buf[off + i]);
|
|
29437
|
+
return v;
|
|
29438
|
+
}
|
|
29439
|
+
function asInt256(v) {
|
|
29440
|
+
return v >= 1n << 255n ? v - (1n << 256n) : v;
|
|
29441
|
+
}
|
|
29442
|
+
function toBytes2(hex) {
|
|
29443
|
+
const h = hex.startsWith("0x") ? hex.slice(2) : hex;
|
|
29444
|
+
if (h.length === 0) return new Uint8Array(0);
|
|
29445
|
+
const out = new Uint8Array(h.length / 2);
|
|
29446
|
+
for (let i = 0; i < out.length; i++) out[i] = parseInt(h.slice(i * 2, i * 2 + 2), 16);
|
|
29447
|
+
return out;
|
|
29448
|
+
}
|
|
29449
|
+
function decodeLensRows(blob, wordCount, headerBytes = 0, flagBytes = 1) {
|
|
29450
|
+
const buf = toBytes2(blob);
|
|
29451
|
+
const minimum = headerBytes + 2;
|
|
29452
|
+
if (buf.length < minimum) {
|
|
29453
|
+
throw new Error(`position-lens: blob too short (${buf.length} < ${minimum})`);
|
|
29454
|
+
}
|
|
29455
|
+
const header = buf.slice(0, headerBytes);
|
|
29456
|
+
const count = Number(readBE(buf, headerBytes, 2));
|
|
29457
|
+
const entrySize = 2 + flagBytes + wordCount * WORD;
|
|
29458
|
+
const expected = minimum + count * entrySize;
|
|
29459
|
+
if (buf.length !== expected) {
|
|
29460
|
+
throw new Error(
|
|
29461
|
+
`position-lens: blob is ${buf.length} bytes, expected ${expected} for ${count} rows of ${wordCount} words`
|
|
29462
|
+
);
|
|
29463
|
+
}
|
|
29464
|
+
const rows = [];
|
|
29465
|
+
let off = minimum;
|
|
29466
|
+
for (let i = 0; i < count; i++) {
|
|
29467
|
+
const index = Number(readBE(buf, off, 2));
|
|
29468
|
+
const flags = flagBytes === 1 ? Number(readBE(buf, off + 2, 1)) : 0;
|
|
29469
|
+
off += 2 + flagBytes;
|
|
29470
|
+
const words = [];
|
|
29471
|
+
for (let k = 0; k < wordCount; k++) {
|
|
29472
|
+
words.push(readBE(buf, off, WORD));
|
|
29473
|
+
off += WORD;
|
|
29474
|
+
}
|
|
29475
|
+
rows.push({ index, flags, words });
|
|
29476
|
+
}
|
|
29477
|
+
return { header, rows };
|
|
29478
|
+
}
|
|
29479
|
+
|
|
29480
|
+
// src/lending/user-data/aave-v3-type/lens.ts
|
|
29481
|
+
var ZERO2 = "0x0000000000000000000000000000000000000000";
|
|
29482
|
+
var AAVE_LENS_HEADER_BYTES = 3;
|
|
29483
|
+
var HEADER_EMODE_OK = 1;
|
|
29484
|
+
var HEADER_CONFIG_OK = 2;
|
|
29485
|
+
var AAVE_LENS_WORDS = 7;
|
|
29486
|
+
var reserveTuple = (tokens, asset) => {
|
|
29487
|
+
const t = tokens?.[asset.toLowerCase()];
|
|
29488
|
+
if (!t?.aToken || !t?.vToken) return void 0;
|
|
29489
|
+
return [asset, t.aToken, t.vToken, t.sToken ?? ZERO2];
|
|
29490
|
+
};
|
|
29491
|
+
var usesAaveLens = (chainId, lender) => {
|
|
29492
|
+
if (getPositionLensFor(chainId, LENS_FAMILY.AAVE) === void 0) return false;
|
|
29493
|
+
if (!getAaveTypePoolDataProviderAddress(chainId, lender) || !getAaveTypePoolAddress(chainId, lender)) {
|
|
29494
|
+
return false;
|
|
29495
|
+
}
|
|
29496
|
+
const tokens = aaveTokens()?.[lender]?.[chainId];
|
|
29497
|
+
if (!tokens) return false;
|
|
29498
|
+
const assets = getAaveAssets(chainId, lender);
|
|
29499
|
+
if (assets.length === 0) return false;
|
|
29500
|
+
return assets.every((a) => reserveTuple(tokens, a) !== void 0);
|
|
29501
|
+
};
|
|
29502
|
+
var buildAaveLensCall = (chainId, lender, account, assetsToQuery, withEMode) => {
|
|
29503
|
+
const lens = getPositionLensFor(chainId, LENS_FAMILY.AAVE);
|
|
29504
|
+
if (!lens) return [];
|
|
29505
|
+
const tokens = aaveTokens()?.[lender]?.[chainId] ?? {};
|
|
29506
|
+
const reserves = [];
|
|
29507
|
+
for (const asset of assetsToQuery) {
|
|
29508
|
+
const t = reserveTuple(tokens, asset);
|
|
29509
|
+
if (!t) return [];
|
|
29510
|
+
reserves.push(t);
|
|
29511
|
+
}
|
|
29512
|
+
const payload = encodeAbiParameters(
|
|
29513
|
+
parseAbiParameters("(address,address,address,address)[], address, address"),
|
|
29514
|
+
[
|
|
29515
|
+
reserves,
|
|
29516
|
+
getAaveTypePoolDataProviderAddress(chainId, lender),
|
|
29517
|
+
// A zero pool disables the e-mode read, which is exactly what YLDR wants:
|
|
29518
|
+
// it has no `getUserEMode` and the walk omits that call for it too.
|
|
29519
|
+
withEMode ? getAaveTypePoolAddress(chainId, lender) : ZERO2
|
|
29520
|
+
]
|
|
29521
|
+
);
|
|
29522
|
+
return [
|
|
29523
|
+
{
|
|
29524
|
+
address: lens,
|
|
29525
|
+
name: "getUserData",
|
|
29526
|
+
params: [[{ family: LENS_FAMILY.AAVE, payload }], account],
|
|
29527
|
+
abi: PositionLensAbi
|
|
29528
|
+
}
|
|
29529
|
+
];
|
|
29530
|
+
};
|
|
29531
|
+
var rebuildAaveReserveData = (blobs, assetCount, withEMode) => {
|
|
29532
|
+
if (isFailedCall(blobs) || !Array.isArray(blobs) || blobs.length !== 1) {
|
|
29533
|
+
return void 0;
|
|
29534
|
+
}
|
|
29535
|
+
let decoded;
|
|
29536
|
+
try {
|
|
29537
|
+
decoded = decodeLensRows(
|
|
29538
|
+
blobs[0],
|
|
29539
|
+
AAVE_LENS_WORDS,
|
|
29540
|
+
AAVE_LENS_HEADER_BYTES,
|
|
29541
|
+
1
|
|
29542
|
+
);
|
|
29543
|
+
} catch {
|
|
29544
|
+
return void 0;
|
|
29545
|
+
}
|
|
29546
|
+
const { header, rows } = decoded;
|
|
29547
|
+
const eModeOk = (header[0] & HEADER_EMODE_OK) !== 0;
|
|
29548
|
+
if (withEMode && !eModeOk) return void 0;
|
|
29549
|
+
const eMode = header[1] << 8 | header[2];
|
|
29550
|
+
void ((header[0] & HEADER_CONFIG_OK) !== 0);
|
|
29551
|
+
const out = Array.from({ length: assetCount }, () => [
|
|
29552
|
+
0n,
|
|
29553
|
+
0n,
|
|
29554
|
+
0n,
|
|
29555
|
+
0n,
|
|
29556
|
+
0n,
|
|
29557
|
+
0n,
|
|
29558
|
+
0n,
|
|
29559
|
+
0n,
|
|
29560
|
+
false
|
|
29561
|
+
]);
|
|
29562
|
+
for (const r of rows) {
|
|
29563
|
+
if (r.index >= assetCount) return void 0;
|
|
29564
|
+
const [
|
|
29565
|
+
aTokenBalance,
|
|
29566
|
+
stableDebt,
|
|
29567
|
+
variableDebt,
|
|
29568
|
+
principalStable,
|
|
29569
|
+
scaledVariable,
|
|
29570
|
+
stableRate
|
|
29571
|
+
] = r.words;
|
|
29572
|
+
out[r.index] = [
|
|
29573
|
+
aTokenBalance,
|
|
29574
|
+
stableDebt,
|
|
29575
|
+
variableDebt,
|
|
29576
|
+
principalStable,
|
|
29577
|
+
scaledVariable,
|
|
29578
|
+
stableRate,
|
|
29579
|
+
0n,
|
|
29580
|
+
// liquidityRate — see the note above
|
|
29581
|
+
0n,
|
|
29582
|
+
// stableRateLastUpdated
|
|
29583
|
+
(r.flags & 1) === 1
|
|
29584
|
+
];
|
|
29585
|
+
}
|
|
29586
|
+
if (withEMode) out.push(eMode);
|
|
29587
|
+
return out;
|
|
29588
|
+
};
|
|
29589
|
+
|
|
29590
|
+
// src/lending/user-data/aave-v3-type/userCallBuild.ts
|
|
29591
|
+
var getBaseAaveV3Calls = (chainId, account, lender, assetsToQuery) => {
|
|
29592
|
+
return assetsToQuery.flatMap((tk) => [
|
|
29593
|
+
{
|
|
29594
|
+
address: getAaveTypePoolDataProviderAddress(chainId, lender),
|
|
29595
|
+
name: "getUserReserveData",
|
|
29596
|
+
params: [tk, account]
|
|
29597
|
+
}
|
|
29598
|
+
]);
|
|
29599
|
+
};
|
|
29600
|
+
var buildAaveV3UserCall = (chainId, lender, account) => {
|
|
29601
|
+
const assetsToQuery = getAaveAssets(chainId, lender).sort(
|
|
29602
|
+
(a, b) => a.toLowerCase().localeCompare(b.toLowerCase())
|
|
29603
|
+
);
|
|
29604
|
+
const withEMode = !isYLDR(lender);
|
|
29605
|
+
if (withEMode && usesAaveLens(chainId, lender)) {
|
|
29606
|
+
return buildAaveLensCall(
|
|
29607
|
+
chainId,
|
|
29608
|
+
lender,
|
|
29609
|
+
account,
|
|
29610
|
+
assetsToQuery,
|
|
29611
|
+
withEMode
|
|
29612
|
+
);
|
|
29613
|
+
}
|
|
29614
|
+
const calls = [...getBaseAaveV3Calls(chainId, account, lender, assetsToQuery)];
|
|
29615
|
+
if (withEMode) {
|
|
29616
|
+
const callDataEmode = {
|
|
29617
|
+
address: getAaveTypePoolAddress(chainId, lender),
|
|
29618
|
+
name: "getUserEMode",
|
|
29619
|
+
params: [account]
|
|
29620
|
+
};
|
|
29621
|
+
calls.push(callDataEmode);
|
|
29622
|
+
}
|
|
29623
|
+
return calls;
|
|
29624
|
+
};
|
|
29625
|
+
var buildInitUserCall = (chainId, lender, account) => {
|
|
29626
|
+
const lensContract = getInitLensAddress(chainId);
|
|
29627
|
+
const calls = [];
|
|
29628
|
+
const legacyBroker = InitMarginAddresses.getLegacyFlashAggregator(chainId);
|
|
29629
|
+
if (legacyBroker) {
|
|
29630
|
+
calls.push({
|
|
29631
|
+
address: lensContract,
|
|
29632
|
+
name: "getUserPositionData",
|
|
29633
|
+
params: [account, legacyBroker]
|
|
29634
|
+
});
|
|
29635
|
+
}
|
|
29636
|
+
const currentBroker = InitMarginAddresses.getFlashAggregator(chainId);
|
|
29637
|
+
if (currentBroker) {
|
|
29638
|
+
calls.push({
|
|
29639
|
+
address: lensContract,
|
|
29640
|
+
name: "getUserPositionData",
|
|
29641
|
+
params: [account, currentBroker]
|
|
29642
|
+
});
|
|
29643
|
+
}
|
|
29644
|
+
return calls;
|
|
29645
|
+
};
|
|
29646
|
+
|
|
29647
|
+
// src/lending/user-data/compound-v3/lens.ts
|
|
29648
|
+
var HEADER_BYTES = 64;
|
|
29649
|
+
var ROW_BYTES = 18;
|
|
29650
|
+
var usesCometLens = (chainId, lender) => getPositionLensFor(chainId, LENS_FAMILY.COMET) !== void 0 && !!getCompoundV3CometAddress(chainId, lender);
|
|
29651
|
+
var buildCometLensCall = (chainId, comet, collaterals, account) => {
|
|
29652
|
+
const lens = getPositionLensFor(chainId, LENS_FAMILY.COMET);
|
|
29653
|
+
if (!lens || !comet || collaterals.some((c) => !c)) return [];
|
|
29654
|
+
const payload = encodeAbiParameters(
|
|
29655
|
+
parseAbiParameters("address, address[]"),
|
|
29656
|
+
[comet, collaterals]
|
|
29657
|
+
);
|
|
29658
|
+
return [
|
|
29659
|
+
{
|
|
29660
|
+
address: lens,
|
|
29661
|
+
name: "getUserData",
|
|
29662
|
+
params: [[{ family: LENS_FAMILY.COMET, payload }], account],
|
|
29663
|
+
abi: PositionLensAbi
|
|
29664
|
+
}
|
|
29665
|
+
];
|
|
29666
|
+
};
|
|
29667
|
+
var rebuildCometData = (blobs, collateralCount) => {
|
|
29668
|
+
if (isFailedCall(blobs) || !Array.isArray(blobs) || blobs.length !== 1) {
|
|
29669
|
+
return void 0;
|
|
29670
|
+
}
|
|
29671
|
+
const hex = blobs[0];
|
|
29672
|
+
if (typeof hex !== "string" || !hex.startsWith("0x")) return void 0;
|
|
29673
|
+
const buf = Buffer.from(hex.slice(2), "hex");
|
|
29674
|
+
if (buf.length < HEADER_BYTES + 2) return void 0;
|
|
29675
|
+
const word = (off2) => BigInt("0x" + buf.subarray(off2, off2 + 32).toString("hex"));
|
|
29676
|
+
const baseSupply = word(0);
|
|
29677
|
+
const baseBorrow = word(32);
|
|
29678
|
+
const count = buf.readUInt16BE(HEADER_BYTES);
|
|
29679
|
+
if (buf.length !== HEADER_BYTES + 2 + count * ROW_BYTES) return void 0;
|
|
29680
|
+
const out = Array.from({ length: collateralCount }, () => [0n, 0n]);
|
|
29681
|
+
let off = HEADER_BYTES + 2;
|
|
29682
|
+
for (let i = 0; i < count; i++) {
|
|
29683
|
+
const index = buf.readUInt16BE(off);
|
|
29684
|
+
if (index >= collateralCount) return void 0;
|
|
29685
|
+
const balance = BigInt("0x" + buf.subarray(off + 2, off + 18).toString("hex"));
|
|
29686
|
+
out[index] = [balance, 0n];
|
|
29687
|
+
off += ROW_BYTES;
|
|
29688
|
+
}
|
|
29689
|
+
out.push(baseSupply, baseBorrow);
|
|
29690
|
+
return out;
|
|
29691
|
+
};
|
|
29692
|
+
|
|
29693
|
+
// src/lending/user-data/compound-v3/userCallBuild.ts
|
|
29694
|
+
var buildCompoundV3UserCall = (chainId, lender, account) => {
|
|
29695
|
+
const baseAsset = getCompoundV3BaseAsset(lender, chainId)?.baseAsset;
|
|
29696
|
+
const cometContractAddress = getCompoundV3CometAddress(chainId, lender);
|
|
29697
|
+
const assets = getLenderAssets(chainId, lender).sort(
|
|
29698
|
+
(a, b) => a.toLowerCase().localeCompare(b.toLowerCase())
|
|
29699
|
+
);
|
|
29700
|
+
const assetsNoBase = assets.filter((a) => a !== baseAsset);
|
|
29701
|
+
const baseCalls = [
|
|
29702
|
+
{
|
|
29703
|
+
address: cometContractAddress,
|
|
29704
|
+
name: "balanceOf",
|
|
29705
|
+
params: [account]
|
|
29706
|
+
},
|
|
29707
|
+
{
|
|
29708
|
+
address: cometContractAddress,
|
|
29709
|
+
name: "borrowBalanceOf",
|
|
29710
|
+
params: [account]
|
|
29711
|
+
}
|
|
29712
|
+
];
|
|
29713
|
+
const callsNonBase = assetsNoBase.map((tk) => {
|
|
29714
|
+
return {
|
|
29715
|
+
address: cometContractAddress,
|
|
29716
|
+
name: "userCollateral",
|
|
29717
|
+
params: [account, tk]
|
|
29718
|
+
};
|
|
29719
|
+
});
|
|
29720
|
+
const callEarnedBalances = {
|
|
29721
|
+
address: getCompoundV3CometRewardsAddress(chainId),
|
|
29722
|
+
name: "getRewardOwed",
|
|
29723
|
+
params: [cometContractAddress, account]
|
|
29724
|
+
};
|
|
29725
|
+
if (usesCometLens(chainId, lender)) {
|
|
29726
|
+
const lensCall = buildCometLensCall(
|
|
29727
|
+
chainId,
|
|
29728
|
+
cometContractAddress,
|
|
29729
|
+
assetsNoBase,
|
|
29730
|
+
account
|
|
29731
|
+
);
|
|
29732
|
+
if (lensCall.length) return [...lensCall, callEarnedBalances];
|
|
29733
|
+
}
|
|
29734
|
+
const calls = [...callsNonBase, ...baseCalls, callEarnedBalances];
|
|
29735
|
+
return calls;
|
|
29736
|
+
};
|
|
29737
|
+
|
|
29738
|
+
// src/lending/user-data/compound-v2/userCallBuild.ts
|
|
29739
|
+
var COMPOUND_V2_LENS_WORDS = 3;
|
|
29740
|
+
var COMPOUND_V2_LENS_HEADER_BYTES = 1;
|
|
29741
|
+
var usesCompoundV2Lens = (chainId) => getPositionLensFor(chainId, LENS_FAMILY.COMPOUND_V2) !== void 0;
|
|
29742
|
+
var buildCompoundV2UserCall = (chainId, lender, account) => {
|
|
29743
|
+
const tokens = getCompoundV2Tokens(chainId, lender).sort(
|
|
29744
|
+
(a, b) => a.cToken.toLowerCase().localeCompare(b.cToken.toLowerCase())
|
|
29745
|
+
);
|
|
29746
|
+
const comptroller = getCompoundV2Comptroller(chainId, lender);
|
|
29747
|
+
const lens = getPositionLensFor(chainId, LENS_FAMILY.COMPOUND_V2);
|
|
29748
|
+
if (lens && comptroller && tokens.length > 0) {
|
|
29749
|
+
const payload = encodeAbiParameters(
|
|
29750
|
+
parseAbiParameters("address[], address"),
|
|
29751
|
+
[
|
|
29752
|
+
tokens.map((t) => t.cToken),
|
|
29753
|
+
comptroller
|
|
29754
|
+
]
|
|
29755
|
+
);
|
|
29756
|
+
return [
|
|
29757
|
+
{
|
|
29758
|
+
address: lens,
|
|
29759
|
+
name: "getUserData",
|
|
29760
|
+
params: [[{ family: LENS_FAMILY.COMPOUND_V2, payload }], account],
|
|
29761
|
+
abi: PositionLensAbi
|
|
29762
|
+
}
|
|
29763
|
+
];
|
|
29764
|
+
}
|
|
29765
|
+
let calls = tokens.flatMap((tk) => [
|
|
29766
|
+
{
|
|
29767
|
+
address: tk.cToken,
|
|
29768
|
+
name: "balanceOfUnderlying",
|
|
29769
|
+
params: [account]
|
|
29770
|
+
},
|
|
29771
|
+
{
|
|
29772
|
+
address: tk.cToken,
|
|
29773
|
+
name: "borrowBalanceCurrent",
|
|
29774
|
+
params: [account]
|
|
29775
|
+
},
|
|
29776
|
+
{
|
|
29777
|
+
address: tk.cToken,
|
|
29778
|
+
name: "balanceOf",
|
|
29779
|
+
params: [account]
|
|
29780
|
+
}
|
|
29781
|
+
]);
|
|
29782
|
+
calls = [
|
|
29783
|
+
...calls,
|
|
29784
|
+
{
|
|
29785
|
+
address: comptroller,
|
|
29786
|
+
name: "getAssetsIn",
|
|
29787
|
+
params: [account]
|
|
29788
|
+
}
|
|
29789
|
+
];
|
|
29790
|
+
return calls;
|
|
29791
|
+
};
|
|
29218
29792
|
var getCompoundV2UserDataConverter = (lender, chainId, account, metaMap) => {
|
|
29219
29793
|
switch (lender) {
|
|
29220
29794
|
default: {
|
|
29221
29795
|
const tokens = getCompoundV2Tokens(chainId, lender).sort(
|
|
29222
29796
|
(a, b) => a.cToken.toLowerCase().localeCompare(b.cToken.toLowerCase())
|
|
29223
29797
|
);
|
|
29224
|
-
const
|
|
29798
|
+
const viaLens = usesCompoundV2Lens(chainId);
|
|
29799
|
+
const expectedNumberOfCalls = viaLens ? 1 : tokens.length * 3 + 1;
|
|
29225
29800
|
return [
|
|
29226
29801
|
(data) => {
|
|
29227
29802
|
if (data.length !== expectedNumberOfCalls) {
|
|
@@ -29230,19 +29805,48 @@ var getCompoundV2UserDataConverter = (lender, chainId, account, metaMap) => {
|
|
|
29230
29805
|
const lendingPositions = {};
|
|
29231
29806
|
let totalDebt24h = 0;
|
|
29232
29807
|
let totalDeposits24h = 0;
|
|
29233
|
-
|
|
29234
|
-
if (
|
|
29235
|
-
|
|
29808
|
+
let states;
|
|
29809
|
+
if (viaLens) {
|
|
29810
|
+
const blobs = data[0];
|
|
29811
|
+
if (isFailedCall(blobs) || !Array.isArray(blobs) || blobs.length !== 1) {
|
|
29812
|
+
return void 0;
|
|
29813
|
+
}
|
|
29814
|
+
const { header, rows } = decodeLensRows(
|
|
29815
|
+
blobs[0],
|
|
29816
|
+
COMPOUND_V2_LENS_WORDS,
|
|
29817
|
+
COMPOUND_V2_LENS_HEADER_BYTES
|
|
29818
|
+
);
|
|
29819
|
+
if (header[0] !== 1) return void 0;
|
|
29820
|
+
states = new Map(
|
|
29821
|
+
rows.map((r) => [
|
|
29822
|
+
r.index,
|
|
29823
|
+
{
|
|
29824
|
+
deposits: r.words[0],
|
|
29825
|
+
borrows: r.words[1],
|
|
29826
|
+
shares: r.words[2],
|
|
29827
|
+
// bit0 — the market is in `getAssetsIn`. bit1 says the values
|
|
29828
|
+
// are one accrual behind because the market's own
|
|
29829
|
+
// `accrueInterest` reverts (a broken IRM, e.g. 4 of Gamma's 6
|
|
29830
|
+
// BNB markets). Reported rather than dropped: the per-token
|
|
29831
|
+
// walk drops those markets entirely.
|
|
29832
|
+
collateralEnabled: (r.flags & 1) !== 0
|
|
29833
|
+
}
|
|
29834
|
+
])
|
|
29835
|
+
);
|
|
29836
|
+
} else {
|
|
29837
|
+
const assetsInRaw = data[data.length - 1];
|
|
29838
|
+
if (isFailedCall(assetsInRaw) || !Array.isArray(assetsInRaw)) {
|
|
29839
|
+
return void 0;
|
|
29840
|
+
}
|
|
29841
|
+
const asstsIn = assetsInRaw.map((a) => a.toLowerCase());
|
|
29842
|
+
states = statesFromSlice(data, tokens, asstsIn);
|
|
29236
29843
|
}
|
|
29237
|
-
const asstsIn = assetsInRaw.map((a) => a.toLowerCase());
|
|
29238
29844
|
for (let i = 0; i < tokens.length; i++) {
|
|
29239
29845
|
const { cToken } = tokens[i];
|
|
29240
29846
|
const key3 = createMarketUid(chainId, lender, cToken);
|
|
29241
29847
|
const { dataForAsset, addedDebt, addedDeposits } = createCompoundV2Entry(
|
|
29242
|
-
i,
|
|
29243
|
-
data,
|
|
29848
|
+
states.get(i),
|
|
29244
29849
|
key3,
|
|
29245
|
-
asstsIn,
|
|
29246
29850
|
cToken,
|
|
29247
29851
|
metaMap[key3],
|
|
29248
29852
|
0
|
|
@@ -29272,18 +29876,33 @@ var getCompoundV2UserDataConverter = (lender, chainId, account, metaMap) => {
|
|
|
29272
29876
|
}
|
|
29273
29877
|
}
|
|
29274
29878
|
};
|
|
29275
|
-
function
|
|
29276
|
-
|
|
29879
|
+
function statesFromSlice(data, tokens, assetsIn) {
|
|
29880
|
+
const out = /* @__PURE__ */ new Map();
|
|
29881
|
+
for (let i = 0; i < tokens.length; i++) {
|
|
29882
|
+
if (isFailedCall(data[3 * i]) || isFailedCall(data[3 * i + 1])) continue;
|
|
29883
|
+
out.set(i, {
|
|
29884
|
+
deposits: BigInt(data[3 * i].toString()),
|
|
29885
|
+
borrows: BigInt(data[3 * i + 1].toString()),
|
|
29886
|
+
shares: BigInt(data[3 * i + 2]?.toString() ?? "0"),
|
|
29887
|
+
collateralEnabled: Boolean(
|
|
29888
|
+
assetsIn?.includes(tokens[i].cToken.toLowerCase())
|
|
29889
|
+
)
|
|
29890
|
+
});
|
|
29891
|
+
}
|
|
29892
|
+
return out;
|
|
29893
|
+
}
|
|
29894
|
+
function createCompoundV2Entry(st, key3, vToken, meta, claimableRewards) {
|
|
29895
|
+
if (!st) {
|
|
29277
29896
|
return {
|
|
29278
29897
|
dataForAsset: void 0,
|
|
29279
29898
|
addedDeposits: 0,
|
|
29280
29899
|
addedDebt: 0
|
|
29281
29900
|
};
|
|
29282
29901
|
}
|
|
29283
|
-
const depositsRaw =
|
|
29284
|
-
const borrowsRaw =
|
|
29285
|
-
const depositShares =
|
|
29286
|
-
const collateralEnabled =
|
|
29902
|
+
const depositsRaw = st.deposits.toString();
|
|
29903
|
+
const borrowsRaw = st.borrows.toString();
|
|
29904
|
+
const depositShares = st.shares.toString();
|
|
29905
|
+
const collateralEnabled = st.collateralEnabled;
|
|
29287
29906
|
if (!collateralEnabled && depositsRaw === "0" && borrowsRaw === "0") {
|
|
29288
29907
|
return {
|
|
29289
29908
|
dataForAsset: void 0,
|
|
@@ -29505,99 +30124,118 @@ var buildAaveV4UserCall = (chainId, lender, account) => {
|
|
|
29505
30124
|
}
|
|
29506
30125
|
return calls;
|
|
29507
30126
|
};
|
|
30127
|
+
var resolveSiloRoster = (chainId, lender, params) => {
|
|
30128
|
+
const v32 = isSiloV3Type(lender);
|
|
30129
|
+
const entryFor = v32 ? getSiloV3MarketEntry : getSiloV2MarketEntry;
|
|
30130
|
+
const keyFor = v32 ? siloV3LenderKey : siloV2LenderKey;
|
|
30131
|
+
if (Array.isArray(params) && params.length > 0) {
|
|
30132
|
+
const out = [];
|
|
30133
|
+
for (const key3 of params) {
|
|
30134
|
+
const market = entryFor(chainId, key3);
|
|
30135
|
+
if (market) out.push({ key: key3, market });
|
|
30136
|
+
}
|
|
30137
|
+
return out;
|
|
30138
|
+
}
|
|
30139
|
+
const single = entryFor(chainId, lender);
|
|
30140
|
+
if (single) return [{ key: lender, market: single }];
|
|
30141
|
+
const all = (v32 ? siloMarketsV3() : siloMarkets())?.[chainId] ?? [];
|
|
30142
|
+
return all.map((market) => ({ key: keyFor(market.siloConfig), market }));
|
|
30143
|
+
};
|
|
30144
|
+
|
|
30145
|
+
// src/lending/user-data/silo-v2/userCallBuild.ts
|
|
29508
30146
|
var ASSET_TYPE_PROTECTED = 0;
|
|
29509
30147
|
var ASSET_TYPE_COLLATERAL = 1;
|
|
29510
30148
|
var SILO_V2_USER_CALLS_PER_SIDE = 5;
|
|
29511
30149
|
var SILO_V2_USER_CALLS_PER_PAIR = SILO_V2_USER_CALLS_PER_SIDE * 2;
|
|
29512
|
-
var
|
|
29513
|
-
|
|
29514
|
-
|
|
30150
|
+
var SILO_LENS_WORDS = 10;
|
|
30151
|
+
var usesSiloLens = (chainId) => getPositionLensFor(chainId, LENS_FAMILY.SILO) !== void 0;
|
|
30152
|
+
var buildSiloLensCall = (chainId, roster, account) => {
|
|
30153
|
+
const lens = getPositionLensFor(chainId, LENS_FAMILY.SILO);
|
|
30154
|
+
if (!lens || roster.length === 0) return [];
|
|
30155
|
+
const side = (h) => [
|
|
30156
|
+
h.silo,
|
|
30157
|
+
h.protectedShareToken,
|
|
30158
|
+
h.debtShareToken,
|
|
30159
|
+
Number(h.decimals)
|
|
30160
|
+
];
|
|
30161
|
+
const payload = encodeAbiParameters(
|
|
30162
|
+
parseAbiParameters(
|
|
30163
|
+
"((address,address,address,uint8),(address,address,address,uint8))[]"
|
|
30164
|
+
),
|
|
30165
|
+
[roster.map((r) => [side(r.market.silo0), side(r.market.silo1)])]
|
|
30166
|
+
);
|
|
30167
|
+
return [
|
|
30168
|
+
{
|
|
30169
|
+
address: lens,
|
|
30170
|
+
name: "getUserData",
|
|
30171
|
+
params: [[{ family: LENS_FAMILY.SILO, payload }], account],
|
|
30172
|
+
abi: PositionLensAbi
|
|
30173
|
+
}
|
|
30174
|
+
];
|
|
30175
|
+
};
|
|
30176
|
+
var buildSiloPairCalls = (market, account) => {
|
|
29515
30177
|
const calls = [];
|
|
29516
30178
|
for (const half of [market.silo0, market.silo1]) {
|
|
29517
30179
|
const oneUnit = BigInt(10) ** BigInt(half.decimals);
|
|
29518
30180
|
calls.push(
|
|
29519
|
-
|
|
29520
|
-
{
|
|
29521
|
-
address: half.silo,
|
|
29522
|
-
name: "balanceOf",
|
|
29523
|
-
params: [account]
|
|
29524
|
-
},
|
|
29525
|
-
// [1] protected shares (separate ERC-20)
|
|
30181
|
+
{ address: half.silo, name: "balanceOf", params: [account] },
|
|
29526
30182
|
{
|
|
29527
30183
|
address: half.protectedShareToken,
|
|
29528
30184
|
name: "balanceOf",
|
|
29529
30185
|
params: [account]
|
|
29530
30186
|
},
|
|
29531
|
-
// [2] collateral rate: assets per unit of collateral shares
|
|
29532
30187
|
{
|
|
29533
30188
|
address: half.silo,
|
|
29534
30189
|
name: "convertToAssets",
|
|
29535
30190
|
params: [oneUnit, ASSET_TYPE_COLLATERAL],
|
|
29536
30191
|
abi: SiloConvertToAssetsTypedAbi
|
|
29537
30192
|
},
|
|
29538
|
-
// [3] protected rate: assets per unit of protected shares
|
|
29539
30193
|
{
|
|
29540
30194
|
address: half.silo,
|
|
29541
30195
|
name: "convertToAssets",
|
|
29542
30196
|
params: [oneUnit, ASSET_TYPE_PROTECTED],
|
|
29543
30197
|
abi: SiloConvertToAssetsTypedAbi
|
|
29544
30198
|
},
|
|
29545
|
-
|
|
29546
|
-
{
|
|
29547
|
-
address: half.silo,
|
|
29548
|
-
name: "maxRepay",
|
|
29549
|
-
params: [account]
|
|
29550
|
-
}
|
|
30199
|
+
{ address: half.silo, name: "maxRepay", params: [account] }
|
|
29551
30200
|
);
|
|
29552
30201
|
}
|
|
29553
30202
|
return calls;
|
|
29554
30203
|
};
|
|
29555
|
-
var
|
|
29556
|
-
|
|
29557
|
-
|
|
29558
|
-
|
|
29559
|
-
|
|
29560
|
-
|
|
29561
|
-
|
|
29562
|
-
|
|
29563
|
-
|
|
29564
|
-
|
|
29565
|
-
|
|
29566
|
-
|
|
29567
|
-
|
|
29568
|
-
|
|
29569
|
-
|
|
29570
|
-
|
|
29571
|
-
|
|
29572
|
-
|
|
29573
|
-
|
|
29574
|
-
|
|
29575
|
-
|
|
29576
|
-
|
|
29577
|
-
|
|
29578
|
-
|
|
29579
|
-
|
|
29580
|
-
|
|
29581
|
-
name: "convertToAssets",
|
|
29582
|
-
params: [oneUnit, ASSET_TYPE_COLLATERAL2],
|
|
29583
|
-
abi: SiloConvertToAssetsTypedAbi
|
|
29584
|
-
},
|
|
29585
|
-
// [3] protected rate: assets per unit of protected shares
|
|
29586
|
-
{
|
|
29587
|
-
address: half.silo,
|
|
29588
|
-
name: "convertToAssets",
|
|
29589
|
-
params: [oneUnit, ASSET_TYPE_PROTECTED2],
|
|
29590
|
-
abi: SiloConvertToAssetsTypedAbi
|
|
29591
|
-
},
|
|
29592
|
-
// [4] debt position (already in assets, includes accrued interest)
|
|
30204
|
+
var buildSiloV2UserCall = (chainId, lender, account, params) => {
|
|
30205
|
+
const roster = resolveSiloRoster(chainId, lender, params);
|
|
30206
|
+
if (roster.length === 0) return [];
|
|
30207
|
+
if (usesSiloLens(chainId)) {
|
|
30208
|
+
return buildSiloLensCall(chainId, roster, account);
|
|
30209
|
+
}
|
|
30210
|
+
return roster.flatMap((r) => buildSiloPairCalls(r.market, account));
|
|
30211
|
+
};
|
|
30212
|
+
var buildSiloV3UserCall = (chainId, lender, account, params) => {
|
|
30213
|
+
const roster = resolveSiloRoster(chainId, lender, params);
|
|
30214
|
+
if (roster.length === 0) return [];
|
|
30215
|
+
const lens = getPositionLensFor(chainId, LENS_FAMILY.SILO);
|
|
30216
|
+
if (lens) {
|
|
30217
|
+
const side = (h) => [
|
|
30218
|
+
h.silo,
|
|
30219
|
+
h.protectedShareToken,
|
|
30220
|
+
h.debtShareToken,
|
|
30221
|
+
Number(h.decimals)
|
|
30222
|
+
];
|
|
30223
|
+
const payload = encodeAbiParameters(
|
|
30224
|
+
parseAbiParameters(
|
|
30225
|
+
"((address,address,address,uint8),(address,address,address,uint8))[]"
|
|
30226
|
+
),
|
|
30227
|
+
[roster.map((r) => [side(r.market.silo0), side(r.market.silo1)])]
|
|
30228
|
+
);
|
|
30229
|
+
return [
|
|
29593
30230
|
{
|
|
29594
|
-
address:
|
|
29595
|
-
name: "
|
|
29596
|
-
params: [account]
|
|
30231
|
+
address: lens,
|
|
30232
|
+
name: "getUserData",
|
|
30233
|
+
params: [[{ family: LENS_FAMILY.SILO, payload }], account],
|
|
30234
|
+
abi: PositionLensAbi
|
|
29597
30235
|
}
|
|
29598
|
-
|
|
30236
|
+
];
|
|
29599
30237
|
}
|
|
29600
|
-
return
|
|
30238
|
+
return roster.flatMap((r) => buildSiloPairCalls(r.market, account));
|
|
29601
30239
|
};
|
|
29602
30240
|
var FLUID_USER_CALL_COUNT = 1;
|
|
29603
30241
|
var buildFluidUserCall = (chainId, _lender, account) => {
|
|
@@ -29796,6 +30434,65 @@ var buildExactlyUserCall = (chainId, _lender, account) => {
|
|
|
29796
30434
|
var OWNER_INDEX_PROBE_COUNT = 8;
|
|
29797
30435
|
var CACHE_TTL_MS = 5 * 6e4;
|
|
29798
30436
|
var discoveryCache = /* @__PURE__ */ new Map();
|
|
30437
|
+
async function discoverViaLens(chainId, branches, zappers, account) {
|
|
30438
|
+
const lens = getPositionLensFor(chainId, LENS_FAMILY.LIQUITY);
|
|
30439
|
+
if (!lens) return void 0;
|
|
30440
|
+
const payload = encodeAbiParameters(
|
|
30441
|
+
[
|
|
30442
|
+
{
|
|
30443
|
+
type: "tuple[]",
|
|
30444
|
+
components: [
|
|
30445
|
+
{ name: "troveNFT", type: "address" },
|
|
30446
|
+
{ name: "troveManager", type: "address" }
|
|
30447
|
+
]
|
|
30448
|
+
},
|
|
30449
|
+
{ type: "address[]" },
|
|
30450
|
+
{ type: "uint8" }
|
|
30451
|
+
],
|
|
30452
|
+
[
|
|
30453
|
+
branches.map((b) => ({
|
|
30454
|
+
troveNFT: b.troveNFT,
|
|
30455
|
+
troveManager: b.troveManager
|
|
30456
|
+
})),
|
|
30457
|
+
zappers,
|
|
30458
|
+
OWNER_INDEX_PROBE_COUNT
|
|
30459
|
+
]
|
|
30460
|
+
);
|
|
30461
|
+
let blobs;
|
|
30462
|
+
try {
|
|
30463
|
+
const res = await multicallRetryUniversal({
|
|
30464
|
+
chain: chainId,
|
|
30465
|
+
calls: [
|
|
30466
|
+
{
|
|
30467
|
+
address: lens,
|
|
30468
|
+
name: "getUserData",
|
|
30469
|
+
params: [[{ family: LENS_FAMILY.LIQUITY, payload }], account]
|
|
30470
|
+
}
|
|
30471
|
+
],
|
|
30472
|
+
abi: PositionLensAbi,
|
|
30473
|
+
allowFailure: true
|
|
30474
|
+
});
|
|
30475
|
+
blobs = res?.[0];
|
|
30476
|
+
} catch {
|
|
30477
|
+
return void 0;
|
|
30478
|
+
}
|
|
30479
|
+
if (!Array.isArray(blobs) || blobs.length !== 1) return void 0;
|
|
30480
|
+
let rows;
|
|
30481
|
+
try {
|
|
30482
|
+
rows = decodeLensRows(blobs[0], 1, 0, 1).rows;
|
|
30483
|
+
} catch {
|
|
30484
|
+
return void 0;
|
|
30485
|
+
}
|
|
30486
|
+
const perBranch = branches.map(() => []);
|
|
30487
|
+
for (const r of rows) {
|
|
30488
|
+
if (r.index >= branches.length) return void 0;
|
|
30489
|
+
perBranch[r.index].push({
|
|
30490
|
+
troveId: r.words[0].toString(),
|
|
30491
|
+
zombie: (r.flags & 1) !== 0
|
|
30492
|
+
});
|
|
30493
|
+
}
|
|
30494
|
+
return perBranch;
|
|
30495
|
+
}
|
|
29799
30496
|
var cacheKey = (chainId, lender, account) => `${chainId}:${lender}:${account.toLowerCase()}`;
|
|
29800
30497
|
var getCachedLiquityTroves = (chainId, lender, account) => {
|
|
29801
30498
|
const hit = discoveryCache.get(cacheKey(chainId, lender, account));
|
|
@@ -29847,7 +30544,20 @@ var buildLiquityUserCall = async (chainId, lender, account) => {
|
|
|
29847
30544
|
const cfg = liquityConfigFor(lender, chainId);
|
|
29848
30545
|
const branches = liquityBranchesByChain(lender, chainId);
|
|
29849
30546
|
if (!cfg || branches.length === 0) return [];
|
|
29850
|
-
const
|
|
30547
|
+
const zappers = cfg.zappers ?? [];
|
|
30548
|
+
let perBranch = await discoverViaLens(chainId, branches, zappers, account);
|
|
30549
|
+
if (!perBranch) {
|
|
30550
|
+
perBranch = await discoverByProbing(chainId, branches, zappers, account);
|
|
30551
|
+
if (!perBranch) return [];
|
|
30552
|
+
}
|
|
30553
|
+
discoveryCache.set(cacheKey(chainId, lender, account), {
|
|
30554
|
+
perBranch,
|
|
30555
|
+
at: Date.now()
|
|
30556
|
+
});
|
|
30557
|
+
return buildDataPhaseCalls(branches, perBranch, account);
|
|
30558
|
+
};
|
|
30559
|
+
async function discoverByProbing(chainId, branches, zappers, account) {
|
|
30560
|
+
const candidates = liquityCandidateTroveIds(account, zappers);
|
|
29851
30561
|
let statuses = [];
|
|
29852
30562
|
try {
|
|
29853
30563
|
statuses = await multicallRetryUniversal({
|
|
@@ -29863,9 +30573,9 @@ var buildLiquityUserCall = async (chainId, lender, account) => {
|
|
|
29863
30573
|
allowFailure: true
|
|
29864
30574
|
});
|
|
29865
30575
|
} catch {
|
|
29866
|
-
return
|
|
30576
|
+
return void 0;
|
|
29867
30577
|
}
|
|
29868
|
-
|
|
30578
|
+
return branches.map(
|
|
29869
30579
|
(_3, bi) => candidates.map((id, ci) => {
|
|
29870
30580
|
const r = statuses[bi * candidates.length + ci];
|
|
29871
30581
|
const status = typeof r === "bigint" || typeof r === "number" ? Number(r) : 0;
|
|
@@ -29873,10 +30583,8 @@ var buildLiquityUserCall = async (chainId, lender, account) => {
|
|
|
29873
30583
|
return { troveId: id, zombie: status === 4 };
|
|
29874
30584
|
}).filter((t) => !!t)
|
|
29875
30585
|
);
|
|
29876
|
-
|
|
29877
|
-
|
|
29878
|
-
at: Date.now()
|
|
29879
|
-
});
|
|
30586
|
+
}
|
|
30587
|
+
function buildDataPhaseCalls(branches, perBranch, account) {
|
|
29880
30588
|
const calls = [];
|
|
29881
30589
|
branches.forEach((b, bi) => {
|
|
29882
30590
|
for (const t of perBranch[bi]) {
|
|
@@ -29916,7 +30624,7 @@ var buildLiquityUserCall = async (chainId, lender, account) => {
|
|
|
29916
30624
|
}
|
|
29917
30625
|
});
|
|
29918
30626
|
return calls;
|
|
29919
|
-
}
|
|
30627
|
+
}
|
|
29920
30628
|
var RIVER_CALLS_PER_MARKET = 3;
|
|
29921
30629
|
var buildRiverUserCall = (chainId, lender, account) => {
|
|
29922
30630
|
const cfg = riverConfigFor(lender, chainId);
|
|
@@ -29938,12 +30646,42 @@ var buildRiverUserCall = (chainId, lender, account) => {
|
|
|
29938
30646
|
});
|
|
29939
30647
|
return calls;
|
|
29940
30648
|
};
|
|
30649
|
+
var ZERO3 = "0x0000000000000000000000000000000000000000";
|
|
30650
|
+
var LLAMALEND_LENS_WORDS = 12;
|
|
29941
30651
|
var LLAMALEND_CALLS_PER_MARKET = 8;
|
|
30652
|
+
var usesLlamaLendLens = (chainId) => getPositionLensFor(chainId, LENS_FAMILY.LLAMALEND) !== void 0;
|
|
30653
|
+
var buildLlamaLendLensCall = (chainId, markets, account, delegate) => {
|
|
30654
|
+
const lens = getPositionLensFor(chainId, LENS_FAMILY.LLAMALEND);
|
|
30655
|
+
if (!lens) return [];
|
|
30656
|
+
const payload = encodeAbiParameters(
|
|
30657
|
+
parseAbiParameters("(address,address,address,address)[], address"),
|
|
30658
|
+
[
|
|
30659
|
+
markets.map((m) => [
|
|
30660
|
+
m.controller,
|
|
30661
|
+
m.amm,
|
|
30662
|
+
m.vault,
|
|
30663
|
+
m.gauge ?? ZERO3
|
|
30664
|
+
]),
|
|
30665
|
+
delegate
|
|
30666
|
+
]
|
|
30667
|
+
);
|
|
30668
|
+
return [
|
|
30669
|
+
{
|
|
30670
|
+
address: lens,
|
|
30671
|
+
name: "getUserData",
|
|
30672
|
+
params: [[{ family: LENS_FAMILY.LLAMALEND, payload }], account],
|
|
30673
|
+
abi: PositionLensAbi
|
|
30674
|
+
}
|
|
30675
|
+
];
|
|
30676
|
+
};
|
|
29942
30677
|
var buildLlamaLendUserCall = (chainId, lender, account, spender) => {
|
|
29943
30678
|
const cfg = llamaLendConfigFor(lender, chainId);
|
|
29944
30679
|
const markets = llamaLendChainData(lender, chainId)?.markets ?? [];
|
|
29945
30680
|
if (!cfg || markets.length === 0) return [];
|
|
29946
30681
|
const delegate = account;
|
|
30682
|
+
if (usesLlamaLendLens(chainId)) {
|
|
30683
|
+
return buildLlamaLendLensCall(chainId, markets, account, delegate);
|
|
30684
|
+
}
|
|
29947
30685
|
return markets.flatMap((m) => [
|
|
29948
30686
|
{ address: m.controller, name: "user_state", params: [account] },
|
|
29949
30687
|
{ address: m.controller, name: "health", params: [account, true] },
|
|
@@ -29961,6 +30699,70 @@ var buildLlamaLendUserCall = (chainId, lender, account, spender) => {
|
|
|
29961
30699
|
{ address: m.vault, name: "convertToAssets", params: [10n ** 18n] }
|
|
29962
30700
|
]);
|
|
29963
30701
|
};
|
|
30702
|
+
|
|
30703
|
+
// src/lending/user-data/inverse/lens.ts
|
|
30704
|
+
var HEADER_BYTES2 = 128;
|
|
30705
|
+
var WORDS = 4;
|
|
30706
|
+
var usesInverseLens = (chainId) => getPositionLensFor(chainId, LENS_FAMILY.INVERSE) !== void 0;
|
|
30707
|
+
var buildInverseLensCall = (chainId, markets, dbr, account) => {
|
|
30708
|
+
const lens = getPositionLensFor(chainId, LENS_FAMILY.INVERSE);
|
|
30709
|
+
if (!lens || !dbr || markets.some((m) => !m.address || !m.escrowImplementation)) {
|
|
30710
|
+
return [];
|
|
30711
|
+
}
|
|
30712
|
+
const payload = encodeAbiParameters(
|
|
30713
|
+
[
|
|
30714
|
+
{
|
|
30715
|
+
type: "tuple[]",
|
|
30716
|
+
components: [
|
|
30717
|
+
{ name: "market", type: "address" },
|
|
30718
|
+
{ name: "escrow", type: "address" }
|
|
30719
|
+
]
|
|
30720
|
+
},
|
|
30721
|
+
{ type: "address" }
|
|
30722
|
+
],
|
|
30723
|
+
[
|
|
30724
|
+
markets.map((m) => ({
|
|
30725
|
+
market: m.address,
|
|
30726
|
+
escrow: predictInverseEscrow(
|
|
30727
|
+
m.address,
|
|
30728
|
+
m.escrowImplementation,
|
|
30729
|
+
account
|
|
30730
|
+
)
|
|
30731
|
+
})),
|
|
30732
|
+
dbr
|
|
30733
|
+
]
|
|
30734
|
+
);
|
|
30735
|
+
return [
|
|
30736
|
+
{
|
|
30737
|
+
address: lens,
|
|
30738
|
+
name: "getUserData",
|
|
30739
|
+
params: [[{ family: LENS_FAMILY.INVERSE, payload }], account],
|
|
30740
|
+
abi: PositionLensAbi
|
|
30741
|
+
}
|
|
30742
|
+
];
|
|
30743
|
+
};
|
|
30744
|
+
var rebuildInverseData = (blobs, marketCount) => {
|
|
30745
|
+
if (isFailedCall(blobs) || !Array.isArray(blobs) || blobs.length !== 1) {
|
|
30746
|
+
return void 0;
|
|
30747
|
+
}
|
|
30748
|
+
let decoded;
|
|
30749
|
+
try {
|
|
30750
|
+
decoded = decodeLensRows(blobs[0], WORDS, HEADER_BYTES2, 0);
|
|
30751
|
+
} catch {
|
|
30752
|
+
return void 0;
|
|
30753
|
+
}
|
|
30754
|
+
const { header, rows } = decoded;
|
|
30755
|
+
const out = new Array(marketCount * 4).fill(0n);
|
|
30756
|
+
for (const r of rows) {
|
|
30757
|
+
if (r.index >= marketCount) return void 0;
|
|
30758
|
+
for (let k = 0; k < 4; k++) out[r.index * 4 + k] = r.words[k];
|
|
30759
|
+
}
|
|
30760
|
+
const word = (i) => BigInt("0x" + Buffer.from(header.slice(i * 32, i * 32 + 32)).toString("hex"));
|
|
30761
|
+
out.push(word(0), word(1), word(2), word(3));
|
|
30762
|
+
return out;
|
|
30763
|
+
};
|
|
30764
|
+
|
|
30765
|
+
// src/lending/user-data/inverse/userCallBuild.ts
|
|
29964
30766
|
var INVERSE_CALLS_PER_MARKET = 4;
|
|
29965
30767
|
var INVERSE_TAIL_CALLS = 4;
|
|
29966
30768
|
var proxyInitCode = (impl) => concat([
|
|
@@ -29980,6 +30782,15 @@ var buildInverseUserCall = (chainId, lender, account) => {
|
|
|
29980
30782
|
const cfg = inverseConfigFor(lender, chainId);
|
|
29981
30783
|
const markets = inverseChainData(lender, chainId)?.markets ?? [];
|
|
29982
30784
|
if (!cfg || markets.length === 0) return [];
|
|
30785
|
+
if (usesInverseLens(chainId)) {
|
|
30786
|
+
const lensCall = buildInverseLensCall(
|
|
30787
|
+
chainId,
|
|
30788
|
+
markets,
|
|
30789
|
+
cfg.dbr,
|
|
30790
|
+
account
|
|
30791
|
+
);
|
|
30792
|
+
if (lensCall.length) return lensCall;
|
|
30793
|
+
}
|
|
29983
30794
|
const calls = markets.flatMap((m) => [
|
|
29984
30795
|
{
|
|
29985
30796
|
address: predictInverseEscrow(
|
|
@@ -30699,7 +31510,7 @@ var buildTellerUserCall = async (chainId, _lender, account) => {
|
|
|
30699
31510
|
}
|
|
30700
31511
|
return calls;
|
|
30701
31512
|
};
|
|
30702
|
-
var
|
|
31513
|
+
var TERMMAX_MARKETS_PER_CALL = 180;
|
|
30703
31514
|
var CACHE_TTL_MS4 = 5 * 6e4;
|
|
30704
31515
|
var discoveryCache8 = /* @__PURE__ */ new Map();
|
|
30705
31516
|
var cacheKey5 = (chainId, account) => `${chainId}:${account.toLowerCase()}`;
|
|
@@ -30711,27 +31522,48 @@ var getCachedTermMaxDiscovery = (chainId, account) => {
|
|
|
30711
31522
|
var buildTermMaxUserCall = async (chainId, _lender, account) => {
|
|
30712
31523
|
const proto = termMaxConfigByChain(chainId);
|
|
30713
31524
|
if (!proto?.viewer) return [];
|
|
30714
|
-
let
|
|
30715
|
-
if (
|
|
31525
|
+
let live = getCachedTermMaxMarkets(chainId);
|
|
31526
|
+
if (live.length === 0) {
|
|
30716
31527
|
try {
|
|
30717
|
-
|
|
31528
|
+
live = (await fetchTermMaxMarkets(chainId)).map((m) => m.config);
|
|
30718
31529
|
} catch {
|
|
30719
|
-
|
|
31530
|
+
live = [];
|
|
30720
31531
|
}
|
|
30721
31532
|
}
|
|
31533
|
+
const matured = getTermMaxMaturedResidue(chainId);
|
|
31534
|
+
const seen = /* @__PURE__ */ new Set();
|
|
31535
|
+
const markets = [...live, ...matured].filter((m) => {
|
|
31536
|
+
const k = m.market.toLowerCase();
|
|
31537
|
+
if (seen.has(k)) return false;
|
|
31538
|
+
seen.add(k);
|
|
31539
|
+
return true;
|
|
31540
|
+
});
|
|
30722
31541
|
if (markets.length === 0) {
|
|
30723
|
-
discoveryCache8.set(cacheKey5(chainId, account), {
|
|
31542
|
+
discoveryCache8.set(cacheKey5(chainId, account), {
|
|
31543
|
+
markets: [],
|
|
31544
|
+
chunks: 0,
|
|
31545
|
+
at: Date.now()
|
|
31546
|
+
});
|
|
30724
31547
|
return [];
|
|
30725
31548
|
}
|
|
30726
|
-
markets
|
|
30727
|
-
|
|
30728
|
-
|
|
30729
|
-
{
|
|
31549
|
+
markets.sort((a, b) => a.market.localeCompare(b.market));
|
|
31550
|
+
const calls = [];
|
|
31551
|
+
for (let i = 0; i < markets.length; i += TERMMAX_MARKETS_PER_CALL) {
|
|
31552
|
+
calls.push({
|
|
30730
31553
|
address: proto.viewer,
|
|
30731
31554
|
name: "getPositionDetails",
|
|
30732
|
-
params: [
|
|
30733
|
-
|
|
30734
|
-
|
|
31555
|
+
params: [
|
|
31556
|
+
markets.slice(i, i + TERMMAX_MARKETS_PER_CALL).map((m) => m.market),
|
|
31557
|
+
account
|
|
31558
|
+
]
|
|
31559
|
+
});
|
|
31560
|
+
}
|
|
31561
|
+
discoveryCache8.set(cacheKey5(chainId, account), {
|
|
31562
|
+
markets,
|
|
31563
|
+
chunks: calls.length,
|
|
31564
|
+
at: Date.now()
|
|
31565
|
+
});
|
|
31566
|
+
return calls;
|
|
30735
31567
|
};
|
|
30736
31568
|
|
|
30737
31569
|
// src/lending/user-data/fetch-balances/prepare.ts
|
|
@@ -30776,8 +31608,10 @@ async function buildUserCall(chainId, lender, account, params, getClient) {
|
|
|
30776
31608
|
account,
|
|
30777
31609
|
params?.subAccountIndexes
|
|
30778
31610
|
);
|
|
30779
|
-
if (isSiloV2Type(lender))
|
|
30780
|
-
|
|
31611
|
+
if (isSiloV2Type(lender))
|
|
31612
|
+
return buildSiloV2UserCall(chainId, lender, account, params);
|
|
31613
|
+
if (isSiloV3Type(lender))
|
|
31614
|
+
return buildSiloV3UserCall(chainId, lender, account, params);
|
|
30781
31615
|
if (isCompoundV2Type(lender))
|
|
30782
31616
|
return buildCompoundV2UserCall(chainId, lender, account);
|
|
30783
31617
|
if (isFluid(lender)) return buildFluidUserCall(chainId, lender, account);
|
|
@@ -30805,11 +31639,13 @@ function organizeUserQueries(queries) {
|
|
|
30805
31639
|
const usdd = queries.filter((q) => isUsdd(q.lender));
|
|
30806
31640
|
const sky = queries.filter((q) => isSky(q.lender));
|
|
30807
31641
|
const llamaLend = queries.filter((q) => isLlamaLend(q.lender));
|
|
31642
|
+
const siloV2 = queries.filter((q) => isSiloV2Type(q.lender));
|
|
31643
|
+
const siloV3 = queries.filter((q) => isSiloV3Type(q.lender));
|
|
30808
31644
|
const frankencoin = queries.filter((q) => isFrankencoin(q.lender));
|
|
30809
|
-
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 && usdd.length === 0 && sky.length === 0 && frankencoin.length === 0 && llamaLend.length === 0)
|
|
31645
|
+
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 && usdd.length === 0 && sky.length === 0 && frankencoin.length === 0 && llamaLend.length === 0 && siloV2.length === 0 && siloV3.length === 0)
|
|
30810
31646
|
return queries;
|
|
30811
31647
|
const others = queries.filter(
|
|
30812
|
-
(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) && !isDssType(q.lender) && !isFrankencoin(q.lender) && !isLlamaLend(q.lender)
|
|
31648
|
+
(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) && !isDssType(q.lender) && !isFrankencoin(q.lender) && !isLlamaLend(q.lender) && !isSiloV2Type(q.lender) && !isSiloV3Type(q.lender)
|
|
30813
31649
|
);
|
|
30814
31650
|
const morphoBlue = morphos.filter((q) => q.lender.startsWith("MORPHO_BLUE"));
|
|
30815
31651
|
const moolah = morphos.filter((q) => q.lender.startsWith("LISTA_DAO"));
|
|
@@ -30894,6 +31730,22 @@ function organizeUserQueries(queries) {
|
|
|
30894
31730
|
assets: void 0
|
|
30895
31731
|
});
|
|
30896
31732
|
}
|
|
31733
|
+
if (siloV2.length > 0) {
|
|
31734
|
+
result.push({
|
|
31735
|
+
lender: "SILO_V2",
|
|
31736
|
+
account: siloV2[0].account,
|
|
31737
|
+
params: siloV2.map((p) => p.lender),
|
|
31738
|
+
assets: void 0
|
|
31739
|
+
});
|
|
31740
|
+
}
|
|
31741
|
+
if (siloV3.length > 0) {
|
|
31742
|
+
result.push({
|
|
31743
|
+
lender: "SILO_V3",
|
|
31744
|
+
account: siloV3[0].account,
|
|
31745
|
+
params: siloV3.map((p) => p.lender),
|
|
31746
|
+
assets: void 0
|
|
31747
|
+
});
|
|
31748
|
+
}
|
|
30897
31749
|
if (llamaLend.length > 0) {
|
|
30898
31750
|
result.push({
|
|
30899
31751
|
lender: Lender.LLAMALEND,
|
|
@@ -31025,20 +31877,24 @@ function createAaveV2Entry(i, data, key3, meta, claimableRewards) {
|
|
|
31025
31877
|
addedDebt: (Number(currentVariableDebt) + Number(currentStableDebt)) * priceHist
|
|
31026
31878
|
};
|
|
31027
31879
|
}
|
|
31028
|
-
|
|
31029
|
-
// src/lending/user-data/aave-v3-type/userCallParse.ts
|
|
31030
31880
|
var getAaveV3UserDataConverter = (lender, chainId, account, metaMap) => {
|
|
31031
31881
|
const assetsToQuery = getAaveAssets(chainId, lender).sort(
|
|
31032
31882
|
(a, b) => a.toLowerCase().localeCompare(b.toLowerCase())
|
|
31033
31883
|
);
|
|
31034
|
-
const
|
|
31884
|
+
const withEMode = !isYLDR(lender);
|
|
31885
|
+
const viaLens = usesAaveLens(chainId, lender);
|
|
31886
|
+
const walkCalls = assetsToQuery.length + (withEMode ? 1 : 0);
|
|
31887
|
+
const expectedNumberOfCalls = viaLens ? 1 : walkCalls;
|
|
31035
31888
|
return [
|
|
31036
|
-
(
|
|
31037
|
-
if (
|
|
31889
|
+
(raw) => {
|
|
31890
|
+
if (raw.length !== expectedNumberOfCalls) {
|
|
31038
31891
|
return void 0;
|
|
31039
31892
|
}
|
|
31040
|
-
const
|
|
31041
|
-
if (
|
|
31893
|
+
const data = viaLens ? rebuildAaveReserveData(raw[0], assetsToQuery.length, withEMode) : raw;
|
|
31894
|
+
if (!data) return void 0;
|
|
31895
|
+
const eModeSlot = data[walkCalls - 1];
|
|
31896
|
+
const rawEMode = withEMode ? Number(eModeSlot) : 0;
|
|
31897
|
+
if (withEMode && (isFailedCall(eModeSlot) || !Number.isFinite(rawEMode))) {
|
|
31042
31898
|
return void 0;
|
|
31043
31899
|
}
|
|
31044
31900
|
const userEMode = rawEMode;
|
|
@@ -31270,10 +32126,23 @@ var getCompoundV3UserDataConverter = (lender, chainId, account, metaMap) => {
|
|
|
31270
32126
|
(a, b) => a.toLowerCase().localeCompare(b.toLowerCase())
|
|
31271
32127
|
);
|
|
31272
32128
|
const assetsNoBase = assets.filter((a) => a !== baseAsset);
|
|
31273
|
-
const
|
|
32129
|
+
const walkCalls = assetsNoBase.length + 2 + 1;
|
|
32130
|
+
const viaLens = usesCometLens(chainId, lender);
|
|
32131
|
+
const expectedNumberOfCalls = viaLens ? 2 : walkCalls;
|
|
31274
32132
|
return [
|
|
31275
|
-
(
|
|
31276
|
-
if (
|
|
32133
|
+
(raw) => {
|
|
32134
|
+
if (raw.length !== expectedNumberOfCalls) {
|
|
32135
|
+
return void 0;
|
|
32136
|
+
}
|
|
32137
|
+
let data;
|
|
32138
|
+
if (viaLens) {
|
|
32139
|
+
const rebuilt = rebuildCometData(raw[0], assetsNoBase.length);
|
|
32140
|
+
if (!rebuilt) return void 0;
|
|
32141
|
+
data = [...rebuilt, raw[1]];
|
|
32142
|
+
} else {
|
|
32143
|
+
data = raw;
|
|
32144
|
+
}
|
|
32145
|
+
if (data.length !== walkCalls) {
|
|
31277
32146
|
return void 0;
|
|
31278
32147
|
}
|
|
31279
32148
|
let totalDebt24h = 0;
|
|
@@ -31339,7 +32208,7 @@ var getCompoundV3UserDataConverter = (lender, chainId, account, metaMap) => {
|
|
|
31339
32208
|
collateralEnabled: false
|
|
31340
32209
|
}
|
|
31341
32210
|
};
|
|
31342
|
-
const earnedBalances = data[
|
|
32211
|
+
const earnedBalances = data[walkCalls - 1];
|
|
31343
32212
|
const compRewards = Number(
|
|
31344
32213
|
parseRawAmount(earnedBalances?.owed?.toString(), 18)
|
|
31345
32214
|
);
|
|
@@ -31461,7 +32330,7 @@ function createAaveV3Entry2(i, data, key3, meta) {
|
|
|
31461
32330
|
}
|
|
31462
32331
|
|
|
31463
32332
|
// src/lending/user-data/morpho/decoder.ts
|
|
31464
|
-
var
|
|
32333
|
+
var WORD2 = 32;
|
|
31465
32334
|
var HALF = 16;
|
|
31466
32335
|
function readBigIntBE(buf, off, len) {
|
|
31467
32336
|
let v = 0n;
|
|
@@ -31479,14 +32348,14 @@ function decodePackedMorphoUserDataset(hex) {
|
|
|
31479
32348
|
for (let i = 0; i < count; i++) {
|
|
31480
32349
|
const index = Number(readBigIntBE(buf, off, 2));
|
|
31481
32350
|
off += 2;
|
|
31482
|
-
const supplyShares = readBigIntBE(buf, off,
|
|
31483
|
-
off +=
|
|
32351
|
+
const supplyShares = readBigIntBE(buf, off, WORD2);
|
|
32352
|
+
off += WORD2;
|
|
31484
32353
|
const borrowShares = readBigIntBE(buf, off, HALF);
|
|
31485
32354
|
off += HALF;
|
|
31486
|
-
const supplyAssets = readBigIntBE(buf, off,
|
|
31487
|
-
off +=
|
|
31488
|
-
const borrowAssets = readBigIntBE(buf, off,
|
|
31489
|
-
off +=
|
|
32355
|
+
const supplyAssets = readBigIntBE(buf, off, WORD2);
|
|
32356
|
+
off += WORD2;
|
|
32357
|
+
const borrowAssets = readBigIntBE(buf, off, WORD2);
|
|
32358
|
+
off += WORD2;
|
|
31490
32359
|
const collateral = readBigIntBE(buf, off, HALF);
|
|
31491
32360
|
off += HALF;
|
|
31492
32361
|
out.push({
|
|
@@ -31514,14 +32383,14 @@ function decodePackedListaUserDataset(hex, marketsCount) {
|
|
|
31514
32383
|
for (let i = 0; i < totalCount; i++) {
|
|
31515
32384
|
const index = Number(readBigIntBE(buf, off, 2));
|
|
31516
32385
|
off += 2;
|
|
31517
|
-
const supplyShares = readBigIntBE(buf, off,
|
|
31518
|
-
off +=
|
|
32386
|
+
const supplyShares = readBigIntBE(buf, off, WORD2);
|
|
32387
|
+
off += WORD2;
|
|
31519
32388
|
const borrowShares = readBigIntBE(buf, off, HALF);
|
|
31520
32389
|
off += HALF;
|
|
31521
|
-
const supplyAssets = readBigIntBE(buf, off,
|
|
31522
|
-
off +=
|
|
31523
|
-
const borrowAssets = readBigIntBE(buf, off,
|
|
31524
|
-
off +=
|
|
32390
|
+
const supplyAssets = readBigIntBE(buf, off, WORD2);
|
|
32391
|
+
off += WORD2;
|
|
32392
|
+
const borrowAssets = readBigIntBE(buf, off, WORD2);
|
|
32393
|
+
off += WORD2;
|
|
31525
32394
|
const collateral = readBigIntBE(buf, off, HALF);
|
|
31526
32395
|
off += HALF;
|
|
31527
32396
|
balances.push({
|
|
@@ -32498,125 +33367,63 @@ function createAaveV4Entry(base, data, key3, meta, spokeAddr) {
|
|
|
32498
33367
|
addedDebt: Number(currentDebt) * priceHist
|
|
32499
33368
|
};
|
|
32500
33369
|
}
|
|
32501
|
-
|
|
32502
|
-
|
|
32503
|
-
|
|
33370
|
+
|
|
33371
|
+
// src/lending/user-data/silo-v2/userCallParse.ts
|
|
33372
|
+
var getSiloV2UserDataConverter = (lender, chainId, account, meta, params) => {
|
|
33373
|
+
const roster = resolveSiloRoster(chainId, lender, params);
|
|
33374
|
+
const viaLens = usesSiloLens(chainId);
|
|
33375
|
+
const expected = roster.length === 0 ? 0 : viaLens ? 1 : roster.length * SILO_V2_USER_CALLS_PER_PAIR;
|
|
32504
33376
|
return [
|
|
32505
33377
|
(data) => {
|
|
32506
|
-
if (
|
|
32507
|
-
|
|
32508
|
-
|
|
32509
|
-
|
|
32510
|
-
|
|
32511
|
-
|
|
32512
|
-
|
|
32513
|
-
|
|
32514
|
-
|
|
32515
|
-
|
|
32516
|
-
|
|
32517
|
-
|
|
32518
|
-
|
|
32519
|
-
|
|
32520
|
-
const protectedShares = toBigInt7(data[slot + 1]);
|
|
32521
|
-
const collateralRate = toBigInt7(data[slot + 2]);
|
|
32522
|
-
const protectedRate = toBigInt7(data[slot + 3]);
|
|
32523
|
-
const repayRaw = toBigInt7(data[slot + 4]);
|
|
32524
|
-
const decimals = self.decimals;
|
|
32525
|
-
const oneUnit = BigInt(10) ** BigInt(decimals);
|
|
32526
|
-
const collateralAssets = oneUnit > 0n ? collateralShares * collateralRate / oneUnit : 0n;
|
|
32527
|
-
const protectedAssets = oneUnit > 0n ? protectedShares * protectedRate / oneUnit : 0n;
|
|
32528
|
-
const depositAssetsRaw = collateralAssets + protectedAssets;
|
|
32529
|
-
if (depositAssetsRaw === 0n && repayRaw === 0n) continue;
|
|
32530
|
-
hasAnyPosition = true;
|
|
32531
|
-
const marketUid = createMarketUid(chainId, lender, self.silo);
|
|
32532
|
-
const meta = metaMap?.[marketUid];
|
|
32533
|
-
const metaDecimals = meta?.asset?.decimals ?? decimals;
|
|
32534
|
-
const depositsStr = parseRawAmount(
|
|
32535
|
-
depositAssetsRaw.toString(),
|
|
32536
|
-
metaDecimals
|
|
32537
|
-
);
|
|
32538
|
-
const depositsStandardStr = parseRawAmount(
|
|
32539
|
-
collateralAssets.toString(),
|
|
32540
|
-
metaDecimals
|
|
32541
|
-
);
|
|
32542
|
-
const depositsProtectedStr = parseRawAmount(
|
|
32543
|
-
protectedAssets.toString(),
|
|
32544
|
-
metaDecimals
|
|
33378
|
+
if (expected === 0) return void 0;
|
|
33379
|
+
if (!data || data.length !== expected) return void 0;
|
|
33380
|
+
let states;
|
|
33381
|
+
if (viaLens) {
|
|
33382
|
+
const blobs = data[0];
|
|
33383
|
+
if (isFailedCall(blobs) || !Array.isArray(blobs) || blobs.length !== 1) {
|
|
33384
|
+
return void 0;
|
|
33385
|
+
}
|
|
33386
|
+
const { rows } = decodeLensRows(blobs[0], SILO_LENS_WORDS, 0, 0);
|
|
33387
|
+
states = new Map(
|
|
33388
|
+
rows.map((r) => [
|
|
33389
|
+
r.index,
|
|
33390
|
+
{ side0: r.words.slice(0, 5), side1: r.words.slice(5, 10) }
|
|
33391
|
+
])
|
|
32545
33392
|
);
|
|
32546
|
-
|
|
32547
|
-
|
|
32548
|
-
|
|
32549
|
-
|
|
32550
|
-
|
|
32551
|
-
|
|
32552
|
-
|
|
32553
|
-
|
|
32554
|
-
|
|
32555
|
-
|
|
32556
|
-
|
|
32557
|
-
addedDebt += debtNum * priceHist;
|
|
32558
|
-
const selfLt = Number(self.lt) / 1e18;
|
|
32559
|
-
const collateralEnabled = selfLt > 0 && depositAssetsRaw > 0n;
|
|
32560
|
-
lendingPositions[marketUid] = {
|
|
32561
|
-
marketUid,
|
|
32562
|
-
underlying: self.token.toLowerCase(),
|
|
32563
|
-
deposits: depositsStr,
|
|
32564
|
-
depositsStandard: depositsStandardStr,
|
|
32565
|
-
depositsProtected: depositsProtectedStr,
|
|
32566
|
-
debt: debtStr,
|
|
32567
|
-
debtStable: "0",
|
|
32568
|
-
// Raw share balances (stringified bigints, not decimal-formatted).
|
|
32569
|
-
// Used by the leverage close flow to approve the exact share count
|
|
32570
|
-
// and avoid rounding errors on "withdraw all".
|
|
32571
|
-
depositShares: collateralShares.toString(),
|
|
32572
|
-
protectedDepositShares: protectedShares.toString(),
|
|
32573
|
-
depositsUSD,
|
|
32574
|
-
debtUSD,
|
|
32575
|
-
debtStableUSD: 0,
|
|
32576
|
-
depositsUSDOracle,
|
|
32577
|
-
debtUSDOracle,
|
|
32578
|
-
debtStableUSDOracle: 0,
|
|
32579
|
-
stableBorrowRate: "0",
|
|
32580
|
-
collateralEnabled,
|
|
32581
|
-
collateralRate: collateralRate.toString(),
|
|
32582
|
-
claimableRewards: 0
|
|
32583
|
-
};
|
|
33393
|
+
} else {
|
|
33394
|
+
states = /* @__PURE__ */ new Map();
|
|
33395
|
+
for (let i = 0; i < roster.length; i++) {
|
|
33396
|
+
const base = i * SILO_V2_USER_CALLS_PER_PAIR;
|
|
33397
|
+
const slice2 = data.slice(base, base + SILO_V2_USER_CALLS_PER_PAIR);
|
|
33398
|
+
if (slice2.some((v) => isFailedCall(v))) continue;
|
|
33399
|
+
states.set(i, {
|
|
33400
|
+
side0: slice2.slice(0, 5).map(toBigInt7),
|
|
33401
|
+
side1: slice2.slice(5, 10).map(toBigInt7)
|
|
33402
|
+
});
|
|
33403
|
+
}
|
|
32584
33404
|
}
|
|
32585
|
-
|
|
32586
|
-
|
|
32587
|
-
|
|
32588
|
-
|
|
32589
|
-
|
|
32590
|
-
|
|
32591
|
-
|
|
32592
|
-
|
|
32593
|
-
|
|
32594
|
-
|
|
32595
|
-
|
|
32596
|
-
|
|
32597
|
-
|
|
32598
|
-
|
|
32599
|
-
);
|
|
33405
|
+
const out = {};
|
|
33406
|
+
roster.forEach(({ key: key3, market }, i) => {
|
|
33407
|
+
const st = states.get(i);
|
|
33408
|
+
if (!st) return;
|
|
33409
|
+
const entry = convertSiloPair(
|
|
33410
|
+
chainId,
|
|
33411
|
+
key3,
|
|
33412
|
+
account,
|
|
33413
|
+
market,
|
|
33414
|
+
st,
|
|
33415
|
+
meta?.[key3]
|
|
33416
|
+
);
|
|
33417
|
+
if (entry) out[key3] = entry;
|
|
33418
|
+
});
|
|
33419
|
+
return Object.keys(out).length > 0 ? out : void 0;
|
|
32600
33420
|
},
|
|
32601
|
-
|
|
33421
|
+
expected
|
|
32602
33422
|
];
|
|
32603
33423
|
};
|
|
32604
|
-
function
|
|
32605
|
-
|
|
32606
|
-
|
|
32607
|
-
try {
|
|
32608
|
-
return BigInt(v);
|
|
32609
|
-
} catch {
|
|
32610
|
-
return 0n;
|
|
32611
|
-
}
|
|
32612
|
-
}
|
|
32613
|
-
var getSiloV3UserDataConverter = (lender, chainId, account, metaMap) => {
|
|
32614
|
-
const market = getSiloV3MarketEntry(chainId, lender);
|
|
32615
|
-
if (!market) return [() => void 0, 0];
|
|
32616
|
-
return [
|
|
32617
|
-
(data) => {
|
|
32618
|
-
if (!data || data.length !== SILO_V3_USER_CALLS_PER_PAIR)
|
|
32619
|
-
return void 0;
|
|
33424
|
+
function convertSiloPair(chainId, lender, account, market, state, metaMap) {
|
|
33425
|
+
{
|
|
33426
|
+
{
|
|
32620
33427
|
const sides = [
|
|
32621
33428
|
{ self: market.silo0, other: market.silo1 },
|
|
32622
33429
|
{ self: market.silo1, other: market.silo0 }
|
|
@@ -32627,12 +33434,14 @@ var getSiloV3UserDataConverter = (lender, chainId, account, metaMap) => {
|
|
|
32627
33434
|
let hasAnyPosition = false;
|
|
32628
33435
|
for (let s = 0; s < 2; s++) {
|
|
32629
33436
|
const { self } = sides[s];
|
|
32630
|
-
const
|
|
32631
|
-
const
|
|
32632
|
-
|
|
32633
|
-
|
|
32634
|
-
|
|
32635
|
-
|
|
33437
|
+
const vals = s === 0 ? state.side0 : state.side1;
|
|
33438
|
+
const [
|
|
33439
|
+
collateralShares,
|
|
33440
|
+
protectedShares,
|
|
33441
|
+
collateralRate,
|
|
33442
|
+
protectedRate,
|
|
33443
|
+
repayRaw
|
|
33444
|
+
] = vals;
|
|
32636
33445
|
const decimals = self.decimals;
|
|
32637
33446
|
const oneUnit = BigInt(10) ** BigInt(decimals);
|
|
32638
33447
|
const collateralAssets = oneUnit > 0n ? collateralShares * collateralRate / oneUnit : 0n;
|
|
@@ -32678,6 +33487,8 @@ var getSiloV3UserDataConverter = (lender, chainId, account, metaMap) => {
|
|
|
32678
33487
|
debt: debtStr,
|
|
32679
33488
|
debtStable: "0",
|
|
32680
33489
|
// Raw share balances (stringified bigints, not decimal-formatted).
|
|
33490
|
+
// Used by the leverage close flow to approve the exact share count
|
|
33491
|
+
// and avoid rounding errors on "withdraw all".
|
|
32681
33492
|
depositShares: collateralShares.toString(),
|
|
32682
33493
|
protectedDepositShares: protectedShares.toString(),
|
|
32683
33494
|
depositsUSD,
|
|
@@ -32707,11 +33518,10 @@ var getSiloV3UserDataConverter = (lender, chainId, account, metaMap) => {
|
|
|
32707
33518
|
addedDebt,
|
|
32708
33519
|
lender
|
|
32709
33520
|
);
|
|
32710
|
-
}
|
|
32711
|
-
|
|
32712
|
-
|
|
32713
|
-
|
|
32714
|
-
function toBigInt8(v) {
|
|
33521
|
+
}
|
|
33522
|
+
}
|
|
33523
|
+
}
|
|
33524
|
+
function toBigInt7(v) {
|
|
32715
33525
|
if (v === void 0 || v === null || v === "0x") return 0n;
|
|
32716
33526
|
if (typeof v === "bigint") return v;
|
|
32717
33527
|
try {
|
|
@@ -32720,9 +33530,12 @@ function toBigInt8(v) {
|
|
|
32720
33530
|
return 0n;
|
|
32721
33531
|
}
|
|
32722
33532
|
}
|
|
33533
|
+
|
|
33534
|
+
// src/lending/user-data/silo-v3/userCallParse.ts
|
|
33535
|
+
var getSiloV3UserDataConverter = (lender, chainId, account, meta, params) => getSiloV2UserDataConverter(lender, chainId, account, meta, params);
|
|
32723
33536
|
var FLUID_EEE_LOWER2 = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";
|
|
32724
33537
|
var normalizeUnderlying2 = (addr4) => addr4 === FLUID_EEE_LOWER2 ? zeroAddress : addr4;
|
|
32725
|
-
function
|
|
33538
|
+
function toBigInt8(v) {
|
|
32726
33539
|
if (v === void 0 || v === null || v === "0x") return 0n;
|
|
32727
33540
|
if (typeof v === "bigint") return v;
|
|
32728
33541
|
try {
|
|
@@ -32817,8 +33630,8 @@ var getFluidUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
32817
33630
|
const histData = {};
|
|
32818
33631
|
for (const { pos } of nfts) {
|
|
32819
33632
|
const nftId = pos.nftId.toString();
|
|
32820
|
-
const supplyRaw =
|
|
32821
|
-
const borrowRaw =
|
|
33633
|
+
const supplyRaw = toBigInt8(pos.supply);
|
|
33634
|
+
const borrowRaw = toBigInt8(pos.borrow) + toBigInt8(pos.dustBorrow);
|
|
32822
33635
|
if (supplyRaw === 0n && borrowRaw === 0n) continue;
|
|
32823
33636
|
modes[nftId] = 0;
|
|
32824
33637
|
const posData = {};
|
|
@@ -32898,7 +33711,7 @@ var getFluidUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
32898
33711
|
FLUID_USER_CALL_COUNT
|
|
32899
33712
|
];
|
|
32900
33713
|
};
|
|
32901
|
-
function
|
|
33714
|
+
function toBigInt9(v) {
|
|
32902
33715
|
if (v === void 0 || v === null || v === "0x") return 0n;
|
|
32903
33716
|
if (typeof v === "bigint") return v;
|
|
32904
33717
|
try {
|
|
@@ -32982,7 +33795,7 @@ var getGearboxV3UserDataConverter = (_lender, chainId, account, meta) => {
|
|
|
32982
33795
|
for (const ca of accounts) {
|
|
32983
33796
|
const caAddress = (ca.creditAccount ?? ca.addr ?? "").toString().toLowerCase();
|
|
32984
33797
|
if (!caAddress) continue;
|
|
32985
|
-
const debtRaw =
|
|
33798
|
+
const debtRaw = toBigInt9(ca.debt);
|
|
32986
33799
|
const tokens = Array.isArray(ca.tokens) ? ca.tokens : Array.isArray(ca.balances) ? ca.balances : [];
|
|
32987
33800
|
modes[caAddress] = 0;
|
|
32988
33801
|
const posData = {};
|
|
@@ -32991,9 +33804,9 @@ var getGearboxV3UserDataConverter = (_lender, chainId, account, meta) => {
|
|
|
32991
33804
|
const rawToken = (bal?.token ?? "").toString().toLowerCase();
|
|
32992
33805
|
if (!rawToken) continue;
|
|
32993
33806
|
const token = rawToken;
|
|
32994
|
-
const balRaw =
|
|
33807
|
+
const balRaw = toBigInt9(bal.balance);
|
|
32995
33808
|
if (balRaw === 0n) continue;
|
|
32996
|
-
const quotaRaw =
|
|
33809
|
+
const quotaRaw = toBigInt9(bal.quota);
|
|
32997
33810
|
const isQuoted = quotaRaw > 0n || !!bal?.isQuoted;
|
|
32998
33811
|
const colMarketUid = createMarketUid(chainId, lenderKey, token);
|
|
32999
33812
|
ensureMetaStub(metaMap, colMarketUid, token);
|
|
@@ -33168,7 +33981,7 @@ function normalizeUnderlying3(token) {
|
|
|
33168
33981
|
const lower4 = token.toLowerCase();
|
|
33169
33982
|
return Object.values(WETH_BY_CHAIN).includes(lower4) ? zeroAddress : lower4;
|
|
33170
33983
|
}
|
|
33171
|
-
function
|
|
33984
|
+
function toBigInt10(v) {
|
|
33172
33985
|
if (v === void 0 || v === null || v === "0x") return 0n;
|
|
33173
33986
|
if (typeof v === "bigint") return v;
|
|
33174
33987
|
try {
|
|
@@ -33178,22 +33991,22 @@ function toBigInt11(v) {
|
|
|
33178
33991
|
}
|
|
33179
33992
|
}
|
|
33180
33993
|
function readDebtUnits(positionResult) {
|
|
33181
|
-
if (Array.isArray(positionResult)) return
|
|
33994
|
+
if (Array.isArray(positionResult)) return toBigInt10(positionResult[4]);
|
|
33182
33995
|
if (positionResult && typeof positionResult === "object")
|
|
33183
|
-
return
|
|
33996
|
+
return toBigInt10(positionResult.debt);
|
|
33184
33997
|
return 0n;
|
|
33185
33998
|
}
|
|
33186
33999
|
function readUpdatedLender(updateResult) {
|
|
33187
34000
|
if (Array.isArray(updateResult)) {
|
|
33188
34001
|
return {
|
|
33189
|
-
credit:
|
|
33190
|
-
pendingFee:
|
|
34002
|
+
credit: toBigInt10(updateResult[0]),
|
|
34003
|
+
pendingFee: toBigInt10(updateResult[1])
|
|
33191
34004
|
};
|
|
33192
34005
|
}
|
|
33193
34006
|
if (updateResult && typeof updateResult === "object") {
|
|
33194
34007
|
return {
|
|
33195
|
-
credit:
|
|
33196
|
-
pendingFee:
|
|
34008
|
+
credit: toBigInt10(updateResult.newCredit),
|
|
34009
|
+
pendingFee: toBigInt10(updateResult.newPendingFee)
|
|
33197
34010
|
};
|
|
33198
34011
|
}
|
|
33199
34012
|
return { credit: 0n, pendingFee: 0n };
|
|
@@ -33264,7 +34077,7 @@ var getMidnightUserDataConverter = (_lender, chainId, account, meta) => {
|
|
|
33264
34077
|
pendingFee: pendingFeeStr
|
|
33265
34078
|
};
|
|
33266
34079
|
market.collateralParams.forEach((c, i) => {
|
|
33267
|
-
const collAmt =
|
|
34080
|
+
const collAmt = toBigInt10(collateralResults[i]);
|
|
33268
34081
|
if (collAmt === 0n) return;
|
|
33269
34082
|
anyBalance = true;
|
|
33270
34083
|
const collAddr = c.token.toLowerCase();
|
|
@@ -33313,7 +34126,7 @@ var getMidnightUserDataConverter = (_lender, chainId, account, meta) => {
|
|
|
33313
34126
|
];
|
|
33314
34127
|
};
|
|
33315
34128
|
var WAD12 = 1000000000000000000n;
|
|
33316
|
-
function
|
|
34129
|
+
function toBigInt11(v) {
|
|
33317
34130
|
if (v === void 0 || v === null || v === "0x") return 0n;
|
|
33318
34131
|
if (typeof v === "bigint") return v;
|
|
33319
34132
|
try {
|
|
@@ -33350,11 +34163,11 @@ var getTermUserDataConverter = (_lender, chainId, account, meta) => {
|
|
|
33350
34163
|
const loanDisplayPrice = loanMeta ? getDisplayPrice(loanMeta) : 0;
|
|
33351
34164
|
const loanOraclePrice = loanMeta ? getOraclePrice(loanMeta) : 0;
|
|
33352
34165
|
const loanPriceHist = loanMeta?.price?.priceUsd24h ?? loanDisplayPrice;
|
|
33353
|
-
const debtUnits =
|
|
34166
|
+
const debtUnits = toBigInt11(obligationResult);
|
|
33354
34167
|
const debtStr = parseRawAmount(debtUnits.toString(), market.loanDecimals);
|
|
33355
34168
|
const debtNum = Number(debtStr);
|
|
33356
|
-
const repoBalance =
|
|
33357
|
-
const redemptionValue =
|
|
34169
|
+
const repoBalance = toBigInt11(balanceResult);
|
|
34170
|
+
const redemptionValue = toBigInt11(redemptionResult) || toBigInt11(market.redemptionValue) || WAD12;
|
|
33358
34171
|
const lentUnits = repoBalance * redemptionValue / WAD12;
|
|
33359
34172
|
const depositsStr = parseRawAmount(lentUnits.toString(), market.loanDecimals);
|
|
33360
34173
|
const depositsNum = Number(depositsStr);
|
|
@@ -33378,7 +34191,7 @@ var getTermUserDataConverter = (_lender, chainId, account, meta) => {
|
|
|
33378
34191
|
claimableRewards: 0
|
|
33379
34192
|
};
|
|
33380
34193
|
market.collateralParams.forEach((c, i) => {
|
|
33381
|
-
const collAmt =
|
|
34194
|
+
const collAmt = toBigInt11(collateralResults[i]);
|
|
33382
34195
|
if (collAmt === 0n) return;
|
|
33383
34196
|
anyBalance = true;
|
|
33384
34197
|
const collAddr = c.token.toLowerCase();
|
|
@@ -33974,11 +34787,15 @@ var big9 = (v) => {
|
|
|
33974
34787
|
var getInverseUserDataConverter = (lender, chainId, account, meta) => {
|
|
33975
34788
|
const cfg = inverseConfigFor(lender, chainId);
|
|
33976
34789
|
const markets = inverseChainData(lender, chainId)?.markets ?? [];
|
|
33977
|
-
const
|
|
34790
|
+
const viaLens = usesInverseLens(chainId);
|
|
34791
|
+
const walkSlots = cfg && markets.length > 0 ? markets.length * INVERSE_CALLS_PER_MARKET + INVERSE_TAIL_CALLS : 0;
|
|
34792
|
+
const expected = walkSlots === 0 ? 0 : viaLens ? 1 : walkSlots;
|
|
33978
34793
|
return [
|
|
33979
|
-
(
|
|
34794
|
+
(raw) => {
|
|
33980
34795
|
if (!cfg || expected === 0) return void 0;
|
|
33981
|
-
if (!
|
|
34796
|
+
if (!raw || raw.length < expected) return void 0;
|
|
34797
|
+
const data = viaLens ? rebuildInverseData(raw[0], markets.length) : raw;
|
|
34798
|
+
if (!data || data.length < walkSlots) return void 0;
|
|
33982
34799
|
const dolaAddr = cfg.dola.toLowerCase();
|
|
33983
34800
|
const debtDecimals = cfg.debtDecimals ?? 18;
|
|
33984
34801
|
const tailBase = markets.length * INVERSE_CALLS_PER_MARKET;
|
|
@@ -34196,6 +35013,60 @@ var getCoolerUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
34196
35013
|
expected
|
|
34197
35014
|
];
|
|
34198
35015
|
};
|
|
35016
|
+
var statesFromSlice2 = (data, marketCount) => {
|
|
35017
|
+
const out = /* @__PURE__ */ new Map();
|
|
35018
|
+
for (let i = 0; i < marketCount; i++) {
|
|
35019
|
+
const base = i * LLAMALEND_CALLS_PER_MARKET;
|
|
35020
|
+
const stateRaw = data[base];
|
|
35021
|
+
if (isFailedCall(stateRaw) || !Array.isArray(stateRaw)) continue;
|
|
35022
|
+
const ticksRaw = data[base + 3];
|
|
35023
|
+
const approvalRaw = data[base + 4];
|
|
35024
|
+
const vaultSharesRaw = data[base + 5];
|
|
35025
|
+
const gaugeSharesRaw = data[base + 6];
|
|
35026
|
+
const shareToAssetRaw = data[base + 7];
|
|
35027
|
+
const healthRaw = data[base + 1];
|
|
35028
|
+
const pricesRaw = data[base + 2];
|
|
35029
|
+
out.set(i, {
|
|
35030
|
+
collateral: big11(stateRaw[0]),
|
|
35031
|
+
bandBorrowed: big11(stateRaw[1]),
|
|
35032
|
+
debt: big11(stateRaw[2]),
|
|
35033
|
+
bandCount: Number(big11(stateRaw[3])),
|
|
35034
|
+
health: isFailedCall(healthRaw) ? 0n : big11(healthRaw),
|
|
35035
|
+
priceUpper: arrAt(pricesRaw, 0),
|
|
35036
|
+
priceLower: arrAt(pricesRaw, 1),
|
|
35037
|
+
bands: isFailedCall(ticksRaw) || !Array.isArray(ticksRaw) ? void 0 : [Number(big11(ticksRaw[0])), Number(big11(ticksRaw[1]))],
|
|
35038
|
+
delegated: isFailedCall(approvalRaw) ? false : approvalRaw === true,
|
|
35039
|
+
vaultShares: isFailedCall(vaultSharesRaw) ? 0n : big11(vaultSharesRaw),
|
|
35040
|
+
gaugeShares: isFailedCall(gaugeSharesRaw) ? 0n : big11(gaugeSharesRaw),
|
|
35041
|
+
shareToAsset: isFailedCall(shareToAssetRaw) ? 0n : big11(shareToAssetRaw)
|
|
35042
|
+
});
|
|
35043
|
+
}
|
|
35044
|
+
return out;
|
|
35045
|
+
};
|
|
35046
|
+
var statesFromLens = (rows) => {
|
|
35047
|
+
const out = /* @__PURE__ */ new Map();
|
|
35048
|
+
for (const r of rows) {
|
|
35049
|
+
const w = r.words;
|
|
35050
|
+
out.set(r.index, {
|
|
35051
|
+
collateral: w[0],
|
|
35052
|
+
bandBorrowed: w[1],
|
|
35053
|
+
debt: w[2],
|
|
35054
|
+
bandCount: Number(w[3]),
|
|
35055
|
+
health: asInt256(w[4]),
|
|
35056
|
+
priceUpper: w[5],
|
|
35057
|
+
priceLower: w[6],
|
|
35058
|
+
bands: [Number(asInt256(w[7])), Number(asInt256(w[8]))],
|
|
35059
|
+
// bit0 — the spender holds this Controller's boolean grant. Absent on
|
|
35060
|
+
// older-blueprint controllers, where the lens's read fails and this reads
|
|
35061
|
+
// false: fail closed, same as the roster walk.
|
|
35062
|
+
delegated: (r.flags & 1) !== 0,
|
|
35063
|
+
vaultShares: w[9],
|
|
35064
|
+
gaugeShares: w[10],
|
|
35065
|
+
shareToAsset: w[11]
|
|
35066
|
+
});
|
|
35067
|
+
}
|
|
35068
|
+
return out;
|
|
35069
|
+
};
|
|
34199
35070
|
var big11 = (v) => {
|
|
34200
35071
|
try {
|
|
34201
35072
|
if (typeof v === "bigint") return v;
|
|
@@ -34211,36 +35082,34 @@ var arrAt = (v, i) => {
|
|
|
34211
35082
|
var getLlamaLendUserDataConverter = (lender, chainId, account, meta) => {
|
|
34212
35083
|
const cfg = llamaLendConfigFor(lender, chainId);
|
|
34213
35084
|
const markets = llamaLendChainData(lender, chainId)?.markets ?? [];
|
|
34214
|
-
const
|
|
35085
|
+
const viaLens = usesLlamaLendLens(chainId);
|
|
35086
|
+
const expected = cfg && markets.length > 0 ? viaLens ? 1 : markets.length * LLAMALEND_CALLS_PER_MARKET : 0;
|
|
34215
35087
|
return [
|
|
34216
35088
|
(data) => {
|
|
34217
35089
|
if (!cfg || expected === 0) return void 0;
|
|
34218
35090
|
if (!data || data.length < expected) return void 0;
|
|
34219
35091
|
const out = {};
|
|
35092
|
+
let states;
|
|
35093
|
+
if (viaLens) {
|
|
35094
|
+
const blobs = data[0];
|
|
35095
|
+
if (isFailedCall(blobs) || !Array.isArray(blobs) || blobs.length !== 1) {
|
|
35096
|
+
return void 0;
|
|
35097
|
+
}
|
|
35098
|
+
states = statesFromLens(
|
|
35099
|
+
decodeLensRows(blobs[0], LLAMALEND_LENS_WORDS).rows
|
|
35100
|
+
);
|
|
35101
|
+
} else {
|
|
35102
|
+
states = statesFromSlice2(data, markets.length);
|
|
35103
|
+
}
|
|
34220
35104
|
markets.forEach((market, i) => {
|
|
34221
|
-
const
|
|
34222
|
-
|
|
34223
|
-
|
|
34224
|
-
const
|
|
34225
|
-
const bandBorrowed = big11(stateRaw[1]);
|
|
34226
|
-
const debt = big11(stateRaw[2]);
|
|
34227
|
-
const bandCount = Number(big11(stateRaw[3]));
|
|
34228
|
-
const vaultSharesRaw = data[base + 5];
|
|
34229
|
-
const gaugeSharesRaw = data[base + 6];
|
|
34230
|
-
const vaultShares = isFailedCall(vaultSharesRaw) ? 0n : big11(vaultSharesRaw);
|
|
34231
|
-
const gaugeShares = isFailedCall(gaugeSharesRaw) ? 0n : big11(gaugeSharesRaw);
|
|
35105
|
+
const st = states.get(i);
|
|
35106
|
+
if (!st) return;
|
|
35107
|
+
const { collateral, bandBorrowed, debt, bandCount } = st;
|
|
35108
|
+
const { vaultShares, gaugeShares } = st;
|
|
34232
35109
|
const lendShares = vaultShares + gaugeShares;
|
|
34233
35110
|
if (collateral === 0n && debt === 0n && bandBorrowed === 0n && lendShares === 0n)
|
|
34234
35111
|
return;
|
|
34235
|
-
const
|
|
34236
|
-
const health = isFailedCall(healthRaw) ? 0n : big11(healthRaw);
|
|
34237
|
-
const pricesRaw = data[base + 2];
|
|
34238
|
-
const priceUpper = arrAt(pricesRaw, 0);
|
|
34239
|
-
const priceLower = arrAt(pricesRaw, 1);
|
|
34240
|
-
const ticksRaw = data[base + 3];
|
|
34241
|
-
const bands = isFailedCall(ticksRaw) || !Array.isArray(ticksRaw) ? void 0 : [Number(big11(ticksRaw[0])), Number(big11(ticksRaw[1]))];
|
|
34242
|
-
const approvalRaw = data[base + 4];
|
|
34243
|
-
const delegated = isFailedCall(approvalRaw) ? false : approvalRaw === true;
|
|
35112
|
+
const { health, priceUpper, priceLower, bands, delegated } = st;
|
|
34244
35113
|
const lenderKey = llamaLendLenderKey(lender, market.controller);
|
|
34245
35114
|
const metaMap = meta?.[lenderKey];
|
|
34246
35115
|
if (!metaMap) return;
|
|
@@ -34258,8 +35127,7 @@ var getLlamaLendUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
34258
35127
|
const loanDisplay = loanMeta ? getDisplayPrice(loanMeta) : 0;
|
|
34259
35128
|
const loanOracle = loanMeta ? getOraclePrice(loanMeta) : 0;
|
|
34260
35129
|
const loanHist = loanMeta?.price?.priceUsd24h ?? loanDisplay;
|
|
34261
|
-
const
|
|
34262
|
-
const shareToAsset = isFailedCall(shareToAssetRaw) ? 0n : big11(shareToAssetRaw);
|
|
35130
|
+
const { shareToAsset } = st;
|
|
34263
35131
|
const lendAssets = shareToAsset === 0n ? 0n : lendShares * shareToAsset / 10n ** 18n;
|
|
34264
35132
|
const lendStr = parseRawAmount(lendAssets.toString(), loanDecimals);
|
|
34265
35133
|
const depositStr = parseRawAmount(
|
|
@@ -35294,7 +36162,7 @@ var getTellerUserDataConverter = (_lender, chainId, account, meta) => {
|
|
|
35294
36162
|
];
|
|
35295
36163
|
};
|
|
35296
36164
|
var nowSec8 = () => Math.floor(Date.now() / 1e3);
|
|
35297
|
-
function
|
|
36165
|
+
function toBigInt12(v) {
|
|
35298
36166
|
if (v === void 0 || v === null || v === "0x") return 0n;
|
|
35299
36167
|
if (typeof v === "bigint") return v;
|
|
35300
36168
|
try {
|
|
@@ -35311,18 +36179,18 @@ function field11(res, name, index) {
|
|
|
35311
36179
|
return void 0;
|
|
35312
36180
|
}
|
|
35313
36181
|
function parsePosition(res) {
|
|
35314
|
-
const ftBalance =
|
|
35315
|
-
const xtBalance =
|
|
36182
|
+
const ftBalance = toBigInt12(field11(res, "ftBalance", 2));
|
|
36183
|
+
const xtBalance = toBigInt12(field11(res, "xtBalance", 3));
|
|
35316
36184
|
const rawGts = field11(res, "gtInfo", 4);
|
|
35317
36185
|
const gts = [];
|
|
35318
36186
|
if (Array.isArray(rawGts)) {
|
|
35319
36187
|
for (const g of rawGts) {
|
|
35320
|
-
const loanId =
|
|
36188
|
+
const loanId = toBigInt12(field11(g, "loanId", 0));
|
|
35321
36189
|
if (loanId === 0n) continue;
|
|
35322
36190
|
gts.push({
|
|
35323
36191
|
loanId: loanId.toString(),
|
|
35324
|
-
collateralAmt:
|
|
35325
|
-
debtAmt:
|
|
36192
|
+
collateralAmt: toBigInt12(field11(g, "collateralAmt", 1)),
|
|
36193
|
+
debtAmt: toBigInt12(field11(g, "debtAmt", 2))
|
|
35326
36194
|
});
|
|
35327
36195
|
}
|
|
35328
36196
|
}
|
|
@@ -35331,22 +36199,35 @@ function parsePosition(res) {
|
|
|
35331
36199
|
var getTermMaxUserDataConverter = (_lender, chainId, account, meta) => {
|
|
35332
36200
|
const discovery = getCachedTermMaxDiscovery(chainId, account);
|
|
35333
36201
|
const markets = discovery?.markets ?? [];
|
|
35334
|
-
const expected =
|
|
36202
|
+
const expected = discovery?.chunks ?? 0;
|
|
35335
36203
|
return [
|
|
35336
36204
|
(data) => {
|
|
35337
36205
|
if (expected === 0) return void 0;
|
|
35338
36206
|
if (!data || data.length < expected) return void 0;
|
|
35339
|
-
const positions =
|
|
35340
|
-
|
|
36207
|
+
const positions = [];
|
|
36208
|
+
for (let i = 0; i < expected; i++) {
|
|
36209
|
+
const chunk7 = data[i];
|
|
36210
|
+
const size = Math.min(
|
|
36211
|
+
TERMMAX_MARKETS_PER_CALL,
|
|
36212
|
+
markets.length - i * TERMMAX_MARKETS_PER_CALL
|
|
36213
|
+
);
|
|
36214
|
+
if (Array.isArray(chunk7)) positions.push(...chunk7);
|
|
36215
|
+
else positions.push(...new Array(Math.max(size, 0)).fill(void 0));
|
|
36216
|
+
}
|
|
36217
|
+
if (positions.length === 0) return void 0;
|
|
35341
36218
|
const now = nowSec8();
|
|
35342
36219
|
const out = {};
|
|
36220
|
+
let droppedMatured = 0;
|
|
35343
36221
|
markets.forEach((market, i) => {
|
|
35344
36222
|
const parsed = parsePosition(positions[i]);
|
|
35345
36223
|
if (!parsed) return;
|
|
35346
36224
|
if (parsed.ftBalance === 0n && parsed.gts.length === 0) return;
|
|
35347
36225
|
const lenderKey = termMaxLenderKey(market.market);
|
|
35348
36226
|
const metaMap = meta?.[lenderKey];
|
|
35349
|
-
if (!metaMap)
|
|
36227
|
+
if (!metaMap) {
|
|
36228
|
+
if (market.maturity <= now) droppedMatured++;
|
|
36229
|
+
return;
|
|
36230
|
+
}
|
|
35350
36231
|
const loanAddr = market.debtToken.toLowerCase();
|
|
35351
36232
|
const collAddr = market.collateral.toLowerCase();
|
|
35352
36233
|
const loanUid = createMarketUid(chainId, lenderKey, loanAddr);
|
|
@@ -35461,6 +36342,11 @@ var getTermMaxUserDataConverter = (_lender, chainId, account, meta) => {
|
|
|
35461
36342
|
);
|
|
35462
36343
|
if (userData && userData.data.length > 0) out[lenderKey] = userData;
|
|
35463
36344
|
});
|
|
36345
|
+
if (droppedMatured > 0) {
|
|
36346
|
+
console.warn(
|
|
36347
|
+
`[termmax] ${droppedMatured} matured position(s) found for ${account} on chain ${chainId} but dropped: no meta row`
|
|
36348
|
+
);
|
|
36349
|
+
}
|
|
35464
36350
|
return Object.keys(out).length > 0 ? out : void 0;
|
|
35465
36351
|
},
|
|
35466
36352
|
expected
|
|
@@ -35614,9 +36500,9 @@ function getUserDataConverter(lender, chainId, account, params, meta) {
|
|
|
35614
36500
|
params?.subAccountIndexes
|
|
35615
36501
|
);
|
|
35616
36502
|
if (isSiloV2Type(lender))
|
|
35617
|
-
return getSiloV2UserDataConverter(lender, chainId, account, meta
|
|
36503
|
+
return getSiloV2UserDataConverter(lender, chainId, account, meta, params);
|
|
35618
36504
|
if (isSiloV3Type(lender))
|
|
35619
|
-
return getSiloV3UserDataConverter(lender, chainId, account, meta
|
|
36505
|
+
return getSiloV3UserDataConverter(lender, chainId, account, meta, params);
|
|
35620
36506
|
if (isFluid(lender))
|
|
35621
36507
|
return getFluidUserDataConverter(lender, chainId, account, meta);
|
|
35622
36508
|
if (isGearboxV3(lender))
|
|
@@ -50469,7 +51355,7 @@ var DLEND_POOLS = [
|
|
|
50469
51355
|
pool: "0x6598DaD18Bda89A0E58A1F427c8CeBc0dE90F153"
|
|
50470
51356
|
}
|
|
50471
51357
|
];
|
|
50472
|
-
var
|
|
51358
|
+
var ZERO_ADDRESS8 = "0x0000000000000000000000000000000000000000";
|
|
50473
51359
|
var SECONDS_PER_YEAR13 = 31536e3;
|
|
50474
51360
|
var ABI = [
|
|
50475
51361
|
{
|
|
@@ -50586,7 +51472,7 @@ var DTRINITY_SOURCE = {
|
|
|
50586
51472
|
link: "https://docs.dtrinity.org/protocol-components/dlend",
|
|
50587
51473
|
platform: "protocol"
|
|
50588
51474
|
};
|
|
50589
|
-
var isZero = (a) => !a || a.toLowerCase() ===
|
|
51475
|
+
var isZero = (a) => !a || a.toLowerCase() === ZERO_ADDRESS8;
|
|
50590
51476
|
var scale = (raw, decimals) => Number(raw) / 10 ** decimals;
|
|
50591
51477
|
function emptyReward2() {
|
|
50592
51478
|
return {
|
|
@@ -50801,7 +51687,7 @@ var dtrinityRebateRewardFetcher = {
|
|
|
50801
51687
|
};
|
|
50802
51688
|
var SECONDS_PER_YEAR14 = 31536e3;
|
|
50803
51689
|
var WAD16 = 10n ** 18n;
|
|
50804
|
-
var
|
|
51690
|
+
var ZERO4 = "0x0000000000000000000000000000000000000000";
|
|
50805
51691
|
var UNBOOSTED_FACTOR = 0.4;
|
|
50806
51692
|
var MAX_BOOST = 2.5;
|
|
50807
51693
|
var GAUGE_CONTROLLER = "0x2F50D538606Fa9EDD2B11E2446BEb18C9D5846bB";
|
|
@@ -50997,7 +51883,7 @@ async function fetchPrices(keys) {
|
|
|
50997
51883
|
var priceOf = (prices, chainId, address) => prices[`${LLAMA_CHAIN_SLUG[chainId]}:${address.toLowerCase()}`] ?? 0;
|
|
50998
51884
|
function rosterFor(chainId) {
|
|
50999
51885
|
const markets = llamaLendChainData(Lender.LLAMALEND, chainId)?.markets ?? [];
|
|
51000
|
-
return markets.filter((m) => m.gauge && m.gauge !==
|
|
51886
|
+
return markets.filter((m) => m.gauge && m.gauge !== ZERO4).map((m) => ({
|
|
51001
51887
|
controller: m.controller,
|
|
51002
51888
|
vault: m.vault,
|
|
51003
51889
|
gauge: m.gauge,
|
|
@@ -51074,7 +51960,7 @@ async function fetchForChain(chainId, nowSeconds) {
|
|
|
51074
51960
|
}) : [];
|
|
51075
51961
|
let cursor = 0;
|
|
51076
51962
|
const withTokens = state.map((s) => {
|
|
51077
|
-
const tokens = r2.slice(cursor, cursor + s.rewardCount).filter((t) => typeof t === "string" && t !==
|
|
51963
|
+
const tokens = r2.slice(cursor, cursor + s.rewardCount).filter((t) => typeof t === "string" && t !== ZERO4);
|
|
51078
51964
|
cursor += s.rewardCount;
|
|
51079
51965
|
return { ...s, tokens };
|
|
51080
51966
|
});
|
|
@@ -53347,7 +54233,7 @@ var SiloOracleAbi = [
|
|
|
53347
54233
|
type: "function"
|
|
53348
54234
|
}
|
|
53349
54235
|
];
|
|
53350
|
-
var
|
|
54236
|
+
var ZERO_ADDRESS9 = "0x0000000000000000000000000000000000000000";
|
|
53351
54237
|
function lookupUSD(context, asset) {
|
|
53352
54238
|
const lc = asset.toLowerCase();
|
|
53353
54239
|
const groupKey = context.tokenList?.[lc]?.assetGroup ?? `${context.chainId}-${lc}`;
|
|
@@ -53359,7 +54245,7 @@ function getSiloV2Calls(chainId) {
|
|
|
53359
54245
|
const tokensWithRealOracle = /* @__PURE__ */ new Set();
|
|
53360
54246
|
for (const market of allMarkets) {
|
|
53361
54247
|
for (const half of [market.silo0, market.silo1]) {
|
|
53362
|
-
if (half.solvencyOracle && half.solvencyOracle !==
|
|
54248
|
+
if (half.solvencyOracle && half.solvencyOracle !== ZERO_ADDRESS9) {
|
|
53363
54249
|
tokensWithRealOracle.add(half.token.toLowerCase());
|
|
53364
54250
|
}
|
|
53365
54251
|
}
|
|
@@ -53372,7 +54258,7 @@ function getSiloV2Calls(chainId) {
|
|
|
53372
54258
|
const lenderKey = siloV2LenderKey(market.siloConfig);
|
|
53373
54259
|
const halves = [market.silo0, market.silo1];
|
|
53374
54260
|
const isStatic = halves.map(
|
|
53375
|
-
(h) => !h.solvencyOracle || h.solvencyOracle ===
|
|
54261
|
+
(h) => !h.solvencyOracle || h.solvencyOracle === ZERO_ADDRESS9
|
|
53376
54262
|
);
|
|
53377
54263
|
if (isStatic[0] && isStatic[1]) {
|
|
53378
54264
|
const t0 = halves[0].token.toLowerCase();
|
|
@@ -53392,7 +54278,7 @@ function getSiloV2Calls(chainId) {
|
|
|
53392
54278
|
decimals: half.decimals,
|
|
53393
54279
|
silo: half.silo.toLowerCase(),
|
|
53394
54280
|
lenderKey,
|
|
53395
|
-
oracle:
|
|
54281
|
+
oracle: ZERO_ADDRESS9,
|
|
53396
54282
|
partnerToken: partnerLc,
|
|
53397
54283
|
isStatic: true
|
|
53398
54284
|
});
|
|
@@ -53516,7 +54402,7 @@ var SiloOracleAbi2 = [
|
|
|
53516
54402
|
type: "function"
|
|
53517
54403
|
}
|
|
53518
54404
|
];
|
|
53519
|
-
var
|
|
54405
|
+
var ZERO_ADDRESS10 = "0x0000000000000000000000000000000000000000";
|
|
53520
54406
|
function lookupUSD2(context, asset) {
|
|
53521
54407
|
const lc = asset.toLowerCase();
|
|
53522
54408
|
const groupKey = context.tokenList?.[lc]?.assetGroup ?? `${context.chainId}-${lc}`;
|
|
@@ -53528,7 +54414,7 @@ function getSiloV3Calls(chainId) {
|
|
|
53528
54414
|
const tokensWithRealOracle = /* @__PURE__ */ new Set();
|
|
53529
54415
|
for (const market of allMarkets) {
|
|
53530
54416
|
for (const half of [market.silo0, market.silo1]) {
|
|
53531
|
-
if (half.solvencyOracle && half.solvencyOracle !==
|
|
54417
|
+
if (half.solvencyOracle && half.solvencyOracle !== ZERO_ADDRESS10) {
|
|
53532
54418
|
tokensWithRealOracle.add(half.token.toLowerCase());
|
|
53533
54419
|
}
|
|
53534
54420
|
}
|
|
@@ -53541,7 +54427,7 @@ function getSiloV3Calls(chainId) {
|
|
|
53541
54427
|
const lenderKey = siloV3LenderKey(market.siloConfig);
|
|
53542
54428
|
const halves = [market.silo0, market.silo1];
|
|
53543
54429
|
const isStatic = halves.map(
|
|
53544
|
-
(h) => !h.solvencyOracle || h.solvencyOracle ===
|
|
54430
|
+
(h) => !h.solvencyOracle || h.solvencyOracle === ZERO_ADDRESS10
|
|
53545
54431
|
);
|
|
53546
54432
|
if (isStatic[0] && isStatic[1]) {
|
|
53547
54433
|
const t0 = halves[0].token.toLowerCase();
|
|
@@ -53561,7 +54447,7 @@ function getSiloV3Calls(chainId) {
|
|
|
53561
54447
|
decimals: half.decimals,
|
|
53562
54448
|
silo: half.silo.toLowerCase(),
|
|
53563
54449
|
lenderKey,
|
|
53564
|
-
oracle:
|
|
54450
|
+
oracle: ZERO_ADDRESS10,
|
|
53565
54451
|
partnerToken: partnerLc,
|
|
53566
54452
|
isStatic: true
|
|
53567
54453
|
});
|
|
@@ -53940,7 +54826,7 @@ function lookupUSD3(context, asset) {
|
|
|
53940
54826
|
return context.usdPrices[groupKey] ?? context.usdPrices[lc] ?? 0;
|
|
53941
54827
|
}
|
|
53942
54828
|
function parseSiloV2GraphQLResults(items, context) {
|
|
53943
|
-
const
|
|
54829
|
+
const ZERO_ADDRESS12 = "0x0000000000000000000000000000000000000000";
|
|
53944
54830
|
const out = [];
|
|
53945
54831
|
const seen = /* @__PURE__ */ new Set();
|
|
53946
54832
|
for (const item of items) {
|
|
@@ -53963,8 +54849,8 @@ function parseSiloV2GraphQLResults(items, context) {
|
|
|
53963
54849
|
const partnerTokenLc = other.token.toLowerCase();
|
|
53964
54850
|
const dedupKey = `${lenderKey}:${tokenLc}`;
|
|
53965
54851
|
if (seen.has(dedupKey)) continue;
|
|
53966
|
-
const oracleAddr = (side.solvencyOracleAddress ?? side.solvencyOracle?.id ?? self.solvencyOracle ??
|
|
53967
|
-
const isStatic = !oracleAddr || oracleAddr ===
|
|
54852
|
+
const oracleAddr = (side.solvencyOracleAddress ?? side.solvencyOracle?.id ?? self.solvencyOracle ?? ZERO_ADDRESS12).toLowerCase();
|
|
54853
|
+
const isStatic = !oracleAddr || oracleAddr === ZERO_ADDRESS12;
|
|
53968
54854
|
const siloAddrLc = self.silo.toLowerCase();
|
|
53969
54855
|
try {
|
|
53970
54856
|
let priceUSD = 0;
|
|
@@ -54082,7 +54968,7 @@ function lookupUSD4(context, asset) {
|
|
|
54082
54968
|
return context.usdPrices[groupKey] ?? context.usdPrices[lc] ?? 0;
|
|
54083
54969
|
}
|
|
54084
54970
|
function parseSiloV3GraphQLResults(items, context) {
|
|
54085
|
-
const
|
|
54971
|
+
const ZERO_ADDRESS12 = "0x0000000000000000000000000000000000000000";
|
|
54086
54972
|
const out = [];
|
|
54087
54973
|
const seen = /* @__PURE__ */ new Set();
|
|
54088
54974
|
for (const item of items) {
|
|
@@ -54105,8 +54991,8 @@ function parseSiloV3GraphQLResults(items, context) {
|
|
|
54105
54991
|
const partnerTokenLc = other.token.toLowerCase();
|
|
54106
54992
|
const dedupKey = `${lenderKey}:${tokenLc}`;
|
|
54107
54993
|
if (seen.has(dedupKey)) continue;
|
|
54108
|
-
const oracleAddr = (side.solvencyOracleAddress ?? side.solvencyOracle?.id ?? self.solvencyOracle ??
|
|
54109
|
-
const isStatic = !oracleAddr || oracleAddr ===
|
|
54994
|
+
const oracleAddr = (side.solvencyOracleAddress ?? side.solvencyOracle?.id ?? self.solvencyOracle ?? ZERO_ADDRESS12).toLowerCase();
|
|
54995
|
+
const isStatic = !oracleAddr || oracleAddr === ZERO_ADDRESS12;
|
|
54110
54996
|
const siloAddrLc = self.silo.toLowerCase();
|
|
54111
54997
|
try {
|
|
54112
54998
|
let priceUSD = 0;
|
|
@@ -54228,7 +55114,7 @@ var AGGREGATOR_ABI = [...ChainlinkAggregatorAbi, ...DESCRIPTION_ABI];
|
|
|
54228
55114
|
function isFailed(r) {
|
|
54229
55115
|
return r === "0x" || r === void 0 || r === null;
|
|
54230
55116
|
}
|
|
54231
|
-
var
|
|
55117
|
+
var ZERO_ADDRESS11 = "0x0000000000000000000000000000000000000000";
|
|
54232
55118
|
async function probeAaveFeedTimestamps(chainId, options = {}) {
|
|
54233
55119
|
const { rpcOverrides, batchSize, retries = 2 } = options;
|
|
54234
55120
|
const result = {};
|
|
@@ -54265,7 +55151,7 @@ async function probeAaveFeedTimestamps(chainId, options = {}) {
|
|
|
54265
55151
|
const raw = sourceResults[i];
|
|
54266
55152
|
if (isFailed(raw)) return;
|
|
54267
55153
|
const source = String(raw).toLowerCase();
|
|
54268
|
-
if (source ===
|
|
55154
|
+
if (source === ZERO_ADDRESS11) return;
|
|
54269
55155
|
sourceOf.set(i, source);
|
|
54270
55156
|
if (!sourceIndex.has(source)) {
|
|
54271
55157
|
sourceIndex.set(source, uniqueSources.length);
|
|
@@ -57718,6 +58604,7 @@ query GetSiloVaults {
|
|
|
57718
58604
|
ownerId
|
|
57719
58605
|
curatorId
|
|
57720
58606
|
guardianId
|
|
58607
|
+
allocators
|
|
57721
58608
|
feeRecipient
|
|
57722
58609
|
totalAssets
|
|
57723
58610
|
totalAssetsUsd
|
|
@@ -57742,9 +58629,21 @@ query GetSiloVaults {
|
|
|
57742
58629
|
collateralSharesSupply
|
|
57743
58630
|
collateralAssetsSupply
|
|
57744
58631
|
liquidity
|
|
58632
|
+
utilization
|
|
57745
58633
|
otherMarket { inputToken { id } }
|
|
57746
58634
|
}
|
|
57747
58635
|
}
|
|
58636
|
+
incentivesPrograms(where: {chainId_in: [${chainId}]}, limit: ${limit}) {
|
|
58637
|
+
items {
|
|
58638
|
+
id
|
|
58639
|
+
name
|
|
58640
|
+
shareTokenId
|
|
58641
|
+
emissionPerSecond
|
|
58642
|
+
distributionEnd
|
|
58643
|
+
apr
|
|
58644
|
+
rewardToken { id symbol decimals }
|
|
58645
|
+
}
|
|
58646
|
+
}
|
|
57748
58647
|
}
|
|
57749
58648
|
`;
|
|
57750
58649
|
function buildExposures(vaultId, totalAssetsFormatted, pricePerUnit, positionsByVault, marketMeta, tokenList) {
|
|
@@ -57779,10 +58678,11 @@ function buildExposures(vaultId, totalAssetsFormatted, pricePerUnit, positionsBy
|
|
|
57779
58678
|
return withIdle.length > 0 ? withIdle : void 0;
|
|
57780
58679
|
}
|
|
57781
58680
|
function computeSiloLiquidityFormatted(vaultId, totalAssetsFormatted, positionsByVault, marketMeta) {
|
|
57782
|
-
if (totalAssetsFormatted <= 0) return 0;
|
|
58681
|
+
if (totalAssetsFormatted <= 0) return { formatted: 0, proven: true };
|
|
57783
58682
|
const rows = positionsByVault.get(vaultId) ?? [];
|
|
57784
58683
|
let allocated = 0;
|
|
57785
58684
|
let withdrawable = 0;
|
|
58685
|
+
let resolved2 = 0;
|
|
57786
58686
|
for (const row of rows) {
|
|
57787
58687
|
const marketId = (row.marketId ?? "").toLowerCase();
|
|
57788
58688
|
if (!marketId) continue;
|
|
@@ -57792,13 +58692,81 @@ function computeSiloLiquidityFormatted(vaultId, totalAssetsFormatted, positionsB
|
|
|
57792
58692
|
if (!Number.isFinite(shares) || shares <= 0) continue;
|
|
57793
58693
|
const assets = shares * meta.collateralAssets / meta.collateralShares;
|
|
57794
58694
|
if (!(assets > 0) || assets > totalAssetsFormatted * 1.01) continue;
|
|
58695
|
+
resolved2 += 1;
|
|
57795
58696
|
allocated += assets;
|
|
57796
58697
|
withdrawable += Math.min(assets, meta.liquidity);
|
|
57797
58698
|
}
|
|
57798
58699
|
const idle = Math.max(0, totalAssetsFormatted - allocated);
|
|
57799
|
-
return
|
|
58700
|
+
return {
|
|
58701
|
+
formatted: Math.min(totalAssetsFormatted, idle + withdrawable),
|
|
58702
|
+
proven: resolved2 > 0
|
|
58703
|
+
};
|
|
58704
|
+
}
|
|
58705
|
+
function computeSiloUtilization(vaultId, totalAssetsFormatted, positionsByVault, marketMeta) {
|
|
58706
|
+
if (totalAssetsFormatted <= 0) return void 0;
|
|
58707
|
+
const rows = positionsByVault.get(vaultId) ?? [];
|
|
58708
|
+
let borrowed = 0;
|
|
58709
|
+
let resolved2 = 0;
|
|
58710
|
+
for (const row of rows) {
|
|
58711
|
+
const marketId = (row.marketId ?? "").toLowerCase();
|
|
58712
|
+
if (!marketId) continue;
|
|
58713
|
+
const meta = marketMeta.get(marketId);
|
|
58714
|
+
if (!meta || meta.collateralShares <= 0) continue;
|
|
58715
|
+
const shares = Number(row.sTokenBalance ?? 0);
|
|
58716
|
+
if (!Number.isFinite(shares) || shares <= 0) continue;
|
|
58717
|
+
const assets = shares * meta.collateralAssets / meta.collateralShares;
|
|
58718
|
+
if (!(assets > 0) || assets > totalAssetsFormatted * 1.01) continue;
|
|
58719
|
+
resolved2 += 1;
|
|
58720
|
+
borrowed += assets * clamp012(meta.utilization);
|
|
58721
|
+
}
|
|
58722
|
+
if (resolved2 === 0) return void 0;
|
|
58723
|
+
return {
|
|
58724
|
+
borrowed: Math.min(borrowed, totalAssetsFormatted),
|
|
58725
|
+
total: totalAssetsFormatted
|
|
58726
|
+
};
|
|
57800
58727
|
}
|
|
58728
|
+
var clamp012 = (n) => !Number.isFinite(n) ? 0 : n < 0 ? 0 : n > 1 ? 1 : n;
|
|
57801
58729
|
var PERFORMANCE_FEE_SCALE = 1e16;
|
|
58730
|
+
var SECONDS_PER_YEAR15 = 31536e3;
|
|
58731
|
+
function buildVaultRewards(vaultId, totalAssetsUsd, programsByShareToken, priceOf2, nowSeconds) {
|
|
58732
|
+
const programs = programsByShareToken.get(vaultId) ?? [];
|
|
58733
|
+
const rewards = [];
|
|
58734
|
+
let rewardsRate = 0;
|
|
58735
|
+
let priced = true;
|
|
58736
|
+
for (const p of programs) {
|
|
58737
|
+
const emission = Number(p.emissionPerSecond ?? 0);
|
|
58738
|
+
const endsAt = Number(p.distributionEnd ?? 0);
|
|
58739
|
+
if (!Number.isFinite(emission) || emission <= 0) continue;
|
|
58740
|
+
if (!Number.isFinite(endsAt) || endsAt <= nowSeconds) continue;
|
|
58741
|
+
const tokenAddress = (p.rewardToken?.id ?? "").toLowerCase();
|
|
58742
|
+
const tokenDecimals = Number(p.rewardToken?.decimals ?? 18);
|
|
58743
|
+
const tokenPrice = tokenAddress ? priceOf2(tokenAddress) : 0;
|
|
58744
|
+
let apr;
|
|
58745
|
+
if (tokenPrice > 0 && totalAssetsUsd > 0) {
|
|
58746
|
+
const annualTokens = emission / 10 ** tokenDecimals * SECONDS_PER_YEAR15;
|
|
58747
|
+
apr = annualTokens * tokenPrice / totalAssetsUsd * 100;
|
|
58748
|
+
rewardsRate += apr;
|
|
58749
|
+
} else {
|
|
58750
|
+
priced = false;
|
|
58751
|
+
}
|
|
58752
|
+
rewards.push({
|
|
58753
|
+
programId: p.id ?? "",
|
|
58754
|
+
name: p.name ?? void 0,
|
|
58755
|
+
tokenAddress,
|
|
58756
|
+
tokenSymbol: p.rewardToken?.symbol ?? void 0,
|
|
58757
|
+
tokenDecimals,
|
|
58758
|
+
emissionPerSecond: String(p.emissionPerSecond ?? "0"),
|
|
58759
|
+
endsAt,
|
|
58760
|
+
apr,
|
|
58761
|
+
indexerApr: p.apr == null ? void 0 : Number(p.apr)
|
|
58762
|
+
});
|
|
58763
|
+
}
|
|
58764
|
+
return {
|
|
58765
|
+
rewards: rewards.length > 0 ? rewards : void 0,
|
|
58766
|
+
rewardsRate,
|
|
58767
|
+
priced
|
|
58768
|
+
};
|
|
58769
|
+
}
|
|
57802
58770
|
var toRawAmount3 = (decimalString, decimals) => {
|
|
57803
58771
|
if (!decimalString) return "0";
|
|
57804
58772
|
try {
|
|
@@ -57807,7 +58775,16 @@ var toRawAmount3 = (decimalString, decimals) => {
|
|
|
57807
58775
|
return "0";
|
|
57808
58776
|
}
|
|
57809
58777
|
};
|
|
57810
|
-
function parseVault5(v, chainId, prices, tokenList,
|
|
58778
|
+
function parseVault5(v, chainId, prices, tokenList, derived) {
|
|
58779
|
+
const {
|
|
58780
|
+
exposures,
|
|
58781
|
+
liquidityFormatted,
|
|
58782
|
+
liquidityProven,
|
|
58783
|
+
utilization,
|
|
58784
|
+
rewards,
|
|
58785
|
+
rewardsRate,
|
|
58786
|
+
rewardsPriced
|
|
58787
|
+
} = derived;
|
|
57811
58788
|
const address = (v?.id ?? "").toLowerCase();
|
|
57812
58789
|
const assetAddr = (v?.asset?.id ?? "").toLowerCase();
|
|
57813
58790
|
if (!address || !assetAddr) return null;
|
|
@@ -57852,13 +58829,20 @@ function parseVault5(v, chainId, prices, tokenList, exposures, liquidityFormatte
|
|
|
57852
58829
|
convertToAssets,
|
|
57853
58830
|
supplyRate,
|
|
57854
58831
|
grossRate,
|
|
57855
|
-
rewardsRate
|
|
57856
|
-
depositRate: supplyRate,
|
|
58832
|
+
rewardsRate,
|
|
58833
|
+
depositRate: supplyRate + rewardsRate,
|
|
58834
|
+
rewards,
|
|
58835
|
+
rewardsIncomplete: rewardsPriced ? void 0 : true,
|
|
57857
58836
|
fee,
|
|
57858
58837
|
timelock: Number(v.timelock ?? 0),
|
|
57859
58838
|
owner: v.ownerId?.toLowerCase() || void 0,
|
|
57860
58839
|
curator: v.curatorId?.toLowerCase() || void 0,
|
|
57861
58840
|
guardian: v.guardianId?.toLowerCase() || void 0,
|
|
58841
|
+
// An allocator can move the vault's money between silos with NO timelock
|
|
58842
|
+
// — the one curation power that changes a depositor's exposure between
|
|
58843
|
+
// blocks. Carried so governance can state it; `timelock` alone overstates
|
|
58844
|
+
// how much notice a holder actually gets.
|
|
58845
|
+
allocators: v.allocators && v.allocators.length > 0 ? v.allocators.map((a) => a.toLowerCase()) : void 0,
|
|
57862
58846
|
feeRecipient: v.feeRecipient?.toLowerCase() || void 0,
|
|
57863
58847
|
asset: assetMeta,
|
|
57864
58848
|
priceUsd: priceUsd || void 0,
|
|
@@ -57872,6 +58856,12 @@ function parseVault5(v, chainId, prices, tokenList, exposures, liquidityFormatte
|
|
|
57872
58856
|
liquidity: liquidityFormatted >= totalAssetsFormatted ? totalAssetsRaw : toRawAmount3(liquidityFormatted.toFixed(decimals), decimals),
|
|
57873
58857
|
liquidityFormatted,
|
|
57874
58858
|
liquidityUsd: totalAssetsFormatted > 0 ? liquidityFormatted * (totalAssetsUsd / totalAssetsFormatted) : 0,
|
|
58859
|
+
// Only claim a same-block exit when the allocation walk actually proved
|
|
58860
|
+
// one. Left undefined on a proven figure so the term-sheet builder makes
|
|
58861
|
+
// the `instant` / `instant-capped` call from the liquidity it can see.
|
|
58862
|
+
withdrawalMode: liquidityProven ? void 0 : "instant-capped",
|
|
58863
|
+
totalBorrowed: utilization && toRawAmount3(utilization.borrowed.toFixed(decimals), decimals),
|
|
58864
|
+
expectedLiquidity: utilization && toRawAmount3(utilization.total.toFixed(decimals), decimals),
|
|
57875
58865
|
exposures
|
|
57876
58866
|
};
|
|
57877
58867
|
}
|
|
@@ -57915,9 +58905,26 @@ var fetchSiloVaults = async (chainId, prices = {}, tokenList = {}, options) => {
|
|
|
57915
58905
|
supplyApr: Number.isFinite(apr) ? apr : 0,
|
|
57916
58906
|
collateralShares: Number(m.collateralSharesSupply ?? 0) || 0,
|
|
57917
58907
|
collateralAssets: Number(m.collateralAssetsSupply ?? 0) || 0,
|
|
57918
|
-
liquidity: Number(m.liquidity ?? 0) || 0
|
|
58908
|
+
liquidity: Number(m.liquidity ?? 0) || 0,
|
|
58909
|
+
utilization: Number(m.utilization ?? 0) || 0
|
|
57919
58910
|
});
|
|
57920
58911
|
}
|
|
58912
|
+
const programs = payload?.data?.incentivesPrograms?.items ?? [];
|
|
58913
|
+
const programsByShareToken = /* @__PURE__ */ new Map();
|
|
58914
|
+
for (const p of programs) {
|
|
58915
|
+
const shareTokenId = (p.shareTokenId ?? "").toLowerCase();
|
|
58916
|
+
if (!shareTokenId) continue;
|
|
58917
|
+
const list = programsByShareToken.get(shareTokenId);
|
|
58918
|
+
if (list) list.push(p);
|
|
58919
|
+
else programsByShareToken.set(shareTokenId, [p]);
|
|
58920
|
+
}
|
|
58921
|
+
const priceOf2 = (address) => {
|
|
58922
|
+
if (!address) return 0;
|
|
58923
|
+
const meta = tokenList[address];
|
|
58924
|
+
const oracleKey = toOracleKey(meta?.assetGroup) ?? toGenericPriceKey(address, chainId);
|
|
58925
|
+
return prices[oracleKey] ?? prices[address] ?? 0;
|
|
58926
|
+
};
|
|
58927
|
+
const nowSeconds = Math.floor(Date.now() / 1e3);
|
|
57921
58928
|
const out = {};
|
|
57922
58929
|
for (const v of items) {
|
|
57923
58930
|
if (options?.protocolVersion && v.protocol?.protocolVersion !== options.protocolVersion) {
|
|
@@ -57935,20 +58942,38 @@ var fetchSiloVaults = async (chainId, prices = {}, tokenList = {}, options) => {
|
|
|
57935
58942
|
marketMeta,
|
|
57936
58943
|
tokenList
|
|
57937
58944
|
);
|
|
57938
|
-
const
|
|
58945
|
+
const liquidity = computeSiloLiquidityFormatted(
|
|
57939
58946
|
vaultId,
|
|
57940
58947
|
totalAssetsFormatted,
|
|
57941
58948
|
positionsByVault,
|
|
57942
58949
|
marketMeta
|
|
57943
58950
|
);
|
|
57944
|
-
const
|
|
57945
|
-
|
|
57946
|
-
|
|
57947
|
-
|
|
57948
|
-
|
|
57949
|
-
|
|
57950
|
-
|
|
58951
|
+
const utilization = computeSiloUtilization(
|
|
58952
|
+
vaultId,
|
|
58953
|
+
totalAssetsFormatted,
|
|
58954
|
+
positionsByVault,
|
|
58955
|
+
marketMeta
|
|
58956
|
+
);
|
|
58957
|
+
const {
|
|
58958
|
+
rewards,
|
|
58959
|
+
rewardsRate,
|
|
58960
|
+
priced: rewardsPriced
|
|
58961
|
+
} = buildVaultRewards(
|
|
58962
|
+
vaultId,
|
|
58963
|
+
apiTotalAssetsUsd || totalAssetsFormatted * pricePerUnit,
|
|
58964
|
+
programsByShareToken,
|
|
58965
|
+
priceOf2,
|
|
58966
|
+
nowSeconds
|
|
57951
58967
|
);
|
|
58968
|
+
const parsed = parseVault5(v, chainId, prices, tokenList, {
|
|
58969
|
+
exposures,
|
|
58970
|
+
liquidityFormatted: liquidity.formatted,
|
|
58971
|
+
liquidityProven: liquidity.proven,
|
|
58972
|
+
utilization,
|
|
58973
|
+
rewards,
|
|
58974
|
+
rewardsRate,
|
|
58975
|
+
rewardsPriced
|
|
58976
|
+
});
|
|
57952
58977
|
if (parsed) out[parsed.address] = parsed;
|
|
57953
58978
|
}
|
|
57954
58979
|
return out;
|
|
@@ -58083,7 +59108,7 @@ query EvkByAssets($assets: [Bytes!]!) {
|
|
|
58083
59108
|
}
|
|
58084
59109
|
}
|
|
58085
59110
|
`;
|
|
58086
|
-
var
|
|
59111
|
+
var ZERO5 = 0n;
|
|
58087
59112
|
var RAY_TO_PERCENT3 = 1e25;
|
|
58088
59113
|
function readAddress2(field13) {
|
|
58089
59114
|
if (!field13) return void 0;
|
|
@@ -58098,28 +59123,28 @@ function parseVaultFee(v) {
|
|
|
58098
59123
|
return n;
|
|
58099
59124
|
}
|
|
58100
59125
|
function safeBigInt(v) {
|
|
58101
|
-
if (v == null || v === "") return
|
|
59126
|
+
if (v == null || v === "") return ZERO5;
|
|
58102
59127
|
try {
|
|
58103
59128
|
return BigInt(v);
|
|
58104
59129
|
} catch {
|
|
58105
|
-
return
|
|
59130
|
+
return ZERO5;
|
|
58106
59131
|
}
|
|
58107
59132
|
}
|
|
58108
59133
|
function computeWeightedSupplyApy(strategies, totalAssetsRaw, feePercent2, evkIndex) {
|
|
58109
59134
|
if (!strategies?.length) return 0;
|
|
58110
59135
|
const totalAssets = safeBigInt(totalAssetsRaw);
|
|
58111
|
-
if (totalAssets ===
|
|
58112
|
-
let weightedRay =
|
|
59136
|
+
if (totalAssets === ZERO5) return 0;
|
|
59137
|
+
let weightedRay = ZERO5;
|
|
58113
59138
|
for (const s of strategies) {
|
|
58114
59139
|
const evk = s.strategy?.toLowerCase();
|
|
58115
59140
|
if (!evk) continue;
|
|
58116
59141
|
const apyRay = evkIndex.bySupplyApyRay.get(evk);
|
|
58117
59142
|
if (apyRay == null) continue;
|
|
58118
59143
|
const allocated = safeBigInt(s.allocatedAssets);
|
|
58119
|
-
if (allocated ===
|
|
59144
|
+
if (allocated === ZERO5) continue;
|
|
58120
59145
|
weightedRay += allocated * apyRay;
|
|
58121
59146
|
}
|
|
58122
|
-
if (weightedRay ===
|
|
59147
|
+
if (weightedRay === ZERO5) return 0;
|
|
58123
59148
|
const apyRayPerAsset = weightedRay / totalAssets;
|
|
58124
59149
|
const grossPercent = apyToAprPercent(Number(apyRayPerAsset) / RAY_TO_PERCENT3);
|
|
58125
59150
|
const netPercent = grossPercent * (1 - feePercent2 / 100);
|
|
@@ -58127,24 +59152,24 @@ function computeWeightedSupplyApy(strategies, totalAssetsRaw, feePercent2, evkIn
|
|
|
58127
59152
|
}
|
|
58128
59153
|
function computeRealLiquidity(strategies, totalAssetsRaw, evkIndex) {
|
|
58129
59154
|
const totalAssets = safeBigInt(totalAssetsRaw);
|
|
58130
|
-
if (totalAssets ===
|
|
59155
|
+
if (totalAssets === ZERO5) return ZERO5;
|
|
58131
59156
|
if (evkIndex.byCash.size === 0 && evkIndex.bySupplyApyRay.size === 0) {
|
|
58132
59157
|
return totalAssets;
|
|
58133
59158
|
}
|
|
58134
59159
|
if (!strategies?.length) {
|
|
58135
59160
|
return totalAssets;
|
|
58136
59161
|
}
|
|
58137
|
-
let allocSum =
|
|
58138
|
-
let withdrawable =
|
|
59162
|
+
let allocSum = ZERO5;
|
|
59163
|
+
let withdrawable = ZERO5;
|
|
58139
59164
|
for (const s of strategies) {
|
|
58140
59165
|
const alloc = safeBigInt(s.allocatedAssets);
|
|
58141
|
-
if (alloc ===
|
|
59166
|
+
if (alloc === ZERO5) continue;
|
|
58142
59167
|
allocSum += alloc;
|
|
58143
59168
|
const evk = s.strategy?.toLowerCase();
|
|
58144
59169
|
const cash = evk ? evkIndex.byCash.get(evk) : void 0;
|
|
58145
59170
|
withdrawable += cash == null ? alloc : alloc < cash ? alloc : cash;
|
|
58146
59171
|
}
|
|
58147
|
-
const idle = totalAssets > allocSum ? totalAssets - allocSum :
|
|
59172
|
+
const idle = totalAssets > allocSum ? totalAssets - allocSum : ZERO5;
|
|
58148
59173
|
const result = idle + withdrawable;
|
|
58149
59174
|
return result > totalAssets ? totalAssets : result;
|
|
58150
59175
|
}
|
|
@@ -58301,7 +59326,7 @@ async function fetchEulerEarnVaultsFromSubgraph(chainId, prices = {}, tokenList
|
|
|
58301
59326
|
return out;
|
|
58302
59327
|
}
|
|
58303
59328
|
var EULER_DATA_API_BASE2 = "https://v3.euler.finance/v3";
|
|
58304
|
-
var
|
|
59329
|
+
var API_TIMEOUT_MS2 = 1e4;
|
|
58305
59330
|
var DETAIL_CONCURRENCY = 8;
|
|
58306
59331
|
function safeBigInt2(v) {
|
|
58307
59332
|
if (v == null || v === "") return 0n;
|
|
@@ -58319,7 +59344,7 @@ function rescaleExchangeRate(exchangeRate, shareDecimals) {
|
|
|
58319
59344
|
}
|
|
58320
59345
|
async function getJson3(url) {
|
|
58321
59346
|
const controller = new AbortController();
|
|
58322
|
-
const timer = setTimeout(() => controller.abort(),
|
|
59347
|
+
const timer = setTimeout(() => controller.abort(), API_TIMEOUT_MS2);
|
|
58323
59348
|
try {
|
|
58324
59349
|
const res = await fetch(url, { signal: controller.signal });
|
|
58325
59350
|
if (!res.ok) return void 0;
|
|
@@ -58834,7 +59859,7 @@ var Multicall3BalanceAbi = [
|
|
|
58834
59859
|
outputs: [{ type: "uint256" }]
|
|
58835
59860
|
}
|
|
58836
59861
|
];
|
|
58837
|
-
var
|
|
59862
|
+
var toBigInt13 = (v) => {
|
|
58838
59863
|
if (v === void 0 || v === null) return void 0;
|
|
58839
59864
|
if (typeof v === "bigint") return v;
|
|
58840
59865
|
if (typeof v === "number") return BigInt(v);
|
|
@@ -58858,12 +59883,12 @@ var readerBeetsStS = (entry) => ({
|
|
|
58858
59883
|
],
|
|
58859
59884
|
abis: [TotalSupplyAbi, BeetsStSAbi, BeetsStSAbi],
|
|
58860
59885
|
parse: ([supply, rate, pool]) => {
|
|
58861
|
-
const totalSupply =
|
|
58862
|
-
const exchangeRate =
|
|
59886
|
+
const totalSupply = toBigInt13(supply);
|
|
59887
|
+
const exchangeRate = toBigInt13(rate);
|
|
58863
59888
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
58864
59889
|
return void 0;
|
|
58865
59890
|
}
|
|
58866
|
-
const liquidity =
|
|
59891
|
+
const liquidity = toBigInt13(pool);
|
|
58867
59892
|
return {
|
|
58868
59893
|
totalAssets: totalSupply * exchangeRate / ONE_E1811,
|
|
58869
59894
|
totalSupply,
|
|
@@ -58904,12 +59929,12 @@ var readerBenqiSavax = (entry) => ({
|
|
|
58904
59929
|
],
|
|
58905
59930
|
abis: [TotalSupplyAbi, BenqiSavaxAbi, BenqiSavaxAbi],
|
|
58906
59931
|
parse: ([supply, rate, totalPooled]) => {
|
|
58907
|
-
const totalSupply =
|
|
58908
|
-
const exchangeRate =
|
|
59932
|
+
const totalSupply = toBigInt13(supply);
|
|
59933
|
+
const exchangeRate = toBigInt13(rate);
|
|
58909
59934
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
58910
59935
|
return void 0;
|
|
58911
59936
|
}
|
|
58912
|
-
const totalAssets =
|
|
59937
|
+
const totalAssets = toBigInt13(totalPooled) ?? totalSupply * exchangeRate / ONE_E1811;
|
|
58913
59938
|
return {
|
|
58914
59939
|
totalAssets,
|
|
58915
59940
|
totalSupply,
|
|
@@ -58923,7 +59948,7 @@ var readerBgtWrapper1to1 = (entry) => ({
|
|
|
58923
59948
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
58924
59949
|
abis: [TotalSupplyAbi],
|
|
58925
59950
|
parse: ([supply]) => {
|
|
58926
|
-
const totalSupply =
|
|
59951
|
+
const totalSupply = toBigInt13(supply);
|
|
58927
59952
|
if (totalSupply === void 0) return void 0;
|
|
58928
59953
|
return {
|
|
58929
59954
|
totalAssets: totalSupply,
|
|
@@ -58952,8 +59977,8 @@ var readerDineroBeraEth = (entry) => ({
|
|
|
58952
59977
|
],
|
|
58953
59978
|
abis: [TotalSupplyAbi, DineroBeraEthAbi],
|
|
58954
59979
|
parse: ([supply, rate]) => {
|
|
58955
|
-
const totalSupply =
|
|
58956
|
-
const exchangeRate =
|
|
59980
|
+
const totalSupply = toBigInt13(supply);
|
|
59981
|
+
const exchangeRate = toBigInt13(rate);
|
|
58957
59982
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
58958
59983
|
return void 0;
|
|
58959
59984
|
}
|
|
@@ -58974,9 +59999,9 @@ var readerErc4626 = (entry) => ({
|
|
|
58974
59999
|
],
|
|
58975
60000
|
abis: [Erc4626ReadAbi, TotalSupplyAbi, Erc4626ReadAbi],
|
|
58976
60001
|
parse: ([assets, supply, rate]) => {
|
|
58977
|
-
const totalAssets =
|
|
58978
|
-
const totalSupply =
|
|
58979
|
-
const exchangeRate =
|
|
60002
|
+
const totalAssets = toBigInt13(assets);
|
|
60003
|
+
const totalSupply = toBigInt13(supply);
|
|
60004
|
+
const exchangeRate = toBigInt13(rate);
|
|
58980
60005
|
if (totalAssets === void 0 || totalSupply === void 0 || exchangeRate === void 0) {
|
|
58981
60006
|
return void 0;
|
|
58982
60007
|
}
|
|
@@ -58991,9 +60016,9 @@ var readerErc4626PreviewRedeem = (entry) => ({
|
|
|
58991
60016
|
],
|
|
58992
60017
|
abis: [Erc4626PreviewRedeemAbi, TotalSupplyAbi, Erc4626PreviewRedeemAbi],
|
|
58993
60018
|
parse: ([assets, supply, rate]) => {
|
|
58994
|
-
const totalAssets =
|
|
58995
|
-
const totalSupply =
|
|
58996
|
-
const exchangeRate =
|
|
60019
|
+
const totalAssets = toBigInt13(assets);
|
|
60020
|
+
const totalSupply = toBigInt13(supply);
|
|
60021
|
+
const exchangeRate = toBigInt13(rate);
|
|
58997
60022
|
if (totalAssets === void 0 || totalSupply === void 0 || exchangeRate === void 0) {
|
|
58998
60023
|
return void 0;
|
|
58999
60024
|
}
|
|
@@ -59053,15 +60078,15 @@ var readerEtherFiWeEth = (entry) => {
|
|
|
59053
60078
|
calls,
|
|
59054
60079
|
abis,
|
|
59055
60080
|
parse: (slice2) => {
|
|
59056
|
-
const totalSupply =
|
|
59057
|
-
const exchangeRate =
|
|
60081
|
+
const totalSupply = toBigInt13(slice2[0]);
|
|
60082
|
+
const exchangeRate = toBigInt13(slice2[1]);
|
|
59058
60083
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
59059
60084
|
return void 0;
|
|
59060
60085
|
}
|
|
59061
60086
|
let liquidity;
|
|
59062
60087
|
if (lp) {
|
|
59063
|
-
const lpBalance =
|
|
59064
|
-
const locked =
|
|
60088
|
+
const lpBalance = toBigInt13(slice2[2]);
|
|
60089
|
+
const locked = toBigInt13(slice2[3]);
|
|
59065
60090
|
if (lpBalance !== void 0 && locked !== void 0) {
|
|
59066
60091
|
liquidity = lpBalance > locked ? lpBalance - locked : 0n;
|
|
59067
60092
|
}
|
|
@@ -59095,7 +60120,7 @@ var readerHyperbeatBeHype = (entry) => {
|
|
|
59095
60120
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
59096
60121
|
abis: [TotalSupplyAbi],
|
|
59097
60122
|
parse: ([supply]) => {
|
|
59098
|
-
const totalSupply =
|
|
60123
|
+
const totalSupply = toBigInt13(supply);
|
|
59099
60124
|
if (totalSupply === void 0) return void 0;
|
|
59100
60125
|
return {
|
|
59101
60126
|
totalAssets: totalSupply,
|
|
@@ -59112,8 +60137,8 @@ var readerHyperbeatBeHype = (entry) => {
|
|
|
59112
60137
|
],
|
|
59113
60138
|
abis: [TotalSupplyAbi, HyperbeatStakingCoreAbi],
|
|
59114
60139
|
parse: ([supply, rate]) => {
|
|
59115
|
-
const totalSupply =
|
|
59116
|
-
const exchangeRate =
|
|
60140
|
+
const totalSupply = toBigInt13(supply);
|
|
60141
|
+
const exchangeRate = toBigInt13(rate);
|
|
59117
60142
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
59118
60143
|
return void 0;
|
|
59119
60144
|
}
|
|
@@ -59145,7 +60170,7 @@ var readerKelpRsEth = (entry) => {
|
|
|
59145
60170
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
59146
60171
|
abis: [TotalSupplyAbi],
|
|
59147
60172
|
parse: ([supply]) => {
|
|
59148
|
-
const totalSupply =
|
|
60173
|
+
const totalSupply = toBigInt13(supply);
|
|
59149
60174
|
if (totalSupply === void 0) return void 0;
|
|
59150
60175
|
return {
|
|
59151
60176
|
totalAssets: totalSupply,
|
|
@@ -59162,8 +60187,8 @@ var readerKelpRsEth = (entry) => {
|
|
|
59162
60187
|
],
|
|
59163
60188
|
abis: [TotalSupplyAbi, KelpLrtOracleAbi],
|
|
59164
60189
|
parse: ([supply, rate]) => {
|
|
59165
|
-
const totalSupply =
|
|
59166
|
-
const exchangeRate =
|
|
60190
|
+
const totalSupply = toBigInt13(supply);
|
|
60191
|
+
const exchangeRate = toBigInt13(rate);
|
|
59167
60192
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
59168
60193
|
return void 0;
|
|
59169
60194
|
}
|
|
@@ -59195,7 +60220,7 @@ var readerKinetiqKHype = (entry) => {
|
|
|
59195
60220
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
59196
60221
|
abis: [TotalSupplyAbi],
|
|
59197
60222
|
parse: ([supply]) => {
|
|
59198
|
-
const totalSupply =
|
|
60223
|
+
const totalSupply = toBigInt13(supply);
|
|
59199
60224
|
if (totalSupply === void 0) return void 0;
|
|
59200
60225
|
return {
|
|
59201
60226
|
totalAssets: totalSupply,
|
|
@@ -59212,8 +60237,8 @@ var readerKinetiqKHype = (entry) => {
|
|
|
59212
60237
|
],
|
|
59213
60238
|
abis: [TotalSupplyAbi, KinetiqStakingAccountantAbi],
|
|
59214
60239
|
parse: ([supply, rate]) => {
|
|
59215
|
-
const totalSupply =
|
|
59216
|
-
const exchangeRate =
|
|
60240
|
+
const totalSupply = toBigInt13(supply);
|
|
60241
|
+
const exchangeRate = toBigInt13(rate);
|
|
59217
60242
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
59218
60243
|
return void 0;
|
|
59219
60244
|
}
|
|
@@ -59253,12 +60278,12 @@ var readerLairStKaia = (entry) => ({
|
|
|
59253
60278
|
],
|
|
59254
60279
|
abis: [TotalSupplyAbi, LairStKaiaAbi, LairStKaiaAbi],
|
|
59255
60280
|
parse: ([supply, rate, totalStaking]) => {
|
|
59256
|
-
const totalSupply =
|
|
59257
|
-
const exchangeRate =
|
|
60281
|
+
const totalSupply = toBigInt13(supply);
|
|
60282
|
+
const exchangeRate = toBigInt13(rate);
|
|
59258
60283
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
59259
60284
|
return void 0;
|
|
59260
60285
|
}
|
|
59261
|
-
const totalAssets =
|
|
60286
|
+
const totalAssets = toBigInt13(totalStaking) ?? totalSupply * exchangeRate / ONE_E1811;
|
|
59262
60287
|
return {
|
|
59263
60288
|
totalAssets,
|
|
59264
60289
|
totalSupply,
|
|
@@ -59286,8 +60311,8 @@ var readerLidoWstEth = (entry) => ({
|
|
|
59286
60311
|
],
|
|
59287
60312
|
abis: [TotalSupplyAbi, LidoWstEthAbi],
|
|
59288
60313
|
parse: ([supply, rate]) => {
|
|
59289
|
-
const totalSupply =
|
|
59290
|
-
const exchangeRate =
|
|
60314
|
+
const totalSupply = toBigInt13(supply);
|
|
60315
|
+
const exchangeRate = toBigInt13(rate);
|
|
59291
60316
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
59292
60317
|
return void 0;
|
|
59293
60318
|
}
|
|
@@ -59325,7 +60350,7 @@ var readerListaSlisBnb = (entry) => {
|
|
|
59325
60350
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
59326
60351
|
abis: [TotalSupplyAbi],
|
|
59327
60352
|
parse: ([supply]) => {
|
|
59328
|
-
const totalSupply =
|
|
60353
|
+
const totalSupply = toBigInt13(supply);
|
|
59329
60354
|
if (totalSupply === void 0) return void 0;
|
|
59330
60355
|
return {
|
|
59331
60356
|
totalAssets: totalSupply,
|
|
@@ -59343,12 +60368,12 @@ var readerListaSlisBnb = (entry) => {
|
|
|
59343
60368
|
],
|
|
59344
60369
|
abis: [TotalSupplyAbi, ListaStakeManagerReadAbi, ListaStakeManagerReadAbi],
|
|
59345
60370
|
parse: ([supply, rate, pooled]) => {
|
|
59346
|
-
const totalSupply =
|
|
59347
|
-
const exchangeRate =
|
|
60371
|
+
const totalSupply = toBigInt13(supply);
|
|
60372
|
+
const exchangeRate = toBigInt13(rate);
|
|
59348
60373
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
59349
60374
|
return void 0;
|
|
59350
60375
|
}
|
|
59351
|
-
const pooledBnb =
|
|
60376
|
+
const pooledBnb = toBigInt13(pooled);
|
|
59352
60377
|
const totalAssets = pooledBnb ?? totalSupply * exchangeRate / ONE_E1811;
|
|
59353
60378
|
return { totalAssets, totalSupply, exchangeRate };
|
|
59354
60379
|
}
|
|
@@ -59374,7 +60399,7 @@ var readerMantleMEth = (entry) => {
|
|
|
59374
60399
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
59375
60400
|
abis: [TotalSupplyAbi],
|
|
59376
60401
|
parse: ([supply]) => {
|
|
59377
|
-
const totalSupply =
|
|
60402
|
+
const totalSupply = toBigInt13(supply);
|
|
59378
60403
|
if (totalSupply === void 0) return void 0;
|
|
59379
60404
|
return {
|
|
59380
60405
|
totalAssets: totalSupply,
|
|
@@ -59391,8 +60416,8 @@ var readerMantleMEth = (entry) => {
|
|
|
59391
60416
|
],
|
|
59392
60417
|
abis: [TotalSupplyAbi, MantleStakingAbi],
|
|
59393
60418
|
parse: ([supply, rate]) => {
|
|
59394
|
-
const totalSupply =
|
|
59395
|
-
const exchangeRate =
|
|
60419
|
+
const totalSupply = toBigInt13(supply);
|
|
60420
|
+
const exchangeRate = toBigInt13(rate);
|
|
59396
60421
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
59397
60422
|
return void 0;
|
|
59398
60423
|
}
|
|
@@ -59413,7 +60438,7 @@ var readerOffChain = (entry) => {
|
|
|
59413
60438
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
59414
60439
|
abis: [TotalSupplyAbi],
|
|
59415
60440
|
parse: ([supply]) => {
|
|
59416
|
-
const totalSupply =
|
|
60441
|
+
const totalSupply = toBigInt13(supply);
|
|
59417
60442
|
if (totalSupply === void 0) return void 0;
|
|
59418
60443
|
return {
|
|
59419
60444
|
totalAssets: rescaleDecimals(totalSupply, shareDec, underlyingDec),
|
|
@@ -59447,7 +60472,7 @@ var readerRenzoEzEth = (entry) => {
|
|
|
59447
60472
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
59448
60473
|
abis: [TotalSupplyAbi],
|
|
59449
60474
|
parse: ([supply]) => {
|
|
59450
|
-
const totalSupply =
|
|
60475
|
+
const totalSupply = toBigInt13(supply);
|
|
59451
60476
|
if (totalSupply === void 0) return void 0;
|
|
59452
60477
|
return {
|
|
59453
60478
|
totalAssets: totalSupply,
|
|
@@ -59464,9 +60489,9 @@ var readerRenzoEzEth = (entry) => {
|
|
|
59464
60489
|
],
|
|
59465
60490
|
abis: [TotalSupplyAbi, RenzoRestakeManagerAbi],
|
|
59466
60491
|
parse: ([supply, tvls]) => {
|
|
59467
|
-
const totalSupply =
|
|
60492
|
+
const totalSupply = toBigInt13(supply);
|
|
59468
60493
|
if (totalSupply === void 0 || totalSupply === 0n) return void 0;
|
|
59469
|
-
const totalTvl = Array.isArray(tvls) && tvls.length >= 3 ?
|
|
60494
|
+
const totalTvl = Array.isArray(tvls) && tvls.length >= 3 ? toBigInt13(tvls[2]) : void 0;
|
|
59470
60495
|
if (totalTvl === void 0) return void 0;
|
|
59471
60496
|
return {
|
|
59472
60497
|
totalAssets: totalTvl,
|
|
@@ -59520,12 +60545,12 @@ var readerRocketReth = (entry) => {
|
|
|
59520
60545
|
calls,
|
|
59521
60546
|
abis,
|
|
59522
60547
|
parse: (slice2) => {
|
|
59523
|
-
const totalSupply =
|
|
59524
|
-
const exchangeRate =
|
|
60548
|
+
const totalSupply = toBigInt13(slice2[0]);
|
|
60549
|
+
const exchangeRate = toBigInt13(slice2[1]);
|
|
59525
60550
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
59526
60551
|
return void 0;
|
|
59527
60552
|
}
|
|
59528
|
-
const liquidity = depositPool ?
|
|
60553
|
+
const liquidity = depositPool ? toBigInt13(slice2[2]) : void 0;
|
|
59529
60554
|
return {
|
|
59530
60555
|
totalAssets: totalSupply * exchangeRate / ONE_E1811,
|
|
59531
60556
|
totalSupply,
|
|
@@ -59564,7 +60589,7 @@ var readerStaderEthx = (entry) => {
|
|
|
59564
60589
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
59565
60590
|
abis: [TotalSupplyAbi],
|
|
59566
60591
|
parse: ([supply]) => {
|
|
59567
|
-
const totalSupply =
|
|
60592
|
+
const totalSupply = toBigInt13(supply);
|
|
59568
60593
|
if (totalSupply === void 0) return void 0;
|
|
59569
60594
|
return {
|
|
59570
60595
|
totalAssets: totalSupply,
|
|
@@ -59581,8 +60606,8 @@ var readerStaderEthx = (entry) => {
|
|
|
59581
60606
|
],
|
|
59582
60607
|
abis: [TotalSupplyAbi, StaderEthxAbi],
|
|
59583
60608
|
parse: ([supply, rate]) => {
|
|
59584
|
-
const totalSupply =
|
|
59585
|
-
const exchangeRate =
|
|
60609
|
+
const totalSupply = toBigInt13(supply);
|
|
60610
|
+
const exchangeRate = toBigInt13(rate);
|
|
59586
60611
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
59587
60612
|
return void 0;
|
|
59588
60613
|
}
|
|
@@ -59610,10 +60635,10 @@ var readerStaderMaticX = (entry) => {
|
|
|
59610
60635
|
],
|
|
59611
60636
|
abis: [TotalSupplyAbi, StaderMaticXAbi],
|
|
59612
60637
|
parse: ([supply, tup]) => {
|
|
59613
|
-
const totalSupply =
|
|
60638
|
+
const totalSupply = toBigInt13(supply);
|
|
59614
60639
|
if (!Array.isArray(tup) || tup.length < 3) return void 0;
|
|
59615
|
-
const amountInMatic =
|
|
59616
|
-
const totalPooledMatic =
|
|
60640
|
+
const amountInMatic = toBigInt13(tup[0]);
|
|
60641
|
+
const totalPooledMatic = toBigInt13(tup[2]);
|
|
59617
60642
|
if (totalSupply === void 0 || amountInMatic === void 0) {
|
|
59618
60643
|
return void 0;
|
|
59619
60644
|
}
|
|
@@ -59646,7 +60671,7 @@ var readerStakeWiseOsEth = (entry) => {
|
|
|
59646
60671
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
59647
60672
|
abis: [TotalSupplyAbi],
|
|
59648
60673
|
parse: ([supply]) => {
|
|
59649
|
-
const totalSupply =
|
|
60674
|
+
const totalSupply = toBigInt13(supply);
|
|
59650
60675
|
if (totalSupply === void 0) return void 0;
|
|
59651
60676
|
return {
|
|
59652
60677
|
totalAssets: totalSupply,
|
|
@@ -59663,8 +60688,8 @@ var readerStakeWiseOsEth = (entry) => {
|
|
|
59663
60688
|
],
|
|
59664
60689
|
abis: [TotalSupplyAbi, StakeWiseOsTokenAbi],
|
|
59665
60690
|
parse: ([supply, rate]) => {
|
|
59666
|
-
const totalSupply =
|
|
59667
|
-
const exchangeRate =
|
|
60691
|
+
const totalSupply = toBigInt13(supply);
|
|
60692
|
+
const exchangeRate = toBigInt13(rate);
|
|
59668
60693
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
59669
60694
|
return void 0;
|
|
59670
60695
|
}
|
|
@@ -59696,7 +60721,7 @@ var readerStCelo = (entry) => {
|
|
|
59696
60721
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
59697
60722
|
abis: [TotalSupplyAbi],
|
|
59698
60723
|
parse: ([supply]) => {
|
|
59699
|
-
const totalSupply =
|
|
60724
|
+
const totalSupply = toBigInt13(supply);
|
|
59700
60725
|
if (totalSupply === void 0) return void 0;
|
|
59701
60726
|
return {
|
|
59702
60727
|
totalAssets: totalSupply,
|
|
@@ -59713,8 +60738,8 @@ var readerStCelo = (entry) => {
|
|
|
59713
60738
|
],
|
|
59714
60739
|
abis: [TotalSupplyAbi, StCeloManagerAbi],
|
|
59715
60740
|
parse: ([supply, rate]) => {
|
|
59716
|
-
const totalSupply =
|
|
59717
|
-
const exchangeRate =
|
|
60741
|
+
const totalSupply = toBigInt13(supply);
|
|
60742
|
+
const exchangeRate = toBigInt13(rate);
|
|
59718
60743
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
59719
60744
|
return void 0;
|
|
59720
60745
|
}
|
|
@@ -59746,8 +60771,8 @@ var readerSwellGetRate = (entry) => ({
|
|
|
59746
60771
|
],
|
|
59747
60772
|
abis: [TotalSupplyAbi, SwellGetRateAbi],
|
|
59748
60773
|
parse: ([supply, rate]) => {
|
|
59749
|
-
const totalSupply =
|
|
59750
|
-
const exchangeRate =
|
|
60774
|
+
const totalSupply = toBigInt13(supply);
|
|
60775
|
+
const exchangeRate = toBigInt13(rate);
|
|
59751
60776
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
59752
60777
|
return void 0;
|
|
59753
60778
|
}
|
|
@@ -59778,7 +60803,7 @@ var readerValantisWstHype = (entry) => {
|
|
|
59778
60803
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
59779
60804
|
abis: [TotalSupplyAbi],
|
|
59780
60805
|
parse: ([supply]) => {
|
|
59781
|
-
const totalSupply =
|
|
60806
|
+
const totalSupply = toBigInt13(supply);
|
|
59782
60807
|
if (totalSupply === void 0) return void 0;
|
|
59783
60808
|
return {
|
|
59784
60809
|
totalAssets: totalSupply,
|
|
@@ -59795,8 +60820,8 @@ var readerValantisWstHype = (entry) => {
|
|
|
59795
60820
|
],
|
|
59796
60821
|
abis: [TotalSupplyAbi, ValantisStHypeAbi],
|
|
59797
60822
|
parse: ([supply, rate]) => {
|
|
59798
|
-
const totalSupply =
|
|
59799
|
-
const exchangeRate =
|
|
60823
|
+
const totalSupply = toBigInt13(supply);
|
|
60824
|
+
const exchangeRate = toBigInt13(rate);
|
|
59800
60825
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
59801
60826
|
return void 0;
|
|
59802
60827
|
}
|
|
@@ -59830,7 +60855,7 @@ var readerVedaAccountant = (entry) => {
|
|
|
59830
60855
|
calls: [{ address: entry.address, name: "totalSupply", params: [] }],
|
|
59831
60856
|
abis: [TotalSupplyAbi],
|
|
59832
60857
|
parse: ([supply]) => {
|
|
59833
|
-
const totalSupply =
|
|
60858
|
+
const totalSupply = toBigInt13(supply);
|
|
59834
60859
|
if (totalSupply === void 0) return void 0;
|
|
59835
60860
|
return {
|
|
59836
60861
|
totalAssets: rescaleDecimals(totalSupply, shareDec, underlyingDec),
|
|
@@ -59848,8 +60873,8 @@ var readerVedaAccountant = (entry) => {
|
|
|
59848
60873
|
],
|
|
59849
60874
|
abis: [TotalSupplyAbi, VedaAccountantGetRateAbi],
|
|
59850
60875
|
parse: ([supply, rate]) => {
|
|
59851
|
-
const totalSupply =
|
|
59852
|
-
const rawRate =
|
|
60876
|
+
const totalSupply = toBigInt13(supply);
|
|
60877
|
+
const rawRate = toBigInt13(rate);
|
|
59853
60878
|
if (totalSupply === void 0 || rawRate === void 0) return void 0;
|
|
59854
60879
|
const exchangeRate = rawRate * scale3;
|
|
59855
60880
|
return {
|
|
@@ -59884,8 +60909,8 @@ var readerAnkrRatio = (entry) => ({
|
|
|
59884
60909
|
],
|
|
59885
60910
|
abis: [TotalSupplyAbi, AnkrRatioAbi],
|
|
59886
60911
|
parse: ([supply, ratio]) => {
|
|
59887
|
-
const totalSupply =
|
|
59888
|
-
const r =
|
|
60912
|
+
const totalSupply = toBigInt13(supply);
|
|
60913
|
+
const r = toBigInt13(ratio);
|
|
59889
60914
|
if (totalSupply === void 0 || r === void 0 || r === 0n) {
|
|
59890
60915
|
return void 0;
|
|
59891
60916
|
}
|
|
@@ -59916,8 +60941,8 @@ var readerBinanceWbeth = (entry) => ({
|
|
|
59916
60941
|
],
|
|
59917
60942
|
abis: [TotalSupplyAbi, WbethExchangeRateAbi],
|
|
59918
60943
|
parse: ([supply, rate]) => {
|
|
59919
|
-
const totalSupply =
|
|
59920
|
-
const exchangeRate =
|
|
60944
|
+
const totalSupply = toBigInt13(supply);
|
|
60945
|
+
const exchangeRate = toBigInt13(rate);
|
|
59921
60946
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
59922
60947
|
return void 0;
|
|
59923
60948
|
}
|
|
@@ -59960,8 +60985,8 @@ var readerCoreEarnRate = (entry) => {
|
|
|
59960
60985
|
],
|
|
59961
60986
|
abis: [CoreEarnRateAbi, TotalSupplyAbi],
|
|
59962
60987
|
parse: ([rate, supply]) => {
|
|
59963
|
-
const r =
|
|
59964
|
-
const totalSupply =
|
|
60988
|
+
const r = toBigInt13(rate);
|
|
60989
|
+
const totalSupply = toBigInt13(supply);
|
|
59965
60990
|
if (r === void 0 || r === 0n || totalSupply === void 0) {
|
|
59966
60991
|
return void 0;
|
|
59967
60992
|
}
|
|
@@ -59982,8 +61007,8 @@ var readerCoreStakedRatio = (entry) => {
|
|
|
59982
61007
|
],
|
|
59983
61008
|
abis: [CoreTotalStakedAbi, TotalSupplyAbi],
|
|
59984
61009
|
parse: ([staked, supply]) => {
|
|
59985
|
-
const totalStaked =
|
|
59986
|
-
const totalSupply =
|
|
61010
|
+
const totalStaked = toBigInt13(staked);
|
|
61011
|
+
const totalSupply = toBigInt13(supply);
|
|
59987
61012
|
if (totalStaked === void 0 || totalSupply === void 0 || totalSupply === 0n) {
|
|
59988
61013
|
return void 0;
|
|
59989
61014
|
}
|
|
@@ -60022,8 +61047,8 @@ var readerKintsuSMon = (entry) => ({
|
|
|
60022
61047
|
],
|
|
60023
61048
|
abis: [KintsuSMonAbi, KintsuSMonAbi],
|
|
60024
61049
|
parse: ([pooled, shares]) => {
|
|
60025
|
-
const totalAssets =
|
|
60026
|
-
const totalSupply =
|
|
61050
|
+
const totalAssets = toBigInt13(pooled);
|
|
61051
|
+
const totalSupply = toBigInt13(shares);
|
|
60027
61052
|
if (totalAssets === void 0 || totalSupply === void 0) return void 0;
|
|
60028
61053
|
const exchangeRate = totalSupply > 0n ? totalAssets * ONE_E1811 / totalSupply : ONE_E1811;
|
|
60029
61054
|
return { totalAssets, totalSupply, exchangeRate };
|
|
@@ -60544,7 +61569,7 @@ var fetchLstShareTokens = async (chainId, multicallRetry, prices = {}, tokenList
|
|
|
60544
61569
|
const validatorsByAddress = new Map(validatorEntries);
|
|
60545
61570
|
const idleByAddress = /* @__PURE__ */ new Map();
|
|
60546
61571
|
idleEntries.forEach((e, i) => {
|
|
60547
|
-
const bal =
|
|
61572
|
+
const bal = toBigInt13(idleResults[i]);
|
|
60548
61573
|
if (bal !== void 0) idleByAddress.set(e.address.toLowerCase(), bal);
|
|
60549
61574
|
});
|
|
60550
61575
|
const rawResults = new Array(allCalls.length);
|
|
@@ -60674,7 +61699,7 @@ var BeetsStSWithdrawalAbi = [
|
|
|
60674
61699
|
];
|
|
60675
61700
|
|
|
60676
61701
|
// src/vaults/lst/withdrawals/readers/shared.ts
|
|
60677
|
-
var
|
|
61702
|
+
var toBigInt14 = (v) => {
|
|
60678
61703
|
if (v === void 0 || v === null) return void 0;
|
|
60679
61704
|
if (typeof v === "bigint") return v;
|
|
60680
61705
|
if (typeof v === "number") return BigInt(v);
|
|
@@ -60689,7 +61714,7 @@ var toBigInt15 = (v) => {
|
|
|
60689
61714
|
return void 0;
|
|
60690
61715
|
};
|
|
60691
61716
|
var toNumber = (v) => {
|
|
60692
|
-
const b =
|
|
61717
|
+
const b = toBigInt14(v);
|
|
60693
61718
|
if (b === void 0) return void 0;
|
|
60694
61719
|
if (b > BigInt(Number.MAX_SAFE_INTEGER)) return void 0;
|
|
60695
61720
|
return Number(b);
|
|
@@ -60726,7 +61751,7 @@ var readerBeets = {
|
|
|
60726
61751
|
const out = [];
|
|
60727
61752
|
for (let i = 0; i < reqs.length; i++) {
|
|
60728
61753
|
const r = reqs[i];
|
|
60729
|
-
const amount3 =
|
|
61754
|
+
const amount3 = toBigInt14(r.assetAmount);
|
|
60730
61755
|
const ts = toNumber(r.requestTimestamp);
|
|
60731
61756
|
const isWithdrawn = Boolean(r.isWithdrawn);
|
|
60732
61757
|
if (amount3 === void 0 || ts === void 0) continue;
|
|
@@ -60818,13 +61843,13 @@ var readerBeHype = {
|
|
|
60818
61843
|
const q = stage2[i * 2];
|
|
60819
61844
|
const canClaim = Boolean(stage2[i * 2 + 1]);
|
|
60820
61845
|
if (!q) continue;
|
|
60821
|
-
const hypeAmount = Array.isArray(q) ?
|
|
61846
|
+
const hypeAmount = Array.isArray(q) ? toBigInt14(q[2]) : toBigInt14(q.hypeAmount);
|
|
60822
61847
|
if (hypeAmount === void 0) continue;
|
|
60823
61848
|
out.push({
|
|
60824
61849
|
lst: entry.lst,
|
|
60825
61850
|
brand: entry.brand,
|
|
60826
61851
|
symbol: entry.symbol,
|
|
60827
|
-
requestId: String(
|
|
61852
|
+
requestId: String(toBigInt14(ids[i]) ?? i),
|
|
60828
61853
|
amountUnderlying: hypeAmount.toString(),
|
|
60829
61854
|
status: canClaim ? "claimable" : "pending"
|
|
60830
61855
|
});
|
|
@@ -60927,7 +61952,7 @@ var readerBenqi = {
|
|
|
60927
61952
|
for (let i = 0; i < reqs.length; i++) {
|
|
60928
61953
|
const r = reqs[i];
|
|
60929
61954
|
const startedAt = toNumber(r.startedAt);
|
|
60930
|
-
const shareAmount =
|
|
61955
|
+
const shareAmount = toBigInt14(r.shareAmount);
|
|
60931
61956
|
if (startedAt === void 0 || shareAmount === void 0) continue;
|
|
60932
61957
|
const readyAt = startedAt + cooldown;
|
|
60933
61958
|
const expiresAt = readyAt + claimWindow;
|
|
@@ -61016,8 +62041,8 @@ var readerBinanceWbeth2 = {
|
|
|
61016
62041
|
for (let i = 0; i < reqs.length; i++) {
|
|
61017
62042
|
const r = reqs[i];
|
|
61018
62043
|
const triggerTime = toNumber(r.triggerTime);
|
|
61019
|
-
const ethAmount =
|
|
61020
|
-
const wbethAmount =
|
|
62044
|
+
const ethAmount = toBigInt14(r.ethAmount);
|
|
62045
|
+
const wbethAmount = toBigInt14(r.wbethAmount);
|
|
61021
62046
|
if (triggerTime === void 0 || ethAmount === void 0) continue;
|
|
61022
62047
|
const readyAt = triggerTime + lockTime;
|
|
61023
62048
|
const claimed = (toNumber(r.claimTime) ?? 0) > 0;
|
|
@@ -61080,8 +62105,8 @@ var readerBeraPaw = {
|
|
|
61080
62105
|
}
|
|
61081
62106
|
const pos = res[0];
|
|
61082
62107
|
if (!pos) return [];
|
|
61083
|
-
const queued = Array.isArray(pos) ?
|
|
61084
|
-
const available = Array.isArray(pos) ?
|
|
62108
|
+
const queued = Array.isArray(pos) ? toBigInt14(pos[0]) : toBigInt14(pos.queued);
|
|
62109
|
+
const available = Array.isArray(pos) ? toBigInt14(pos[1]) : toBigInt14(pos.available);
|
|
61085
62110
|
const out = [];
|
|
61086
62111
|
if (available !== void 0 && available > 0n) {
|
|
61087
62112
|
out.push({
|
|
@@ -61163,7 +62188,7 @@ var readerIbera = {
|
|
|
61163
62188
|
return [];
|
|
61164
62189
|
}
|
|
61165
62190
|
const length = toNumber(stage1[0]) ?? 0;
|
|
61166
|
-
const frontier =
|
|
62191
|
+
const frontier = toBigInt14(stage1[1]) ?? 0n;
|
|
61167
62192
|
if (length === 0) return [];
|
|
61168
62193
|
const start = length > MAX_SCAN ? length - MAX_SCAN : 0;
|
|
61169
62194
|
const ids = Array.from({ length: length - start }, (_3, k) => start + k);
|
|
@@ -61187,7 +62212,7 @@ var readerIbera = {
|
|
|
61187
62212
|
const r = stage2[k];
|
|
61188
62213
|
if (!r) continue;
|
|
61189
62214
|
const receiver = Array.isArray(r) ? r[2] : r.receiver;
|
|
61190
|
-
const amount3 = Array.isArray(r) ?
|
|
62215
|
+
const amount3 = Array.isArray(r) ? toBigInt14(r[3]) : toBigInt14(r.amount);
|
|
61191
62216
|
if (typeof receiver !== "string" || receiver.toLowerCase() !== target || amount3 === void 0 || amount3 === 0n) {
|
|
61192
62217
|
continue;
|
|
61193
62218
|
}
|
|
@@ -61260,7 +62285,7 @@ var readerPrimeStaking = {
|
|
|
61260
62285
|
return [];
|
|
61261
62286
|
}
|
|
61262
62287
|
const length = toNumber(stage1[0]) ?? 0;
|
|
61263
|
-
const frontier =
|
|
62288
|
+
const frontier = toBigInt14(stage1[1]) ?? 0n;
|
|
61264
62289
|
if (length === 0) return [];
|
|
61265
62290
|
const start = length > MAX_SCAN2 ? length - MAX_SCAN2 : 0;
|
|
61266
62291
|
const ids = Array.from({ length: length - start }, (_3, k) => start + k);
|
|
@@ -61284,7 +62309,7 @@ var readerPrimeStaking = {
|
|
|
61284
62309
|
const r = stage2[k];
|
|
61285
62310
|
if (!r) continue;
|
|
61286
62311
|
const receiver = Array.isArray(r) ? r[1] : r.receiver;
|
|
61287
|
-
const assets = Array.isArray(r) ?
|
|
62312
|
+
const assets = Array.isArray(r) ? toBigInt14(r[3]) : toBigInt14(r.assets);
|
|
61288
62313
|
const processed = Array.isArray(r) ? r[4] : r.processed;
|
|
61289
62314
|
if (typeof receiver !== "string" || receiver.toLowerCase() !== target || assets === void 0 || assets === 0n) {
|
|
61290
62315
|
continue;
|
|
@@ -61355,8 +62380,8 @@ var readerErc7540 = {
|
|
|
61355
62380
|
],
|
|
61356
62381
|
abi: [Erc7540Abi, Erc7540Abi]
|
|
61357
62382
|
});
|
|
61358
|
-
const pending =
|
|
61359
|
-
const claimable =
|
|
62383
|
+
const pending = toBigInt14(stage1[0]) ?? 0n;
|
|
62384
|
+
const claimable = toBigInt14(stage1[1]) ?? 0n;
|
|
61360
62385
|
const out = [];
|
|
61361
62386
|
if (claimable > 0n) {
|
|
61362
62387
|
const stage2 = await multicallRetry({
|
|
@@ -61370,7 +62395,7 @@ var readerErc7540 = {
|
|
|
61370
62395
|
],
|
|
61371
62396
|
abi: [Erc7540Abi]
|
|
61372
62397
|
});
|
|
61373
|
-
const amount3 =
|
|
62398
|
+
const amount3 = toBigInt14(stage2[0]) ?? claimable;
|
|
61374
62399
|
out.push({
|
|
61375
62400
|
lst: entry.lst,
|
|
61376
62401
|
brand: entry.brand,
|
|
@@ -61427,11 +62452,11 @@ var readerEthenaCooldown = {
|
|
|
61427
62452
|
let cooldownEnd;
|
|
61428
62453
|
let amount3;
|
|
61429
62454
|
if (Array.isArray(cell)) {
|
|
61430
|
-
cooldownEnd =
|
|
61431
|
-
amount3 =
|
|
62455
|
+
cooldownEnd = toBigInt14(cell[0]);
|
|
62456
|
+
amount3 = toBigInt14(cell[1]);
|
|
61432
62457
|
} else if (cell && typeof cell === "object") {
|
|
61433
|
-
cooldownEnd =
|
|
61434
|
-
amount3 =
|
|
62458
|
+
cooldownEnd = toBigInt14(cell.cooldownEnd);
|
|
62459
|
+
amount3 = toBigInt14(cell.underlyingAmount);
|
|
61435
62460
|
}
|
|
61436
62461
|
if (!amount3 || amount3 === 0n) return [];
|
|
61437
62462
|
const readyAt = Number(cooldownEnd ?? 0n);
|
|
@@ -61487,13 +62512,13 @@ var readerSusd3Cooldown = {
|
|
|
61487
62512
|
let windowEnd;
|
|
61488
62513
|
let shares;
|
|
61489
62514
|
if (Array.isArray(cell)) {
|
|
61490
|
-
cooldownEnd =
|
|
61491
|
-
windowEnd =
|
|
61492
|
-
shares =
|
|
62515
|
+
cooldownEnd = toBigInt14(cell[0]);
|
|
62516
|
+
windowEnd = toBigInt14(cell[1]);
|
|
62517
|
+
shares = toBigInt14(cell[2]);
|
|
61493
62518
|
} else if (cell && typeof cell === "object") {
|
|
61494
|
-
cooldownEnd =
|
|
61495
|
-
windowEnd =
|
|
61496
|
-
shares =
|
|
62519
|
+
cooldownEnd = toBigInt14(cell.cooldownEnd);
|
|
62520
|
+
windowEnd = toBigInt14(cell.windowEnd);
|
|
62521
|
+
shares = toBigInt14(cell.shares);
|
|
61497
62522
|
}
|
|
61498
62523
|
if (!shares || shares === 0n) return [];
|
|
61499
62524
|
let amount3 = shares;
|
|
@@ -61505,7 +62530,7 @@ var readerSusd3Cooldown = {
|
|
|
61505
62530
|
],
|
|
61506
62531
|
abi: [Susd3CooldownStatusAbi]
|
|
61507
62532
|
});
|
|
61508
|
-
amount3 =
|
|
62533
|
+
amount3 = toBigInt14(stage2[0]) ?? shares;
|
|
61509
62534
|
} catch {
|
|
61510
62535
|
}
|
|
61511
62536
|
const readyAt = Number(cooldownEnd ?? 0n);
|
|
@@ -61579,12 +62604,12 @@ var readerStrataCooldown = {
|
|
|
61579
62604
|
let claimable;
|
|
61580
62605
|
let nextUnlockAt;
|
|
61581
62606
|
if (Array.isArray(cell)) {
|
|
61582
|
-
pending =
|
|
61583
|
-
claimable =
|
|
62607
|
+
pending = toBigInt14(cell[0]);
|
|
62608
|
+
claimable = toBigInt14(cell[1]);
|
|
61584
62609
|
nextUnlockAt = toNumber(cell[2]);
|
|
61585
62610
|
} else if (cell && typeof cell === "object") {
|
|
61586
|
-
pending =
|
|
61587
|
-
claimable =
|
|
62611
|
+
pending = toBigInt14(cell.pending);
|
|
62612
|
+
claimable = toBigInt14(cell.claimable);
|
|
61588
62613
|
nextUnlockAt = toNumber(cell.nextUnlockAt);
|
|
61589
62614
|
}
|
|
61590
62615
|
const escrow = { withdrawQueue: contracts[i], claimToken: escrowToken };
|
|
@@ -61692,7 +62717,7 @@ var readerEtherFi = {
|
|
|
61692
62717
|
calls: enumCalls,
|
|
61693
62718
|
abi: enumCalls.map(() => EtherFiWithdrawRequestAbi)
|
|
61694
62719
|
});
|
|
61695
|
-
const ids = stage2.map(
|
|
62720
|
+
const ids = stage2.map(toBigInt14).filter((v) => v !== void 0);
|
|
61696
62721
|
if (ids.length === 0) return [];
|
|
61697
62722
|
const detailCalls = ids.flatMap((id) => [
|
|
61698
62723
|
{ address: entry.withdrawalContract, name: "getRequest", params: [id] },
|
|
@@ -61712,7 +62737,7 @@ var readerEtherFi = {
|
|
|
61712
62737
|
const isValid = Boolean(stage3[i * 3 + 2]);
|
|
61713
62738
|
if (!req) continue;
|
|
61714
62739
|
if (!isValid) continue;
|
|
61715
|
-
const amount3 =
|
|
62740
|
+
const amount3 = toBigInt14(req.amountOfEEth);
|
|
61716
62741
|
if (amount3 === void 0) continue;
|
|
61717
62742
|
out.push({
|
|
61718
62743
|
lst: entry.lst,
|
|
@@ -61807,7 +62832,7 @@ var readerKelp = {
|
|
|
61807
62832
|
}
|
|
61808
62833
|
],
|
|
61809
62834
|
abi: [KelpWithdrawalManagerAbi]
|
|
61810
|
-
}).then((res) =>
|
|
62835
|
+
}).then((res) => toBigInt14(res[0]) ?? 0n)
|
|
61811
62836
|
]);
|
|
61812
62837
|
lengths = storageReads;
|
|
61813
62838
|
currentBlock = block;
|
|
@@ -61839,9 +62864,9 @@ var readerKelp = {
|
|
|
61839
62864
|
for (let i = 0; i < detailCalls.length; i++) {
|
|
61840
62865
|
const r = stage2[i];
|
|
61841
62866
|
if (!r) continue;
|
|
61842
|
-
const expected = Array.isArray(r) ?
|
|
61843
|
-
const startBlock = Array.isArray(r) ?
|
|
61844
|
-
const nonce = Array.isArray(r) ?
|
|
62867
|
+
const expected = Array.isArray(r) ? toBigInt14(r[1]) : toBigInt14(r.expectedAssetAmount);
|
|
62868
|
+
const startBlock = Array.isArray(r) ? toBigInt14(r[2]) : toBigInt14(r.withdrawalStartBlock);
|
|
62869
|
+
const nonce = Array.isArray(r) ? toBigInt14(r[3]) : toBigInt14(r.userNonce);
|
|
61845
62870
|
if (expected === void 0 || startBlock === void 0) continue;
|
|
61846
62871
|
const claimable = currentBlock >= startBlock + delayBlocks;
|
|
61847
62872
|
out.push({
|
|
@@ -61918,7 +62943,7 @@ var readerLido = {
|
|
|
61918
62943
|
abi: [LidoWithdrawalQueueAbi, LidoWithdrawalQueueAbi]
|
|
61919
62944
|
});
|
|
61920
62945
|
const ids = stage1[0];
|
|
61921
|
-
const frontier =
|
|
62946
|
+
const frontier = toBigInt14(stage1[1]) ?? 0n;
|
|
61922
62947
|
if (!Array.isArray(ids) || ids.length === 0) return [];
|
|
61923
62948
|
const stage2 = await multicallRetry({
|
|
61924
62949
|
chain: chainId,
|
|
@@ -61935,10 +62960,10 @@ var readerLido = {
|
|
|
61935
62960
|
if (!Array.isArray(statuses)) return [];
|
|
61936
62961
|
const out = [];
|
|
61937
62962
|
for (let i = 0; i < ids.length; i++) {
|
|
61938
|
-
const id =
|
|
62963
|
+
const id = toBigInt14(ids[i]);
|
|
61939
62964
|
const s = statuses[i];
|
|
61940
62965
|
if (id === void 0 || !s) continue;
|
|
61941
|
-
const amountOfStETH =
|
|
62966
|
+
const amountOfStETH = toBigInt14(s.amountOfStETH);
|
|
61942
62967
|
const isFinalized = Boolean(s.isFinalized);
|
|
61943
62968
|
const isClaimed = Boolean(s.isClaimed);
|
|
61944
62969
|
if (amountOfStETH === void 0) continue;
|
|
@@ -62047,11 +63072,11 @@ var readerLista = {
|
|
|
62047
63072
|
const status = stage2[i];
|
|
62048
63073
|
if (!status) continue;
|
|
62049
63074
|
const isClaimable = Array.isArray(status) ? Boolean(status[0]) : Boolean(status._isClaimable);
|
|
62050
|
-
const bnbAmount = Array.isArray(status) ?
|
|
62051
|
-
const snbnbAmount = Array.isArray(req) ?
|
|
63075
|
+
const bnbAmount = Array.isArray(status) ? toBigInt14(status[1]) : toBigInt14(status._amount);
|
|
63076
|
+
const snbnbAmount = Array.isArray(req) ? toBigInt14(req[1]) : toBigInt14(req?.amountInSnBnb);
|
|
62052
63077
|
const amount3 = bnbAmount ?? snbnbAmount;
|
|
62053
63078
|
if (amount3 === void 0) continue;
|
|
62054
|
-
const uuid = Array.isArray(req) ?
|
|
63079
|
+
const uuid = Array.isArray(req) ? toBigInt14(req[0]) : toBigInt14(req?.uuid);
|
|
62055
63080
|
out.push({
|
|
62056
63081
|
lst: entry.lst,
|
|
62057
63082
|
brand: entry.brand,
|
|
@@ -62136,7 +63161,7 @@ var readerRenzo = {
|
|
|
62136
63161
|
for (let i = 0; i < count; i++) {
|
|
62137
63162
|
const tup = stage2[i];
|
|
62138
63163
|
if (!Array.isArray(tup) || tup.length < 5) continue;
|
|
62139
|
-
const amountToRedeem =
|
|
63164
|
+
const amountToRedeem = toBigInt14(tup[2]);
|
|
62140
63165
|
const createdAt = toNumber(tup[4]);
|
|
62141
63166
|
if (amountToRedeem === void 0 || createdAt === void 0) continue;
|
|
62142
63167
|
const readyAt = createdAt + cooldown;
|
|
@@ -62209,9 +63234,9 @@ var readerStaderEthx2 = {
|
|
|
62209
63234
|
]
|
|
62210
63235
|
});
|
|
62211
63236
|
const ids = stage1[0];
|
|
62212
|
-
const frontier =
|
|
63237
|
+
const frontier = toBigInt14(stage1[1]) ?? 0n;
|
|
62213
63238
|
if (!Array.isArray(ids) || ids.length === 0) return [];
|
|
62214
|
-
const idBigInts = ids.map(
|
|
63239
|
+
const idBigInts = ids.map(toBigInt14).filter((v) => v !== void 0);
|
|
62215
63240
|
const detailCalls = idBigInts.map((id) => ({
|
|
62216
63241
|
address: entry.withdrawalContract,
|
|
62217
63242
|
name: "userWithdrawRequests",
|
|
@@ -62227,8 +63252,8 @@ var readerStaderEthx2 = {
|
|
|
62227
63252
|
const id = idBigInts[i];
|
|
62228
63253
|
const tup = stage2[i];
|
|
62229
63254
|
if (!Array.isArray(tup) || tup.length < 5) continue;
|
|
62230
|
-
const ethExpected =
|
|
62231
|
-
const ethFinalized =
|
|
63255
|
+
const ethExpected = toBigInt14(tup[2]) ?? 0n;
|
|
63256
|
+
const ethFinalized = toBigInt14(tup[3]) ?? 0n;
|
|
62232
63257
|
const isFinalized = id < frontier && ethFinalized > 0n;
|
|
62233
63258
|
const queuePosition = isFinalized ? 0 : Number(id - frontier);
|
|
62234
63259
|
out.push({
|
|
@@ -62307,13 +63332,13 @@ var readerStaderMaticX2 = {
|
|
|
62307
63332
|
});
|
|
62308
63333
|
const arr = stage1[0];
|
|
62309
63334
|
if (!Array.isArray(arr)) return [];
|
|
62310
|
-
const currentEpoch = stakeManager ?
|
|
62311
|
-
const delay = stakeManager ?
|
|
63335
|
+
const currentEpoch = stakeManager ? toBigInt14(stage1[1]) ?? 0n : 0n;
|
|
63336
|
+
const delay = stakeManager ? toBigInt14(stage1[2]) ?? 0n : 0n;
|
|
62312
63337
|
const out = [];
|
|
62313
63338
|
for (let i = 0; i < arr.length; i++) {
|
|
62314
63339
|
const r = arr[i];
|
|
62315
|
-
const amount3 =
|
|
62316
|
-
const requestEpoch =
|
|
63340
|
+
const amount3 = toBigInt14(r.amount) ?? 0n;
|
|
63341
|
+
const requestEpoch = toBigInt14(r.requestEpoch);
|
|
62317
63342
|
if (requestEpoch === void 0) continue;
|
|
62318
63343
|
const ready = stakeManager ? currentEpoch >= requestEpoch + delay : false;
|
|
62319
63344
|
out.push({
|
|
@@ -62398,9 +63423,9 @@ var readerMantle = {
|
|
|
62398
63423
|
if (typeof requester === "string" && requester.toLowerCase() !== lcUser) {
|
|
62399
63424
|
continue;
|
|
62400
63425
|
}
|
|
62401
|
-
const ethRequested = Array.isArray(detail) ?
|
|
63426
|
+
const ethRequested = Array.isArray(detail) ? toBigInt14(detail[3]) : toBigInt14(detail.ethRequested);
|
|
62402
63427
|
const isFinalized = Array.isArray(info) ? Boolean(info[0]) : Boolean(info.isFinalized);
|
|
62403
|
-
const claimable = Array.isArray(info) ?
|
|
63428
|
+
const claimable = Array.isArray(info) ? toBigInt14(info[1]) : toBigInt14(info.claimableAmount);
|
|
62404
63429
|
if (ethRequested === void 0) continue;
|
|
62405
63430
|
out.push({
|
|
62406
63431
|
lst: entry.lst,
|
|
@@ -62479,8 +63504,8 @@ var readerPuffer = {
|
|
|
62479
63504
|
calls,
|
|
62480
63505
|
abi: calls.map(() => PufferWithdrawalManagerAbi)
|
|
62481
63506
|
});
|
|
62482
|
-
const finalizedBatch =
|
|
62483
|
-
const batchSize =
|
|
63507
|
+
const finalizedBatch = toBigInt14(results[detailCalls.length]) ?? 0n;
|
|
63508
|
+
const batchSize = toBigInt14(results[detailCalls.length + 1]) ?? 0n;
|
|
62484
63509
|
const out = [];
|
|
62485
63510
|
const lcUser = user.toLowerCase();
|
|
62486
63511
|
for (let i = 0; i < ids.length; i++) {
|
|
@@ -62490,7 +63515,7 @@ var readerPuffer = {
|
|
|
62490
63515
|
if (typeof recipient === "string" && recipient.toLowerCase() !== lcUser) {
|
|
62491
63516
|
continue;
|
|
62492
63517
|
}
|
|
62493
|
-
const pufETHAmount = Array.isArray(d) ?
|
|
63518
|
+
const pufETHAmount = Array.isArray(d) ? toBigInt14(d[0]) : toBigInt14(d.pufETHAmount);
|
|
62494
63519
|
if (pufETHAmount === void 0) continue;
|
|
62495
63520
|
const batchIdx = batchSize > 0n ? ids[i] / batchSize : 0n;
|
|
62496
63521
|
const claimable = batchIdx <= finalizedBatch;
|
|
@@ -62588,7 +63613,7 @@ var readerKinetiq = {
|
|
|
62588
63613
|
for (let i = 0; i < count; i++) {
|
|
62589
63614
|
const r = stage2[i];
|
|
62590
63615
|
if (!r) continue;
|
|
62591
|
-
const hypeAmount = Array.isArray(r) ?
|
|
63616
|
+
const hypeAmount = Array.isArray(r) ? toBigInt14(r[0]) : toBigInt14(r.hypeAmount);
|
|
62592
63617
|
const timestamp = Array.isArray(r) ? toNumber(r[4]) : toNumber(r.timestamp);
|
|
62593
63618
|
if (hypeAmount === void 0 || hypeAmount === 0n || timestamp === void 0) {
|
|
62594
63619
|
continue;
|
|
@@ -62716,7 +63741,7 @@ var readerStakeWise = {
|
|
|
62716
63741
|
const claimedByIdx = /* @__PURE__ */ new Map();
|
|
62717
63742
|
for (let i = 0; i < onChainChecks.length; i++) {
|
|
62718
63743
|
const cell = checkResults[i];
|
|
62719
|
-
const claimed = Array.isArray(cell) ?
|
|
63744
|
+
const claimed = Array.isArray(cell) ? toBigInt14(cell[2]) : toBigInt14(cell?.claimedAssets);
|
|
62720
63745
|
if (claimed !== void 0 && claimed > 0n) {
|
|
62721
63746
|
claimedByIdx.set(onChainChecks[i].idx, claimed);
|
|
62722
63747
|
}
|
|
@@ -62724,7 +63749,7 @@ var readerStakeWise = {
|
|
|
62724
63749
|
const out = [];
|
|
62725
63750
|
for (let i = 0; i < requests.length; i++) {
|
|
62726
63751
|
const r = requests[i];
|
|
62727
|
-
const amount3 =
|
|
63752
|
+
const amount3 = toBigInt14(r.totalAssets) ?? 0n;
|
|
62728
63753
|
const onChainClaimed = claimedByIdx.get(i);
|
|
62729
63754
|
const claimable = onChainClaimed !== void 0 || r.isClaimable;
|
|
62730
63755
|
out.push({
|
|
@@ -62781,7 +63806,7 @@ var readerStCelo2 = {
|
|
|
62781
63806
|
const timestamps = cell[1] ?? [];
|
|
62782
63807
|
const out = [];
|
|
62783
63808
|
for (let i = 0; i < values.length; i++) {
|
|
62784
|
-
const amount3 =
|
|
63809
|
+
const amount3 = toBigInt14(values[i]);
|
|
62785
63810
|
const readyAt = toNumber(timestamps[i]);
|
|
62786
63811
|
if (amount3 === void 0 || readyAt === void 0) continue;
|
|
62787
63812
|
out.push({
|
|
@@ -62861,7 +63886,7 @@ var readerSwell = {
|
|
|
62861
63886
|
abi: [SwellRswExitAbi, SwellRswExitAbi]
|
|
62862
63887
|
});
|
|
62863
63888
|
const count = toNumber(stage1[0]) ?? 0;
|
|
62864
|
-
const lastProcessed =
|
|
63889
|
+
const lastProcessed = toBigInt14(stage1[1]) ?? 0n;
|
|
62865
63890
|
if (count === 0) return [];
|
|
62866
63891
|
const enumCalls = Array.from({ length: count }, (_3, i) => ({
|
|
62867
63892
|
address: entry.withdrawalContract,
|
|
@@ -62873,7 +63898,7 @@ var readerSwell = {
|
|
|
62873
63898
|
calls: enumCalls,
|
|
62874
63899
|
abi: enumCalls.map(() => SwellRswExitAbi)
|
|
62875
63900
|
});
|
|
62876
|
-
const ids = stage2.map(
|
|
63901
|
+
const ids = stage2.map(toBigInt14).filter((v) => v !== void 0);
|
|
62877
63902
|
if (ids.length === 0) return [];
|
|
62878
63903
|
const detailCalls = ids.map((id) => ({
|
|
62879
63904
|
address: entry.withdrawalContract,
|
|
@@ -62890,7 +63915,7 @@ var readerSwell = {
|
|
|
62890
63915
|
const id = ids[i];
|
|
62891
63916
|
const r = stage3[i];
|
|
62892
63917
|
if (!r) continue;
|
|
62893
|
-
const amount3 =
|
|
63918
|
+
const amount3 = toBigInt14(r.amount);
|
|
62894
63919
|
if (amount3 === void 0) continue;
|
|
62895
63920
|
const claimable = id <= lastProcessed;
|
|
62896
63921
|
out.push({
|
|
@@ -62964,14 +63989,14 @@ var readerValantis = {
|
|
|
62964
63989
|
for (let i = 0; i < burns.length; i++) {
|
|
62965
63990
|
const b = burns[i];
|
|
62966
63991
|
if (!b) continue;
|
|
62967
|
-
const amount3 = Array.isArray(b) ?
|
|
63992
|
+
const amount3 = Array.isArray(b) ? toBigInt14(b[0]) : toBigInt14(b.amount);
|
|
62968
63993
|
const completed = Array.isArray(b) ? Boolean(b[2]) : Boolean(b.completed);
|
|
62969
63994
|
if (amount3 === void 0 || completed) continue;
|
|
62970
63995
|
out.push({
|
|
62971
63996
|
lst: entry.lst,
|
|
62972
63997
|
brand: entry.brand,
|
|
62973
63998
|
symbol: entry.symbol,
|
|
62974
|
-
requestId: String(
|
|
63999
|
+
requestId: String(toBigInt14(ids[i]) ?? i),
|
|
62975
64000
|
amountUnderlying: amount3.toString(),
|
|
62976
64001
|
status: redeemable[i] ? "claimable" : "pending"
|
|
62977
64002
|
});
|
|
@@ -63044,7 +64069,7 @@ var readerTruFin = {
|
|
|
63044
64069
|
if (typeof recipient === "string" && recipient.toLowerCase() !== lcUser) {
|
|
63045
64070
|
continue;
|
|
63046
64071
|
}
|
|
63047
|
-
const amount3 = Array.isArray(w) ?
|
|
64072
|
+
const amount3 = Array.isArray(w) ? toBigInt14(w[1]) : toBigInt14(w.amount);
|
|
63048
64073
|
if (amount3 === void 0 || amount3 === 0n) continue;
|
|
63049
64074
|
out.push({
|
|
63050
64075
|
lst: entry.lst,
|
|
@@ -63140,7 +64165,7 @@ var readerYieldNest = {
|
|
|
63140
64165
|
calls: enumCalls,
|
|
63141
64166
|
abi: enumCalls.map(() => YieldNestWithdrawalQueueAbi)
|
|
63142
64167
|
});
|
|
63143
|
-
const ids = stage2.map(
|
|
64168
|
+
const ids = stage2.map(toBigInt14).filter((v) => v !== void 0);
|
|
63144
64169
|
if (ids.length === 0) return [];
|
|
63145
64170
|
const detailCalls = ids.map((id) => ({
|
|
63146
64171
|
address: entry.withdrawalContract,
|
|
@@ -63159,7 +64184,7 @@ var readerYieldNest = {
|
|
|
63159
64184
|
const id = ids[i];
|
|
63160
64185
|
const r = stage3[i];
|
|
63161
64186
|
if (!r) continue;
|
|
63162
|
-
const amount3 =
|
|
64187
|
+
const amount3 = toBigInt14(r.amount);
|
|
63163
64188
|
const created = toNumber(r.creationTimestamp);
|
|
63164
64189
|
const processed = Boolean(r.processed);
|
|
63165
64190
|
if (amount3 === void 0 || created === void 0) continue;
|
|
@@ -64070,7 +65095,7 @@ var NavOracleReadAbi = [
|
|
|
64070
65095
|
|
|
64071
65096
|
// src/vaults/savings/readers/shared.ts
|
|
64072
65097
|
var ONE_E1813 = 10n ** 18n;
|
|
64073
|
-
var
|
|
65098
|
+
var toBigInt15 = (v) => {
|
|
64074
65099
|
if (v === void 0 || v === null) return void 0;
|
|
64075
65100
|
if (typeof v === "bigint") return v;
|
|
64076
65101
|
if (typeof v === "number") return BigInt(v);
|
|
@@ -64101,9 +65126,9 @@ var readerErc46262 = (entry) => {
|
|
|
64101
65126
|
],
|
|
64102
65127
|
abis: [Erc4626ReadAbi2, TotalSupplyAbi2, Erc4626ReadAbi2],
|
|
64103
65128
|
parse: ([assets, supply, rate]) => {
|
|
64104
|
-
const totalAssets =
|
|
64105
|
-
const totalSupply =
|
|
64106
|
-
const convertToAssetsRaw =
|
|
65129
|
+
const totalAssets = toBigInt15(assets);
|
|
65130
|
+
const totalSupply = toBigInt15(supply);
|
|
65131
|
+
const convertToAssetsRaw = toBigInt15(rate);
|
|
64107
65132
|
if (totalAssets === void 0 || totalSupply === void 0 || convertToAssetsRaw === void 0) {
|
|
64108
65133
|
return void 0;
|
|
64109
65134
|
}
|
|
@@ -64129,13 +65154,13 @@ var readerErc4626Cooldown = (entry) => {
|
|
|
64129
65154
|
],
|
|
64130
65155
|
abis: [Erc4626ReadAbi2, TotalSupplyAbi2, Erc4626ReadAbi2, CooldownDurationAbi],
|
|
64131
65156
|
parse: ([assets, supply, rate, cooldown]) => {
|
|
64132
|
-
const totalAssets =
|
|
64133
|
-
const totalSupply =
|
|
64134
|
-
const convertToAssetsRaw =
|
|
65157
|
+
const totalAssets = toBigInt15(assets);
|
|
65158
|
+
const totalSupply = toBigInt15(supply);
|
|
65159
|
+
const convertToAssetsRaw = toBigInt15(rate);
|
|
64135
65160
|
if (totalAssets === void 0 || totalSupply === void 0 || convertToAssetsRaw === void 0) {
|
|
64136
65161
|
return void 0;
|
|
64137
65162
|
}
|
|
64138
|
-
const cooldownSecs =
|
|
65163
|
+
const cooldownSecs = toBigInt15(cooldown);
|
|
64139
65164
|
return {
|
|
64140
65165
|
totalAssets,
|
|
64141
65166
|
totalSupply,
|
|
@@ -64392,13 +65417,13 @@ var readerErc4626Idle = (entry) => {
|
|
|
64392
65417
|
],
|
|
64393
65418
|
abis: [Erc4626ReadAbi2, TotalSupplyAbi2, Erc4626ReadAbi2, BalanceOfAbi],
|
|
64394
65419
|
parse: ([assets, supply, rate, inventoryBalance]) => {
|
|
64395
|
-
const totalAssets =
|
|
64396
|
-
const totalSupply =
|
|
64397
|
-
const convertToAssetsRaw =
|
|
65420
|
+
const totalAssets = toBigInt15(assets);
|
|
65421
|
+
const totalSupply = toBigInt15(supply);
|
|
65422
|
+
const convertToAssetsRaw = toBigInt15(rate);
|
|
64398
65423
|
if (totalAssets === void 0 || totalSupply === void 0 || convertToAssetsRaw === void 0) {
|
|
64399
65424
|
return void 0;
|
|
64400
65425
|
}
|
|
64401
|
-
const capacity =
|
|
65426
|
+
const capacity = toBigInt15(inventoryBalance);
|
|
64402
65427
|
return {
|
|
64403
65428
|
totalAssets,
|
|
64404
65429
|
totalSupply,
|
|
@@ -64441,13 +65466,13 @@ var readerErc4626WithdrawLimit = (entry) => {
|
|
|
64441
65466
|
AvailableWithdrawLimitAbi
|
|
64442
65467
|
],
|
|
64443
65468
|
parse: ([assets, supply, rate, withdrawLimit]) => {
|
|
64444
|
-
const totalAssets =
|
|
64445
|
-
const totalSupply =
|
|
64446
|
-
const convertToAssetsRaw =
|
|
65469
|
+
const totalAssets = toBigInt15(assets);
|
|
65470
|
+
const totalSupply = toBigInt15(supply);
|
|
65471
|
+
const convertToAssetsRaw = toBigInt15(rate);
|
|
64447
65472
|
if (totalAssets === void 0 || totalSupply === void 0 || convertToAssetsRaw === void 0) {
|
|
64448
65473
|
return void 0;
|
|
64449
65474
|
}
|
|
64450
|
-
const capacity =
|
|
65475
|
+
const capacity = toBigInt15(withdrawLimit);
|
|
64451
65476
|
return {
|
|
64452
65477
|
totalAssets,
|
|
64453
65478
|
totalSupply,
|
|
@@ -64493,13 +65518,13 @@ var readerBitwayVault = (entry) => {
|
|
|
64493
65518
|
BitwayVaultReadAbi
|
|
64494
65519
|
],
|
|
64495
65520
|
parse: ([supply, rate, buffer, waitingTime]) => {
|
|
64496
|
-
const totalSupply =
|
|
64497
|
-
const exchangeRate =
|
|
65521
|
+
const totalSupply = toBigInt15(supply);
|
|
65522
|
+
const exchangeRate = toBigInt15(rate);
|
|
64498
65523
|
if (totalSupply === void 0 || exchangeRate === void 0 || exchangeRate === 0n) {
|
|
64499
65524
|
return void 0;
|
|
64500
65525
|
}
|
|
64501
|
-
const capacity =
|
|
64502
|
-
const wait =
|
|
65526
|
+
const capacity = toBigInt15(buffer);
|
|
65527
|
+
const wait = toBigInt15(waitingTime);
|
|
64503
65528
|
return {
|
|
64504
65529
|
// totalSupply is in raw share units; convert to raw underlying.
|
|
64505
65530
|
// (Every live leg is 18/18-dec — BSC stables are 18-dec — but the
|
|
@@ -64529,9 +65554,9 @@ var readerFrankencoinSavings = (entry) => ({
|
|
|
64529
65554
|
],
|
|
64530
65555
|
abis: [BalanceOfAbi, FrankencoinSavingsReadAbi],
|
|
64531
65556
|
parse: ([balance, ratePPM]) => {
|
|
64532
|
-
const deposits =
|
|
65557
|
+
const deposits = toBigInt15(balance);
|
|
64533
65558
|
if (deposits === void 0) return void 0;
|
|
64534
|
-
if (
|
|
65559
|
+
if (toBigInt15(ratePPM) === void 0) return void 0;
|
|
64535
65560
|
return {
|
|
64536
65561
|
totalAssets: deposits,
|
|
64537
65562
|
// No shares exist; the "supply" IS the deposited principal, and
|
|
@@ -64575,15 +65600,15 @@ var readerHyperbeatVault = (entry) => {
|
|
|
64575
65600
|
HyperbeatQueueReadAbi
|
|
64576
65601
|
],
|
|
64577
65602
|
parse: ([supply, rate, rateDecimals, inventory, fee, instantPaused]) => {
|
|
64578
|
-
const totalSupply =
|
|
64579
|
-
const rawRate =
|
|
64580
|
-
const rateDec =
|
|
65603
|
+
const totalSupply = toBigInt15(supply);
|
|
65604
|
+
const rawRate = toBigInt15(rate);
|
|
65605
|
+
const rateDec = toBigInt15(rateDecimals);
|
|
64581
65606
|
if (totalSupply === void 0 || rawRate === void 0 || rateDec === void 0 || rawRate === 0n) {
|
|
64582
65607
|
return void 0;
|
|
64583
65608
|
}
|
|
64584
65609
|
const exchangeRate = rateDec <= 18n ? rawRate * 10n ** (18n - rateDec) : rawRate / 10n ** (rateDec - 18n);
|
|
64585
|
-
const capacity =
|
|
64586
|
-
const feeRaw =
|
|
65610
|
+
const capacity = toBigInt15(inventory);
|
|
65611
|
+
const feeRaw = toBigInt15(fee);
|
|
64587
65612
|
return {
|
|
64588
65613
|
// totalSupply is in raw share units; convert to raw underlying.
|
|
64589
65614
|
totalAssets: totalSupply * exchangeRate * underlyingUnit / (shareUnit * ONE_E1813),
|
|
@@ -64616,10 +65641,10 @@ var readerNavOracle = (entry) => {
|
|
|
64616
65641
|
],
|
|
64617
65642
|
abis: [TotalSupplyAbi2, NavOracleReadAbi],
|
|
64618
65643
|
parse: ([supply, round]) => {
|
|
64619
|
-
const totalSupply =
|
|
65644
|
+
const totalSupply = toBigInt15(supply);
|
|
64620
65645
|
if (totalSupply === void 0) return void 0;
|
|
64621
65646
|
const raw = Array.isArray(round) ? round[1] : round?.answer;
|
|
64622
|
-
const exchangeRate =
|
|
65647
|
+
const exchangeRate = toBigInt15(raw);
|
|
64623
65648
|
if (exchangeRate === void 0 || exchangeRate <= 0n) return void 0;
|
|
64624
65649
|
return {
|
|
64625
65650
|
totalAssets: totalSupply * exchangeRate * underlyingUnit / (ONE_E1813 * shareUnit),
|
|
@@ -64661,14 +65686,14 @@ var readerNativeWnlp = (entry) => {
|
|
|
64661
65686
|
NativeWithdrawQueueReadAbi
|
|
64662
65687
|
],
|
|
64663
65688
|
parse: ([supply, rate, feeBips, instantEnabled, inventory, window]) => {
|
|
64664
|
-
const totalSupply =
|
|
64665
|
-
const exchangeRate =
|
|
65689
|
+
const totalSupply = toBigInt15(supply);
|
|
65690
|
+
const exchangeRate = toBigInt15(rate);
|
|
64666
65691
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
64667
65692
|
return void 0;
|
|
64668
65693
|
}
|
|
64669
|
-
const capacity =
|
|
64670
|
-
const windowSeconds =
|
|
64671
|
-
const bips =
|
|
65694
|
+
const capacity = toBigInt15(inventory);
|
|
65695
|
+
const windowSeconds = toBigInt15(window);
|
|
65696
|
+
const bips = toBigInt15(feeBips);
|
|
64672
65697
|
return {
|
|
64673
65698
|
totalAssets: totalSupply * exchangeRate / ONE_E1813,
|
|
64674
65699
|
totalSupply,
|
|
@@ -64700,15 +65725,15 @@ var readerWrenNav = (entry) => {
|
|
|
64700
65725
|
],
|
|
64701
65726
|
abis: [TotalSupplyAbi2, WrenNavReadAbi, WrenNavReadAbi, WrenNavReadAbi],
|
|
64702
65727
|
parse: ([supply, burn, nav, burnable]) => {
|
|
64703
|
-
const totalSupply =
|
|
64704
|
-
const navPrice =
|
|
65728
|
+
const totalSupply = toBigInt15(supply);
|
|
65729
|
+
const navPrice = toBigInt15(nav);
|
|
64705
65730
|
if (totalSupply === void 0) return void 0;
|
|
64706
65731
|
if (navPrice === void 0 || navPrice <= 0n) return void 0;
|
|
64707
|
-
const burncost =
|
|
65732
|
+
const burncost = toBigInt15(burn);
|
|
64708
65733
|
const hasBurncost = burncost !== void 0 && burncost > 0n;
|
|
64709
65734
|
const exchangeRate = hasBurncost ? burncost : navPrice;
|
|
64710
65735
|
const totalAssets = totalSupply * exchangeRate * underlyingUnit / (ONE_E1813 * shareUnit);
|
|
64711
|
-
const burnFlag =
|
|
65736
|
+
const burnFlag = toBigInt15(burnable);
|
|
64712
65737
|
const instantRedeemEnabled = burnFlag === void 0 ? true : burnFlag > 0n;
|
|
64713
65738
|
return {
|
|
64714
65739
|
totalAssets,
|
|
@@ -64742,17 +65767,17 @@ var readerYieldBasisLt = (entry) => {
|
|
|
64742
65767
|
YieldBasisAmmReadAbi
|
|
64743
65768
|
],
|
|
64744
65769
|
parse: ([supply, pps, redeemPerShare, maxDebt, valueOracle]) => {
|
|
64745
|
-
const totalSupply =
|
|
64746
|
-
const fundamental =
|
|
64747
|
-
const redeemRaw =
|
|
65770
|
+
const totalSupply = toBigInt15(supply);
|
|
65771
|
+
const fundamental = toBigInt15(pps);
|
|
65772
|
+
const redeemRaw = toBigInt15(redeemPerShare);
|
|
64748
65773
|
if (totalSupply === void 0 || fundamental === void 0 || redeemRaw === void 0) {
|
|
64749
65774
|
return void 0;
|
|
64750
65775
|
}
|
|
64751
65776
|
if (totalSupply === 0n || redeemRaw === 0n) return void 0;
|
|
64752
65777
|
const totalAssets = totalSupply * redeemRaw / ONE_SHARE;
|
|
64753
65778
|
const exchangeRate = redeemRaw * ONE_E1813 / underlyingUnit;
|
|
64754
|
-
const equity = Array.isArray(valueOracle) ?
|
|
64755
|
-
const cap =
|
|
65779
|
+
const equity = Array.isArray(valueOracle) ? toBigInt15(valueOracle[1]) : toBigInt15(valueOracle?.value);
|
|
65780
|
+
const cap = toBigInt15(maxDebt);
|
|
64756
65781
|
let depositCapacity;
|
|
64757
65782
|
if (cap !== void 0 && equity !== void 0 && equity > 0n) {
|
|
64758
65783
|
const headroom = cap / 2n - equity;
|
|
@@ -65285,7 +66310,7 @@ var resolveAaveEarnCuratorName = (chainId, owner) => {
|
|
|
65285
66310
|
|
|
65286
66311
|
// src/vaults/aave-earn/fetchPublic.ts
|
|
65287
66312
|
var BRAND2 = "Aave";
|
|
65288
|
-
var
|
|
66313
|
+
var toBigInt16 = (v) => {
|
|
65289
66314
|
if (v === void 0 || v === null) return void 0;
|
|
65290
66315
|
if (typeof v === "bigint") return v;
|
|
65291
66316
|
if (typeof v === "number") return BigInt(v);
|
|
@@ -65345,15 +66370,15 @@ var fetchAaveEarnVaults = async (chainId, multicallRetry, prices = {}, tokenList
|
|
|
65345
66370
|
const token = v.usedReserve.underlyingToken;
|
|
65346
66371
|
const underlyingLc = token.address.toLowerCase();
|
|
65347
66372
|
const assetDecimals = token.decimals;
|
|
65348
|
-
const shareDecOnChain =
|
|
66373
|
+
const shareDecOnChain = toBigInt16(slice2[1]);
|
|
65349
66374
|
const decimals = shareDecOnChain !== void 0 ? Number(shareDecOnChain) : assetDecimals;
|
|
65350
|
-
const totalSupply =
|
|
66375
|
+
const totalSupply = toBigInt16(slice2[2]);
|
|
65351
66376
|
if (totalSupply === void 0) continue;
|
|
65352
66377
|
const shareUnit = 10n ** BigInt(decimals);
|
|
65353
66378
|
const underlyingUnit = 10n ** BigInt(assetDecimals);
|
|
65354
|
-
const convertToAssets =
|
|
66379
|
+
const convertToAssets = toBigInt16(slice2[3]) ?? 0n;
|
|
65355
66380
|
const convertToShares = convertToAssets > 0n ? shareUnit * underlyingUnit / convertToAssets : 0n;
|
|
65356
|
-
const totalAssets =
|
|
66381
|
+
const totalAssets = toBigInt16(slice2[0]) ?? totalSupply * convertToAssets / shareUnit;
|
|
65357
66382
|
const totalAssetsFormatted = Number(totalAssets) / 10 ** assetDecimals;
|
|
65358
66383
|
const asset = tokenList[underlyingLc];
|
|
65359
66384
|
const priceUsd = prices[underlyingLc] ?? (v.balance?.usdPerToken != null ? num7(v.balance.usdPerToken) : void 0);
|
|
@@ -68836,7 +69861,7 @@ var TERM_SHEET_SCHEMA_VERSION = 1;
|
|
|
68836
69861
|
|
|
68837
69862
|
// src/terms/buildTermSheet.ts
|
|
68838
69863
|
var isNum = (v) => typeof v === "number" && Number.isFinite(v);
|
|
68839
|
-
var
|
|
69864
|
+
var clamp013 = (v) => Math.max(0, Math.min(1, v));
|
|
68840
69865
|
function assetRef(input) {
|
|
68841
69866
|
const a = input.asset ?? {};
|
|
68842
69867
|
return {
|
|
@@ -69052,7 +70077,7 @@ function resolveMinCollateral(input) {
|
|
|
69052
70077
|
}
|
|
69053
70078
|
function capUtil(total, cap) {
|
|
69054
70079
|
if (!isNum(cap) || cap <= 0 || !isNum(total)) return void 0;
|
|
69055
|
-
return
|
|
70080
|
+
return clamp013(total / cap);
|
|
69056
70081
|
}
|
|
69057
70082
|
function buildAvailability(input, side) {
|
|
69058
70083
|
const frozen = input.isFrozen === true;
|
|
@@ -69091,7 +70116,7 @@ function buildUtilization(input) {
|
|
|
69091
70116
|
if (!isNum(input.utilization)) return void 0;
|
|
69092
70117
|
const shared = isNum(input.irmTotalDeposits) && isNum(input.irmTotalDebt);
|
|
69093
70118
|
return {
|
|
69094
|
-
utilization:
|
|
70119
|
+
utilization: clamp013(input.utilization),
|
|
69095
70120
|
basis: shared ? "pool" : "market",
|
|
69096
70121
|
irmTotalDeposits: input.irmTotalDeposits,
|
|
69097
70122
|
irmTotalDebt: input.irmTotalDebt,
|
|
@@ -69231,7 +70256,7 @@ function buildSupply(input, now, siblings) {
|
|
|
69231
70256
|
const liquidity = isNum(input.totalLiquidity) ? {
|
|
69232
70257
|
assets: input.totalLiquidity,
|
|
69233
70258
|
assetsUsd: input.totalLiquidityUsd,
|
|
69234
|
-
ratio: isNum(input.totalDeposits) && input.totalDeposits > 0 ?
|
|
70259
|
+
ratio: isNum(input.totalDeposits) && input.totalDeposits > 0 ? clamp013(input.totalLiquidity / input.totalDeposits) : void 0
|
|
69235
70260
|
} : void 0;
|
|
69236
70261
|
const supply = {
|
|
69237
70262
|
role: canBeCollateral ? earns ? "both" : "collateral" : "yield",
|
|
@@ -69414,6 +70439,21 @@ var VAULT_PROVIDER_TRAITS = {
|
|
|
69414
70439
|
reportsGovernance: true,
|
|
69415
70440
|
reportsExposures: true
|
|
69416
70441
|
},
|
|
70442
|
+
// Silo's curated vaults ("soTokens") are the MetaMorpho shape on Silo v2/v3
|
|
70443
|
+
// markets, and the indexer is unusually complete: `exposures`, the full role
|
|
70444
|
+
// set INCLUDING allocators, a real per-market utilization, and incentive
|
|
70445
|
+
// programs as their own query root. Two consequences worth stating.
|
|
70446
|
+
//
|
|
70447
|
+
// `hasUtilization: true` is genuinely satisfiable here — the vault's
|
|
70448
|
+
// allocation-weighted `Σ allocation × marketUtilization` fills the block —
|
|
70449
|
+
// unlike the sibling curated providers, where it stays permanently pending
|
|
70450
|
+
// because no underlying totals are joined.
|
|
70451
|
+
//
|
|
70452
|
+
// And the rate is a real two-leg split: `userApr` is BASE only
|
|
70453
|
+
// (`apr × (1 − performanceFee)`, verified on the whole book), with
|
|
70454
|
+
// incentives summed separately into `rewardsRate`. Do not restore the old
|
|
70455
|
+
// assumption that Silo folds rewards into its user yield — it does not, and
|
|
70456
|
+
// believing it pinned every incentivised vault's rewards leg at zero.
|
|
69417
70457
|
silo: { ...LENDING_VAULT, reportsGovernance: true, reportsExposures: true },
|
|
69418
70458
|
// Euler Earn publishes `timelock` + the full role set but NOT `exposures`,
|
|
69419
70459
|
// contrary to TERM_SHEET_PLAN §7. Its backing is decomposable in principle,
|
|
@@ -69642,7 +70682,7 @@ function windowFromAprWindow(aprWindow) {
|
|
|
69642
70682
|
|
|
69643
70683
|
// src/terms/vault/build.ts
|
|
69644
70684
|
var isNum2 = (v) => typeof v === "number" && Number.isFinite(v);
|
|
69645
|
-
var
|
|
70685
|
+
var clamp014 = (v) => Math.max(0, Math.min(1, v));
|
|
69646
70686
|
function buildRate2(input, t, maturity) {
|
|
69647
70687
|
const hasLegs = input.supplyRate != null || input.rewardsRate != null;
|
|
69648
70688
|
const base = hasLegs ? input.supplyRate ?? 0 : input.totalRate ?? 0;
|
|
@@ -69819,7 +70859,7 @@ function settlementFor(mode, priceRisk) {
|
|
|
69819
70859
|
function buildExit(input, t, fees) {
|
|
69820
70860
|
const mode = resolveExitMode(input, t);
|
|
69821
70861
|
const priceRisk = resolvePriceRisk(input, t);
|
|
69822
|
-
const ratio = input.instantLiquidityRatio ?? (isNum2(input.liquidity) && isNum2(input.totalAssets) && input.totalAssets > 0 ?
|
|
70862
|
+
const ratio = input.instantLiquidityRatio ?? (isNum2(input.liquidity) && isNum2(input.totalAssets) && input.totalAssets > 0 ? clamp014(input.liquidity / input.totalAssets) : void 0);
|
|
69823
70863
|
return {
|
|
69824
70864
|
mode,
|
|
69825
70865
|
settlement: settlementFor(mode, priceRisk),
|
|
@@ -69936,11 +70976,13 @@ function buildPrincipal(input, t) {
|
|
|
69936
70976
|
}
|
|
69937
70977
|
function buildGovernance(input, t) {
|
|
69938
70978
|
if (!t.reportsGovernance) return void 0;
|
|
70979
|
+
const allocators = input.allocators && input.allocators.length > 0 ? input.allocators : void 0;
|
|
69939
70980
|
const roles = {
|
|
69940
70981
|
owner: input.owner,
|
|
69941
70982
|
curator: input.curator,
|
|
69942
70983
|
guardian: input.guardian,
|
|
69943
|
-
feeRecipient: input.feeRecipient
|
|
70984
|
+
feeRecipient: input.feeRecipient,
|
|
70985
|
+
allocators
|
|
69944
70986
|
};
|
|
69945
70987
|
const hasRole = Object.values(roles).some((r) => r != null);
|
|
69946
70988
|
if (!isNum2(input.timelock) && !hasRole) return void 0;
|
|
@@ -69958,7 +71000,12 @@ function buildGovernance(input, t) {
|
|
|
69958
71000
|
// enforces the queue itself, which is why this delay stands even though the
|
|
69959
71001
|
// controller above is an unscreened curator address.
|
|
69960
71002
|
timelockSource: "on-chain",
|
|
69961
|
-
|
|
71003
|
+
// `reallocate` is listed only where an allocator actually exists, and it
|
|
71004
|
+
// is the power the timelock above does NOT cover: reshuffling between
|
|
71005
|
+
// already-approved markets lands in the next block. Stating it is what
|
|
71006
|
+
// stops `timelockSecs: 86400` from reading as "nothing about this vault
|
|
71007
|
+
// can change today".
|
|
71008
|
+
powers: allocators ? ["set-caps", "change-fees", "pause-withdrawals", "reallocate"] : ["set-caps", "change-fees", "pause-withdrawals"],
|
|
69962
71009
|
roles: hasRole ? roles : void 0
|
|
69963
71010
|
};
|
|
69964
71011
|
}
|
|
@@ -69977,7 +71024,7 @@ function buildUtilization2(input, t) {
|
|
|
69977
71024
|
const total = input.expectedLiquidity;
|
|
69978
71025
|
if (!isNum2(borrowed) || !isNum2(total) || total <= 0) return void 0;
|
|
69979
71026
|
return {
|
|
69980
|
-
utilization:
|
|
71027
|
+
utilization: clamp014(borrowed / total),
|
|
69981
71028
|
// The ratio is the underlying pool's, not this share token's.
|
|
69982
71029
|
basis: "pool",
|
|
69983
71030
|
irmTotalDeposits: total,
|
|
@@ -70475,6 +71522,21 @@ function isIlliquid(input) {
|
|
|
70475
71522
|
if (input.liquidityUsd === void 0) return false;
|
|
70476
71523
|
return input.liquidityUsd <= 0;
|
|
70477
71524
|
}
|
|
71525
|
+
var UNCAPPED_EXIT_MODES = /* @__PURE__ */ new Set([
|
|
71526
|
+
"queued",
|
|
71527
|
+
"fixed-cooldown",
|
|
71528
|
+
"fee-or-queued",
|
|
71529
|
+
"instant-or-queued",
|
|
71530
|
+
"request-based",
|
|
71531
|
+
"off-chain",
|
|
71532
|
+
"at-maturity"
|
|
71533
|
+
]);
|
|
71534
|
+
function meetsLiquidityFloor(input, minUsd) {
|
|
71535
|
+
if (input.canWithdraw === false) return false;
|
|
71536
|
+
if (input.exitMode && UNCAPPED_EXIT_MODES.has(input.exitMode)) return true;
|
|
71537
|
+
if (input.liquidityUsd === void 0) return true;
|
|
71538
|
+
return input.liquidityUsd >= minUsd;
|
|
71539
|
+
}
|
|
70478
71540
|
var PROTOCOL_ALIASES = {
|
|
70479
71541
|
MORPHO_BLUE: "Morpho",
|
|
70480
71542
|
EULER_V2: "Euler",
|
|
@@ -70881,6 +71943,11 @@ var num14 = (v) => {
|
|
|
70881
71943
|
};
|
|
70882
71944
|
var str7 = (v) => typeof v === "string" && v.trim() !== "" ? v : void 0;
|
|
70883
71945
|
var bool2 = (v) => typeof v === "boolean" ? v : void 0;
|
|
71946
|
+
var strArray = (v) => {
|
|
71947
|
+
if (!Array.isArray(v)) return void 0;
|
|
71948
|
+
const out = v.filter((x) => typeof x === "string" && x !== "");
|
|
71949
|
+
return out.length > 0 ? out : void 0;
|
|
71950
|
+
};
|
|
70884
71951
|
var fromRaw = (raw, decimals) => {
|
|
70885
71952
|
const s = raw == null ? void 0 : String(raw);
|
|
70886
71953
|
if (!s || !/^\d+$/.test(s) || decimals == null) return void 0;
|
|
@@ -70964,6 +72031,7 @@ function toVaultTermInput(vault, provider, chainId) {
|
|
|
70964
72031
|
whitelisted: bool2(row.whitelisted),
|
|
70965
72032
|
expiry: num14(row.expiry),
|
|
70966
72033
|
timelock: num14(row.timelock),
|
|
72034
|
+
allocators: strArray(row.allocators),
|
|
70967
72035
|
owner: str7(row.owner),
|
|
70968
72036
|
curator: str7(row.curator),
|
|
70969
72037
|
guardian: str7(row.guardian),
|
|
@@ -71031,6 +72099,7 @@ function vaultTermInputFromEarnMarket(m) {
|
|
|
71031
72099
|
whitelisted: bool2(meta.whitelisted),
|
|
71032
72100
|
expiry: m.maturity?.maturity,
|
|
71033
72101
|
timelock: num14(meta.timelock),
|
|
72102
|
+
allocators: strArray(meta.allocators),
|
|
71034
72103
|
owner: str7(meta.owner),
|
|
71035
72104
|
curator: str7(meta.curator),
|
|
71036
72105
|
guardian: str7(meta.guardian),
|
|
@@ -71110,6 +72179,7 @@ function vaultTermInputFromSourceRow(row, chainId) {
|
|
|
71110
72179
|
whitelisted: bool2(meta.whitelisted),
|
|
71111
72180
|
expiry: num14(meta.expiry) ?? num14(meta.maturity),
|
|
71112
72181
|
timelock: num14(meta.timelock),
|
|
72182
|
+
allocators: strArray(meta.allocators),
|
|
71113
72183
|
owner: str7(meta.owner),
|
|
71114
72184
|
curator: str7(meta.curator),
|
|
71115
72185
|
guardian: str7(meta.guardian),
|
|
@@ -74827,6 +75897,6 @@ function earnPositionTotals(items) {
|
|
|
74827
75897
|
};
|
|
74828
75898
|
}
|
|
74829
75899
|
|
|
74830
|
-
export { ApiBookSource, DEFAULT_MIDNIGHT_API, DEFAULT_OUTLIER_GUARD, DEFAULT_PROFILE_ID, DEFAULT_STALE_REJECT_SECONDS, DEFAULT_TERMMAX_API, EARN_DESCRIPTIONS, EARN_LABELS, EMPTY_BALANCE, EXACTLY_LENDER_KEY, FRACTION_RATE_PROVIDERS, 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, MULTICALL_FAILURE, MaxParamThresholds, PASSTHROUGH_RATE_EPSILON, PENDLE_ASSETS_URL, PENDLE_CHAIN_IDS, PENDLE_MARKETS_URL, SDK_FRACTION_RATE_PROVIDERS, SPECTRA_NETWORKS, SPECTRA_RATE_MAX_PERCENT, SPECTRA_RATE_MIN_PERCENT, STABLECOIN_SYMBOLS, STCELO_MANAGER_ADDRESS, TELLER_CALLS_PER_BID,
|
|
75900
|
+
export { ApiBookSource, DEFAULT_MIDNIGHT_API, DEFAULT_OUTLIER_GUARD, DEFAULT_PROFILE_ID, DEFAULT_STALE_REJECT_SECONDS, DEFAULT_TERMMAX_API, DEFAULT_TERM_ORDER_STORE, EARN_DESCRIPTIONS, EARN_LABELS, EMPTY_BALANCE, EXACTLY_LENDER_KEY, FRACTION_RATE_PROVIDERS, 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, MULTICALL_FAILURE, MaxParamThresholds, PASSTHROUGH_RATE_EPSILON, PENDLE_ASSETS_URL, PENDLE_CHAIN_IDS, PENDLE_MARKETS_URL, SDK_FRACTION_RATE_PROVIDERS, SPECTRA_NETWORKS, SPECTRA_RATE_MAX_PERCENT, SPECTRA_RATE_MIN_PERCENT, STABLECOIN_SYMBOLS, STCELO_MANAGER_ADDRESS, TELLER_CALLS_PER_BID, DECIMAL_BASE as TERMMAX_DECIMAL_BASE, TERMMAX_LIQUIDATION_PENALTY, TERMMAX_LIQUIDATION_WINDOW_SECS, TERMMAX_LIQUIDATOR_BONUS, TERMMAX_MARKETS_PER_CALL, TERMMAX_PARTIAL_CLOSE_FACTOR, TERMMAX_PARTIAL_LIQUIDATION_THRESHOLD_USD, TERM_ADAPTERS, TERM_PROFILES, TERM_SHEET_SCHEMA_VERSION, TermMaxApiSource, TermSubgraphSource, UPSHIFT_CHAIN_IDS, UPSHIFT_VAULTS_URL, VAULT_PROVIDERS, VAULT_PROVIDER_PROFILE, VAULT_PROVIDER_TRAITS, VAULT_SHARE_PRICE_PROBE, VAULT_VENUE_PREFIX, VOLATILE_VAULT_OVERRIDES, YEARN_CHAIN_IDS, YEARN_YDAEMON_BASE, __resetResupplyUserCaches, accountDepositListKey, accountWithdrawalListKey, appendSnapshot, applyPositionDelta, attachImplications, attachPricesToFlashLiquidity, borrowDescription, borrowFindings, borrowHeadline, buildExposures2 as buildExposures, buildFluidFTokensCall, buildLendingPositionUid, buildLiquityUserCall, buildLoopResult, buildMorphoTypeCall, buildMorphoTypeUserCallWithLens, buildPortfolioTotals, buildSumerAccumulators, buildSummaries, buildTellerUserCall, buildTermMaxUserCall, buildTermSheet, buildTermSheetsForGroup, buildVaultEarnUid, buildVaultLookup, buildVaultTermSheet, calculateLeverage, calculateNetApr, calculateOverallNetApr, calculateWeightedAverage, classifyFreshness, classifyReliability, classifyVault, clearPendleMarketsCache, clearSpectraMarketsCache, collateralSymbolsByVenue, 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, convertCoolerMarketsToResponse, convertDssMarketsToResponse, convertExactlyMarketsToResponse, convertFrankencoinMarketsToResponse, convertFraxlendPairsToResponse, convertInverseMarketsToResponse, convertLenderUserDataResult, convertLiquityMarketsToResponse, convertLlamaLendMarketsToResponse, convertResupplyMarketsToResponse, convertRiverMarketsToResponse, convertTellerMarketsToResponse, convertTermMarketsToResponse, convertTermMaxMarketsToResponse, convertUsddMarketsToResponse, createMarketUid, createMidnightBookSource, createMulticallRpcCall, createRawRpcCalls, createTermBookSource, createTermMaxDataSource, decodeListaMarkets, decodeMarkets, decodePackedListaUserDataset, decodePackedMorphoUserDataset, deriveBorrowTags, deriveSupplyTags, detectInterfaceKinds, dexResolverFor, disambiguateEarnNames, dssIlkBytes32, dssKeyParts, dssLenderKey, duration, earnDescription, earnLabel, earnMarketFromPool, earnMarketFromVault, earnMarketLabel, earnPositionFromLenderEntry, earnPositionFromVaultBalance, earnPositionTotals, earnRowSubtitle, earnUidFromMarketUid, earnVaultTerms, earnVenueKind, encodeBalanceFetcherCalldata, enrichTermSheet, enrichmentIndexFromRows, exactlyPairLtv, exactlyPenaltyRateToAprPercent, exactlyWadRateToPercent, feePhrase, feedKeyOf, feedStatKey, fetchCoolerMarkets, fetchDolomiteAccountNumbers, fetchDssMarkets, fetchEulerEarnVaults, fetchEulerEarnVaultsFromSubgraph, fetchEulerSubAccountIndexes, fetchExactlyMarkets, fetchFlashLiquidityForChain, fetchFluidDexState, fetchFluidFTokens, fetchFrankencoinMarkets, fetchFraxlendPairs, fetchGeneralYields, fetchGeneralYieldsByMarketUid, fetchGmxExecutionFees, fetchGmxTickerPrices, fetchGmxVaults, fetchHypercoreVaults, fetchInverseMarkets, fetchLagoonApiVaults, fetchLagoonVaults, fetchLiquityMarkets, fetchListaVaultsFromChain, fetchLlamaLendMarkets, fetchMorphoUserBalances, fetchMorphoUserPositionMarkets, fetchMorphoVaults, fetchMorphoVaultsFromApi, fetchMorphoVaultsFromChain, fetchOraclePrices, fetchPendleApiAssets, fetchPendleApiMarkets, fetchPendlePrices, fetchPendlePtMarkets, fetchResupplyMarkets, fetchRiverMarkets, fetchSiloVaults, fetchSpectraApiMarkets, fetchSpectraPtMarkets, fetchTellerMarkets, fetchTermMarkets, fetchTermMaxMarkets, fetchTermStoreOrders, fetchTokenBalances, fetchTokenMetadata, fetchUpshiftApiVaults, fetchUpshiftVaults, fetchUsddMarkets, fetchYearnApiVaults, fetchYearnVaults, fillableRemaining, filterActiveLenders, filterLendersByProtocol, finalizeInfo, findingsFor, formatRaw, frankencoinKeyParts, frankencoinLenderKey, fraxlendAssetPerCollateral, fraxlendKeyParts, fraxlendLenderKey, fuseLenderData, generateLendingPools, getAavesForChain, getAssetConfig, getBalanceForMarketUid, getBorrowCapacity, getCachedFluidDexState, 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, getReadFailurePolicy, getResolvedDolomiteAccountNumbers, getStCeloValidatorGroups, getSubAccountAddress, getSubAccountIndex, getTermProfile, getVaultPublicDataAll, getVaultWithdrawalRequests, hasCritical, hasEulerEarnVaultSubgraph, hasLagoonVaults, hasMorphoPositionIndex, hasMorphoUserApi, hasMorphoUserSubgraph, hasPendleMarkets, hasSpectraMarkets, hasUpshiftVaults, hasYearnVaults, ilkToKeySegment, implausibleRatePercent, inverseKeyParts, inverseLenderKey, isBoundNeed, isFailedCall, isIlliquid, isLendingPosition, isLiveMarket as isLivePendleMarket, isLiveSpectraMarket, isSecondaryMarketOnly, isStablecoinSymbol, isVaultPosition, isVaultVenue, isYearnV3, keySegmentToIlk, keysFromMaps, lenderApiOnly, lenderFamily, liquityCandidateTroveIds, liquityKeyParts, liquityLenderKey, llamaLendKeyParts, llamaLendLenderKey, meetsLiquidityFloor, mergeDeep, multicall3Abi2 as multicall3Abi, nanTo, needsLenderApproval, needsTokenApproval, noOpResult, normalizeToBytes, parseBalanceFetcherResult, parseEarnUid, parseMergedResult, parseMulticallRpcResponses, parseExpirySeconds as parsePendleExpirySeconds, parseRawRpcBatchResponses, parseRawRpcResponses, parseCurveFee as parseSpectraCurveFee, parsePtRate as parseSpectraPtRate, parseTermMaxLtv, parseTokenBalanceResult, pct, assetKey as pendleAssetKey, pickPool as pickSpectraPool, positivePart2 as positivePart, predictInverseEscrow, prepareLenderUserDataRpcCalls, prepareMergedMulticallParams, prepareMergedRpcCalls, prepareMulticallInputs, prepareTokenBalanceRpcCalls, priceGlvVaults, priceGmMarkets, probeAaveFeedTimestamps, pruneFeedStats, rankFindings, ratePercent, readVaultSharePrices, rejectOutliers as rejectPriceOutliers, resolveAdapter, resolveDerivation, resolveEarnIdentity, resolveModeConfig, resolveStCeloDepositGroup, resolveVaultProfileId, resupplyKeyParts, resupplyLenderKey, resupplyMarketLabel, riverKeyParts, riverLenderKey, sanePercent as saneSpectraPercent, savingsAddresses, savingsBalanceKind, secondaryMarketVault, selectAssetGroupPrices, shortDate, spectraAddress, spectraNetwork, spectraPoolsUrl, splitChainScopedAddress as splitPendleChainScopedAddress, stampCapabilities, stampEarnSubtitles, stampVaultClassification, stampVaultTermSheets, stripLeadingBrand, supplyDescription, supplyFindings, supplyHeadline, swapRoutedProvidersArePriceConsistent, tellerBpsToPercent, tellerImpliedLtv, tellerLenderKey, tellerPoolFromLenderKey, termApiBaseUrl, 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, termOfferRateToAprPct, termOrderStoreBaseUrl, tickToAprNumber, tickToPrice, toDigest, toTermFillNow, toTermSheetInput, toVaultTermInput, trancheFromCounterparty, tryParseEarnUid, unflattenLenderData, updateFeedStats, usdValue, usddIlkBytes32, usddKeyParts, usddLenderKey, validateTermSheet, validateTermSheets, validateUserData, vaultSharesToAssets, vaultTermInputFromEarnMarket, vaultTermInputFromSourceRow, vaultTraits, vaultVenue, venueBrand, venueBrandKey, withMaturityLabel, withTrancheLabel };
|
|
74831
75901
|
//# sourceMappingURL=index.js.map
|
|
74832
75902
|
//# sourceMappingURL=index.js.map
|