@1delta/margin-fetcher 5.0.14 → 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 +336 -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();
|
|
@@ -25019,72 +25022,90 @@ function resolvePositionManagers(cfg, marketManager) {
|
|
|
25019
25022
|
}
|
|
25020
25023
|
return void 0;
|
|
25021
25024
|
}
|
|
25022
|
-
var
|
|
25023
|
-
var
|
|
25024
|
-
var
|
|
25025
|
-
async function
|
|
25026
|
-
const config =
|
|
25027
|
-
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);
|
|
25028
25031
|
const markets = chainData?.markets ?? [];
|
|
25029
25032
|
if (!config || markets.length === 0) {
|
|
25030
25033
|
return { lender, config, chainData, markets: [] };
|
|
25031
25034
|
}
|
|
25032
|
-
const calls =
|
|
25033
|
-
|
|
25034
|
-
|
|
25035
|
+
const calls = [];
|
|
25036
|
+
const abi = [];
|
|
25037
|
+
const joinReadIndex = [];
|
|
25038
|
+
for (const m of markets) {
|
|
25039
|
+
const ilk32 = dssIlkBytes32(m.ilk);
|
|
25040
|
+
calls.push(
|
|
25035
25041
|
{ address: config.vat, name: "ilks", params: [ilk32] },
|
|
25036
25042
|
{ address: config.jug, name: "ilks", params: [ilk32] },
|
|
25037
|
-
{ address: config.spot, name: "ilks", params: [ilk32] }
|
|
25038
|
-
|
|
25039
|
-
|
|
25040
|
-
|
|
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
|
+
}
|
|
25041
25058
|
let results = [];
|
|
25042
25059
|
try {
|
|
25043
25060
|
results = await multicallRetryUniversal({
|
|
25044
25061
|
chain: chainId,
|
|
25045
25062
|
calls,
|
|
25046
|
-
abi
|
|
25063
|
+
abi,
|
|
25047
25064
|
allowFailure: true
|
|
25048
25065
|
});
|
|
25049
25066
|
} catch {
|
|
25050
25067
|
return { lender, config, chainData, markets: [] };
|
|
25051
25068
|
}
|
|
25052
|
-
const
|
|
25069
|
+
const big16 = (v) => {
|
|
25053
25070
|
if (typeof v === "bigint") return v;
|
|
25054
25071
|
if (typeof v === "number") return BigInt(v);
|
|
25055
25072
|
return null;
|
|
25056
25073
|
};
|
|
25057
|
-
const
|
|
25074
|
+
const field13 = (res, name, idx) => big16(res?.[name] ?? res?.[idx]);
|
|
25075
|
+
let cursor = 0;
|
|
25058
25076
|
const out = markets.map((market, i) => {
|
|
25059
|
-
const base =
|
|
25077
|
+
const base = cursor;
|
|
25078
|
+
cursor += CORE_READS_PER_ILK + (joinReadIndex[i] >= 0 ? 1 : 0);
|
|
25060
25079
|
const vatIlk = results[base];
|
|
25061
25080
|
const jugIlk = results[base + 1];
|
|
25062
25081
|
const spotIlk = results[base + 2];
|
|
25063
25082
|
return {
|
|
25064
25083
|
market,
|
|
25065
|
-
Art:
|
|
25066
|
-
rate:
|
|
25067
|
-
spot:
|
|
25068
|
-
line:
|
|
25069
|
-
dust:
|
|
25070
|
-
duty:
|
|
25071
|
-
mat:
|
|
25072
|
-
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
|
|
25073
25092
|
};
|
|
25074
25093
|
});
|
|
25075
25094
|
return { lender, config, chainData, markets: out };
|
|
25076
25095
|
}
|
|
25077
|
-
|
|
25078
|
-
|
|
25079
|
-
function
|
|
25096
|
+
var fetchUsddMarkets = fetchDssMarkets;
|
|
25097
|
+
var usddIlkBytes32 = dssIlkBytes32;
|
|
25098
|
+
function dssLenderKey(lender, chainId, ilk) {
|
|
25080
25099
|
return `${lender}_${chainId}_${ilk}`;
|
|
25081
25100
|
}
|
|
25082
|
-
|
|
25083
|
-
|
|
25084
|
-
|
|
25085
|
-
|
|
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);
|
|
25086
25107
|
if (!m) return void 0;
|
|
25087
|
-
return { lender:
|
|
25108
|
+
return { lender: m[1], chainId: m[2], ilk: m[3] };
|
|
25088
25109
|
}
|
|
25089
25110
|
var WAD9 = 1e18;
|
|
25090
25111
|
var RAY4 = 1e27;
|
|
@@ -25097,7 +25118,7 @@ function currencyFor12(address, decimals, symbol, tokens) {
|
|
|
25097
25118
|
const lower3 = address.toLowerCase();
|
|
25098
25119
|
return tokens[lower3] ?? { address: lower3, symbol, name: symbol, decimals };
|
|
25099
25120
|
}
|
|
25100
|
-
function
|
|
25121
|
+
function convertDssMarketsToResponse(raw, chainId, prices = {}, _additionalYields = {
|
|
25101
25122
|
intrinsicYields: {},
|
|
25102
25123
|
lenderRewards: {},
|
|
25103
25124
|
loaded: true
|
|
@@ -25106,15 +25127,18 @@ function convertUsddMarketsToResponse(raw, chainId, prices = {}, _additionalYiel
|
|
|
25106
25127
|
const cfg = raw?.config;
|
|
25107
25128
|
const chainData = raw?.chainData;
|
|
25108
25129
|
if (!cfg || !chainData) return out;
|
|
25109
|
-
const
|
|
25130
|
+
const rawDebtAddr = dssDebtToken(cfg);
|
|
25131
|
+
if (!rawDebtAddr) return out;
|
|
25132
|
+
const debtAddr = rawDebtAddr.toLowerCase();
|
|
25133
|
+
const debtJoin = dssDebtJoin(cfg);
|
|
25110
25134
|
const debtDecimals = cfg.debtDecimals ?? 18;
|
|
25111
25135
|
const debtToken = tokens[debtAddr];
|
|
25112
|
-
const debtSymbol = debtToken?.symbol ?? "USDD";
|
|
25136
|
+
const debtSymbol = debtToken?.symbol ?? cfg.debtSymbol ?? "USDD";
|
|
25113
25137
|
const debtPriceKey = toOracleKey(debtToken?.assetGroup) || toGenericPriceKey(debtAddr, chainId);
|
|
25114
25138
|
const debtPrice = prices[debtPriceKey] || 1;
|
|
25115
25139
|
for (const m of raw.markets ?? []) {
|
|
25116
25140
|
const market = m.market;
|
|
25117
|
-
const lenderKey =
|
|
25141
|
+
const lenderKey = dssLenderKey(raw.lender, chainId, market.ilk);
|
|
25118
25142
|
const collAddr = market.collToken.toLowerCase();
|
|
25119
25143
|
const collDecimals = market.collDecimals;
|
|
25120
25144
|
const collToken = tokens[collAddr];
|
|
@@ -25133,13 +25157,14 @@ function convertUsddMarketsToResponse(raw, chainId, prices = {}, _additionalYiel
|
|
|
25133
25157
|
const borrowApr = duty > BigInt(1e27) ? Number(duty - BigInt(10) ** BigInt(27)) / RAY4 * YEAR_SECONDS2 * 100 : 0;
|
|
25134
25158
|
const line = m.line !== null ? Number(m.line) / RAD : 0;
|
|
25135
25159
|
let borrowLiquidity = Math.max(0, line - totalDebt);
|
|
25136
|
-
const
|
|
25160
|
+
const offboarded = market.offboarded === true;
|
|
25161
|
+
const halted = line === 0 || offboarded;
|
|
25137
25162
|
const entry = { data: {} };
|
|
25138
25163
|
const collUid = createMarketUid(chainId, lenderKey, collAddr);
|
|
25139
25164
|
entry.data[collUid] = {
|
|
25140
25165
|
marketUid: collUid,
|
|
25141
25166
|
name: "Collateral " + collSymbol,
|
|
25142
|
-
poolId: market.gemJoin
|
|
25167
|
+
poolId: market.gemJoin?.toLowerCase(),
|
|
25143
25168
|
underlying: collAddr,
|
|
25144
25169
|
asset: currencyFor12(collAddr, collDecimals, collSymbol, tokens),
|
|
25145
25170
|
totalDeposits: totalColl,
|
|
@@ -25197,7 +25222,8 @@ function convertUsddMarketsToResponse(raw, chainId, prices = {}, _additionalYiel
|
|
|
25197
25222
|
totalDebtStableUSD: 0,
|
|
25198
25223
|
totalDebtUSD: totalDebt * debtPrice,
|
|
25199
25224
|
utilization: 0,
|
|
25200
|
-
// The earn side is
|
|
25225
|
+
// The earn side is the savings token (savings provider), not a lending
|
|
25226
|
+
// deposit.
|
|
25201
25227
|
depositRate: 0,
|
|
25202
25228
|
variableBorrowRate: borrowApr,
|
|
25203
25229
|
stableBorrowRate: 0,
|
|
@@ -25227,6 +25253,38 @@ function convertUsddMarketsToResponse(raw, chainId, prices = {}, _additionalYiel
|
|
|
25227
25253
|
isActive: !halted,
|
|
25228
25254
|
isFrozen: halted
|
|
25229
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
|
+
};
|
|
25230
25288
|
entry.params = {
|
|
25231
25289
|
market: {
|
|
25232
25290
|
lender: lenderKey,
|
|
@@ -25235,41 +25293,16 @@ function convertUsddMarketsToResponse(raw, chainId, prices = {}, _additionalYiel
|
|
|
25235
25293
|
collateralDecimals: collDecimals,
|
|
25236
25294
|
// The gem join doubles as the market id (marketUid address) — one
|
|
25237
25295
|
// adapter per ilk, like River's TroveManager.
|
|
25238
|
-
id: market.gemJoin
|
|
25296
|
+
id: market.gemJoin?.toLowerCase(),
|
|
25239
25297
|
lltv: m.mat !== null ? m.mat.toString() : market.mat,
|
|
25240
25298
|
oracle: market.pip ?? zeroAddress,
|
|
25241
25299
|
irm: zeroAddress,
|
|
25242
25300
|
collateralAddress: collAddr,
|
|
25243
25301
|
loanAddress: debtAddr,
|
|
25244
|
-
|
|
25245
|
-
//
|
|
25246
|
-
usdd
|
|
25247
|
-
|
|
25248
|
-
/** Per-second stability fee (ray string) — live, metadata fallback. */
|
|
25249
|
-
duty: duty.toString(),
|
|
25250
|
-
/** Liquidation ratio (ray string). */
|
|
25251
|
-
mat: m.mat !== null ? m.mat.toString() : market.mat,
|
|
25252
|
-
/** Liquidation penalty multiplier (wad string, Dog.chop). */
|
|
25253
|
-
chop: market.chop,
|
|
25254
|
-
/** Ilk debt ceiling / per-CDP floor (rad strings). */
|
|
25255
|
-
line: m.line !== null ? m.line.toString() : market.line,
|
|
25256
|
-
dust: m.dust !== null ? m.dust.toString() : market.dust,
|
|
25257
|
-
/** Debt accumulator (ray string) — art × rate = debt. */
|
|
25258
|
-
rate: m.rate !== null ? m.rate.toString() : void 0,
|
|
25259
|
-
addresses: {
|
|
25260
|
-
vat: cfg.vat,
|
|
25261
|
-
jug: cfg.jug,
|
|
25262
|
-
spot: cfg.spot,
|
|
25263
|
-
dog: cfg.dog,
|
|
25264
|
-
cdpManager: cfg.cdpManager,
|
|
25265
|
-
proxyActions: cfg.proxyActions,
|
|
25266
|
-
proxyRegistry: cfg.proxyRegistry,
|
|
25267
|
-
usddJoin: cfg.usddJoin,
|
|
25268
|
-
gemJoin: market.gemJoin,
|
|
25269
|
-
clip: market.clip,
|
|
25270
|
-
pip: market.pip
|
|
25271
|
-
}
|
|
25272
|
-
}
|
|
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
|
|
25273
25306
|
}
|
|
25274
25307
|
};
|
|
25275
25308
|
entry.chainId = chainId;
|
|
@@ -25277,6 +25310,9 @@ function convertUsddMarketsToResponse(raw, chainId, prices = {}, _additionalYiel
|
|
|
25277
25310
|
}
|
|
25278
25311
|
return out;
|
|
25279
25312
|
}
|
|
25313
|
+
var convertUsddMarketsToResponse = convertDssMarketsToResponse;
|
|
25314
|
+
var usddLenderKey = dssLenderKey;
|
|
25315
|
+
var usddKeyParts = dssKeyParts;
|
|
25280
25316
|
var READS_PER_MARKET3 = 10;
|
|
25281
25317
|
var FRANKENCOIN_ABI_PER_READ = [
|
|
25282
25318
|
FrankencoinPositionAbi,
|
|
@@ -25324,26 +25360,26 @@ async function fetchFrankencoinMarkets(lender, chainId) {
|
|
|
25324
25360
|
} catch {
|
|
25325
25361
|
return { lender, config, chainData, markets: [] };
|
|
25326
25362
|
}
|
|
25327
|
-
const
|
|
25363
|
+
const big16 = (v) => {
|
|
25328
25364
|
if (typeof v === "bigint") return v;
|
|
25329
25365
|
if (typeof v === "number") return BigInt(v);
|
|
25330
25366
|
return null;
|
|
25331
25367
|
};
|
|
25332
25368
|
const out = markets.map((market, i) => {
|
|
25333
25369
|
const base = i * READS_PER_MARKET3;
|
|
25334
|
-
const expiration =
|
|
25370
|
+
const expiration = big16(results[base + 7]);
|
|
25335
25371
|
return {
|
|
25336
25372
|
market,
|
|
25337
|
-
price:
|
|
25338
|
-
minted:
|
|
25339
|
-
availableForClones:
|
|
25340
|
-
annualInterestPPM:
|
|
25341
|
-
currentFeePPM:
|
|
25342
|
-
reserveContribution:
|
|
25343
|
-
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]),
|
|
25344
25380
|
expiration,
|
|
25345
25381
|
isClosed: typeof results[base + 8] === "boolean" ? results[base + 8] : null,
|
|
25346
|
-
collateralBalance:
|
|
25382
|
+
collateralBalance: big16(results[base + 9])
|
|
25347
25383
|
};
|
|
25348
25384
|
});
|
|
25349
25385
|
return { lender, config, chainData, markets: out };
|
|
@@ -26188,7 +26224,7 @@ async function getLenderDataFromApi(lender, chainId, prices, additionalYields, i
|
|
|
26188
26224
|
if (isResupply(lender)) return await fetchResupplyMarkets(lender, chainId);
|
|
26189
26225
|
if (isCurvance(lender)) return await fetchCurvanceMarkets(lender, chainId);
|
|
26190
26226
|
if (isTermMax(lender)) return await fetchTermMaxMarkets(chainId);
|
|
26191
|
-
if (
|
|
26227
|
+
if (isDssType(lender)) return await fetchDssMarkets(lender, chainId);
|
|
26192
26228
|
if (isFrankencoin(lender))
|
|
26193
26229
|
return await fetchFrankencoinMarkets(lender, chainId);
|
|
26194
26230
|
return {};
|
|
@@ -26284,8 +26320,8 @@ function convertLenderDataFromApi(lender, chainId, data, prices, additionalYield
|
|
|
26284
26320
|
additionalYields,
|
|
26285
26321
|
list
|
|
26286
26322
|
);
|
|
26287
|
-
if (
|
|
26288
|
-
return
|
|
26323
|
+
if (isDssType(lender))
|
|
26324
|
+
return convertDssMarketsToResponse(
|
|
26289
26325
|
data,
|
|
26290
26326
|
chainId,
|
|
26291
26327
|
prices,
|
|
@@ -26503,7 +26539,7 @@ function lenderApiOnly(lender, chainId) {
|
|
|
26503
26539
|
if (isTermMax(lender)) return true;
|
|
26504
26540
|
if (isResupply(lender)) return true;
|
|
26505
26541
|
if (isCurvance(lender)) return true;
|
|
26506
|
-
if (
|
|
26542
|
+
if (isDssType(lender)) return true;
|
|
26507
26543
|
if (isFrankencoin(lender)) return true;
|
|
26508
26544
|
if (isLlamaLend(lender)) return true;
|
|
26509
26545
|
return false;
|
|
@@ -28183,13 +28219,13 @@ var buildCurvanceUserCall = async (chainId, lender, account) => {
|
|
|
28183
28219
|
])
|
|
28184
28220
|
]);
|
|
28185
28221
|
};
|
|
28186
|
-
var
|
|
28222
|
+
var DSS_CALLS_PER_CDP = 1;
|
|
28187
28223
|
var MAX_CDP_WALK = 64;
|
|
28188
28224
|
var CACHE_TTL_MS2 = 5 * 6e4;
|
|
28189
28225
|
var discoveryCache4 = /* @__PURE__ */ new Map();
|
|
28190
|
-
var cacheKey2 = (chainId, account) => `${chainId}:${account.toLowerCase()}`;
|
|
28191
|
-
var
|
|
28192
|
-
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));
|
|
28193
28229
|
if (!hit || Date.now() - hit.at > CACHE_TTL_MS2) return void 0;
|
|
28194
28230
|
return hit;
|
|
28195
28231
|
};
|
|
@@ -28202,10 +28238,10 @@ var big3 = (v) => {
|
|
|
28202
28238
|
return 0n;
|
|
28203
28239
|
};
|
|
28204
28240
|
var field6 = (res, name, idx) => res?.[name] ?? res?.[idx];
|
|
28205
|
-
var
|
|
28206
|
-
const cfg =
|
|
28207
|
-
const markets =
|
|
28208
|
-
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);
|
|
28209
28245
|
if (!cfg || markets.length === 0) {
|
|
28210
28246
|
stash({ cdps: [], ilks: [], at: Date.now() });
|
|
28211
28247
|
return [];
|
|
@@ -28255,7 +28291,7 @@ var buildUsddUserCall = async (chainId, lender, account) => {
|
|
|
28255
28291
|
);
|
|
28256
28292
|
if (head.count > BigInt(MAX_CDP_WALK)) {
|
|
28257
28293
|
console.warn(
|
|
28258
|
-
|
|
28294
|
+
`${lender}: owner ${head.owner} holds ${head.count} CDPs on chain ${chainId} \u2014 truncating discovery at ${MAX_CDP_WALK}`
|
|
28259
28295
|
);
|
|
28260
28296
|
}
|
|
28261
28297
|
for (let i = 0; i < steps && cursor !== 0n; i++) {
|
|
@@ -28289,13 +28325,13 @@ var buildUsddUserCall = async (chainId, lender, account) => {
|
|
|
28289
28325
|
const calls = cdps.map((c) => ({
|
|
28290
28326
|
address: cfg.vat,
|
|
28291
28327
|
name: "urns",
|
|
28292
|
-
params: [
|
|
28328
|
+
params: [dssIlkBytes32(c.ilk), c.urn]
|
|
28293
28329
|
}));
|
|
28294
28330
|
for (const ilk of ilks) {
|
|
28295
28331
|
calls.push({
|
|
28296
28332
|
address: cfg.vat,
|
|
28297
28333
|
name: "ilks",
|
|
28298
|
-
params: [
|
|
28334
|
+
params: [dssIlkBytes32(ilk)]
|
|
28299
28335
|
});
|
|
28300
28336
|
}
|
|
28301
28337
|
return calls;
|
|
@@ -28530,7 +28566,7 @@ async function buildUserCall(chainId, lender, account, params, getClient) {
|
|
|
28530
28566
|
return buildLlamaLendUserCall(chainId, lender, account);
|
|
28531
28567
|
if (isResupply(lender)) return buildResupplyUserCall(chainId, lender, account);
|
|
28532
28568
|
if (isCurvance(lender)) return buildCurvanceUserCall(chainId, lender, account);
|
|
28533
|
-
if (
|
|
28569
|
+
if (isDssType(lender)) return buildDssUserCall(chainId, lender, account);
|
|
28534
28570
|
if (isFrankencoin(lender))
|
|
28535
28571
|
return buildFrankencoinUserCall(chainId, lender, account);
|
|
28536
28572
|
if (isCompoundV3Type(lender))
|
|
@@ -28569,12 +28605,13 @@ function organizeUserQueries(queries) {
|
|
|
28569
28605
|
const teller = queries.filter((q) => isTeller(q.lender));
|
|
28570
28606
|
const termMax = queries.filter((q) => isTermMax(q.lender));
|
|
28571
28607
|
const usdd = queries.filter((q) => isUsdd(q.lender));
|
|
28608
|
+
const sky = queries.filter((q) => isSky(q.lender));
|
|
28572
28609
|
const llamaLend = queries.filter((q) => isLlamaLend(q.lender));
|
|
28573
28610
|
const frankencoin = queries.filter((q) => isFrankencoin(q.lender));
|
|
28574
|
-
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)
|
|
28575
28612
|
return queries;
|
|
28576
28613
|
const others = queries.filter(
|
|
28577
|
-
(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)
|
|
28578
28615
|
);
|
|
28579
28616
|
const morphoBlue = morphos.filter((q) => q.lender.startsWith("MORPHO_BLUE"));
|
|
28580
28617
|
const moolah = morphos.filter((q) => q.lender.startsWith("LISTA_DAO"));
|
|
@@ -28651,6 +28688,14 @@ function organizeUserQueries(queries) {
|
|
|
28651
28688
|
assets: void 0
|
|
28652
28689
|
});
|
|
28653
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
|
+
}
|
|
28654
28699
|
if (llamaLend.length > 0) {
|
|
28655
28700
|
result.push({
|
|
28656
28701
|
lender: Lender.LLAMALEND,
|
|
@@ -32190,27 +32235,29 @@ var big10 = (v) => {
|
|
|
32190
32235
|
return 0n;
|
|
32191
32236
|
};
|
|
32192
32237
|
var field9 = (res, name, idx) => big10(res?.[name] ?? res?.[idx]);
|
|
32193
|
-
var
|
|
32194
|
-
const cfg =
|
|
32195
|
-
const markets =
|
|
32196
|
-
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);
|
|
32197
32242
|
const cdps = discovery?.cdps ?? [];
|
|
32198
32243
|
const ilks = discovery?.ilks ?? [];
|
|
32199
|
-
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;
|
|
32200
32245
|
return [
|
|
32201
32246
|
(data) => {
|
|
32202
32247
|
if (!cfg || expected === 0) return void 0;
|
|
32203
32248
|
if (!data || data.length < expected) return void 0;
|
|
32204
|
-
const
|
|
32249
|
+
const rawDebtAddr = dssDebtToken(cfg);
|
|
32250
|
+
if (!rawDebtAddr) return void 0;
|
|
32251
|
+
const debtAddr = rawDebtAddr.toLowerCase();
|
|
32205
32252
|
const debtDecimals = cfg.debtDecimals ?? 18;
|
|
32206
32253
|
const rateByIlk = /* @__PURE__ */ new Map();
|
|
32207
32254
|
ilks.forEach((ilk, i) => {
|
|
32208
|
-
const res = data[cdps.length *
|
|
32255
|
+
const res = data[cdps.length * DSS_CALLS_PER_CDP + i];
|
|
32209
32256
|
if (!isFailedCall(res)) rateByIlk.set(ilk, field9(res, "rate", 1));
|
|
32210
32257
|
});
|
|
32211
32258
|
const perMarket = /* @__PURE__ */ new Map();
|
|
32212
32259
|
cdps.forEach((cdp, i) => {
|
|
32213
|
-
const res = data[i *
|
|
32260
|
+
const res = data[i * DSS_CALLS_PER_CDP];
|
|
32214
32261
|
if (isFailedCall(res)) return;
|
|
32215
32262
|
const ink = field9(res, "ink", 0);
|
|
32216
32263
|
const art = field9(res, "art", 1);
|
|
@@ -32219,7 +32266,7 @@ var getUsddUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
32219
32266
|
if (ink === 0n && debt === 0n) return;
|
|
32220
32267
|
const market = markets.find((m) => m.ilk === cdp.ilk);
|
|
32221
32268
|
if (!market) return;
|
|
32222
|
-
const key2 =
|
|
32269
|
+
const key2 = dssLenderKey(lender, chainId, cdp.ilk);
|
|
32223
32270
|
if (!perMarket.has(key2)) perMarket.set(key2, { market, positions: [] });
|
|
32224
32271
|
perMarket.get(key2).positions.push({ cdp, ink, debt });
|
|
32225
32272
|
});
|
|
@@ -32247,7 +32294,7 @@ var getUsddUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
32247
32294
|
const collNum = Number(collStr);
|
|
32248
32295
|
const debtStr = parseRawAmount(debt.toString(), debtDecimals);
|
|
32249
32296
|
const debtNum = Number(debtStr);
|
|
32250
|
-
const
|
|
32297
|
+
const dssInfo = { ...cdp };
|
|
32251
32298
|
lendingPositions[cdp.cdpId] = {
|
|
32252
32299
|
[collUid]: {
|
|
32253
32300
|
marketUid: collUid,
|
|
@@ -32280,7 +32327,7 @@ var getUsddUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
32280
32327
|
stableBorrowRate: "0",
|
|
32281
32328
|
collateralEnabled: false,
|
|
32282
32329
|
claimableRewards: 0,
|
|
32283
|
-
|
|
32330
|
+
dssInfo
|
|
32284
32331
|
}
|
|
32285
32332
|
};
|
|
32286
32333
|
modes[cdp.cdpId] = 0;
|
|
@@ -32768,21 +32815,21 @@ function checkSubAccount(entry) {
|
|
|
32768
32815
|
const accountId = entry?.accountId ?? "0";
|
|
32769
32816
|
const balance = entry?.balanceData;
|
|
32770
32817
|
const apr = entry?.aprData;
|
|
32771
|
-
for (const
|
|
32772
|
-
if (isBadNumber(balance?.[
|
|
32818
|
+
for (const field13 of BALANCE_FIELDS) {
|
|
32819
|
+
if (isBadNumber(balance?.[field13]))
|
|
32773
32820
|
violations.push({
|
|
32774
32821
|
accountId,
|
|
32775
32822
|
code: "non-finite",
|
|
32776
|
-
detail: `balanceData.${
|
|
32823
|
+
detail: `balanceData.${field13} = ${balance[field13]}`,
|
|
32777
32824
|
requiresFailedReads: false
|
|
32778
32825
|
});
|
|
32779
32826
|
}
|
|
32780
|
-
for (const
|
|
32781
|
-
if (isBadNumber(apr?.[
|
|
32827
|
+
for (const field13 of APR_FIELDS) {
|
|
32828
|
+
if (isBadNumber(apr?.[field13]))
|
|
32782
32829
|
violations.push({
|
|
32783
32830
|
accountId,
|
|
32784
32831
|
code: "non-finite",
|
|
32785
|
-
detail: `aprData.${
|
|
32832
|
+
detail: `aprData.${field13} = ${apr[field13]}`,
|
|
32786
32833
|
requiresFailedReads: false
|
|
32787
32834
|
});
|
|
32788
32835
|
}
|
|
@@ -32873,8 +32920,8 @@ function getUserDataConverter(lender, chainId, account, params, meta) {
|
|
|
32873
32920
|
return getResupplyUserDataConverter(lender, chainId, account, meta);
|
|
32874
32921
|
if (isCurvance(lender))
|
|
32875
32922
|
return getCurvanceUserDataConverter(lender, chainId, account, meta);
|
|
32876
|
-
if (
|
|
32877
|
-
return
|
|
32923
|
+
if (isDssType(lender))
|
|
32924
|
+
return getDssUserDataConverter(lender, chainId, account, meta);
|
|
32878
32925
|
if (isFrankencoin(lender))
|
|
32879
32926
|
return getFrankencoinUserDataConverter(lender, chainId, account, meta);
|
|
32880
32927
|
if (isCompoundV3Type(lender))
|
|
@@ -37532,7 +37579,7 @@ var getAbi2 = (lender) => {
|
|
|
37532
37579
|
return [...InverseMarketAbi, ...InverseEscrowAbi, ...InverseDbrAbi];
|
|
37533
37580
|
if (isLlamaLend(lender))
|
|
37534
37581
|
return [...LlamaLendControllerAbi, ...LlamaLendAmmAbi];
|
|
37535
|
-
if (
|
|
37582
|
+
if (isDssType(lender)) return [...UsddVatAbi];
|
|
37536
37583
|
if (isFrankencoin(lender))
|
|
37537
37584
|
return [...FrankencoinPositionAbi, ...erc20Abi];
|
|
37538
37585
|
if (isResupply(lender))
|
|
@@ -38304,8 +38351,8 @@ function calculateOverallNetApr(totalDepositsUSD, totalDebtUSD, avgDepositApr, a
|
|
|
38304
38351
|
return (totalDepositsUSD * avgDepositApr - totalDebtUSD * avgBorrowApr) / Math.abs(totalNetWorth) * (totalNetWorth > 0 ? 1 : -1);
|
|
38305
38352
|
}
|
|
38306
38353
|
function calculateWeightedAprs(items) {
|
|
38307
|
-
const wa = (
|
|
38308
|
-
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]) }))
|
|
38309
38356
|
);
|
|
38310
38357
|
return {
|
|
38311
38358
|
apr: wa("apr", "nav"),
|
|
@@ -47963,6 +48010,96 @@ var riverFetcher = {
|
|
|
47963
48010
|
parse: parseRiverResults,
|
|
47964
48011
|
getAbi: getRiverAbi
|
|
47965
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
|
+
};
|
|
47966
48103
|
var READS_PER_ASSET = 2;
|
|
47967
48104
|
function getCurvanceCalls(chainId) {
|
|
47968
48105
|
const results = [];
|
|
@@ -50117,6 +50254,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
50117
50254
|
() => riverFetcher.getCalls(chainId),
|
|
50118
50255
|
getCallsErrors
|
|
50119
50256
|
) : [];
|
|
50257
|
+
const dssResults = isActive("dss") ? safeGetCalls("dss", () => dssFetcher.getCalls(chainId), getCallsErrors) : [];
|
|
50120
50258
|
const curvanceResults = isActive("curvance") ? safeGetCalls(
|
|
50121
50259
|
"curvance",
|
|
50122
50260
|
() => curvanceFetcher.getCalls(chainId),
|
|
@@ -50253,6 +50391,13 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
50253
50391
|
getRiverAbi(),
|
|
50254
50392
|
"direct"
|
|
50255
50393
|
);
|
|
50394
|
+
const dssGroup = buildGroup(
|
|
50395
|
+
"dss",
|
|
50396
|
+
dssResults,
|
|
50397
|
+
dssFetcher.parse,
|
|
50398
|
+
dssFetcher.getAbi(),
|
|
50399
|
+
"direct"
|
|
50400
|
+
);
|
|
50256
50401
|
const curvanceGroup = buildGroup(
|
|
50257
50402
|
"curvance",
|
|
50258
50403
|
curvanceResults,
|
|
@@ -50332,6 +50477,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
50332
50477
|
termGroup,
|
|
50333
50478
|
liquityGroup,
|
|
50334
50479
|
riverGroup,
|
|
50480
|
+
dssGroup,
|
|
50335
50481
|
curvanceGroup,
|
|
50336
50482
|
inverseGroup,
|
|
50337
50483
|
tellerGroup,
|
|
@@ -50382,6 +50528,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
50382
50528
|
termData,
|
|
50383
50529
|
liquityData,
|
|
50384
50530
|
riverData,
|
|
50531
|
+
dssData,
|
|
50385
50532
|
curvanceData,
|
|
50386
50533
|
inverseData,
|
|
50387
50534
|
tellerData,
|
|
@@ -50510,6 +50657,14 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
50510
50657
|
allowFailure,
|
|
50511
50658
|
rpcOverrides
|
|
50512
50659
|
),
|
|
50660
|
+
executeGroup(
|
|
50661
|
+
dssGroup,
|
|
50662
|
+
chainId,
|
|
50663
|
+
chainBatchSize,
|
|
50664
|
+
retries,
|
|
50665
|
+
allowFailure,
|
|
50666
|
+
rpcOverrides
|
|
50667
|
+
),
|
|
50513
50668
|
executeGroup(
|
|
50514
50669
|
curvanceGroup,
|
|
50515
50670
|
chainId,
|
|
@@ -50669,6 +50824,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
50669
50824
|
parseTrackers(termGroup, termData.results);
|
|
50670
50825
|
parseTrackers(liquityGroup, liquityData.results);
|
|
50671
50826
|
parseTrackers(riverGroup, riverData.results);
|
|
50827
|
+
parseTrackers(dssGroup, dssData.results);
|
|
50672
50828
|
parseTrackers(curvanceGroup, curvanceData.results);
|
|
50673
50829
|
parseTrackers(inverseGroup, inverseData.results);
|
|
50674
50830
|
if (siloV2GqlEntries != null) {
|
|
@@ -51269,10 +51425,10 @@ function createAssetArrayPerChain() {
|
|
|
51269
51425
|
return assetsPerChain;
|
|
51270
51426
|
}
|
|
51271
51427
|
var RELEVANT_LENDING_ASSETS = () => createAssetArrayPerChain();
|
|
51272
|
-
function createSimpleArrayPerChain(fork,
|
|
51428
|
+
function createSimpleArrayPerChain(fork, field13 = void 0) {
|
|
51273
51429
|
let pools = {};
|
|
51274
51430
|
Object.entries(fork ?? {}).forEach(([b2, data]) => {
|
|
51275
|
-
Object.entries(
|
|
51431
|
+
Object.entries(field13 ? data[field13] : data).forEach(
|
|
51276
51432
|
([chainId, address]) => {
|
|
51277
51433
|
if (!pools[chainId]) pools[chainId] = [];
|
|
51278
51434
|
pools[chainId] = uniq2([...pools[chainId], { address, pool: b2 }]);
|
|
@@ -53479,9 +53635,9 @@ query EvkByAssets($assets: [Bytes!]!) {
|
|
|
53479
53635
|
`;
|
|
53480
53636
|
var ZERO2 = 0n;
|
|
53481
53637
|
var RAY_TO_PERCENT3 = 1e25;
|
|
53482
|
-
function readAddress2(
|
|
53483
|
-
if (!
|
|
53484
|
-
return
|
|
53638
|
+
function readAddress2(field13) {
|
|
53639
|
+
if (!field13) return void 0;
|
|
53640
|
+
return field13.toLowerCase();
|
|
53485
53641
|
}
|
|
53486
53642
|
function parseVaultFee(v) {
|
|
53487
53643
|
if (v.performanceFee == null) return 0;
|
|
@@ -53846,7 +54002,7 @@ var num4 = (v) => {
|
|
|
53846
54002
|
const n = Number(v);
|
|
53847
54003
|
return Number.isFinite(n) ? n : 0;
|
|
53848
54004
|
};
|
|
53849
|
-
var
|
|
54005
|
+
var big14 = (v) => {
|
|
53850
54006
|
try {
|
|
53851
54007
|
if (v === void 0 || v === null || v === "") return "0";
|
|
53852
54008
|
const s = String(v);
|
|
@@ -53882,12 +54038,12 @@ async function fetchTermMaxVaultsFromApi(chainId, prices = {}, tokenList = {}, f
|
|
|
53882
54038
|
const assetEntry = tokenList[underlying];
|
|
53883
54039
|
const priceKey = toOracleKey(assetEntry?.assetGroup) || toGenericPriceKey(underlying, chainId);
|
|
53884
54040
|
const priceUsd = prices[priceKey];
|
|
53885
|
-
const totalAssets =
|
|
53886
|
-
const totalSupply =
|
|
54041
|
+
const totalAssets = big14(r.totalAssets);
|
|
54042
|
+
const totalSupply = big14(r.totalSupplyAmt);
|
|
53887
54043
|
const totalAssetsFormatted = Number(totalAssets) / scale2;
|
|
53888
54044
|
const supplyRate = num4(r.apr) * 100;
|
|
53889
54045
|
const rewardsRate = num4(r?.incentiveData?.TMX_APR) * 100;
|
|
53890
|
-
const rawLiquidity = BigInt(
|
|
54046
|
+
const rawLiquidity = BigInt(big14(r.redeemableAmt ?? r.idleFunds ?? "0"));
|
|
53891
54047
|
const totalAssetsBig = BigInt(totalAssets);
|
|
53892
54048
|
const liquidity = (rawLiquidity > totalAssetsBig ? totalAssetsBig : rawLiquidity).toString();
|
|
53893
54049
|
const liquidityFormatted = Number(liquidity) / scale2;
|
|
@@ -53923,7 +54079,7 @@ async function fetchTermMaxVaultsFromApi(chainId, prices = {}, tokenList = {}, f
|
|
|
53923
54079
|
liquidityUsd: priceUsd ? liquidityFormatted * priceUsd : 0,
|
|
53924
54080
|
version: r.version,
|
|
53925
54081
|
isPaused: r.isPaused === true || void 0,
|
|
53926
|
-
supplyCap: r.capacity ?
|
|
54082
|
+
supplyCap: r.capacity ? big14(r.capacity) : void 0,
|
|
53927
54083
|
basePool: r.poolAddress ? lower2(r.poolAddress) : void 0
|
|
53928
54084
|
};
|
|
53929
54085
|
}
|
|
@@ -53979,7 +54135,7 @@ var Erc20DecimalsBalanceAbi = [
|
|
|
53979
54135
|
|
|
53980
54136
|
// src/vaults/termmax/fetchFromChain.ts
|
|
53981
54137
|
var DECIMAL_BASE2 = 100000000n;
|
|
53982
|
-
var
|
|
54138
|
+
var big15 = (v) => {
|
|
53983
54139
|
if (v === void 0 || v === null || v === "0x") return 0n;
|
|
53984
54140
|
try {
|
|
53985
54141
|
return typeof v === "bigint" ? v : BigInt(v);
|
|
@@ -54043,7 +54199,7 @@ var fetchTermMaxVaultsFromChain = async (chainId, multicallRetry, prices = {}, t
|
|
|
54043
54199
|
vaults.forEach((address, i) => {
|
|
54044
54200
|
const at = (k) => res[i * READS_PER_VAULT + VAULT_READS.indexOf(k)];
|
|
54045
54201
|
const asset = addr(at("asset"));
|
|
54046
|
-
const totalAssets =
|
|
54202
|
+
const totalAssets = big15(at("totalAssets"));
|
|
54047
54203
|
if (!asset || totalAssets === 0n) return;
|
|
54048
54204
|
rows.push({
|
|
54049
54205
|
address,
|
|
@@ -54052,11 +54208,11 @@ var fetchTermMaxVaultsFromChain = async (chainId, multicallRetry, prices = {}, t
|
|
|
54052
54208
|
decimals: num5(at("decimals")) ?? 18,
|
|
54053
54209
|
asset,
|
|
54054
54210
|
totalAssets,
|
|
54055
|
-
totalSupply:
|
|
54056
|
-
annualizedInterest:
|
|
54057
|
-
accretingPrincipal:
|
|
54058
|
-
performanceFeeRate:
|
|
54059
|
-
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,
|
|
54060
54216
|
curator: addr(at("curator")),
|
|
54061
54217
|
guardian: addr(at("guardian")),
|
|
54062
54218
|
timelock: num5(at("timelock")),
|
|
@@ -54077,7 +54233,7 @@ var fetchTermMaxVaultsFromChain = async (chainId, multicallRetry, prices = {}, t
|
|
|
54077
54233
|
const out = {};
|
|
54078
54234
|
rows.forEach((r, i) => {
|
|
54079
54235
|
const assetDecimals = num5(res2[i * 2]) ?? r.decimals;
|
|
54080
|
-
const idle =
|
|
54236
|
+
const idle = big15(res2[i * 2 + 1]);
|
|
54081
54237
|
const assetEntry = tokenList[r.asset];
|
|
54082
54238
|
const priceKey = toOracleKey(assetEntry?.assetGroup) || toGenericPriceKey(r.asset, chainId);
|
|
54083
54239
|
const priceUsd = prices[priceKey];
|
|
@@ -61482,23 +61638,23 @@ var priceGmMarkets = async (chainId, multicallRetry, markets, prices) => {
|
|
|
61482
61638
|
const indexMax = price(prices, m.indexToken)?.max;
|
|
61483
61639
|
if (Array.isArray(dsRes) && longMax != null && shortMax != null) {
|
|
61484
61640
|
const base = i * SLOTS;
|
|
61485
|
-
const
|
|
61641
|
+
const big16 = (j) => typeof dsRes[base + j] === "bigint" ? dsRes[base + j] : 0n;
|
|
61486
61642
|
const cap = computeDepositCapacityUsd(
|
|
61487
|
-
[info?.longTokenAmount, longMax,
|
|
61488
|
-
[info?.shortTokenAmount, shortMax,
|
|
61643
|
+
[info?.longTokenAmount, longMax, big16(0), big16(2)],
|
|
61644
|
+
[info?.shortTokenAmount, shortMax, big16(1), big16(3)]
|
|
61489
61645
|
);
|
|
61490
61646
|
if (cap != null) value.depositCapacityUsd = cap;
|
|
61491
61647
|
if (indexMax != null) {
|
|
61492
61648
|
const divisor = m.longToken.toLowerCase() === m.shortToken.toLowerCase() ? 2n : 1n;
|
|
61493
|
-
const reservedUsdLong = (
|
|
61494
|
-
const reservedUsdShort = (
|
|
61649
|
+
const reservedUsdLong = (big16(4) + big16(5)) / divisor * indexMax;
|
|
61650
|
+
const reservedUsdShort = (big16(6) + big16(7)) / divisor;
|
|
61495
61651
|
const liq = computeLiquidityUsd(
|
|
61496
61652
|
info?.longTokenUsd,
|
|
61497
61653
|
info?.shortTokenUsd,
|
|
61498
61654
|
reservedUsdLong,
|
|
61499
61655
|
reservedUsdShort,
|
|
61500
|
-
|
|
61501
|
-
|
|
61656
|
+
big16(8),
|
|
61657
|
+
big16(9)
|
|
61502
61658
|
);
|
|
61503
61659
|
if (liq != null)
|
|
61504
61660
|
value.liquidityUsd = Math.max(0, Math.min(liq, value.tvlUsd));
|
|
@@ -61697,21 +61853,21 @@ var fetchGmxExecutionFees = async (chainId, multicallRetry, gasPriceWei) => {
|
|
|
61697
61853
|
} catch {
|
|
61698
61854
|
return void 0;
|
|
61699
61855
|
}
|
|
61700
|
-
const
|
|
61701
|
-
const base =
|
|
61702
|
-
const mult =
|
|
61856
|
+
const big16 = (i) => typeof res[i] === "bigint" ? res[i] : 0n;
|
|
61857
|
+
const base = big16(0);
|
|
61858
|
+
const mult = big16(1);
|
|
61703
61859
|
if (base === 0n && mult === 0n) return void 0;
|
|
61704
61860
|
const PRECISION = 10n ** 30n;
|
|
61705
61861
|
const adjusted = (opGas) => base + opGas * mult / PRECISION;
|
|
61706
61862
|
const fee = (opGas) => (adjusted(opGas) * gasPriceWei).toString();
|
|
61707
|
-
const glvExtra =
|
|
61863
|
+
const glvExtra = big16(6) * GLV_NOMINAL_MARKET_COUNT;
|
|
61708
61864
|
return {
|
|
61709
61865
|
chainId,
|
|
61710
61866
|
gasPriceWei: gasPriceWei.toString(),
|
|
61711
|
-
deposit: fee(
|
|
61712
|
-
withdrawal: fee(
|
|
61713
|
-
glvDeposit: fee(
|
|
61714
|
-
glvWithdrawal: fee(
|
|
61867
|
+
deposit: fee(big16(2)),
|
|
61868
|
+
withdrawal: fee(big16(3)),
|
|
61869
|
+
glvDeposit: fee(big16(4) + glvExtra),
|
|
61870
|
+
glvWithdrawal: fee(big16(5) + glvExtra)
|
|
61715
61871
|
};
|
|
61716
61872
|
};
|
|
61717
61873
|
|
|
@@ -63059,6 +63215,7 @@ var ROW_DESCRIPTOR_KEYS = [
|
|
|
63059
63215
|
"inverse",
|
|
63060
63216
|
"exactly",
|
|
63061
63217
|
"usdd",
|
|
63218
|
+
"dss",
|
|
63062
63219
|
"termmax",
|
|
63063
63220
|
// These five were missing, and the failure is SILENT: the adapter still
|
|
63064
63221
|
// runs, reads an empty descriptor and returns a sheet that looks complete
|
|
@@ -63680,9 +63837,12 @@ var TERM_PROFILES = [
|
|
|
63680
63837
|
}
|
|
63681
63838
|
}),
|
|
63682
63839
|
P({
|
|
63683
|
-
id: "
|
|
63684
|
-
name: "
|
|
63685
|
-
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",
|
|
63686
63846
|
borrow: {
|
|
63687
63847
|
description: "A Maker-style CDP with a governance-set stability fee and no utilization curve.",
|
|
63688
63848
|
implications: [
|
|
@@ -64003,8 +64163,8 @@ function resolveMinDebt(input) {
|
|
|
64003
64163
|
m.river?.minNetDebt,
|
|
64004
64164
|
// Inverse FiRM.
|
|
64005
64165
|
m.inverse?.minDebt,
|
|
64006
|
-
//
|
|
64007
|
-
m.usdd?.dust,
|
|
64166
|
+
// dss (Sky / the USDD fork): `dust` IS the per-vault debt floor.
|
|
64167
|
+
m.dss?.dust ?? m.usdd?.dust,
|
|
64008
64168
|
// Gearbox credit facade.
|
|
64009
64169
|
m.gearbox?.minDebt,
|
|
64010
64170
|
// Resupply — a hard per-position floor that also bounds partial repayment.
|
|
@@ -65170,10 +65330,10 @@ var inverseAdapter = {
|
|
|
65170
65330
|
}
|
|
65171
65331
|
})
|
|
65172
65332
|
};
|
|
65173
|
-
var
|
|
65174
|
-
id: "
|
|
65175
|
-
matches:
|
|
65176
|
-
profileId: () => "
|
|
65333
|
+
var dssAdapter = {
|
|
65334
|
+
id: "dss",
|
|
65335
|
+
matches: isDssType,
|
|
65336
|
+
profileId: () => "dss.cdp@v1",
|
|
65177
65337
|
build: () => ({
|
|
65178
65338
|
borrow: {
|
|
65179
65339
|
rate: { kind: "variable-managed", source: "governance", isLocked: false },
|
|
@@ -65587,7 +65747,7 @@ var TERM_ADAPTERS = [
|
|
|
65587
65747
|
liquityAdapter,
|
|
65588
65748
|
riverAdapter,
|
|
65589
65749
|
inverseAdapter,
|
|
65590
|
-
|
|
65750
|
+
dssAdapter,
|
|
65591
65751
|
compoundV3Adapter,
|
|
65592
65752
|
fluidAdapter,
|
|
65593
65753
|
gearboxAdapter,
|
|
@@ -66029,6 +66189,6 @@ function validateTermSheets(sheets) {
|
|
|
66029
66189
|
return sheets.flatMap((s) => validateTermSheet(s));
|
|
66030
66190
|
}
|
|
66031
66191
|
|
|
66032
|
-
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 };
|
|
66033
66193
|
//# sourceMappingURL=index.js.map
|
|
66034
66194
|
//# sourceMappingURL=index.js.map
|