@1delta/margin-fetcher 5.0.9 → 5.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +149 -23
- package/dist/index.js +342 -45
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -7,9 +7,9 @@ import { fetchTokenLists, fetchTokenList, aavePools, compoundV3Pools, initConfig
|
|
|
7
7
|
import lodash from 'lodash';
|
|
8
8
|
import { Chain } from '@1delta/chain-registry';
|
|
9
9
|
import { multicallRetryUniversal, getEvmClient, getEvmChain, getEvmClientUniversal } from '@1delta/providers';
|
|
10
|
-
import { LiquityTroveManagerAbi, LiquityActivePoolAbi, LiquityStabilityPoolAbi, LiquityPriceFeedAbi, LiquitySortedTrovesAbi, RiverTroveManagerAbi, RiverStabilityPoolAbi, TellerMarketRegistryAbi, TellerV2Abi, InverseMarketAbi, InverseOracleAbi, InverseDbrAbi, Erc20Abi, LlamaLendControllerAbi, LlamaLendControllerV1Abi, LlamaLendControllerV2Abi, LlamaLendVaultAbi, LlamaLendAmmAbi, MetaMorphoAbi, ExactlyPreviewerAbi, ExactlyAuditorAbi, LenderCommitmentGroupAbi, ResupplyRegistryAbi, ResupplyPairAbi, UsddVatAbi, UsddJugAbi, UsddSpotAbi, FrankencoinPositionAbi, FluidLendingResolverAbi, FluidVaultResolverAbi, FluidLiquidityResolverAbi, MoolahVaultAbi,
|
|
10
|
+
import { LiquityTroveManagerAbi, LiquityActivePoolAbi, LiquityStabilityPoolAbi, LiquityPriceFeedAbi, LiquitySortedTrovesAbi, RiverTroveManagerAbi, RiverStabilityPoolAbi, TellerMarketRegistryAbi, TellerV2Abi, InverseMarketAbi, InverseOracleAbi, InverseDbrAbi, Erc20Abi, LlamaLendControllerAbi, LlamaLendControllerV1Abi, LlamaLendControllerV2Abi, LlamaLendVaultAbi, LlamaLendAmmAbi, MetaMorphoAbi, ExactlyPreviewerAbi, ExactlyAuditorAbi, LenderCommitmentGroupAbi, ResupplyRegistryAbi, ResupplyPairAbi, ResupplyUtilitiesAbi, ResupplyRewardHandlerAbi, ResupplyPairEmissionsAbi, ConvexPoolUtilAbi, UsddVatAbi, UsddJugAbi, UsddSpotAbi, FrankencoinPositionAbi, FluidLendingResolverAbi, FluidVaultResolverAbi, FluidLiquidityResolverAbi, MoolahVaultAbi, MorphoLensAbi, AaveV4SpokeAbi, AaveV4OracleAbi, AaveV4HubAbi, DolomiteMarginAbi, GearboxMarketCompressorV310Abi, MorphoBlueAbi, MidnightAbi, TermRepoTokenAbi, TermRepoServicerAbi, TermRepoCollateralManagerAbi, LiquityTroveNFTAbi, LiquityCollSurplusPoolAbi, TellerCollateralManagerAbi, TermMaxViewerAbi, InverseEscrowAbi, CurvanceMarketManagerAbi, CurvanceCTokenAbi, GearboxCreditAccountCompressorV310Abi, UsddCdpManagerAbi, UsddProxyRegistryAbi, CurvanceProtocolReaderAbi, CurvanceCentralRegistryAbi, TermPriceConsumerAbi, CurvanceOracleManagerAbi, TermMaxOracleAggregatorV2Abi } from '@1delta/abis';
|
|
11
11
|
export { MorphoLensAbi } from '@1delta/abis';
|
|
12
|
-
import { prepareDebitDataMulticall, prepareLenderDebitMulticall, parseDebitDataResult, parseLenderDebitResult, getPermit2ContractAddress, getCompoundV3CometAddress as getCompoundV3CometAddress$1, getMorphoAddress, getAaveCollateralTokenAddress, getSiloHalfForUnderlying, InitMarginAddresses, getLstAcceptedInputs } from '@1delta/calldata-sdk';
|
|
12
|
+
import { prepareDebitDataMulticall, prepareLenderDebitMulticall, parseDebitDataResult, parseLenderDebitResult, getPermit2ContractAddress, getCompoundV3CometAddress as getCompoundV3CometAddress$1, getMorphoAddress, getAaveCollateralTokenAddress, getSiloHalfForUnderlying, bandLtvCurve, InitMarginAddresses, getLstAcceptedInputs } from '@1delta/calldata-sdk';
|
|
13
13
|
import { proxyNativeFetch } from '@1delta/proxy-fetch';
|
|
14
14
|
import { BALANCER_V2_FORKS, BALANCER_V3_FORKS, UNISWAP_V4_FORKS, isFlashLoanSourceExcluded, FLASH_LOAN_IDS } from '@1delta/dex-registry';
|
|
15
15
|
|
|
@@ -21401,6 +21401,19 @@ function convertLiquityMarketsToResponse(raw, chainId, prices = {}, _additionalY
|
|
|
21401
21401
|
borrowLiquidity = Math.min(borrowLiquidity, Math.max(0, cap - entireDebt));
|
|
21402
21402
|
}
|
|
21403
21403
|
if (shutdown) borrowLiquidity = 0;
|
|
21404
|
+
const rateParameter = {
|
|
21405
|
+
kind: "interest-rate",
|
|
21406
|
+
dimension: "rate",
|
|
21407
|
+
domain: {
|
|
21408
|
+
min: Number(cfg.minAnnualInterestRate ?? 0) / 1e18,
|
|
21409
|
+
max: Number(cfg.maxAnnualInterestRate ?? 0) / 1e18
|
|
21410
|
+
},
|
|
21411
|
+
// No protocol default — the borrower must choose. The low end is the
|
|
21412
|
+
// cheapest but the first to be redeemed against.
|
|
21413
|
+
default: Number(cfg.minAnnualInterestRate ?? 0) / 1e18,
|
|
21414
|
+
immutableAfterOpen: false,
|
|
21415
|
+
adjustCooldownSeconds: cfg.interestRateAdjCooldownSeconds ? Number(cfg.interestRateAdjCooldownSeconds) : void 0
|
|
21416
|
+
};
|
|
21404
21417
|
const entry = { data: {} };
|
|
21405
21418
|
const collUid = createMarketUid(chainId, lenderKey, collAddr);
|
|
21406
21419
|
entry.data[collUid] = {
|
|
@@ -21435,7 +21448,18 @@ function convertLiquityMarketsToResponse(raw, chainId, prices = {}, _additionalY
|
|
|
21435
21448
|
liquidationPenalty: liqPenalty,
|
|
21436
21449
|
closeFactor: 1,
|
|
21437
21450
|
collateralDisabled: false,
|
|
21438
|
-
debtDisabled: true
|
|
21451
|
+
debtDisabled: true,
|
|
21452
|
+
/**
|
|
21453
|
+
* Liquity's borrower picks their own interest rate at open, and it
|
|
21454
|
+
* sets redemption priority as well as cost — so it is a real
|
|
21455
|
+
* parameter, not a quoted rate.
|
|
21456
|
+
*
|
|
21457
|
+
* The MUTABLE case: adjustable in place, but rate-limited by
|
|
21458
|
+
* `interestRateAdjCooldownSeconds` and fee-charged if adjusted
|
|
21459
|
+
* early. The per-trove value lives in `modes[troveId]`, because one
|
|
21460
|
+
* address can hold several troves at different rates at once.
|
|
21461
|
+
*/
|
|
21462
|
+
openParameter: rateParameter
|
|
21439
21463
|
}
|
|
21440
21464
|
},
|
|
21441
21465
|
closeFactor: 1,
|
|
@@ -22991,16 +23015,22 @@ var maxBorrowableCall = (m, oneUnit, n) => m.version === 1 ? {
|
|
|
22991
23015
|
name: "max_borrowable",
|
|
22992
23016
|
params: [oneUnit, BigInt(n), ZERO]
|
|
22993
23017
|
};
|
|
22994
|
-
var buildBandLtv = (
|
|
22995
|
-
if (!
|
|
22996
|
-
|
|
22997
|
-
|
|
22998
|
-
|
|
22999
|
-
|
|
23000
|
-
|
|
23001
|
-
|
|
23018
|
+
var buildBandLtv = (market) => {
|
|
23019
|
+
if (!market.ammA || !market.loanDiscount) return null;
|
|
23020
|
+
try {
|
|
23021
|
+
const curve = bandLtvCurve({
|
|
23022
|
+
ammA: BigInt(market.ammA),
|
|
23023
|
+
loanDiscount: BigInt(market.loanDiscount),
|
|
23024
|
+
// Reference size only — it feeds the DEAD_SHARES cushion, which is
|
|
23025
|
+
// negligible at any realistic position size and converges as it grows.
|
|
23026
|
+
collateral: 10n ** BigInt(market.collateralDecimals + 3),
|
|
23027
|
+
collateralDecimals: market.collateralDecimals,
|
|
23028
|
+
bandCounts: bandGrid(market)
|
|
23029
|
+
});
|
|
23030
|
+
return Object.keys(curve).length > 0 ? curve : null;
|
|
23031
|
+
} catch {
|
|
23032
|
+
return null;
|
|
23002
23033
|
}
|
|
23003
|
-
return Object.keys(out).length > 0 ? out : null;
|
|
23004
23034
|
};
|
|
23005
23035
|
async function fetchChainExtras(chainId, markets) {
|
|
23006
23036
|
const perMarketCalls = markets.map((m) => {
|
|
@@ -23043,17 +23073,9 @@ async function fetchChainExtras(chainId, markets) {
|
|
|
23043
23073
|
const nLoansRaw = toBig5(results[cursor + 2]);
|
|
23044
23074
|
const maxDepositRaw = toBig5(results[cursor + 3]);
|
|
23045
23075
|
const borrowCapRaw = toBig5(results[cursor + 4]);
|
|
23046
|
-
const perBand = grid.map((n, i) => ({
|
|
23047
|
-
n,
|
|
23048
|
-
maxBorrowable: toBig5(results[cursor + 5 + i])
|
|
23049
|
-
}));
|
|
23050
23076
|
cursor += 5 + grid.length;
|
|
23051
23077
|
const collateralPrice = priceRaw === null ? null : Number(priceRaw) / 1e18;
|
|
23052
|
-
const bandLtv = buildBandLtv(
|
|
23053
|
-
perBand,
|
|
23054
|
-
market.borrowedDecimals,
|
|
23055
|
-
collateralPrice
|
|
23056
|
-
);
|
|
23078
|
+
const bandLtv = buildBandLtv(market);
|
|
23057
23079
|
const defaultN = String(bandsFor(market));
|
|
23058
23080
|
out[market.controller.toLowerCase()] = {
|
|
23059
23081
|
collateralPrice,
|
|
@@ -23204,8 +23226,24 @@ var VAULT_PRICE_ABI = [
|
|
|
23204
23226
|
outputs: [{ type: "uint256" }]
|
|
23205
23227
|
}
|
|
23206
23228
|
];
|
|
23229
|
+
var WRAPPED_COLLATERAL_ABI = [
|
|
23230
|
+
{
|
|
23231
|
+
name: "collateral_token",
|
|
23232
|
+
type: "function",
|
|
23233
|
+
stateMutability: "view",
|
|
23234
|
+
inputs: [],
|
|
23235
|
+
outputs: [{ type: "address" }]
|
|
23236
|
+
},
|
|
23237
|
+
{
|
|
23238
|
+
name: "collateralContract",
|
|
23239
|
+
type: "function",
|
|
23240
|
+
stateMutability: "view",
|
|
23241
|
+
inputs: [],
|
|
23242
|
+
outputs: [{ type: "address" }]
|
|
23243
|
+
}
|
|
23244
|
+
];
|
|
23207
23245
|
var IDENTITY_READS = 3;
|
|
23208
|
-
var STATE_READS =
|
|
23246
|
+
var STATE_READS = 14;
|
|
23209
23247
|
var ONE = 10n ** 18n;
|
|
23210
23248
|
var identityCache = /* @__PURE__ */ new Map();
|
|
23211
23249
|
var identityKey = (chainId, pair) => `${chainId}:${pair.toLowerCase()}`;
|
|
@@ -23288,30 +23326,54 @@ async function fetchResupplyMarkets(lender, chainId) {
|
|
|
23288
23326
|
chain: chainId,
|
|
23289
23327
|
calls: pending.flatMap((p) => [
|
|
23290
23328
|
{ address: p.collateral, name: "decimals", params: [] },
|
|
23291
|
-
{ address: p.underlying, name: "decimals", params: [] }
|
|
23329
|
+
{ address: p.underlying, name: "decimals", params: [] },
|
|
23330
|
+
{ address: p.collateral, name: "collateral_token", params: [] },
|
|
23331
|
+
{ address: p.collateral, name: "collateralContract", params: [] }
|
|
23332
|
+
]),
|
|
23333
|
+
abi: pending.flatMap(() => [
|
|
23334
|
+
erc20Abi,
|
|
23335
|
+
erc20Abi,
|
|
23336
|
+
WRAPPED_COLLATERAL_ABI,
|
|
23337
|
+
WRAPPED_COLLATERAL_ABI
|
|
23292
23338
|
]),
|
|
23293
|
-
abi: pending.flatMap(() => [erc20Abi, erc20Abi]),
|
|
23294
23339
|
allowFailure: true
|
|
23295
23340
|
});
|
|
23296
23341
|
} catch {
|
|
23297
23342
|
dec = [];
|
|
23298
23343
|
}
|
|
23344
|
+
const addr2 = (v) => typeof v === "string" && /^0x[0-9a-fA-F]{40}$/.test(v) && !/^0x0+$/.test(v) ? v : void 0;
|
|
23345
|
+
const wrapped = pending.map((_3, i) => {
|
|
23346
|
+
const curve = addr2(dec[i * 4 + 2]);
|
|
23347
|
+
const frax = addr2(dec[i * 4 + 3]);
|
|
23348
|
+
return {
|
|
23349
|
+
token: curve ?? frax,
|
|
23350
|
+
family: curve ? "curvelend" : frax ? "fraxlend" : void 0
|
|
23351
|
+
};
|
|
23352
|
+
});
|
|
23299
23353
|
pending.forEach((p, i) => {
|
|
23300
|
-
const cd = Number(dec[i *
|
|
23301
|
-
const ud = Number(dec[i *
|
|
23354
|
+
const cd = Number(dec[i * 4]);
|
|
23355
|
+
const ud = Number(dec[i * 4 + 1]);
|
|
23356
|
+
const w = wrapped[i];
|
|
23302
23357
|
identityCache.set(identityKey(chainId, p.pair), {
|
|
23303
23358
|
pair: p.pair,
|
|
23304
23359
|
name: p.name,
|
|
23305
23360
|
collateral: p.collateral,
|
|
23306
23361
|
underlying: p.underlying,
|
|
23307
23362
|
collateralDecimals: Number.isFinite(cd) && cd > 0 ? cd : 18,
|
|
23308
|
-
underlyingDecimals: Number.isFinite(ud) && ud > 0 ? ud : 18
|
|
23363
|
+
underlyingDecimals: Number.isFinite(ud) && ud > 0 ? ud : 18,
|
|
23364
|
+
wrappedCollateralToken: w?.token,
|
|
23365
|
+
wrappedFamily: w?.family
|
|
23309
23366
|
});
|
|
23310
23367
|
});
|
|
23311
23368
|
}
|
|
23312
23369
|
}
|
|
23313
23370
|
const identities = discovered.map((p) => identityCache.get(identityKey(chainId, p))).filter((x) => !!x);
|
|
23314
23371
|
if (identities.length === 0) return { lender, config, pairs: [] };
|
|
23372
|
+
const { rsup, pairEmissions, convexPoolUtil } = await readRewardContext(
|
|
23373
|
+
chainId,
|
|
23374
|
+
config.registry,
|
|
23375
|
+
config.utilities
|
|
23376
|
+
);
|
|
23315
23377
|
const utilities = config.utilities;
|
|
23316
23378
|
const calls = [];
|
|
23317
23379
|
const abis = [];
|
|
@@ -23328,7 +23390,16 @@ async function fetchResupplyMarkets(lender, chainId) {
|
|
|
23328
23390
|
// The collateral vault's own share price — the exact input Resupply's
|
|
23329
23391
|
// `BasicVaultOracle` uses. Read LIVE rather than inverting the pair's
|
|
23330
23392
|
// cached `exchangeRate`, which only moves when someone writes.
|
|
23331
|
-
{ address: id.collateral, name: "convertToAssets", params: [ONE] }
|
|
23393
|
+
{ address: id.collateral, name: "convertToAssets", params: [ONE] },
|
|
23394
|
+
// Rewards. `convexPid == 0` means the collateral is not staked, so there
|
|
23395
|
+
// is nothing to report; the weight is this pair's slice of the RSUP
|
|
23396
|
+
// stream. Both are governance-mutable, so neither is cached.
|
|
23397
|
+
{ address: id.pair, name: "convexPid", params: [] },
|
|
23398
|
+
{
|
|
23399
|
+
address: pairEmissions ?? id.pair,
|
|
23400
|
+
name: pairEmissions ? "balanceOf" : "convexPid",
|
|
23401
|
+
params: pairEmissions ? [id.pair] : []
|
|
23402
|
+
}
|
|
23332
23403
|
);
|
|
23333
23404
|
abis.push(
|
|
23334
23405
|
ResupplyPairAbi,
|
|
@@ -23339,7 +23410,9 @@ async function fetchResupplyMarkets(lender, chainId) {
|
|
|
23339
23410
|
ResupplyPairAbi,
|
|
23340
23411
|
ResupplyPairAbi,
|
|
23341
23412
|
ResupplyPairAbi,
|
|
23342
|
-
VAULT_PRICE_ABI
|
|
23413
|
+
VAULT_PRICE_ABI,
|
|
23414
|
+
ResupplyPairAbi,
|
|
23415
|
+
pairEmissions ? ResupplyPairEmissionsAbi : ResupplyPairAbi
|
|
23343
23416
|
);
|
|
23344
23417
|
if (utilities) {
|
|
23345
23418
|
calls.push(
|
|
@@ -23397,11 +23470,118 @@ async function fetchResupplyMarkets(lender, chainId) {
|
|
|
23397
23470
|
ratePerSec: tuple(rateInfo, 1),
|
|
23398
23471
|
exchangeRate: tuple(exchangeInfo, 2),
|
|
23399
23472
|
collateralPrice: big(results[base + 8]),
|
|
23400
|
-
|
|
23401
|
-
|
|
23473
|
+
// Indices follow the PUSH ORDER above exactly: the two reward reads sit
|
|
23474
|
+
// at +9/+10, BEFORE the lens block, so the lens reads are +11/+12.
|
|
23475
|
+
// (Getting this wrong is silent — it produced a 3-billion-percent APR
|
|
23476
|
+
// before the numbers were checked against a hand computation.)
|
|
23477
|
+
convexPid: big(results[base + 9]),
|
|
23478
|
+
rsupWeight: pairEmissions ? big(results[base + 10]) : null,
|
|
23479
|
+
liveRatePerSec: utilities ? big(results[base + 11]) : null,
|
|
23480
|
+
underlyingSupplyRatePerSec: utilities ? big(results[base + 12]) : null,
|
|
23481
|
+
collateralRewards: []
|
|
23482
|
+
};
|
|
23483
|
+
});
|
|
23484
|
+
await attachCollateralRewards(chainId, convexPoolUtil, pairs);
|
|
23485
|
+
return { lender, config, pairs, rsup };
|
|
23486
|
+
}
|
|
23487
|
+
async function readRewardContext(chainId, registry, utilities) {
|
|
23488
|
+
const addr2 = (v) => typeof v === "string" && v.startsWith("0x") && !/^0x0+$/.test(v) ? v : void 0;
|
|
23489
|
+
try {
|
|
23490
|
+
const first = await multicallRetryUniversal({
|
|
23491
|
+
chain: chainId,
|
|
23492
|
+
calls: [
|
|
23493
|
+
{ address: registry, name: "rewardHandler", params: [] },
|
|
23494
|
+
{ address: registry, name: "govToken", params: [] },
|
|
23495
|
+
...utilities ? [{ address: utilities, name: "convexPoolUtil", params: [] }] : []
|
|
23496
|
+
],
|
|
23497
|
+
abi: [
|
|
23498
|
+
ResupplyRegistryAbi,
|
|
23499
|
+
ResupplyRegistryAbi,
|
|
23500
|
+
...utilities ? [ResupplyUtilitiesAbi] : []
|
|
23501
|
+
],
|
|
23502
|
+
allowFailure: true
|
|
23503
|
+
});
|
|
23504
|
+
const rewardHandler = addr2(first[0]);
|
|
23505
|
+
const govToken = addr2(first[1]);
|
|
23506
|
+
const convexPoolUtil = utilities ? addr2(first[2]) : void 0;
|
|
23507
|
+
if (!rewardHandler || !govToken) return { convexPoolUtil };
|
|
23508
|
+
const [emissions] = await multicallRetryUniversal({
|
|
23509
|
+
chain: chainId,
|
|
23510
|
+
calls: [{ address: rewardHandler, name: "pairEmissions", params: [] }],
|
|
23511
|
+
abi: ResupplyRewardHandlerAbi,
|
|
23512
|
+
allowFailure: true
|
|
23513
|
+
});
|
|
23514
|
+
const pairEmissions = addr2(emissions);
|
|
23515
|
+
if (!pairEmissions) return { convexPoolUtil };
|
|
23516
|
+
const stream = await multicallRetryUniversal({
|
|
23517
|
+
chain: chainId,
|
|
23518
|
+
calls: [
|
|
23519
|
+
{ address: pairEmissions, name: "periodFinish", params: [] },
|
|
23520
|
+
{ address: pairEmissions, name: "rewardRate", params: [] },
|
|
23521
|
+
{ address: pairEmissions, name: "totalSupply", params: [] }
|
|
23522
|
+
],
|
|
23523
|
+
abi: [
|
|
23524
|
+
ResupplyPairEmissionsAbi,
|
|
23525
|
+
ResupplyPairEmissionsAbi,
|
|
23526
|
+
ResupplyPairEmissionsAbi
|
|
23527
|
+
],
|
|
23528
|
+
allowFailure: true
|
|
23529
|
+
});
|
|
23530
|
+
const periodFinish = big(stream[0]);
|
|
23531
|
+
const rewardRate = big(stream[1]);
|
|
23532
|
+
const totalWeight = big(stream[2]);
|
|
23533
|
+
if (periodFinish === null || rewardRate === null || totalWeight === null || totalWeight === 0n) {
|
|
23534
|
+
return { pairEmissions, convexPoolUtil };
|
|
23535
|
+
}
|
|
23536
|
+
if (periodFinish <= BigInt(Math.floor(Date.now() / 1e3))) {
|
|
23537
|
+
return { pairEmissions, convexPoolUtil };
|
|
23538
|
+
}
|
|
23539
|
+
return {
|
|
23540
|
+
rsup: { govToken, rewardRate, totalWeight, periodFinish },
|
|
23541
|
+
pairEmissions,
|
|
23542
|
+
convexPoolUtil
|
|
23402
23543
|
};
|
|
23544
|
+
} catch {
|
|
23545
|
+
return {};
|
|
23546
|
+
}
|
|
23547
|
+
}
|
|
23548
|
+
async function attachCollateralRewards(chainId, convexPoolUtil, pairs) {
|
|
23549
|
+
if (!convexPoolUtil) return;
|
|
23550
|
+
const staked = pairs.filter((p) => (p.convexPid ?? 0n) > 0n);
|
|
23551
|
+
if (staked.length === 0) return;
|
|
23552
|
+
let res = [];
|
|
23553
|
+
try {
|
|
23554
|
+
res = await multicallRetryUniversal({
|
|
23555
|
+
chain: chainId,
|
|
23556
|
+
calls: staked.map((p) => ({
|
|
23557
|
+
address: convexPoolUtil,
|
|
23558
|
+
name: "rewardRates",
|
|
23559
|
+
params: [p.convexPid]
|
|
23560
|
+
})),
|
|
23561
|
+
abi: staked.map(() => ConvexPoolUtilAbi),
|
|
23562
|
+
allowFailure: true
|
|
23563
|
+
});
|
|
23564
|
+
} catch {
|
|
23565
|
+
return;
|
|
23566
|
+
}
|
|
23567
|
+
staked.forEach((p, i) => {
|
|
23568
|
+
const entry = res[i];
|
|
23569
|
+
if (!Array.isArray(entry)) return;
|
|
23570
|
+
const [tokens, rates] = entry;
|
|
23571
|
+
if (!Array.isArray(tokens) || !Array.isArray(rates)) return;
|
|
23572
|
+
const byToken = /* @__PURE__ */ new Map();
|
|
23573
|
+
tokens.forEach((t, j) => {
|
|
23574
|
+
const rate = rates[j];
|
|
23575
|
+
if (typeof t !== "string" || typeof rate !== "bigint" || rate === 0n) {
|
|
23576
|
+
return;
|
|
23577
|
+
}
|
|
23578
|
+
const key2 = t.toLowerCase();
|
|
23579
|
+
byToken.set(key2, (byToken.get(key2) ?? 0n) + rate);
|
|
23580
|
+
});
|
|
23581
|
+
p.collateralRewards = [...byToken.entries()].map(
|
|
23582
|
+
([token, ratePerSecPerShare]) => ({ token, ratePerSecPerShare })
|
|
23583
|
+
);
|
|
23403
23584
|
});
|
|
23404
|
-
return { lender, config, pairs };
|
|
23405
23585
|
}
|
|
23406
23586
|
|
|
23407
23587
|
// src/prices/oracle-prices/fetchers/curvanceRoster.ts
|
|
@@ -23991,6 +24171,8 @@ function currencyFor9(address, decimals, symbol, tokens) {
|
|
|
23991
24171
|
const lower3 = address.toLowerCase();
|
|
23992
24172
|
return tokens[lower3] ?? { address: lower3, symbol, name: symbol, decimals };
|
|
23993
24173
|
}
|
|
24174
|
+
var LLAMALEND_MIN_BANDS = 4;
|
|
24175
|
+
var LLAMALEND_MAX_BANDS = 50;
|
|
23994
24176
|
function convertLlamaLendMarketsToResponse(raw, chainId, prices = {}, additionalYields = {
|
|
23995
24177
|
intrinsicYields: {},
|
|
23996
24178
|
lenderRewards: {},
|
|
@@ -24027,6 +24209,13 @@ function convertLlamaLendMarketsToResponse(raw, chainId, prices = {}, additional
|
|
|
24027
24209
|
const liqPenalty = Number(market.liquidationDiscount) / 1e18 || 0;
|
|
24028
24210
|
const closeFactor = 1;
|
|
24029
24211
|
const depositsEnabled = (m.maxDeposit ?? 0) > 0;
|
|
24212
|
+
const bandParameter = {
|
|
24213
|
+
kind: "llamalend-bands",
|
|
24214
|
+
dimension: "collateralFactor",
|
|
24215
|
+
domain: { min: LLAMALEND_MIN_BANDS, max: LLAMALEND_MAX_BANDS },
|
|
24216
|
+
default: market.defaultBands ?? 10,
|
|
24217
|
+
immutableAfterOpen: true
|
|
24218
|
+
};
|
|
24030
24219
|
const entry = { data: {} };
|
|
24031
24220
|
const collUid = createMarketUid(chainId, lenderKey, collAddr);
|
|
24032
24221
|
entry.data[collUid] = {
|
|
@@ -24064,7 +24253,8 @@ function convertLlamaLendMarketsToResponse(raw, chainId, prices = {}, additional
|
|
|
24064
24253
|
liquidationPenalty: liqPenalty,
|
|
24065
24254
|
closeFactor,
|
|
24066
24255
|
collateralDisabled: false,
|
|
24067
|
-
debtDisabled: true
|
|
24256
|
+
debtDisabled: true,
|
|
24257
|
+
openParameter: bandParameter
|
|
24068
24258
|
}
|
|
24069
24259
|
},
|
|
24070
24260
|
closeFactor,
|
|
@@ -24218,8 +24408,24 @@ function convertLlamaLendMarketsToResponse(raw, chainId, prices = {}, additional
|
|
|
24218
24408
|
}
|
|
24219
24409
|
return out;
|
|
24220
24410
|
}
|
|
24411
|
+
function resupplyMarketLabel(rawName) {
|
|
24412
|
+
const inner = rawName.match(/\(([^)]+)\)/)?.[1];
|
|
24413
|
+
if (!inner) return rawName;
|
|
24414
|
+
const suffix = rawName.match(/\)\s*-\s*(\d+)\s*$/)?.[1];
|
|
24415
|
+
return suffix && suffix !== "1" ? `${inner} - ${suffix}` : inner;
|
|
24416
|
+
}
|
|
24417
|
+
function wrappedCollateralSymbol(rawName) {
|
|
24418
|
+
const inner = rawName.match(/\(([^)]+)\)/)?.[1];
|
|
24419
|
+
const sym = inner?.split("/").pop()?.trim();
|
|
24420
|
+
return sym && sym.length > 0 ? sym : void 0;
|
|
24421
|
+
}
|
|
24221
24422
|
var llamaLendKey = (controller) => `LLAMALEND_${controller.replace(/^0x/i, "").toUpperCase()}`;
|
|
24222
|
-
function resolveWrappedMarket(chainId,
|
|
24423
|
+
function resolveWrappedMarket(chainId, identity) {
|
|
24424
|
+
const collateralVault = identity.collateral;
|
|
24425
|
+
const onChain = {
|
|
24426
|
+
collateralToken: identity.wrappedCollateralToken,
|
|
24427
|
+
collateralSymbol: wrappedCollateralSymbol(identity.name)
|
|
24428
|
+
};
|
|
24223
24429
|
const market = llamaLendMarketByVault("LLAMALEND", chainId, collateralVault);
|
|
24224
24430
|
if (market) {
|
|
24225
24431
|
return {
|
|
@@ -24229,13 +24435,19 @@ function resolveWrappedMarket(chainId, collateralVault, pairName) {
|
|
|
24229
24435
|
controller: market.controller,
|
|
24230
24436
|
amm: market.amm,
|
|
24231
24437
|
version: market.version,
|
|
24232
|
-
|
|
24438
|
+
// Roster first (curated symbols/decimals), on-chain as the backstop, so
|
|
24439
|
+
// an unpublished or lagging roster degrades a label rather than the
|
|
24440
|
+
// image address.
|
|
24441
|
+
collateralSymbol: market.collateralSymbol ?? onChain.collateralSymbol,
|
|
24442
|
+
collateralToken: market.collateralToken ?? onChain.collateralToken,
|
|
24443
|
+
collateralDecimals: market.collateralDecimals
|
|
24233
24444
|
};
|
|
24234
24445
|
}
|
|
24235
|
-
const
|
|
24446
|
+
const family = identity.wrappedFamily ?? (/fraxlend/i.test(identity.name) ? "fraxlend" : void 0);
|
|
24236
24447
|
return {
|
|
24237
|
-
provider:
|
|
24238
|
-
vault: collateralVault
|
|
24448
|
+
provider: family === "fraxlend" ? "fraxlend" : family === "curvelend" ? "llamalend" : "unknown",
|
|
24449
|
+
vault: collateralVault,
|
|
24450
|
+
...onChain
|
|
24239
24451
|
};
|
|
24240
24452
|
}
|
|
24241
24453
|
function resupplyLenderKey(lender, chainId, pair) {
|
|
@@ -24263,6 +24475,52 @@ function ratePerSecToApr(rate) {
|
|
|
24263
24475
|
if (rate === null) return 0;
|
|
24264
24476
|
return Number(rate) / 1e18 * SECONDS_PER_YEAR9 * 100;
|
|
24265
24477
|
}
|
|
24478
|
+
function buildRewardEntries(p, rsup, chainId, prices, tokens, collateralUsd, debtUsd) {
|
|
24479
|
+
const priceOf = (address) => {
|
|
24480
|
+
const lower3 = address.toLowerCase();
|
|
24481
|
+
const token = tokens[lower3];
|
|
24482
|
+
const key2 = toOracleKey(token?.assetGroup) || toGenericPriceKey(lower3, chainId);
|
|
24483
|
+
return prices[key2] ?? 0;
|
|
24484
|
+
};
|
|
24485
|
+
const collateral = [];
|
|
24486
|
+
if (collateralUsd > 0) {
|
|
24487
|
+
for (const r of p.collateralRewards ?? []) {
|
|
24488
|
+
const price2 = priceOf(r.token);
|
|
24489
|
+
if (price2 <= 0) continue;
|
|
24490
|
+
const decimals = tokens[r.token.toLowerCase()]?.decimals ?? 18;
|
|
24491
|
+
const perSecond = Number(r.ratePerSecPerShare) * Number(p.totalCollateral ?? 0n) / 1e18;
|
|
24492
|
+
const usdPerYear = perSecond / 10 ** decimals * SECONDS_PER_YEAR9 * price2;
|
|
24493
|
+
const apr = usdPerYear / collateralUsd * 100;
|
|
24494
|
+
if (!Number.isFinite(apr) || apr <= 0) continue;
|
|
24495
|
+
collateral.push({
|
|
24496
|
+
asset: r.token,
|
|
24497
|
+
depositRate: apr,
|
|
24498
|
+
variableBorrowRate: 0,
|
|
24499
|
+
stableBorrowRate: 0
|
|
24500
|
+
});
|
|
24501
|
+
}
|
|
24502
|
+
}
|
|
24503
|
+
const borrow = [];
|
|
24504
|
+
if (rsup && debtUsd > 0 && (p.rsupWeight ?? 0n) > 0n) {
|
|
24505
|
+
const price2 = priceOf(rsup.govToken);
|
|
24506
|
+
if (price2 > 0) {
|
|
24507
|
+
const decimals = tokens[rsup.govToken.toLowerCase()]?.decimals ?? 18;
|
|
24508
|
+
const perSecond = Number(rsup.rewardRate) * Number(p.rsupWeight) / Number(rsup.totalWeight);
|
|
24509
|
+
const usdPerYear = perSecond / 10 ** decimals * SECONDS_PER_YEAR9 * price2;
|
|
24510
|
+
const apr = usdPerYear / debtUsd * 100;
|
|
24511
|
+
if (Number.isFinite(apr) && apr > 0) {
|
|
24512
|
+
borrow.push({
|
|
24513
|
+
asset: rsup.govToken,
|
|
24514
|
+
depositRate: 0,
|
|
24515
|
+
// A REBATE on the borrow cost, not a charge.
|
|
24516
|
+
variableBorrowRate: apr,
|
|
24517
|
+
stableBorrowRate: 0
|
|
24518
|
+
});
|
|
24519
|
+
}
|
|
24520
|
+
}
|
|
24521
|
+
}
|
|
24522
|
+
return { collateral, borrow };
|
|
24523
|
+
}
|
|
24266
24524
|
function convertResupplyMarketsToResponse(raw, chainId, prices = {}, _additionalYields = {
|
|
24267
24525
|
intrinsicYields: {},
|
|
24268
24526
|
lenderRewards: {},
|
|
@@ -24297,7 +24555,17 @@ function convertResupplyMarketsToResponse(raw, chainId, prices = {}, _additional
|
|
|
24297
24555
|
const borrowLimit = p.borrowLimit !== null ? Number(p.borrowLimit) / 10 ** debtDecimals : 0;
|
|
24298
24556
|
const borrowLiquidity = Math.max(borrowLimit - totalDebt, 0);
|
|
24299
24557
|
const halted = (p.borrowLimit ?? 0n) === 0n;
|
|
24300
|
-
const wrappedMarket = resolveWrappedMarket(chainId, id
|
|
24558
|
+
const wrappedMarket = resolveWrappedMarket(chainId, id);
|
|
24559
|
+
const marketLabel = resupplyMarketLabel(id.name);
|
|
24560
|
+
const rewardEntries = buildRewardEntries(
|
|
24561
|
+
p,
|
|
24562
|
+
raw.rsup,
|
|
24563
|
+
chainId,
|
|
24564
|
+
prices,
|
|
24565
|
+
tokens,
|
|
24566
|
+
totalColl * collPrice,
|
|
24567
|
+
totalDebt * debtPrice
|
|
24568
|
+
);
|
|
24301
24569
|
const maxLtv = p.maxLTV !== null ? Number(p.maxLTV) / LTV_PRECISION : 0;
|
|
24302
24570
|
const liquidationPenalty = p.liquidationFee !== null ? Number(p.liquidationFee) / LTV_PRECISION : 0;
|
|
24303
24571
|
const mintFeePct = p.mintFee !== null ? Number(p.mintFee) / LTV_PRECISION * 100 : 0;
|
|
@@ -24328,11 +24596,14 @@ function convertResupplyMarketsToResponse(raw, chainId, prices = {}, _additional
|
|
|
24328
24596
|
// The wrapped Curve Lend / Fraxlend supply rate — this collateral is a
|
|
24329
24597
|
// lending position and earns while it sits here.
|
|
24330
24598
|
intrinsicYield: collateralIntrinsicApr,
|
|
24331
|
-
|
|
24599
|
+
// CRV/CVX from the Convex position the pair stakes the collateral into.
|
|
24600
|
+
// Empty (not undefined) when the pair does not stake — `convexPid == 0`.
|
|
24601
|
+
rewards: rewardEntries.collateral,
|
|
24332
24602
|
decimals: collDecimals,
|
|
24333
24603
|
config: {
|
|
24334
24604
|
0: {
|
|
24335
24605
|
category: 0,
|
|
24606
|
+
label: marketLabel,
|
|
24336
24607
|
borrowCollateralFactor: maxLtv,
|
|
24337
24608
|
collateralFactor: maxLtv,
|
|
24338
24609
|
borrowFactor: 1,
|
|
@@ -24385,11 +24656,14 @@ function convertResupplyMarketsToResponse(raw, chainId, prices = {}, _additional
|
|
|
24385
24656
|
// but it is governance-settable.
|
|
24386
24657
|
originationFee: mintFeePct,
|
|
24387
24658
|
intrinsicYield: 0,
|
|
24388
|
-
|
|
24659
|
+
// RSUP emissions to BORROWERS — a rebate on `variableBorrowRate`, not a
|
|
24660
|
+
// deposit yield. Empty when the emission stream has expired.
|
|
24661
|
+
rewards: rewardEntries.borrow,
|
|
24389
24662
|
decimals: debtDecimals,
|
|
24390
24663
|
config: {
|
|
24391
24664
|
0: {
|
|
24392
24665
|
category: 0,
|
|
24666
|
+
label: marketLabel,
|
|
24393
24667
|
borrowCollateralFactor: 0,
|
|
24394
24668
|
collateralFactor: 0,
|
|
24395
24669
|
borrowFactor: 1,
|
|
@@ -24411,7 +24685,7 @@ function convertResupplyMarketsToResponse(raw, chainId, prices = {}, _additional
|
|
|
24411
24685
|
entry.params = {
|
|
24412
24686
|
market: {
|
|
24413
24687
|
lender: lenderKey,
|
|
24414
|
-
name:
|
|
24688
|
+
name: marketLabel,
|
|
24415
24689
|
loanDecimals: debtDecimals,
|
|
24416
24690
|
collateralDecimals: collDecimals,
|
|
24417
24691
|
id: id.pair.toLowerCase(),
|
|
@@ -24426,6 +24700,9 @@ function convertResupplyMarketsToResponse(raw, chainId, prices = {}, _additional
|
|
|
24426
24700
|
// worker-api resolvers and the loop quoter) ---
|
|
24427
24701
|
resupply: {
|
|
24428
24702
|
pair: id.pair,
|
|
24703
|
+
/** The pair's raw on-chain `name()`, before the label is derived. */
|
|
24704
|
+
rawName: id.name,
|
|
24705
|
+
label: marketLabel,
|
|
24429
24706
|
/** The ERC-4626 share the pair actually books as collateral. */
|
|
24430
24707
|
collateralVault: id.collateral,
|
|
24431
24708
|
collateralVaultDecimals: id.collateralDecimals,
|
|
@@ -31141,7 +31418,7 @@ var getLiquityUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
31141
31418
|
troveInfo
|
|
31142
31419
|
}
|
|
31143
31420
|
};
|
|
31144
|
-
modes[t.troveId] =
|
|
31421
|
+
modes[t.troveId] = Number(troveInfo.annualInterestRate) / 1e18;
|
|
31145
31422
|
hist[t.troveId] = {
|
|
31146
31423
|
totalDeposits24h: collNum * collHist,
|
|
31147
31424
|
totalDebt24h: debtNum * loanHist
|
|
@@ -31601,7 +31878,7 @@ var getLlamaLendUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
31601
31878
|
}
|
|
31602
31879
|
}
|
|
31603
31880
|
};
|
|
31604
|
-
const modes = { "0":
|
|
31881
|
+
const modes = { "0": bandCount };
|
|
31605
31882
|
const hist = {
|
|
31606
31883
|
"0": {
|
|
31607
31884
|
totalDeposits24h: collNum * collHist + bandBorrowedNum * loanHist,
|
|
@@ -64417,6 +64694,26 @@ var llamaLendAdapter = {
|
|
|
64417
64694
|
] : void 0,
|
|
64418
64695
|
bandLtv,
|
|
64419
64696
|
defaultBands: typeof ll.defaultBands === "number" ? ll.defaultBands : void 0,
|
|
64697
|
+
/**
|
|
64698
|
+
* The band count as an editable TERM, not just a curve to read.
|
|
64699
|
+
*
|
|
64700
|
+
* `bandLtv` alone cannot drive a control: it is four sampled points,
|
|
64701
|
+
* and it is missing on any market whose curve could not be computed.
|
|
64702
|
+
* The domain is always known — `MIN_TICKS`/`MAX_TICKS` are 4..50 on
|
|
64703
|
+
* both generations — so the control works even where the curve does
|
|
64704
|
+
* not.
|
|
64705
|
+
*
|
|
64706
|
+
* `immutableAfterOpen` is what tells the UI to render this read-only
|
|
64707
|
+
* on an existing loan: `_add_collateral_borrow` reuses the tick
|
|
64708
|
+
* width, so changing N means closing and reopening.
|
|
64709
|
+
*/
|
|
64710
|
+
openParameter: {
|
|
64711
|
+
kind: "llamalend-bands",
|
|
64712
|
+
dimension: "collateralFactor",
|
|
64713
|
+
domain: { min: 4, max: 50 },
|
|
64714
|
+
default: typeof ll.defaultBands === "number" ? ll.defaultBands : 10,
|
|
64715
|
+
immutableAfterOpen: true
|
|
64716
|
+
},
|
|
64420
64717
|
badDebt: "socialized"
|
|
64421
64718
|
},
|
|
64422
64719
|
counterparty: { kind: "pool", solvency: "overcollateralized" }
|
|
@@ -65145,6 +65442,6 @@ function validateTermSheets(sheets) {
|
|
|
65145
65442
|
return sheets.flatMap((s) => validateTermSheet(s));
|
|
65146
65443
|
}
|
|
65147
65444
|
|
|
65148
|
-
export { ApiBookSource, DEFAULT_MIDNIGHT_API, DEFAULT_OUTLIER_GUARD, DEFAULT_PROFILE_ID, DEFAULT_STALE_REJECT_SECONDS, DEFAULT_TERMMAX_API, EMPTY_BALANCE, EXACTLY_LENDER_KEY, 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, STABLECOIN_SYMBOLS, STCELO_MANAGER_ADDRESS, TELLER_CALLS_PER_BID, TERMMAX_CALLS_PER_ACCOUNT, DECIMAL_BASE as TERMMAX_DECIMAL_BASE, TERMMAX_LIQUIDATION_PENALTY, TERMMAX_LIQUIDATION_WINDOW_SECS, TERMMAX_LIQUIDATOR_BONUS, TERMMAX_PARTIAL_CLOSE_FACTOR, TERMMAX_PARTIAL_LIQUIDATION_THRESHOLD_USD, TERM_ADAPTERS, TERM_PROFILES, TERM_SHEET_SCHEMA_VERSION, TermMaxApiSource, TermSubgraphSource, UPSHIFT_CHAIN_IDS, UPSHIFT_VAULTS_URL, VAULT_SHARE_PRICE_PROBE, VOLATILE_VAULT_OVERRIDES, YEARN_CHAIN_IDS, YEARN_YDAEMON_BASE, __resetResupplyUserCaches, accountDepositListKey, accountWithdrawalListKey, appendSnapshot, applyPositionDelta, attachImplications, attachPricesToFlashLiquidity, borrowDescription, borrowFindings, borrowHeadline, buildExposures2 as buildExposures, buildFluidFTokensCall, buildLiquityUserCall, buildLoopResult, buildMorphoTypeCall, buildMorphoTypeUserCallWithLens, buildPortfolioTotals, buildSumerAccumulators, buildSummaries, buildTellerUserCall, buildTermMaxUserCall, buildTermSheet, buildTermSheetsForGroup, buildVaultLookup, calculateLeverage, calculateNetApr, calculateOverallNetApr, calculateWeightedAverage, classifyFreshness, classifyReliability, classifyVault, collectFeedObservations, computeBorrowDelta2 as computeBorrowDelta, computeCloseTradeDeltas, computeCollateralSwapDeltas, computeDebtSwapDeltas, computeDepositDelta2 as computeDepositDelta, computeEModeAnalysis, computeOpenTradeDeltas, computePostTradeMetrics, computeRepayDelta2 as computeRepayDelta, computeSumerBorrowDelta, computeSumerDepositDelta, computeSumerRepayDelta, computeSumerWaterfall, computeSumerWithdrawDelta, computeVaultApr, computeWithdrawDelta2 as computeWithdrawDelta, computeZapTradeDeltas, consensusReference, convertExactlyMarketsToResponse, convertFrankencoinMarketsToResponse, convertInverseMarketsToResponse, convertLenderUserDataResult, convertLiquityMarketsToResponse, convertLlamaLendMarketsToResponse, convertResupplyMarketsToResponse, convertRiverMarketsToResponse, convertTellerMarketsToResponse, convertTermMarketsToResponse, convertTermMaxMarketsToResponse, convertUsddMarketsToResponse, createMarketUid, createMidnightBookSource, createMulticallRpcCall, createRawRpcCalls, createTermBookSource, createTermMaxDataSource, decodeListaMarkets, decodeMarkets, decodePackedListaUserDataset, decodePackedMorphoUserDataset, deriveBorrowTags, deriveSupplyTags, detectInterfaceKinds, duration, encodeBalanceFetcherCalldata, enrichTermSheet, enrichmentIndexFromRows, exactlyPairLtv, exactlyPenaltyRateToAprPercent, exactlyWadRateToPercent, feePhrase, feedKeyOf, feedStatKey, fetchDolomiteAccountNumbers, fetchEulerEarnVaults, fetchEulerEarnVaultsFromSubgraph, fetchEulerSubAccountIndexes, fetchExactlyMarkets, fetchFlashLiquidityForChain, fetchFluidFTokens, fetchFrankencoinMarkets, fetchGeneralYields, fetchGeneralYieldsByMarketUid, fetchGmxExecutionFees, fetchGmxTickerPrices, fetchGmxVaults, fetchHypercoreVaults, fetchInverseMarkets, fetchLagoonApiVaults, fetchLagoonVaults, fetchLiquityMarkets, fetchListaVaultsFromChain, fetchLlamaLendMarkets, fetchMorphoUserBalances, fetchMorphoUserPositionMarkets, fetchMorphoVaults, fetchMorphoVaultsFromApi, fetchMorphoVaultsFromChain, fetchOraclePrices, fetchPendlePrices, fetchResupplyMarkets, fetchRiverMarkets, fetchSiloVaults, fetchTellerMarkets, fetchTermMarkets, fetchTermMaxMarkets, fetchTokenBalances, fetchTokenMetadata, fetchUpshiftApiVaults, fetchUpshiftVaults, fetchUsddMarkets, fetchYearnApiVaults, fetchYearnVaults, filterActiveLenders, filterLendersByProtocol, finalizeInfo, findingsFor, frankencoinKeyParts, frankencoinLenderKey, fuseLenderData, generateLendingPools, getAavesForChain, getAssetConfig, getBalanceForMarketUid, getBorrowCapacity, getCachedLiquityTroves, getCachedTellerBids, getCachedTermMaxDiscovery, getCachedTermMaxMarket, getCachedTermMaxMarkets, getCoreValidators, getFluidFTokensConverter, getGmxApiHost, getGmxReadContracts, getGmxUserPositions, getHealthFactor, getHypercoreUserPositions, getHypercoreVaultRegistry, getLenderAssets, getLenderPublicData, getLenderPublicDataAll, getLenderPublicDataViaApi, getLenderUserDataMulti, getLenderUserDataResult, getLendersForChain, getLstDelegation, getLstValidators, getLstWithdrawalRegistry, getLstWithdrawalRequests, getMaxAmountClose, getMaxAmountCollateralSwap, getMaxAmountDebtSwap, getMaxAmountOpen, getMergedUserData, getMorphoTypeMarketConverter, getReadFailurePolicy, getResolvedDolomiteAccountNumbers, getStCeloValidatorGroups, getSubAccountAddress, getSubAccountIndex, getTermProfile, getVaultPublicDataAll, getVaultWithdrawalRequests, hasCritical, hasEulerEarnVaultSubgraph, hasLagoonVaults, hasMorphoPositionIndex, hasMorphoUserApi, hasMorphoUserSubgraph, hasUpshiftVaults, hasYearnVaults, inverseKeyParts, inverseLenderKey, isFailedCall, isStablecoinSymbol, isYearnV3, keysFromMaps, lenderApiOnly, lenderFamily, liquityCandidateTroveIds, liquityKeyParts, liquityLenderKey, llamaLendKeyParts, llamaLendLenderKey, mergeDeep, multicall3Abi2 as multicall3Abi, nanTo, needsLenderApproval, needsTokenApproval, noOpResult, normalizeToBytes, parseBalanceFetcherResult, parseMergedResult, parseMulticallRpcResponses, parseRawRpcBatchResponses, parseRawRpcResponses, parseTermMaxLtv, parseTokenBalanceResult, pct, positivePart2 as positivePart, predictInverseEscrow, prepareLenderUserDataRpcCalls, prepareMergedMulticallParams, prepareMergedRpcCalls, prepareMulticallInputs, prepareTokenBalanceRpcCalls, priceGlvVaults, priceGmMarkets, probeAaveFeedTimestamps, pruneFeedStats, rankFindings, readVaultSharePrices, rejectOutliers as rejectPriceOutliers, resolveAdapter, resolveDerivation, resolveStCeloDepositGroup, resupplyKeyParts, resupplyLenderKey, riverKeyParts, riverLenderKey, selectAssetGroupPrices, shortDate, stampVaultClassification, supplyDescription, supplyFindings, supplyHeadline, tellerBpsToPercent, tellerImpliedLtv, tellerLenderKey, tellerPoolFromLenderKey, termLenderKey, termMaxApiBase, borrowNif as termMaxBorrowNif, curveApr as termMaxCurveApr, curveAprNumber as termMaxCurveAprNumber, daysToMaturity as termMaxDaysToMaturity, lendNif as termMaxLendNif, mintGtFeeRatio as termMaxMintGtFeeRatio, ratioToNumber as termMaxRatioToNumber, ratioToPercent as termMaxRatioToPercent, tickToAprNumber, tickToPrice, toDigest, toTermSheetInput, unflattenLenderData, updateFeedStats, usddIlkBytes32, usddKeyParts, usddLenderKey, validateTermSheet, validateTermSheets, validateUserData };
|
|
65445
|
+
export { ApiBookSource, DEFAULT_MIDNIGHT_API, DEFAULT_OUTLIER_GUARD, DEFAULT_PROFILE_ID, DEFAULT_STALE_REJECT_SECONDS, DEFAULT_TERMMAX_API, EMPTY_BALANCE, EXACTLY_LENDER_KEY, 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, STABLECOIN_SYMBOLS, STCELO_MANAGER_ADDRESS, TELLER_CALLS_PER_BID, TERMMAX_CALLS_PER_ACCOUNT, DECIMAL_BASE as TERMMAX_DECIMAL_BASE, TERMMAX_LIQUIDATION_PENALTY, TERMMAX_LIQUIDATION_WINDOW_SECS, TERMMAX_LIQUIDATOR_BONUS, TERMMAX_PARTIAL_CLOSE_FACTOR, TERMMAX_PARTIAL_LIQUIDATION_THRESHOLD_USD, TERM_ADAPTERS, TERM_PROFILES, TERM_SHEET_SCHEMA_VERSION, TermMaxApiSource, TermSubgraphSource, UPSHIFT_CHAIN_IDS, UPSHIFT_VAULTS_URL, VAULT_SHARE_PRICE_PROBE, VOLATILE_VAULT_OVERRIDES, YEARN_CHAIN_IDS, YEARN_YDAEMON_BASE, __resetResupplyUserCaches, accountDepositListKey, accountWithdrawalListKey, appendSnapshot, applyPositionDelta, attachImplications, attachPricesToFlashLiquidity, borrowDescription, borrowFindings, borrowHeadline, buildExposures2 as buildExposures, buildFluidFTokensCall, buildLiquityUserCall, buildLoopResult, buildMorphoTypeCall, buildMorphoTypeUserCallWithLens, buildPortfolioTotals, buildSumerAccumulators, buildSummaries, buildTellerUserCall, buildTermMaxUserCall, buildTermSheet, buildTermSheetsForGroup, buildVaultLookup, calculateLeverage, calculateNetApr, calculateOverallNetApr, calculateWeightedAverage, classifyFreshness, classifyReliability, classifyVault, collectFeedObservations, computeBorrowDelta2 as computeBorrowDelta, computeCloseTradeDeltas, computeCollateralSwapDeltas, computeDebtSwapDeltas, computeDepositDelta2 as computeDepositDelta, computeEModeAnalysis, computeOpenTradeDeltas, computePostTradeMetrics, computeRepayDelta2 as computeRepayDelta, computeSumerBorrowDelta, computeSumerDepositDelta, computeSumerRepayDelta, computeSumerWaterfall, computeSumerWithdrawDelta, computeVaultApr, computeWithdrawDelta2 as computeWithdrawDelta, computeZapTradeDeltas, consensusReference, convertExactlyMarketsToResponse, convertFrankencoinMarketsToResponse, convertInverseMarketsToResponse, convertLenderUserDataResult, convertLiquityMarketsToResponse, convertLlamaLendMarketsToResponse, convertResupplyMarketsToResponse, convertRiverMarketsToResponse, convertTellerMarketsToResponse, convertTermMarketsToResponse, convertTermMaxMarketsToResponse, convertUsddMarketsToResponse, createMarketUid, createMidnightBookSource, createMulticallRpcCall, createRawRpcCalls, createTermBookSource, createTermMaxDataSource, decodeListaMarkets, decodeMarkets, decodePackedListaUserDataset, decodePackedMorphoUserDataset, deriveBorrowTags, deriveSupplyTags, detectInterfaceKinds, duration, encodeBalanceFetcherCalldata, enrichTermSheet, enrichmentIndexFromRows, exactlyPairLtv, exactlyPenaltyRateToAprPercent, exactlyWadRateToPercent, feePhrase, feedKeyOf, feedStatKey, fetchDolomiteAccountNumbers, fetchEulerEarnVaults, fetchEulerEarnVaultsFromSubgraph, fetchEulerSubAccountIndexes, fetchExactlyMarkets, fetchFlashLiquidityForChain, fetchFluidFTokens, fetchFrankencoinMarkets, fetchGeneralYields, fetchGeneralYieldsByMarketUid, fetchGmxExecutionFees, fetchGmxTickerPrices, fetchGmxVaults, fetchHypercoreVaults, fetchInverseMarkets, fetchLagoonApiVaults, fetchLagoonVaults, fetchLiquityMarkets, fetchListaVaultsFromChain, fetchLlamaLendMarkets, fetchMorphoUserBalances, fetchMorphoUserPositionMarkets, fetchMorphoVaults, fetchMorphoVaultsFromApi, fetchMorphoVaultsFromChain, fetchOraclePrices, fetchPendlePrices, fetchResupplyMarkets, fetchRiverMarkets, fetchSiloVaults, fetchTellerMarkets, fetchTermMarkets, fetchTermMaxMarkets, fetchTokenBalances, fetchTokenMetadata, fetchUpshiftApiVaults, fetchUpshiftVaults, fetchUsddMarkets, fetchYearnApiVaults, fetchYearnVaults, filterActiveLenders, filterLendersByProtocol, finalizeInfo, findingsFor, frankencoinKeyParts, frankencoinLenderKey, fuseLenderData, generateLendingPools, getAavesForChain, getAssetConfig, getBalanceForMarketUid, getBorrowCapacity, getCachedLiquityTroves, getCachedTellerBids, getCachedTermMaxDiscovery, getCachedTermMaxMarket, getCachedTermMaxMarkets, getCoreValidators, getFluidFTokensConverter, getGmxApiHost, getGmxReadContracts, getGmxUserPositions, getHealthFactor, getHypercoreUserPositions, getHypercoreVaultRegistry, getLenderAssets, getLenderPublicData, getLenderPublicDataAll, getLenderPublicDataViaApi, getLenderUserDataMulti, getLenderUserDataResult, getLendersForChain, getLstDelegation, getLstValidators, getLstWithdrawalRegistry, getLstWithdrawalRequests, getMaxAmountClose, getMaxAmountCollateralSwap, getMaxAmountDebtSwap, getMaxAmountOpen, getMergedUserData, getMorphoTypeMarketConverter, getReadFailurePolicy, getResolvedDolomiteAccountNumbers, getStCeloValidatorGroups, getSubAccountAddress, getSubAccountIndex, getTermProfile, getVaultPublicDataAll, getVaultWithdrawalRequests, hasCritical, hasEulerEarnVaultSubgraph, hasLagoonVaults, hasMorphoPositionIndex, hasMorphoUserApi, hasMorphoUserSubgraph, hasUpshiftVaults, hasYearnVaults, inverseKeyParts, inverseLenderKey, isFailedCall, isStablecoinSymbol, isYearnV3, keysFromMaps, lenderApiOnly, lenderFamily, liquityCandidateTroveIds, liquityKeyParts, liquityLenderKey, llamaLendKeyParts, llamaLendLenderKey, mergeDeep, multicall3Abi2 as multicall3Abi, nanTo, needsLenderApproval, needsTokenApproval, noOpResult, normalizeToBytes, parseBalanceFetcherResult, parseMergedResult, parseMulticallRpcResponses, parseRawRpcBatchResponses, parseRawRpcResponses, parseTermMaxLtv, parseTokenBalanceResult, pct, positivePart2 as positivePart, predictInverseEscrow, prepareLenderUserDataRpcCalls, prepareMergedMulticallParams, prepareMergedRpcCalls, prepareMulticallInputs, prepareTokenBalanceRpcCalls, priceGlvVaults, priceGmMarkets, probeAaveFeedTimestamps, pruneFeedStats, rankFindings, readVaultSharePrices, rejectOutliers as rejectPriceOutliers, resolveAdapter, resolveDerivation, resolveStCeloDepositGroup, resupplyKeyParts, resupplyLenderKey, resupplyMarketLabel, riverKeyParts, riverLenderKey, selectAssetGroupPrices, shortDate, stampVaultClassification, supplyDescription, supplyFindings, supplyHeadline, tellerBpsToPercent, tellerImpliedLtv, tellerLenderKey, tellerPoolFromLenderKey, termLenderKey, termMaxApiBase, borrowNif as termMaxBorrowNif, curveApr as termMaxCurveApr, curveAprNumber as termMaxCurveAprNumber, daysToMaturity as termMaxDaysToMaturity, lendNif as termMaxLendNif, mintGtFeeRatio as termMaxMintGtFeeRatio, ratioToNumber as termMaxRatioToNumber, ratioToPercent as termMaxRatioToPercent, tickToAprNumber, tickToPrice, toDigest, toTermSheetInput, unflattenLenderData, updateFeedStats, usddIlkBytes32, usddKeyParts, usddLenderKey, validateTermSheet, validateTermSheets, validateUserData };
|
|
65149
65446
|
//# sourceMappingURL=index.js.map
|
|
65150
65447
|
//# sourceMappingURL=index.js.map
|