@1delta/margin-fetcher 5.0.13 → 5.0.15
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 +57 -35
- package/dist/index.js +404 -176
- package/dist/index.js.map +1 -1
- package/package.json +8 -8
package/dist/index.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { parseAbi, keccak256, encodeAbiParameters, formatEther, BaseError, erc20Abi, stringToHex, pad, encodeFunctionData, formatUnits,
|
|
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-YILYOOYB.js';
|
|
2
2
|
import './chunk-BYTNVMX7.js';
|
|
3
3
|
import './chunk-PR4QN5HX.js';
|
|
4
|
-
import { Lender, isExactly, isMidnight, isTerm, isTermMax, isTeller, isListaDao, isLiquityFamily, isRiver, isInverse,
|
|
4
|
+
import { Lender, isExactly, isMidnight, isTerm, isTermMax, isTeller, isListaDao, isLiquityFamily, isRiver, isInverse, isDssType, isCompoundV3Type, isFluid, isGearboxV3, isLlamaLend, isFrankencoin, isResupply, isCurvance, LIQUITY_FAMILY_LENDERS, isAaveType, isCompoundV3, isMultiMarket, isSiloV2Type, isSiloV3Type, isDolomite, hasCrossMarginRisk, isEulerType, isAaveV4Type, isInit, isMorphoType, isCompoundV2Type, isVenusType, isSumerType, AAVE_V3_LENDERS, AAVE_V2_LENDERS, 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, llamaLendLendersByChain, usddLendersByChain, frankencoinLendersByChain, resupplyLendersByChain, curvanceLendersByChain, tellerConfigByChain, tellerPoolsByChain, termMaxConfigByChain, aaveReserves, compoundV3Reserves, liquityConfigFor, liquityBranchesByChain, riverConfigFor, riverChainData, termMaxApiBaseUrl, termMaxLenderKey, inverseConfigFor, inverseChainData, llamaLendConfigFor, llamaLendChainData, llamaLendApiBaseUrl, resupplyConfigFor,
|
|
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, llamaLendLendersByChain, usddLendersByChain, skyLendersByChain, frankencoinLendersByChain, resupplyLendersByChain, curvanceLendersByChain, tellerConfigByChain, tellerPoolsByChain, termMaxConfigByChain, aaveReserves, compoundV3Reserves, liquityConfigFor, liquityBranchesByChain, riverConfigFor, riverChainData, termMaxApiBaseUrl, termMaxLenderKey, inverseConfigFor, inverseChainData, llamaLendConfigFor, llamaLendChainData, llamaLendApiBaseUrl, resupplyConfigFor, dssConfigFor, dssChainData, dssDebtToken, dssDebtJoin, frankencoinConfigFor, frankencoinChainData, aaveOracles, morphoTypeMarkets, resolveMidnightApiBase, resolveTermApiBase, llamaLendMarketByVault, getSiloV2MarketEntry, getSiloV3MarketEntry, dolomiteEmode, curvanceConfigFor, aaveTokens, morphoTypeVaults, eulerConfigs, gearboxMarketCompressor, gearboxMarketConfigurators, gearboxV3LenderKey, midnightMarketsByChain, parseAaveV4SpokeLenderKey, gearboxAccountCompressor, compoundV2Tokens, exactlyMarketsByChain, aaveOraclesConfig, compoundV2Oracles, compoundV2TokenArray, compoundV2OraclesConfig, compoundV3OraclesData, compoundV3BaseData, compoundV2Reserves, aaveV4Oracles } from '@1delta/data-sdk';
|
|
7
7
|
import lodash from 'lodash';
|
|
8
8
|
import { 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, ResupplyUtilitiesAbi, ResupplyRewardHandlerAbi, ResupplyPairEmissionsAbi, ConvexPoolUtilAbi,
|
|
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, FrankencoinPositionAbi, FluidLendingResolverAbi, FluidVaultResolverAbi, FluidLiquidityResolverAbi, MoolahVaultAbi, UsddVatAbi, UsddJugAbi, UsddSpotAbi, 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
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';
|
|
@@ -6424,6 +6424,9 @@ var getLendersForChain = (c) => {
|
|
|
6424
6424
|
for (const l of usddLendersByChain(c)) {
|
|
6425
6425
|
lenders.push(l);
|
|
6426
6426
|
}
|
|
6427
|
+
for (const l of skyLendersByChain(c)) {
|
|
6428
|
+
lenders.push(l);
|
|
6429
|
+
}
|
|
6427
6430
|
for (const l of frankencoinLendersByChain(c)) {
|
|
6428
6431
|
lenders.push(l);
|
|
6429
6432
|
}
|
|
@@ -6454,7 +6457,7 @@ var filterLendersByProtocol = (allLenders, protocolList) => {
|
|
|
6454
6457
|
(b) => protocolList.includes(b)
|
|
6455
6458
|
);
|
|
6456
6459
|
return allLenders.filter(
|
|
6457
|
-
(lender) => protocolList.includes(lender) || hasMorpho && lender?.startsWith("MORPHO_BLUE") || hasMoolah && lender?.startsWith("LISTA_DAO") || hasFluid && lender?.startsWith("FLUID") || hasGearboxV3 && lender?.startsWith("GEARBOX_V3") || hasDolomite && lender?.startsWith("DOLOMITE") || liquityBases.some((b) => lender?.startsWith(b)) || protocolList.includes(Lender.RIVER) && lender?.startsWith("RIVER") || protocolList.includes(Lender.TELLER) && lender?.startsWith("TELLER") || protocolList.includes(Lender.USDD) && lender?.startsWith("USDD") || protocolList.includes(Lender.FRANKENCOIN) && lender?.startsWith("FRANKENCOIN")
|
|
6460
|
+
(lender) => protocolList.includes(lender) || hasMorpho && lender?.startsWith("MORPHO_BLUE") || hasMoolah && lender?.startsWith("LISTA_DAO") || hasFluid && lender?.startsWith("FLUID") || hasGearboxV3 && lender?.startsWith("GEARBOX_V3") || hasDolomite && lender?.startsWith("DOLOMITE") || liquityBases.some((b) => lender?.startsWith(b)) || protocolList.includes(Lender.RIVER) && lender?.startsWith("RIVER") || protocolList.includes(Lender.TELLER) && lender?.startsWith("TELLER") || protocolList.includes(Lender.USDD) && lender?.startsWith("USDD") || protocolList.includes(Lender.SKY) && lender?.startsWith("SKY") || protocolList.includes(Lender.FRANKENCOIN) && lender?.startsWith("FRANKENCOIN")
|
|
6458
6461
|
);
|
|
6459
6462
|
};
|
|
6460
6463
|
var getAavesForChain = () => {
|
|
@@ -21885,7 +21888,7 @@ async function fetchTellerMarkets(chainId) {
|
|
|
21885
21888
|
} catch {
|
|
21886
21889
|
return { chainId, pools: [] };
|
|
21887
21890
|
}
|
|
21888
|
-
const
|
|
21891
|
+
const big16 = (i) => {
|
|
21889
21892
|
const r = results[i];
|
|
21890
21893
|
if (typeof r === "bigint") return r;
|
|
21891
21894
|
if (typeof r === "number") return BigInt(r);
|
|
@@ -21899,20 +21902,20 @@ async function fetchTellerMarkets(chainId) {
|
|
|
21899
21902
|
return null;
|
|
21900
21903
|
};
|
|
21901
21904
|
const num12 = (i) => {
|
|
21902
|
-
const b =
|
|
21905
|
+
const b = big16(i);
|
|
21903
21906
|
return b === null ? null : Number(b);
|
|
21904
21907
|
};
|
|
21905
21908
|
const pool0 = pools.map((config, i) => {
|
|
21906
21909
|
const base = i * READS_PER_POOL;
|
|
21907
21910
|
return {
|
|
21908
21911
|
config,
|
|
21909
|
-
available:
|
|
21910
|
-
committed:
|
|
21912
|
+
available: big16(base),
|
|
21913
|
+
committed: big16(base + 1),
|
|
21911
21914
|
minRateBps: num12(base + 2),
|
|
21912
|
-
collateralPerPrincipal:
|
|
21915
|
+
collateralPerPrincipal: big16(base + 3),
|
|
21913
21916
|
maxLoanDuration: num12(base + 4),
|
|
21914
|
-
marketId:
|
|
21915
|
-
totalAssets:
|
|
21917
|
+
marketId: big16(base + 5),
|
|
21918
|
+
totalAssets: big16(base + 6)
|
|
21916
21919
|
};
|
|
21917
21920
|
});
|
|
21918
21921
|
const attByMarket = /* @__PURE__ */ new Map();
|
|
@@ -24352,6 +24355,23 @@ function convertLlamaLendMarketsToResponse(raw, chainId, prices = {}, additional
|
|
|
24352
24355
|
// --- LlamaLend descriptor (consumed by the calldata builders,
|
|
24353
24356
|
// the leverage sizer and worker-api resolvers) ---
|
|
24354
24357
|
llamalend: {
|
|
24358
|
+
/**
|
|
24359
|
+
* The market's LLAMMA, and the ONLY readable oracle for it:
|
|
24360
|
+
* `price_oracle()` lives here, quoted in the BORROWED token.
|
|
24361
|
+
*
|
|
24362
|
+
* Carried on the descriptor — not only under `addresses` — because
|
|
24363
|
+
* this object is what consumers persist verbatim (yield-tracer
|
|
24364
|
+
* serialises it into the `llamalend` column of the shared isolated-
|
|
24365
|
+
* market table) and the oracle-price path resolves the AMM from it.
|
|
24366
|
+
* Omitting it does not fail loudly: the reader finds `undefined`,
|
|
24367
|
+
* skips the market, and the lender ends up with NO prices at all
|
|
24368
|
+
* while every row still looks present and correct.
|
|
24369
|
+
*
|
|
24370
|
+
* Do not "clean this up" as a duplicate of `addresses.amm` — the two
|
|
24371
|
+
* are read by different consumers, and only this one survives into
|
|
24372
|
+
* the descriptor column.
|
|
24373
|
+
*/
|
|
24374
|
+
amm: market.amm,
|
|
24355
24375
|
/** 1 = `oneway` (v1), 2 = `oneway-v2`. Branch every encoder on this. */
|
|
24356
24376
|
version: market.version,
|
|
24357
24377
|
/** FAIL CLOSED — an unknown market is not delegatable. */
|
|
@@ -25002,72 +25022,90 @@ function resolvePositionManagers(cfg, marketManager) {
|
|
|
25002
25022
|
}
|
|
25003
25023
|
return void 0;
|
|
25004
25024
|
}
|
|
25005
|
-
var
|
|
25006
|
-
var
|
|
25007
|
-
var
|
|
25008
|
-
async function
|
|
25009
|
-
const config =
|
|
25010
|
-
const chainData =
|
|
25025
|
+
var CORE_READS_PER_ILK = 3;
|
|
25026
|
+
var DSS_CORE_ABI_PER_READ = [UsddVatAbi, UsddJugAbi, UsddSpotAbi];
|
|
25027
|
+
var dssIlkBytes32 = (ilk) => stringToHex(ilk, { size: 32 });
|
|
25028
|
+
async function fetchDssMarkets(lender, chainId) {
|
|
25029
|
+
const config = dssConfigFor(lender, chainId);
|
|
25030
|
+
const chainData = dssChainData(lender, chainId);
|
|
25011
25031
|
const markets = chainData?.markets ?? [];
|
|
25012
25032
|
if (!config || markets.length === 0) {
|
|
25013
25033
|
return { lender, config, chainData, markets: [] };
|
|
25014
25034
|
}
|
|
25015
|
-
const calls =
|
|
25016
|
-
|
|
25017
|
-
|
|
25035
|
+
const calls = [];
|
|
25036
|
+
const abi = [];
|
|
25037
|
+
const joinReadIndex = [];
|
|
25038
|
+
for (const m of markets) {
|
|
25039
|
+
const ilk32 = dssIlkBytes32(m.ilk);
|
|
25040
|
+
calls.push(
|
|
25018
25041
|
{ address: config.vat, name: "ilks", params: [ilk32] },
|
|
25019
25042
|
{ address: config.jug, name: "ilks", params: [ilk32] },
|
|
25020
|
-
{ address: config.spot, name: "ilks", params: [ilk32] }
|
|
25021
|
-
|
|
25022
|
-
|
|
25023
|
-
|
|
25043
|
+
{ address: config.spot, name: "ilks", params: [ilk32] }
|
|
25044
|
+
);
|
|
25045
|
+
abi.push(...DSS_CORE_ABI_PER_READ);
|
|
25046
|
+
if (isAddress(m.gemJoin ?? "", { strict: false })) {
|
|
25047
|
+
joinReadIndex.push(calls.length);
|
|
25048
|
+
calls.push({
|
|
25049
|
+
address: m.collToken,
|
|
25050
|
+
name: "balanceOf",
|
|
25051
|
+
params: [m.gemJoin]
|
|
25052
|
+
});
|
|
25053
|
+
abi.push(erc20Abi);
|
|
25054
|
+
} else {
|
|
25055
|
+
joinReadIndex.push(-1);
|
|
25056
|
+
}
|
|
25057
|
+
}
|
|
25024
25058
|
let results = [];
|
|
25025
25059
|
try {
|
|
25026
25060
|
results = await multicallRetryUniversal({
|
|
25027
25061
|
chain: chainId,
|
|
25028
25062
|
calls,
|
|
25029
|
-
abi
|
|
25063
|
+
abi,
|
|
25030
25064
|
allowFailure: true
|
|
25031
25065
|
});
|
|
25032
25066
|
} catch {
|
|
25033
25067
|
return { lender, config, chainData, markets: [] };
|
|
25034
25068
|
}
|
|
25035
|
-
const
|
|
25069
|
+
const big16 = (v) => {
|
|
25036
25070
|
if (typeof v === "bigint") return v;
|
|
25037
25071
|
if (typeof v === "number") return BigInt(v);
|
|
25038
25072
|
return null;
|
|
25039
25073
|
};
|
|
25040
|
-
const
|
|
25074
|
+
const field13 = (res, name, idx) => big16(res?.[name] ?? res?.[idx]);
|
|
25075
|
+
let cursor = 0;
|
|
25041
25076
|
const out = markets.map((market, i) => {
|
|
25042
|
-
const base =
|
|
25077
|
+
const base = cursor;
|
|
25078
|
+
cursor += CORE_READS_PER_ILK + (joinReadIndex[i] >= 0 ? 1 : 0);
|
|
25043
25079
|
const vatIlk = results[base];
|
|
25044
25080
|
const jugIlk = results[base + 1];
|
|
25045
25081
|
const spotIlk = results[base + 2];
|
|
25046
25082
|
return {
|
|
25047
25083
|
market,
|
|
25048
|
-
Art:
|
|
25049
|
-
rate:
|
|
25050
|
-
spot:
|
|
25051
|
-
line:
|
|
25052
|
-
dust:
|
|
25053
|
-
duty:
|
|
25054
|
-
mat:
|
|
25055
|
-
joinBalance:
|
|
25084
|
+
Art: field13(vatIlk, "Art", 0),
|
|
25085
|
+
rate: field13(vatIlk, "rate", 1),
|
|
25086
|
+
spot: field13(vatIlk, "spot", 2),
|
|
25087
|
+
line: field13(vatIlk, "line", 3),
|
|
25088
|
+
dust: field13(vatIlk, "dust", 4),
|
|
25089
|
+
duty: field13(jugIlk, "duty", 0),
|
|
25090
|
+
mat: field13(spotIlk, "mat", 1),
|
|
25091
|
+
joinBalance: joinReadIndex[i] >= 0 ? big16(results[joinReadIndex[i]]) : null
|
|
25056
25092
|
};
|
|
25057
25093
|
});
|
|
25058
25094
|
return { lender, config, chainData, markets: out };
|
|
25059
25095
|
}
|
|
25060
|
-
|
|
25061
|
-
|
|
25062
|
-
function
|
|
25096
|
+
var fetchUsddMarkets = fetchDssMarkets;
|
|
25097
|
+
var usddIlkBytes32 = dssIlkBytes32;
|
|
25098
|
+
function dssLenderKey(lender, chainId, ilk) {
|
|
25063
25099
|
return `${lender}_${chainId}_${ilk}`;
|
|
25064
25100
|
}
|
|
25065
|
-
|
|
25066
|
-
|
|
25067
|
-
|
|
25068
|
-
|
|
25101
|
+
var DSS_KEY_PREFIXES = ["USDD", "SKY"];
|
|
25102
|
+
var DSS_KEY_RE = new RegExp(
|
|
25103
|
+
`^(${DSS_KEY_PREFIXES.join("|")})_(\\d+)_([A-Z0-9][A-Z0-9-]*)$`
|
|
25104
|
+
);
|
|
25105
|
+
function dssKeyParts(key2) {
|
|
25106
|
+
const m = key2.match(DSS_KEY_RE);
|
|
25069
25107
|
if (!m) return void 0;
|
|
25070
|
-
return { lender:
|
|
25108
|
+
return { lender: m[1], chainId: m[2], ilk: m[3] };
|
|
25071
25109
|
}
|
|
25072
25110
|
var WAD9 = 1e18;
|
|
25073
25111
|
var RAY4 = 1e27;
|
|
@@ -25080,7 +25118,7 @@ function currencyFor12(address, decimals, symbol, tokens) {
|
|
|
25080
25118
|
const lower3 = address.toLowerCase();
|
|
25081
25119
|
return tokens[lower3] ?? { address: lower3, symbol, name: symbol, decimals };
|
|
25082
25120
|
}
|
|
25083
|
-
function
|
|
25121
|
+
function convertDssMarketsToResponse(raw, chainId, prices = {}, _additionalYields = {
|
|
25084
25122
|
intrinsicYields: {},
|
|
25085
25123
|
lenderRewards: {},
|
|
25086
25124
|
loaded: true
|
|
@@ -25089,15 +25127,18 @@ function convertUsddMarketsToResponse(raw, chainId, prices = {}, _additionalYiel
|
|
|
25089
25127
|
const cfg = raw?.config;
|
|
25090
25128
|
const chainData = raw?.chainData;
|
|
25091
25129
|
if (!cfg || !chainData) return out;
|
|
25092
|
-
const
|
|
25130
|
+
const rawDebtAddr = dssDebtToken(cfg);
|
|
25131
|
+
if (!rawDebtAddr) return out;
|
|
25132
|
+
const debtAddr = rawDebtAddr.toLowerCase();
|
|
25133
|
+
const debtJoin = dssDebtJoin(cfg);
|
|
25093
25134
|
const debtDecimals = cfg.debtDecimals ?? 18;
|
|
25094
25135
|
const debtToken = tokens[debtAddr];
|
|
25095
|
-
const debtSymbol = debtToken?.symbol ?? "USDD";
|
|
25136
|
+
const debtSymbol = debtToken?.symbol ?? cfg.debtSymbol ?? "USDD";
|
|
25096
25137
|
const debtPriceKey = toOracleKey(debtToken?.assetGroup) || toGenericPriceKey(debtAddr, chainId);
|
|
25097
25138
|
const debtPrice = prices[debtPriceKey] || 1;
|
|
25098
25139
|
for (const m of raw.markets ?? []) {
|
|
25099
25140
|
const market = m.market;
|
|
25100
|
-
const lenderKey =
|
|
25141
|
+
const lenderKey = dssLenderKey(raw.lender, chainId, market.ilk);
|
|
25101
25142
|
const collAddr = market.collToken.toLowerCase();
|
|
25102
25143
|
const collDecimals = market.collDecimals;
|
|
25103
25144
|
const collToken = tokens[collAddr];
|
|
@@ -25116,13 +25157,14 @@ function convertUsddMarketsToResponse(raw, chainId, prices = {}, _additionalYiel
|
|
|
25116
25157
|
const borrowApr = duty > BigInt(1e27) ? Number(duty - BigInt(10) ** BigInt(27)) / RAY4 * YEAR_SECONDS2 * 100 : 0;
|
|
25117
25158
|
const line = m.line !== null ? Number(m.line) / RAD : 0;
|
|
25118
25159
|
let borrowLiquidity = Math.max(0, line - totalDebt);
|
|
25119
|
-
const
|
|
25160
|
+
const offboarded = market.offboarded === true;
|
|
25161
|
+
const halted = line === 0 || offboarded;
|
|
25120
25162
|
const entry = { data: {} };
|
|
25121
25163
|
const collUid = createMarketUid(chainId, lenderKey, collAddr);
|
|
25122
25164
|
entry.data[collUid] = {
|
|
25123
25165
|
marketUid: collUid,
|
|
25124
25166
|
name: "Collateral " + collSymbol,
|
|
25125
|
-
poolId: market.gemJoin
|
|
25167
|
+
poolId: market.gemJoin?.toLowerCase(),
|
|
25126
25168
|
underlying: collAddr,
|
|
25127
25169
|
asset: currencyFor12(collAddr, collDecimals, collSymbol, tokens),
|
|
25128
25170
|
totalDeposits: totalColl,
|
|
@@ -25180,7 +25222,8 @@ function convertUsddMarketsToResponse(raw, chainId, prices = {}, _additionalYiel
|
|
|
25180
25222
|
totalDebtStableUSD: 0,
|
|
25181
25223
|
totalDebtUSD: totalDebt * debtPrice,
|
|
25182
25224
|
utilization: 0,
|
|
25183
|
-
// The earn side is
|
|
25225
|
+
// The earn side is the savings token (savings provider), not a lending
|
|
25226
|
+
// deposit.
|
|
25184
25227
|
depositRate: 0,
|
|
25185
25228
|
variableBorrowRate: borrowApr,
|
|
25186
25229
|
stableBorrowRate: 0,
|
|
@@ -25210,6 +25253,38 @@ function convertUsddMarketsToResponse(raw, chainId, prices = {}, _additionalYiel
|
|
|
25210
25253
|
isActive: !halted,
|
|
25211
25254
|
isFrozen: halted
|
|
25212
25255
|
};
|
|
25256
|
+
const descriptor = {
|
|
25257
|
+
ilk: market.ilk,
|
|
25258
|
+
/** Per-second stability fee (ray string) — live, metadata fallback. */
|
|
25259
|
+
duty: duty.toString(),
|
|
25260
|
+
/** Liquidation ratio (ray string). */
|
|
25261
|
+
mat: m.mat !== null ? m.mat.toString() : market.mat,
|
|
25262
|
+
/** Liquidation penalty multiplier (wad string, Dog.chop). */
|
|
25263
|
+
chop: market.chop,
|
|
25264
|
+
/** Ilk debt ceiling / per-CDP floor (rad strings). */
|
|
25265
|
+
line: m.line !== null ? m.line.toString() : market.line,
|
|
25266
|
+
dust: m.dust !== null ? m.dust.toString() : market.dust,
|
|
25267
|
+
/** Debt accumulator (ray string) — art × rate = debt. */
|
|
25268
|
+
rate: m.rate !== null ? m.rate.toString() : void 0,
|
|
25269
|
+
/** Governance has retired the ilk: no new debt, exits only. */
|
|
25270
|
+
offboarded,
|
|
25271
|
+
addresses: {
|
|
25272
|
+
vat: cfg.vat,
|
|
25273
|
+
jug: cfg.jug,
|
|
25274
|
+
spot: cfg.spot,
|
|
25275
|
+
dog: cfg.dog,
|
|
25276
|
+
cdpManager: cfg.cdpManager,
|
|
25277
|
+
proxyActions: cfg.proxyActions,
|
|
25278
|
+
proxyRegistry: cfg.proxyRegistry,
|
|
25279
|
+
/** DaiJoin-equivalent — the debt enter/exit adapter. */
|
|
25280
|
+
debtJoin,
|
|
25281
|
+
/** @deprecated brand-specific alias of `debtJoin`. */
|
|
25282
|
+
usddJoin: debtJoin,
|
|
25283
|
+
gemJoin: market.gemJoin,
|
|
25284
|
+
clip: market.clip,
|
|
25285
|
+
pip: market.pip
|
|
25286
|
+
}
|
|
25287
|
+
};
|
|
25213
25288
|
entry.params = {
|
|
25214
25289
|
market: {
|
|
25215
25290
|
lender: lenderKey,
|
|
@@ -25218,41 +25293,16 @@ function convertUsddMarketsToResponse(raw, chainId, prices = {}, _additionalYiel
|
|
|
25218
25293
|
collateralDecimals: collDecimals,
|
|
25219
25294
|
// The gem join doubles as the market id (marketUid address) — one
|
|
25220
25295
|
// adapter per ilk, like River's TroveManager.
|
|
25221
|
-
id: market.gemJoin
|
|
25296
|
+
id: market.gemJoin?.toLowerCase(),
|
|
25222
25297
|
lltv: m.mat !== null ? m.mat.toString() : market.mat,
|
|
25223
25298
|
oracle: market.pip ?? zeroAddress,
|
|
25224
25299
|
irm: zeroAddress,
|
|
25225
25300
|
collateralAddress: collAddr,
|
|
25226
25301
|
loanAddress: debtAddr,
|
|
25227
|
-
|
|
25228
|
-
//
|
|
25229
|
-
usdd
|
|
25230
|
-
|
|
25231
|
-
/** Per-second stability fee (ray string) — live, metadata fallback. */
|
|
25232
|
-
duty: duty.toString(),
|
|
25233
|
-
/** Liquidation ratio (ray string). */
|
|
25234
|
-
mat: m.mat !== null ? m.mat.toString() : market.mat,
|
|
25235
|
-
/** Liquidation penalty multiplier (wad string, Dog.chop). */
|
|
25236
|
-
chop: market.chop,
|
|
25237
|
-
/** Ilk debt ceiling / per-CDP floor (rad strings). */
|
|
25238
|
-
line: m.line !== null ? m.line.toString() : market.line,
|
|
25239
|
-
dust: m.dust !== null ? m.dust.toString() : market.dust,
|
|
25240
|
-
/** Debt accumulator (ray string) — art × rate = debt. */
|
|
25241
|
-
rate: m.rate !== null ? m.rate.toString() : void 0,
|
|
25242
|
-
addresses: {
|
|
25243
|
-
vat: cfg.vat,
|
|
25244
|
-
jug: cfg.jug,
|
|
25245
|
-
spot: cfg.spot,
|
|
25246
|
-
dog: cfg.dog,
|
|
25247
|
-
cdpManager: cfg.cdpManager,
|
|
25248
|
-
proxyActions: cfg.proxyActions,
|
|
25249
|
-
proxyRegistry: cfg.proxyRegistry,
|
|
25250
|
-
usddJoin: cfg.usddJoin,
|
|
25251
|
-
gemJoin: market.gemJoin,
|
|
25252
|
-
clip: market.clip,
|
|
25253
|
-
pip: market.pip
|
|
25254
|
-
}
|
|
25255
|
-
}
|
|
25302
|
+
dss: descriptor,
|
|
25303
|
+
// Back-compat duplicate: worker-api + the term-sheet input list read
|
|
25304
|
+
// `market.usdd`. Same object, so the two can never drift.
|
|
25305
|
+
usdd: descriptor
|
|
25256
25306
|
}
|
|
25257
25307
|
};
|
|
25258
25308
|
entry.chainId = chainId;
|
|
@@ -25260,6 +25310,9 @@ function convertUsddMarketsToResponse(raw, chainId, prices = {}, _additionalYiel
|
|
|
25260
25310
|
}
|
|
25261
25311
|
return out;
|
|
25262
25312
|
}
|
|
25313
|
+
var convertUsddMarketsToResponse = convertDssMarketsToResponse;
|
|
25314
|
+
var usddLenderKey = dssLenderKey;
|
|
25315
|
+
var usddKeyParts = dssKeyParts;
|
|
25263
25316
|
var READS_PER_MARKET3 = 10;
|
|
25264
25317
|
var FRANKENCOIN_ABI_PER_READ = [
|
|
25265
25318
|
FrankencoinPositionAbi,
|
|
@@ -25307,26 +25360,26 @@ async function fetchFrankencoinMarkets(lender, chainId) {
|
|
|
25307
25360
|
} catch {
|
|
25308
25361
|
return { lender, config, chainData, markets: [] };
|
|
25309
25362
|
}
|
|
25310
|
-
const
|
|
25363
|
+
const big16 = (v) => {
|
|
25311
25364
|
if (typeof v === "bigint") return v;
|
|
25312
25365
|
if (typeof v === "number") return BigInt(v);
|
|
25313
25366
|
return null;
|
|
25314
25367
|
};
|
|
25315
25368
|
const out = markets.map((market, i) => {
|
|
25316
25369
|
const base = i * READS_PER_MARKET3;
|
|
25317
|
-
const expiration =
|
|
25370
|
+
const expiration = big16(results[base + 7]);
|
|
25318
25371
|
return {
|
|
25319
25372
|
market,
|
|
25320
|
-
price:
|
|
25321
|
-
minted:
|
|
25322
|
-
availableForClones:
|
|
25323
|
-
annualInterestPPM:
|
|
25324
|
-
currentFeePPM:
|
|
25325
|
-
reserveContribution:
|
|
25326
|
-
challengedAmount:
|
|
25373
|
+
price: big16(results[base]),
|
|
25374
|
+
minted: big16(results[base + 1]),
|
|
25375
|
+
availableForClones: big16(results[base + 2]),
|
|
25376
|
+
annualInterestPPM: big16(results[base + 3]),
|
|
25377
|
+
currentFeePPM: big16(results[base + 4]),
|
|
25378
|
+
reserveContribution: big16(results[base + 5]),
|
|
25379
|
+
challengedAmount: big16(results[base + 6]),
|
|
25327
25380
|
expiration,
|
|
25328
25381
|
isClosed: typeof results[base + 8] === "boolean" ? results[base + 8] : null,
|
|
25329
|
-
collateralBalance:
|
|
25382
|
+
collateralBalance: big16(results[base + 9])
|
|
25330
25383
|
};
|
|
25331
25384
|
});
|
|
25332
25385
|
return { lender, config, chainData, markets: out };
|
|
@@ -26171,7 +26224,7 @@ async function getLenderDataFromApi(lender, chainId, prices, additionalYields, i
|
|
|
26171
26224
|
if (isResupply(lender)) return await fetchResupplyMarkets(lender, chainId);
|
|
26172
26225
|
if (isCurvance(lender)) return await fetchCurvanceMarkets(lender, chainId);
|
|
26173
26226
|
if (isTermMax(lender)) return await fetchTermMaxMarkets(chainId);
|
|
26174
|
-
if (
|
|
26227
|
+
if (isDssType(lender)) return await fetchDssMarkets(lender, chainId);
|
|
26175
26228
|
if (isFrankencoin(lender))
|
|
26176
26229
|
return await fetchFrankencoinMarkets(lender, chainId);
|
|
26177
26230
|
return {};
|
|
@@ -26267,8 +26320,8 @@ function convertLenderDataFromApi(lender, chainId, data, prices, additionalYield
|
|
|
26267
26320
|
additionalYields,
|
|
26268
26321
|
list
|
|
26269
26322
|
);
|
|
26270
|
-
if (
|
|
26271
|
-
return
|
|
26323
|
+
if (isDssType(lender))
|
|
26324
|
+
return convertDssMarketsToResponse(
|
|
26272
26325
|
data,
|
|
26273
26326
|
chainId,
|
|
26274
26327
|
prices,
|
|
@@ -26486,7 +26539,7 @@ function lenderApiOnly(lender, chainId) {
|
|
|
26486
26539
|
if (isTermMax(lender)) return true;
|
|
26487
26540
|
if (isResupply(lender)) return true;
|
|
26488
26541
|
if (isCurvance(lender)) return true;
|
|
26489
|
-
if (
|
|
26542
|
+
if (isDssType(lender)) return true;
|
|
26490
26543
|
if (isFrankencoin(lender)) return true;
|
|
26491
26544
|
if (isLlamaLend(lender)) return true;
|
|
26492
26545
|
return false;
|
|
@@ -28166,13 +28219,13 @@ var buildCurvanceUserCall = async (chainId, lender, account) => {
|
|
|
28166
28219
|
])
|
|
28167
28220
|
]);
|
|
28168
28221
|
};
|
|
28169
|
-
var
|
|
28222
|
+
var DSS_CALLS_PER_CDP = 1;
|
|
28170
28223
|
var MAX_CDP_WALK = 64;
|
|
28171
28224
|
var CACHE_TTL_MS2 = 5 * 6e4;
|
|
28172
28225
|
var discoveryCache4 = /* @__PURE__ */ new Map();
|
|
28173
|
-
var cacheKey2 = (chainId, account) => `${chainId}:${account.toLowerCase()}`;
|
|
28174
|
-
var
|
|
28175
|
-
const hit = discoveryCache4.get(cacheKey2(chainId, account));
|
|
28226
|
+
var cacheKey2 = (lender, chainId, account) => `${lender}:${chainId}:${account.toLowerCase()}`;
|
|
28227
|
+
var getCachedDssCdps = (lender, chainId, account) => {
|
|
28228
|
+
const hit = discoveryCache4.get(cacheKey2(lender, chainId, account));
|
|
28176
28229
|
if (!hit || Date.now() - hit.at > CACHE_TTL_MS2) return void 0;
|
|
28177
28230
|
return hit;
|
|
28178
28231
|
};
|
|
@@ -28185,10 +28238,10 @@ var big3 = (v) => {
|
|
|
28185
28238
|
return 0n;
|
|
28186
28239
|
};
|
|
28187
28240
|
var field6 = (res, name, idx) => res?.[name] ?? res?.[idx];
|
|
28188
|
-
var
|
|
28189
|
-
const cfg =
|
|
28190
|
-
const markets =
|
|
28191
|
-
const stash = (d) => discoveryCache4.set(cacheKey2(chainId, account), d);
|
|
28241
|
+
var buildDssUserCall = async (chainId, lender, account) => {
|
|
28242
|
+
const cfg = dssConfigFor(lender, chainId);
|
|
28243
|
+
const markets = dssChainData(lender, chainId)?.markets ?? [];
|
|
28244
|
+
const stash = (d) => discoveryCache4.set(cacheKey2(lender, chainId, account), d);
|
|
28192
28245
|
if (!cfg || markets.length === 0) {
|
|
28193
28246
|
stash({ cdps: [], ilks: [], at: Date.now() });
|
|
28194
28247
|
return [];
|
|
@@ -28238,7 +28291,7 @@ var buildUsddUserCall = async (chainId, lender, account) => {
|
|
|
28238
28291
|
);
|
|
28239
28292
|
if (head.count > BigInt(MAX_CDP_WALK)) {
|
|
28240
28293
|
console.warn(
|
|
28241
|
-
|
|
28294
|
+
`${lender}: owner ${head.owner} holds ${head.count} CDPs on chain ${chainId} \u2014 truncating discovery at ${MAX_CDP_WALK}`
|
|
28242
28295
|
);
|
|
28243
28296
|
}
|
|
28244
28297
|
for (let i = 0; i < steps && cursor !== 0n; i++) {
|
|
@@ -28272,13 +28325,13 @@ var buildUsddUserCall = async (chainId, lender, account) => {
|
|
|
28272
28325
|
const calls = cdps.map((c) => ({
|
|
28273
28326
|
address: cfg.vat,
|
|
28274
28327
|
name: "urns",
|
|
28275
|
-
params: [
|
|
28328
|
+
params: [dssIlkBytes32(c.ilk), c.urn]
|
|
28276
28329
|
}));
|
|
28277
28330
|
for (const ilk of ilks) {
|
|
28278
28331
|
calls.push({
|
|
28279
28332
|
address: cfg.vat,
|
|
28280
28333
|
name: "ilks",
|
|
28281
|
-
params: [
|
|
28334
|
+
params: [dssIlkBytes32(ilk)]
|
|
28282
28335
|
});
|
|
28283
28336
|
}
|
|
28284
28337
|
return calls;
|
|
@@ -28513,7 +28566,7 @@ async function buildUserCall(chainId, lender, account, params, getClient) {
|
|
|
28513
28566
|
return buildLlamaLendUserCall(chainId, lender, account);
|
|
28514
28567
|
if (isResupply(lender)) return buildResupplyUserCall(chainId, lender, account);
|
|
28515
28568
|
if (isCurvance(lender)) return buildCurvanceUserCall(chainId, lender, account);
|
|
28516
|
-
if (
|
|
28569
|
+
if (isDssType(lender)) return buildDssUserCall(chainId, lender, account);
|
|
28517
28570
|
if (isFrankencoin(lender))
|
|
28518
28571
|
return buildFrankencoinUserCall(chainId, lender, account);
|
|
28519
28572
|
if (isCompoundV3Type(lender))
|
|
@@ -28552,12 +28605,13 @@ function organizeUserQueries(queries) {
|
|
|
28552
28605
|
const teller = queries.filter((q) => isTeller(q.lender));
|
|
28553
28606
|
const termMax = queries.filter((q) => isTermMax(q.lender));
|
|
28554
28607
|
const usdd = queries.filter((q) => isUsdd(q.lender));
|
|
28608
|
+
const sky = queries.filter((q) => isSky(q.lender));
|
|
28555
28609
|
const llamaLend = queries.filter((q) => isLlamaLend(q.lender));
|
|
28556
28610
|
const frankencoin = queries.filter((q) => isFrankencoin(q.lender));
|
|
28557
|
-
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 && frankencoin.length === 0 && llamaLend.length === 0)
|
|
28611
|
+
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)
|
|
28558
28612
|
return queries;
|
|
28559
28613
|
const others = queries.filter(
|
|
28560
|
-
(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) && !
|
|
28614
|
+
(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)
|
|
28561
28615
|
);
|
|
28562
28616
|
const morphoBlue = morphos.filter((q) => q.lender.startsWith("MORPHO_BLUE"));
|
|
28563
28617
|
const moolah = morphos.filter((q) => q.lender.startsWith("LISTA_DAO"));
|
|
@@ -28634,6 +28688,14 @@ function organizeUserQueries(queries) {
|
|
|
28634
28688
|
assets: void 0
|
|
28635
28689
|
});
|
|
28636
28690
|
}
|
|
28691
|
+
if (sky.length > 0) {
|
|
28692
|
+
result.push({
|
|
28693
|
+
lender: Lender.SKY,
|
|
28694
|
+
account: sky[0].account,
|
|
28695
|
+
params: sky.map((p) => p.lender),
|
|
28696
|
+
assets: void 0
|
|
28697
|
+
});
|
|
28698
|
+
}
|
|
28637
28699
|
if (llamaLend.length > 0) {
|
|
28638
28700
|
result.push({
|
|
28639
28701
|
lender: Lender.LLAMALEND,
|
|
@@ -32173,27 +32235,29 @@ var big10 = (v) => {
|
|
|
32173
32235
|
return 0n;
|
|
32174
32236
|
};
|
|
32175
32237
|
var field9 = (res, name, idx) => big10(res?.[name] ?? res?.[idx]);
|
|
32176
|
-
var
|
|
32177
|
-
const cfg =
|
|
32178
|
-
const markets =
|
|
32179
|
-
const discovery =
|
|
32238
|
+
var getDssUserDataConverter = (lender, chainId, account, meta) => {
|
|
32239
|
+
const cfg = dssConfigFor(lender, chainId);
|
|
32240
|
+
const markets = dssChainData(lender, chainId)?.markets ?? [];
|
|
32241
|
+
const discovery = getCachedDssCdps(lender, chainId, account);
|
|
32180
32242
|
const cdps = discovery?.cdps ?? [];
|
|
32181
32243
|
const ilks = discovery?.ilks ?? [];
|
|
32182
|
-
const expected = cfg && markets.length > 0 && cdps.length > 0 ? cdps.length *
|
|
32244
|
+
const expected = cfg && markets.length > 0 && cdps.length > 0 ? cdps.length * DSS_CALLS_PER_CDP + ilks.length : 0;
|
|
32183
32245
|
return [
|
|
32184
32246
|
(data) => {
|
|
32185
32247
|
if (!cfg || expected === 0) return void 0;
|
|
32186
32248
|
if (!data || data.length < expected) return void 0;
|
|
32187
|
-
const
|
|
32249
|
+
const rawDebtAddr = dssDebtToken(cfg);
|
|
32250
|
+
if (!rawDebtAddr) return void 0;
|
|
32251
|
+
const debtAddr = rawDebtAddr.toLowerCase();
|
|
32188
32252
|
const debtDecimals = cfg.debtDecimals ?? 18;
|
|
32189
32253
|
const rateByIlk = /* @__PURE__ */ new Map();
|
|
32190
32254
|
ilks.forEach((ilk, i) => {
|
|
32191
|
-
const res = data[cdps.length *
|
|
32255
|
+
const res = data[cdps.length * DSS_CALLS_PER_CDP + i];
|
|
32192
32256
|
if (!isFailedCall(res)) rateByIlk.set(ilk, field9(res, "rate", 1));
|
|
32193
32257
|
});
|
|
32194
32258
|
const perMarket = /* @__PURE__ */ new Map();
|
|
32195
32259
|
cdps.forEach((cdp, i) => {
|
|
32196
|
-
const res = data[i *
|
|
32260
|
+
const res = data[i * DSS_CALLS_PER_CDP];
|
|
32197
32261
|
if (isFailedCall(res)) return;
|
|
32198
32262
|
const ink = field9(res, "ink", 0);
|
|
32199
32263
|
const art = field9(res, "art", 1);
|
|
@@ -32202,7 +32266,7 @@ var getUsddUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
32202
32266
|
if (ink === 0n && debt === 0n) return;
|
|
32203
32267
|
const market = markets.find((m) => m.ilk === cdp.ilk);
|
|
32204
32268
|
if (!market) return;
|
|
32205
|
-
const key2 =
|
|
32269
|
+
const key2 = dssLenderKey(lender, chainId, cdp.ilk);
|
|
32206
32270
|
if (!perMarket.has(key2)) perMarket.set(key2, { market, positions: [] });
|
|
32207
32271
|
perMarket.get(key2).positions.push({ cdp, ink, debt });
|
|
32208
32272
|
});
|
|
@@ -32230,7 +32294,7 @@ var getUsddUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
32230
32294
|
const collNum = Number(collStr);
|
|
32231
32295
|
const debtStr = parseRawAmount(debt.toString(), debtDecimals);
|
|
32232
32296
|
const debtNum = Number(debtStr);
|
|
32233
|
-
const
|
|
32297
|
+
const dssInfo = { ...cdp };
|
|
32234
32298
|
lendingPositions[cdp.cdpId] = {
|
|
32235
32299
|
[collUid]: {
|
|
32236
32300
|
marketUid: collUid,
|
|
@@ -32263,7 +32327,7 @@ var getUsddUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
32263
32327
|
stableBorrowRate: "0",
|
|
32264
32328
|
collateralEnabled: false,
|
|
32265
32329
|
claimableRewards: 0,
|
|
32266
|
-
|
|
32330
|
+
dssInfo
|
|
32267
32331
|
}
|
|
32268
32332
|
};
|
|
32269
32333
|
modes[cdp.cdpId] = 0;
|
|
@@ -32751,21 +32815,21 @@ function checkSubAccount(entry) {
|
|
|
32751
32815
|
const accountId = entry?.accountId ?? "0";
|
|
32752
32816
|
const balance = entry?.balanceData;
|
|
32753
32817
|
const apr = entry?.aprData;
|
|
32754
|
-
for (const
|
|
32755
|
-
if (isBadNumber(balance?.[
|
|
32818
|
+
for (const field13 of BALANCE_FIELDS) {
|
|
32819
|
+
if (isBadNumber(balance?.[field13]))
|
|
32756
32820
|
violations.push({
|
|
32757
32821
|
accountId,
|
|
32758
32822
|
code: "non-finite",
|
|
32759
|
-
detail: `balanceData.${
|
|
32823
|
+
detail: `balanceData.${field13} = ${balance[field13]}`,
|
|
32760
32824
|
requiresFailedReads: false
|
|
32761
32825
|
});
|
|
32762
32826
|
}
|
|
32763
|
-
for (const
|
|
32764
|
-
if (isBadNumber(apr?.[
|
|
32827
|
+
for (const field13 of APR_FIELDS) {
|
|
32828
|
+
if (isBadNumber(apr?.[field13]))
|
|
32765
32829
|
violations.push({
|
|
32766
32830
|
accountId,
|
|
32767
32831
|
code: "non-finite",
|
|
32768
|
-
detail: `aprData.${
|
|
32832
|
+
detail: `aprData.${field13} = ${apr[field13]}`,
|
|
32769
32833
|
requiresFailedReads: false
|
|
32770
32834
|
});
|
|
32771
32835
|
}
|
|
@@ -32856,8 +32920,8 @@ function getUserDataConverter(lender, chainId, account, params, meta) {
|
|
|
32856
32920
|
return getResupplyUserDataConverter(lender, chainId, account, meta);
|
|
32857
32921
|
if (isCurvance(lender))
|
|
32858
32922
|
return getCurvanceUserDataConverter(lender, chainId, account, meta);
|
|
32859
|
-
if (
|
|
32860
|
-
return
|
|
32923
|
+
if (isDssType(lender))
|
|
32924
|
+
return getDssUserDataConverter(lender, chainId, account, meta);
|
|
32861
32925
|
if (isFrankencoin(lender))
|
|
32862
32926
|
return getFrankencoinUserDataConverter(lender, chainId, account, meta);
|
|
32863
32927
|
if (isCompoundV3Type(lender))
|
|
@@ -37515,7 +37579,7 @@ var getAbi2 = (lender) => {
|
|
|
37515
37579
|
return [...InverseMarketAbi, ...InverseEscrowAbi, ...InverseDbrAbi];
|
|
37516
37580
|
if (isLlamaLend(lender))
|
|
37517
37581
|
return [...LlamaLendControllerAbi, ...LlamaLendAmmAbi];
|
|
37518
|
-
if (
|
|
37582
|
+
if (isDssType(lender)) return [...UsddVatAbi];
|
|
37519
37583
|
if (isFrankencoin(lender))
|
|
37520
37584
|
return [...FrankencoinPositionAbi, ...erc20Abi];
|
|
37521
37585
|
if (isResupply(lender))
|
|
@@ -38287,8 +38351,8 @@ function calculateOverallNetApr(totalDepositsUSD, totalDebtUSD, avgDepositApr, a
|
|
|
38287
38351
|
return (totalDepositsUSD * avgDepositApr - totalDebtUSD * avgBorrowApr) / Math.abs(totalNetWorth) * (totalNetWorth > 0 ? 1 : -1);
|
|
38288
38352
|
}
|
|
38289
38353
|
function calculateWeightedAprs(items) {
|
|
38290
|
-
const wa = (
|
|
38291
|
-
items.filter((i) => i[weightField] !== 0).map((i) => ({ value: i[
|
|
38354
|
+
const wa = (field13, weightField) => calculateWeightedAverage(
|
|
38355
|
+
items.filter((i) => i[weightField] !== 0).map((i) => ({ value: i[field13], weight: Math.abs(i[weightField]) }))
|
|
38292
38356
|
);
|
|
38293
38357
|
return {
|
|
38294
38358
|
apr: wa("apr", "nav"),
|
|
@@ -42547,6 +42611,32 @@ var sreusdSavingsFetcher = {
|
|
|
42547
42611
|
return { [SREUSD_KEY]: apr, [SREUSD_GROUP_KEY]: apr };
|
|
42548
42612
|
}
|
|
42549
42613
|
};
|
|
42614
|
+
|
|
42615
|
+
// src/yields/intrinsic/fetchers/fxProtocol.ts
|
|
42616
|
+
var ALADDIN_APY_URL = "https://api.aladdin.club/api1/concentrator_aToken_tvl_apy";
|
|
42617
|
+
var FXSAVE_DEFILLAMA_POOL = "ee0b7069-f8f3-4aa2-a415-728f13e6cc3d";
|
|
42618
|
+
var FXSAVE_KEY = "FXSAVE";
|
|
42619
|
+
var FXSAVE_GROUP_KEY = "f(x) USD Saving::fxSAVE";
|
|
42620
|
+
var fetchAladdinApyPercent = async () => {
|
|
42621
|
+
const res = await fetch(ALADDIN_APY_URL, {
|
|
42622
|
+
headers: { accept: "application/json" },
|
|
42623
|
+
signal: AbortSignal.timeout(8e3)
|
|
42624
|
+
});
|
|
42625
|
+
if (!res.ok) throw new Error(`HTTP ${res.status}`);
|
|
42626
|
+
const apy = Number((await res.json())?.data?.fxSave?.apy);
|
|
42627
|
+
if (Number.isFinite(apy) && apy > 0) return apy;
|
|
42628
|
+
throw new Error("apy missing");
|
|
42629
|
+
};
|
|
42630
|
+
var fxSaveFetcher = {
|
|
42631
|
+
label: "FXSAVE",
|
|
42632
|
+
fetch: async () => {
|
|
42633
|
+
const apy = await fetchAladdinApyPercent().catch(
|
|
42634
|
+
() => fetchDefiLlamaApy(FXSAVE_DEFILLAMA_POOL)
|
|
42635
|
+
);
|
|
42636
|
+
const apr = apyToAprPercent(apy);
|
|
42637
|
+
return { [FXSAVE_KEY]: apr, [FXSAVE_GROUP_KEY]: apr };
|
|
42638
|
+
}
|
|
42639
|
+
};
|
|
42550
42640
|
var RATE_ABI = [
|
|
42551
42641
|
{
|
|
42552
42642
|
name: "rate",
|
|
@@ -45023,6 +45113,31 @@ var SINGLE_CHAIN_ENTRIES = {
|
|
|
45023
45113
|
yieldFetcher: sreusdSavingsFetcher,
|
|
45024
45114
|
yieldKey: "SREUSD"
|
|
45025
45115
|
},
|
|
45116
|
+
{
|
|
45117
|
+
// f(x) Protocol fxSAVE — 4626 auto-compounder over `fxSP`, the f(x)
|
|
45118
|
+
// Stability Pool share (it holds 57.4M of fxSP's 59.4M supply, i.e.
|
|
45119
|
+
// ~97% of the pool). Plain instant exit: `maxDeposit = uint.max`,
|
|
45120
|
+
// `maxRedeem == balanceOf` on a live holder, `previewRedeem ==
|
|
45121
|
+
// convertToAssets` (no fee, no cooldown) — verified on-chain 2026-08-09.
|
|
45122
|
+
//
|
|
45123
|
+
// The underlying is fxSP and NOT fxUSD: fxSP appreciates on its own
|
|
45124
|
+
// ($1.0101 vs fxUSD's $1.0000 at integration), so pricing `totalAssets`
|
|
45125
|
+
// off fxUSD would understate TVL by ~1%. The token-list row's
|
|
45126
|
+
// `props.savings.underlying: 'fxUSD'` is the classifier's economic
|
|
45127
|
+
// underlying, a different question from `asset()`.
|
|
45128
|
+
address: "0x7743e50f534a7f9f1791dde7dcd89f7783eefc39",
|
|
45129
|
+
underlying: "0x65c9a641afceb9c0e6034e558a319488fa0fa3be",
|
|
45130
|
+
// fxSP
|
|
45131
|
+
symbol: "fxSAVE",
|
|
45132
|
+
brand: "f(x) Protocol",
|
|
45133
|
+
description: "fxUSD is f(x) Protocol's stablecoin; its Stability Pool (fxSP) backstops leveraged positions and earns the protocol's rebalance and liquidation revenue. fxSAVE auto-compounds that revenue back into fxSP, so the share price appreciates. Instant permissionless exit, no fee or cooldown.",
|
|
45134
|
+
decimals: 18,
|
|
45135
|
+
isRebasing: false,
|
|
45136
|
+
isMintable: true,
|
|
45137
|
+
withdrawalMode: "instant",
|
|
45138
|
+
yieldFetcher: fxSaveFetcher,
|
|
45139
|
+
yieldKey: FXSAVE_KEY
|
|
45140
|
+
},
|
|
45026
45141
|
{
|
|
45027
45142
|
// Frax sFRAX — the pre-rename sibling of sfrxUSD, over legacy
|
|
45028
45143
|
// FRAX. Still live and roughly 2x sfrxUSD's size, so it stays a
|
|
@@ -47895,6 +48010,96 @@ var riverFetcher = {
|
|
|
47895
48010
|
parse: parseRiverResults,
|
|
47896
48011
|
getAbi: getRiverAbi
|
|
47897
48012
|
};
|
|
48013
|
+
var dssLendersByChain = (chainId) => [
|
|
48014
|
+
...skyLendersByChain(chainId),
|
|
48015
|
+
...usddLendersByChain(chainId)
|
|
48016
|
+
];
|
|
48017
|
+
function getDssCalls(chainId) {
|
|
48018
|
+
const results = [];
|
|
48019
|
+
for (const lender of dssLendersByChain(chainId)) {
|
|
48020
|
+
const cfg = dssConfigFor(lender, chainId);
|
|
48021
|
+
const markets = dssChainData(lender, chainId)?.markets ?? [];
|
|
48022
|
+
if (!cfg?.vat || markets.length === 0) continue;
|
|
48023
|
+
const debtToken = dssDebtToken(cfg);
|
|
48024
|
+
for (const m of markets) {
|
|
48025
|
+
if (!m.ilk || !m.collToken || !m.mat) continue;
|
|
48026
|
+
const calls = [
|
|
48027
|
+
{ address: cfg.vat, name: "ilks", params: [dssIlkBytes32(m.ilk)] }
|
|
48028
|
+
];
|
|
48029
|
+
results.push({
|
|
48030
|
+
calls,
|
|
48031
|
+
meta: {
|
|
48032
|
+
lender,
|
|
48033
|
+
chainId,
|
|
48034
|
+
ilk: m.ilk,
|
|
48035
|
+
collToken: m.collToken.toLowerCase(),
|
|
48036
|
+
debtToken: debtToken?.toLowerCase(),
|
|
48037
|
+
mat: String(m.mat)
|
|
48038
|
+
},
|
|
48039
|
+
lender: dssLenderKey(lender, chainId, m.ilk)
|
|
48040
|
+
});
|
|
48041
|
+
}
|
|
48042
|
+
}
|
|
48043
|
+
return results;
|
|
48044
|
+
}
|
|
48045
|
+
var RAY8 = 1e27;
|
|
48046
|
+
var big13 = (v) => {
|
|
48047
|
+
try {
|
|
48048
|
+
if (typeof v === "bigint") return v;
|
|
48049
|
+
if (v == null || v === "0x") return 0n;
|
|
48050
|
+
return BigInt(v);
|
|
48051
|
+
} catch {
|
|
48052
|
+
return 0n;
|
|
48053
|
+
}
|
|
48054
|
+
};
|
|
48055
|
+
var field12 = (res, name, idx) => {
|
|
48056
|
+
const v = res?.[name];
|
|
48057
|
+
if (typeof v === "bigint" || typeof v === "number" || typeof v === "string") {
|
|
48058
|
+
return big13(v);
|
|
48059
|
+
}
|
|
48060
|
+
return big13(res?.[idx]);
|
|
48061
|
+
};
|
|
48062
|
+
function parseDssResults(data, meta, context) {
|
|
48063
|
+
const { chainId } = context;
|
|
48064
|
+
const key2 = dssLenderKey(meta.lender, chainId, meta.ilk);
|
|
48065
|
+
const entries = [];
|
|
48066
|
+
const spot = field12(data?.[0], "spot", 2);
|
|
48067
|
+
const mat = big13(meta.mat);
|
|
48068
|
+
if (spot > 0n && mat > 0n) {
|
|
48069
|
+
const collUSD = Number(spot) / RAY8 * (Number(mat) / RAY8);
|
|
48070
|
+
if (collUSD > 0 && collUSD < 1e9) {
|
|
48071
|
+
entries.push({
|
|
48072
|
+
asset: meta.collToken,
|
|
48073
|
+
price: collUSD,
|
|
48074
|
+
priceUSD: collUSD,
|
|
48075
|
+
marketUid: createMarketUid(chainId, key2, meta.collToken),
|
|
48076
|
+
targetLender: key2,
|
|
48077
|
+
description: "Maker OSM via Vat.spot \xD7 Spot.mat (USD, ~1h delayed)"
|
|
48078
|
+
});
|
|
48079
|
+
}
|
|
48080
|
+
}
|
|
48081
|
+
if (meta.debtToken) {
|
|
48082
|
+
entries.push({
|
|
48083
|
+
asset: meta.debtToken,
|
|
48084
|
+
price: 1,
|
|
48085
|
+
priceUSD: 1,
|
|
48086
|
+
marketUid: createMarketUid(chainId, key2, meta.debtToken),
|
|
48087
|
+
targetLender: key2,
|
|
48088
|
+
description: "dss debt token (par)",
|
|
48089
|
+
staticBase: true,
|
|
48090
|
+
baseAsset: meta.debtToken
|
|
48091
|
+
});
|
|
48092
|
+
}
|
|
48093
|
+
return entries;
|
|
48094
|
+
}
|
|
48095
|
+
function getDssAbi() {
|
|
48096
|
+
return UsddVatAbi;
|
|
48097
|
+
}
|
|
48098
|
+
var dssFetcher = {
|
|
48099
|
+
getCalls: getDssCalls,
|
|
48100
|
+
parse: parseDssResults,
|
|
48101
|
+
getAbi: getDssAbi
|
|
48102
|
+
};
|
|
47898
48103
|
var READS_PER_ASSET = 2;
|
|
47899
48104
|
function getCurvanceCalls(chainId) {
|
|
47900
48105
|
const results = [];
|
|
@@ -50049,6 +50254,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
50049
50254
|
() => riverFetcher.getCalls(chainId),
|
|
50050
50255
|
getCallsErrors
|
|
50051
50256
|
) : [];
|
|
50257
|
+
const dssResults = isActive("dss") ? safeGetCalls("dss", () => dssFetcher.getCalls(chainId), getCallsErrors) : [];
|
|
50052
50258
|
const curvanceResults = isActive("curvance") ? safeGetCalls(
|
|
50053
50259
|
"curvance",
|
|
50054
50260
|
() => curvanceFetcher.getCalls(chainId),
|
|
@@ -50185,6 +50391,13 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
50185
50391
|
getRiverAbi(),
|
|
50186
50392
|
"direct"
|
|
50187
50393
|
);
|
|
50394
|
+
const dssGroup = buildGroup(
|
|
50395
|
+
"dss",
|
|
50396
|
+
dssResults,
|
|
50397
|
+
dssFetcher.parse,
|
|
50398
|
+
dssFetcher.getAbi(),
|
|
50399
|
+
"direct"
|
|
50400
|
+
);
|
|
50188
50401
|
const curvanceGroup = buildGroup(
|
|
50189
50402
|
"curvance",
|
|
50190
50403
|
curvanceResults,
|
|
@@ -50264,6 +50477,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
50264
50477
|
termGroup,
|
|
50265
50478
|
liquityGroup,
|
|
50266
50479
|
riverGroup,
|
|
50480
|
+
dssGroup,
|
|
50267
50481
|
curvanceGroup,
|
|
50268
50482
|
inverseGroup,
|
|
50269
50483
|
tellerGroup,
|
|
@@ -50314,6 +50528,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
50314
50528
|
termData,
|
|
50315
50529
|
liquityData,
|
|
50316
50530
|
riverData,
|
|
50531
|
+
dssData,
|
|
50317
50532
|
curvanceData,
|
|
50318
50533
|
inverseData,
|
|
50319
50534
|
tellerData,
|
|
@@ -50442,6 +50657,14 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
50442
50657
|
allowFailure,
|
|
50443
50658
|
rpcOverrides
|
|
50444
50659
|
),
|
|
50660
|
+
executeGroup(
|
|
50661
|
+
dssGroup,
|
|
50662
|
+
chainId,
|
|
50663
|
+
chainBatchSize,
|
|
50664
|
+
retries,
|
|
50665
|
+
allowFailure,
|
|
50666
|
+
rpcOverrides
|
|
50667
|
+
),
|
|
50445
50668
|
executeGroup(
|
|
50446
50669
|
curvanceGroup,
|
|
50447
50670
|
chainId,
|
|
@@ -50601,6 +50824,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
50601
50824
|
parseTrackers(termGroup, termData.results);
|
|
50602
50825
|
parseTrackers(liquityGroup, liquityData.results);
|
|
50603
50826
|
parseTrackers(riverGroup, riverData.results);
|
|
50827
|
+
parseTrackers(dssGroup, dssData.results);
|
|
50604
50828
|
parseTrackers(curvanceGroup, curvanceData.results);
|
|
50605
50829
|
parseTrackers(inverseGroup, inverseData.results);
|
|
50606
50830
|
if (siloV2GqlEntries != null) {
|
|
@@ -51201,10 +51425,10 @@ function createAssetArrayPerChain() {
|
|
|
51201
51425
|
return assetsPerChain;
|
|
51202
51426
|
}
|
|
51203
51427
|
var RELEVANT_LENDING_ASSETS = () => createAssetArrayPerChain();
|
|
51204
|
-
function createSimpleArrayPerChain(fork,
|
|
51428
|
+
function createSimpleArrayPerChain(fork, field13 = void 0) {
|
|
51205
51429
|
let pools = {};
|
|
51206
51430
|
Object.entries(fork ?? {}).forEach(([b2, data]) => {
|
|
51207
|
-
Object.entries(
|
|
51431
|
+
Object.entries(field13 ? data[field13] : data).forEach(
|
|
51208
51432
|
([chainId, address]) => {
|
|
51209
51433
|
if (!pools[chainId]) pools[chainId] = [];
|
|
51210
51434
|
pools[chainId] = uniq2([...pools[chainId], { address, pool: b2 }]);
|
|
@@ -53411,9 +53635,9 @@ query EvkByAssets($assets: [Bytes!]!) {
|
|
|
53411
53635
|
`;
|
|
53412
53636
|
var ZERO2 = 0n;
|
|
53413
53637
|
var RAY_TO_PERCENT3 = 1e25;
|
|
53414
|
-
function readAddress2(
|
|
53415
|
-
if (!
|
|
53416
|
-
return
|
|
53638
|
+
function readAddress2(field13) {
|
|
53639
|
+
if (!field13) return void 0;
|
|
53640
|
+
return field13.toLowerCase();
|
|
53417
53641
|
}
|
|
53418
53642
|
function parseVaultFee(v) {
|
|
53419
53643
|
if (v.performanceFee == null) return 0;
|
|
@@ -53778,7 +54002,7 @@ var num4 = (v) => {
|
|
|
53778
54002
|
const n = Number(v);
|
|
53779
54003
|
return Number.isFinite(n) ? n : 0;
|
|
53780
54004
|
};
|
|
53781
|
-
var
|
|
54005
|
+
var big14 = (v) => {
|
|
53782
54006
|
try {
|
|
53783
54007
|
if (v === void 0 || v === null || v === "") return "0";
|
|
53784
54008
|
const s = String(v);
|
|
@@ -53814,12 +54038,12 @@ async function fetchTermMaxVaultsFromApi(chainId, prices = {}, tokenList = {}, f
|
|
|
53814
54038
|
const assetEntry = tokenList[underlying];
|
|
53815
54039
|
const priceKey = toOracleKey(assetEntry?.assetGroup) || toGenericPriceKey(underlying, chainId);
|
|
53816
54040
|
const priceUsd = prices[priceKey];
|
|
53817
|
-
const totalAssets =
|
|
53818
|
-
const totalSupply =
|
|
54041
|
+
const totalAssets = big14(r.totalAssets);
|
|
54042
|
+
const totalSupply = big14(r.totalSupplyAmt);
|
|
53819
54043
|
const totalAssetsFormatted = Number(totalAssets) / scale2;
|
|
53820
54044
|
const supplyRate = num4(r.apr) * 100;
|
|
53821
54045
|
const rewardsRate = num4(r?.incentiveData?.TMX_APR) * 100;
|
|
53822
|
-
const rawLiquidity = BigInt(
|
|
54046
|
+
const rawLiquidity = BigInt(big14(r.redeemableAmt ?? r.idleFunds ?? "0"));
|
|
53823
54047
|
const totalAssetsBig = BigInt(totalAssets);
|
|
53824
54048
|
const liquidity = (rawLiquidity > totalAssetsBig ? totalAssetsBig : rawLiquidity).toString();
|
|
53825
54049
|
const liquidityFormatted = Number(liquidity) / scale2;
|
|
@@ -53855,7 +54079,7 @@ async function fetchTermMaxVaultsFromApi(chainId, prices = {}, tokenList = {}, f
|
|
|
53855
54079
|
liquidityUsd: priceUsd ? liquidityFormatted * priceUsd : 0,
|
|
53856
54080
|
version: r.version,
|
|
53857
54081
|
isPaused: r.isPaused === true || void 0,
|
|
53858
|
-
supplyCap: r.capacity ?
|
|
54082
|
+
supplyCap: r.capacity ? big14(r.capacity) : void 0,
|
|
53859
54083
|
basePool: r.poolAddress ? lower2(r.poolAddress) : void 0
|
|
53860
54084
|
};
|
|
53861
54085
|
}
|
|
@@ -53911,7 +54135,7 @@ var Erc20DecimalsBalanceAbi = [
|
|
|
53911
54135
|
|
|
53912
54136
|
// src/vaults/termmax/fetchFromChain.ts
|
|
53913
54137
|
var DECIMAL_BASE2 = 100000000n;
|
|
53914
|
-
var
|
|
54138
|
+
var big15 = (v) => {
|
|
53915
54139
|
if (v === void 0 || v === null || v === "0x") return 0n;
|
|
53916
54140
|
try {
|
|
53917
54141
|
return typeof v === "bigint" ? v : BigInt(v);
|
|
@@ -53975,7 +54199,7 @@ var fetchTermMaxVaultsFromChain = async (chainId, multicallRetry, prices = {}, t
|
|
|
53975
54199
|
vaults.forEach((address, i) => {
|
|
53976
54200
|
const at = (k) => res[i * READS_PER_VAULT + VAULT_READS.indexOf(k)];
|
|
53977
54201
|
const asset = addr(at("asset"));
|
|
53978
|
-
const totalAssets =
|
|
54202
|
+
const totalAssets = big15(at("totalAssets"));
|
|
53979
54203
|
if (!asset || totalAssets === 0n) return;
|
|
53980
54204
|
rows.push({
|
|
53981
54205
|
address,
|
|
@@ -53984,11 +54208,11 @@ var fetchTermMaxVaultsFromChain = async (chainId, multicallRetry, prices = {}, t
|
|
|
53984
54208
|
decimals: num5(at("decimals")) ?? 18,
|
|
53985
54209
|
asset,
|
|
53986
54210
|
totalAssets,
|
|
53987
|
-
totalSupply:
|
|
53988
|
-
annualizedInterest:
|
|
53989
|
-
accretingPrincipal:
|
|
53990
|
-
performanceFeeRate:
|
|
53991
|
-
aprRaw: at("apr") != null ?
|
|
54211
|
+
totalSupply: big15(at("totalSupply")),
|
|
54212
|
+
annualizedInterest: big15(at("annualizedInterest")),
|
|
54213
|
+
accretingPrincipal: big15(at("accretingPrincipal")),
|
|
54214
|
+
performanceFeeRate: big15(at("performanceFeeRate")),
|
|
54215
|
+
aprRaw: at("apr") != null ? big15(at("apr")) : void 0,
|
|
53992
54216
|
curator: addr(at("curator")),
|
|
53993
54217
|
guardian: addr(at("guardian")),
|
|
53994
54218
|
timelock: num5(at("timelock")),
|
|
@@ -54009,7 +54233,7 @@ var fetchTermMaxVaultsFromChain = async (chainId, multicallRetry, prices = {}, t
|
|
|
54009
54233
|
const out = {};
|
|
54010
54234
|
rows.forEach((r, i) => {
|
|
54011
54235
|
const assetDecimals = num5(res2[i * 2]) ?? r.decimals;
|
|
54012
|
-
const idle =
|
|
54236
|
+
const idle = big15(res2[i * 2 + 1]);
|
|
54013
54237
|
const assetEntry = tokenList[r.asset];
|
|
54014
54238
|
const priceKey = toOracleKey(assetEntry?.assetGroup) || toGenericPriceKey(r.asset, chainId);
|
|
54015
54239
|
const priceUsd = prices[priceKey];
|
|
@@ -61414,23 +61638,23 @@ var priceGmMarkets = async (chainId, multicallRetry, markets, prices) => {
|
|
|
61414
61638
|
const indexMax = price(prices, m.indexToken)?.max;
|
|
61415
61639
|
if (Array.isArray(dsRes) && longMax != null && shortMax != null) {
|
|
61416
61640
|
const base = i * SLOTS;
|
|
61417
|
-
const
|
|
61641
|
+
const big16 = (j) => typeof dsRes[base + j] === "bigint" ? dsRes[base + j] : 0n;
|
|
61418
61642
|
const cap = computeDepositCapacityUsd(
|
|
61419
|
-
[info?.longTokenAmount, longMax,
|
|
61420
|
-
[info?.shortTokenAmount, shortMax,
|
|
61643
|
+
[info?.longTokenAmount, longMax, big16(0), big16(2)],
|
|
61644
|
+
[info?.shortTokenAmount, shortMax, big16(1), big16(3)]
|
|
61421
61645
|
);
|
|
61422
61646
|
if (cap != null) value.depositCapacityUsd = cap;
|
|
61423
61647
|
if (indexMax != null) {
|
|
61424
61648
|
const divisor = m.longToken.toLowerCase() === m.shortToken.toLowerCase() ? 2n : 1n;
|
|
61425
|
-
const reservedUsdLong = (
|
|
61426
|
-
const reservedUsdShort = (
|
|
61649
|
+
const reservedUsdLong = (big16(4) + big16(5)) / divisor * indexMax;
|
|
61650
|
+
const reservedUsdShort = (big16(6) + big16(7)) / divisor;
|
|
61427
61651
|
const liq = computeLiquidityUsd(
|
|
61428
61652
|
info?.longTokenUsd,
|
|
61429
61653
|
info?.shortTokenUsd,
|
|
61430
61654
|
reservedUsdLong,
|
|
61431
61655
|
reservedUsdShort,
|
|
61432
|
-
|
|
61433
|
-
|
|
61656
|
+
big16(8),
|
|
61657
|
+
big16(9)
|
|
61434
61658
|
);
|
|
61435
61659
|
if (liq != null)
|
|
61436
61660
|
value.liquidityUsd = Math.max(0, Math.min(liq, value.tvlUsd));
|
|
@@ -61629,21 +61853,21 @@ var fetchGmxExecutionFees = async (chainId, multicallRetry, gasPriceWei) => {
|
|
|
61629
61853
|
} catch {
|
|
61630
61854
|
return void 0;
|
|
61631
61855
|
}
|
|
61632
|
-
const
|
|
61633
|
-
const base =
|
|
61634
|
-
const mult =
|
|
61856
|
+
const big16 = (i) => typeof res[i] === "bigint" ? res[i] : 0n;
|
|
61857
|
+
const base = big16(0);
|
|
61858
|
+
const mult = big16(1);
|
|
61635
61859
|
if (base === 0n && mult === 0n) return void 0;
|
|
61636
61860
|
const PRECISION = 10n ** 30n;
|
|
61637
61861
|
const adjusted = (opGas) => base + opGas * mult / PRECISION;
|
|
61638
61862
|
const fee = (opGas) => (adjusted(opGas) * gasPriceWei).toString();
|
|
61639
|
-
const glvExtra =
|
|
61863
|
+
const glvExtra = big16(6) * GLV_NOMINAL_MARKET_COUNT;
|
|
61640
61864
|
return {
|
|
61641
61865
|
chainId,
|
|
61642
61866
|
gasPriceWei: gasPriceWei.toString(),
|
|
61643
|
-
deposit: fee(
|
|
61644
|
-
withdrawal: fee(
|
|
61645
|
-
glvDeposit: fee(
|
|
61646
|
-
glvWithdrawal: fee(
|
|
61867
|
+
deposit: fee(big16(2)),
|
|
61868
|
+
withdrawal: fee(big16(3)),
|
|
61869
|
+
glvDeposit: fee(big16(4) + glvExtra),
|
|
61870
|
+
glvWithdrawal: fee(big16(5) + glvExtra)
|
|
61647
61871
|
};
|
|
61648
61872
|
};
|
|
61649
61873
|
|
|
@@ -62991,6 +63215,7 @@ var ROW_DESCRIPTOR_KEYS = [
|
|
|
62991
63215
|
"inverse",
|
|
62992
63216
|
"exactly",
|
|
62993
63217
|
"usdd",
|
|
63218
|
+
"dss",
|
|
62994
63219
|
"termmax",
|
|
62995
63220
|
// These five were missing, and the failure is SILENT: the adapter still
|
|
62996
63221
|
// runs, reads an empty descriptor and returns a sheet that looks complete
|
|
@@ -63612,9 +63837,12 @@ var TERM_PROFILES = [
|
|
|
63612
63837
|
}
|
|
63613
63838
|
}),
|
|
63614
63839
|
P({
|
|
63615
|
-
id: "
|
|
63616
|
-
name: "
|
|
63617
|
-
family
|
|
63840
|
+
id: "dss.cdp@v1",
|
|
63841
|
+
name: "Maker-style (dss) CDP ilk",
|
|
63842
|
+
// One profile for the whole dss family — Sky (the original MakerDAO) and
|
|
63843
|
+
// its forks (USDD 2.0). The prose is identical because the mechanism is:
|
|
63844
|
+
// same Vat/Jug/Spot accounting, same governance-set stability fee.
|
|
63845
|
+
family: "dss",
|
|
63618
63846
|
borrow: {
|
|
63619
63847
|
description: "A Maker-style CDP with a governance-set stability fee and no utilization curve.",
|
|
63620
63848
|
implications: [
|
|
@@ -63935,8 +64163,8 @@ function resolveMinDebt(input) {
|
|
|
63935
64163
|
m.river?.minNetDebt,
|
|
63936
64164
|
// Inverse FiRM.
|
|
63937
64165
|
m.inverse?.minDebt,
|
|
63938
|
-
//
|
|
63939
|
-
m.usdd?.dust,
|
|
64166
|
+
// dss (Sky / the USDD fork): `dust` IS the per-vault debt floor.
|
|
64167
|
+
m.dss?.dust ?? m.usdd?.dust,
|
|
63940
64168
|
// Gearbox credit facade.
|
|
63941
64169
|
m.gearbox?.minDebt,
|
|
63942
64170
|
// Resupply — a hard per-position floor that also bounds partial repayment.
|
|
@@ -65102,10 +65330,10 @@ var inverseAdapter = {
|
|
|
65102
65330
|
}
|
|
65103
65331
|
})
|
|
65104
65332
|
};
|
|
65105
|
-
var
|
|
65106
|
-
id: "
|
|
65107
|
-
matches:
|
|
65108
|
-
profileId: () => "
|
|
65333
|
+
var dssAdapter = {
|
|
65334
|
+
id: "dss",
|
|
65335
|
+
matches: isDssType,
|
|
65336
|
+
profileId: () => "dss.cdp@v1",
|
|
65109
65337
|
build: () => ({
|
|
65110
65338
|
borrow: {
|
|
65111
65339
|
rate: { kind: "variable-managed", source: "governance", isLocked: false },
|
|
@@ -65519,7 +65747,7 @@ var TERM_ADAPTERS = [
|
|
|
65519
65747
|
liquityAdapter,
|
|
65520
65748
|
riverAdapter,
|
|
65521
65749
|
inverseAdapter,
|
|
65522
|
-
|
|
65750
|
+
dssAdapter,
|
|
65523
65751
|
compoundV3Adapter,
|
|
65524
65752
|
fluidAdapter,
|
|
65525
65753
|
gearboxAdapter,
|
|
@@ -65961,6 +66189,6 @@ function validateTermSheets(sheets) {
|
|
|
65961
66189
|
return sheets.flatMap((s) => validateTermSheet(s));
|
|
65962
66190
|
}
|
|
65963
66191
|
|
|
65964
|
-
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 };
|
|
66192
|
+
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, convertDssMarketsToResponse, 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, dssIlkBytes32, dssKeyParts, dssLenderKey, duration, encodeBalanceFetcherCalldata, enrichTermSheet, enrichmentIndexFromRows, exactlyPairLtv, exactlyPenaltyRateToAprPercent, exactlyWadRateToPercent, feePhrase, feedKeyOf, feedStatKey, fetchDolomiteAccountNumbers, fetchDssMarkets, 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 };
|
|
65965
66193
|
//# sourceMappingURL=index.js.map
|
|
65966
66194
|
//# sourceMappingURL=index.js.map
|