@1delta/margin-fetcher 5.0.14 → 5.0.16
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 +84 -39
- package/dist/index.js +340 -178
- 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,92 @@ 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
|
|
25080
|
-
return `${lender}_${chainId}_${ilk}`;
|
|
25081
|
-
}
|
|
25082
|
-
|
|
25083
|
-
|
|
25084
|
-
|
|
25085
|
-
|
|
25096
|
+
var fetchUsddMarkets = fetchDssMarkets;
|
|
25097
|
+
var usddIlkBytes32 = dssIlkBytes32;
|
|
25098
|
+
function dssLenderKey(lender, chainId, ilk) {
|
|
25099
|
+
return `${lender}_${chainId}_${ilkToKeySegment(ilk)}`;
|
|
25100
|
+
}
|
|
25101
|
+
var ilkToKeySegment = (ilk) => ilk.replace(/-/g, "_");
|
|
25102
|
+
var keySegmentToIlk = (seg) => seg.replace(/_/g, "-");
|
|
25103
|
+
var DSS_KEY_PREFIXES = ["USDD", "SKY"];
|
|
25104
|
+
var DSS_KEY_RE = new RegExp(
|
|
25105
|
+
`^(${DSS_KEY_PREFIXES.join("|")})_(\\d+)_([A-Z0-9][A-Z0-9_-]*)$`
|
|
25106
|
+
);
|
|
25107
|
+
function dssKeyParts(key2) {
|
|
25108
|
+
const m = key2.match(DSS_KEY_RE);
|
|
25086
25109
|
if (!m) return void 0;
|
|
25087
|
-
return { lender:
|
|
25110
|
+
return { lender: m[1], chainId: m[2], ilk: keySegmentToIlk(m[3]) };
|
|
25088
25111
|
}
|
|
25089
25112
|
var WAD9 = 1e18;
|
|
25090
25113
|
var RAY4 = 1e27;
|
|
@@ -25097,7 +25120,7 @@ function currencyFor12(address, decimals, symbol, tokens) {
|
|
|
25097
25120
|
const lower3 = address.toLowerCase();
|
|
25098
25121
|
return tokens[lower3] ?? { address: lower3, symbol, name: symbol, decimals };
|
|
25099
25122
|
}
|
|
25100
|
-
function
|
|
25123
|
+
function convertDssMarketsToResponse(raw, chainId, prices = {}, _additionalYields = {
|
|
25101
25124
|
intrinsicYields: {},
|
|
25102
25125
|
lenderRewards: {},
|
|
25103
25126
|
loaded: true
|
|
@@ -25106,15 +25129,18 @@ function convertUsddMarketsToResponse(raw, chainId, prices = {}, _additionalYiel
|
|
|
25106
25129
|
const cfg = raw?.config;
|
|
25107
25130
|
const chainData = raw?.chainData;
|
|
25108
25131
|
if (!cfg || !chainData) return out;
|
|
25109
|
-
const
|
|
25132
|
+
const rawDebtAddr = dssDebtToken(cfg);
|
|
25133
|
+
if (!rawDebtAddr) return out;
|
|
25134
|
+
const debtAddr = rawDebtAddr.toLowerCase();
|
|
25135
|
+
const debtJoin = dssDebtJoin(cfg);
|
|
25110
25136
|
const debtDecimals = cfg.debtDecimals ?? 18;
|
|
25111
25137
|
const debtToken = tokens[debtAddr];
|
|
25112
|
-
const debtSymbol = debtToken?.symbol ?? "USDD";
|
|
25138
|
+
const debtSymbol = debtToken?.symbol ?? cfg.debtSymbol ?? "USDD";
|
|
25113
25139
|
const debtPriceKey = toOracleKey(debtToken?.assetGroup) || toGenericPriceKey(debtAddr, chainId);
|
|
25114
25140
|
const debtPrice = prices[debtPriceKey] || 1;
|
|
25115
25141
|
for (const m of raw.markets ?? []) {
|
|
25116
25142
|
const market = m.market;
|
|
25117
|
-
const lenderKey =
|
|
25143
|
+
const lenderKey = dssLenderKey(raw.lender, chainId, market.ilk);
|
|
25118
25144
|
const collAddr = market.collToken.toLowerCase();
|
|
25119
25145
|
const collDecimals = market.collDecimals;
|
|
25120
25146
|
const collToken = tokens[collAddr];
|
|
@@ -25133,13 +25159,14 @@ function convertUsddMarketsToResponse(raw, chainId, prices = {}, _additionalYiel
|
|
|
25133
25159
|
const borrowApr = duty > BigInt(1e27) ? Number(duty - BigInt(10) ** BigInt(27)) / RAY4 * YEAR_SECONDS2 * 100 : 0;
|
|
25134
25160
|
const line = m.line !== null ? Number(m.line) / RAD : 0;
|
|
25135
25161
|
let borrowLiquidity = Math.max(0, line - totalDebt);
|
|
25136
|
-
const
|
|
25162
|
+
const offboarded = market.offboarded === true;
|
|
25163
|
+
const halted = line === 0 || offboarded;
|
|
25137
25164
|
const entry = { data: {} };
|
|
25138
25165
|
const collUid = createMarketUid(chainId, lenderKey, collAddr);
|
|
25139
25166
|
entry.data[collUid] = {
|
|
25140
25167
|
marketUid: collUid,
|
|
25141
25168
|
name: "Collateral " + collSymbol,
|
|
25142
|
-
poolId: market.gemJoin
|
|
25169
|
+
poolId: market.gemJoin?.toLowerCase(),
|
|
25143
25170
|
underlying: collAddr,
|
|
25144
25171
|
asset: currencyFor12(collAddr, collDecimals, collSymbol, tokens),
|
|
25145
25172
|
totalDeposits: totalColl,
|
|
@@ -25197,7 +25224,8 @@ function convertUsddMarketsToResponse(raw, chainId, prices = {}, _additionalYiel
|
|
|
25197
25224
|
totalDebtStableUSD: 0,
|
|
25198
25225
|
totalDebtUSD: totalDebt * debtPrice,
|
|
25199
25226
|
utilization: 0,
|
|
25200
|
-
// The earn side is
|
|
25227
|
+
// The earn side is the savings token (savings provider), not a lending
|
|
25228
|
+
// deposit.
|
|
25201
25229
|
depositRate: 0,
|
|
25202
25230
|
variableBorrowRate: borrowApr,
|
|
25203
25231
|
stableBorrowRate: 0,
|
|
@@ -25227,6 +25255,38 @@ function convertUsddMarketsToResponse(raw, chainId, prices = {}, _additionalYiel
|
|
|
25227
25255
|
isActive: !halted,
|
|
25228
25256
|
isFrozen: halted
|
|
25229
25257
|
};
|
|
25258
|
+
const descriptor = {
|
|
25259
|
+
ilk: market.ilk,
|
|
25260
|
+
/** Per-second stability fee (ray string) — live, metadata fallback. */
|
|
25261
|
+
duty: duty.toString(),
|
|
25262
|
+
/** Liquidation ratio (ray string). */
|
|
25263
|
+
mat: m.mat !== null ? m.mat.toString() : market.mat,
|
|
25264
|
+
/** Liquidation penalty multiplier (wad string, Dog.chop). */
|
|
25265
|
+
chop: market.chop,
|
|
25266
|
+
/** Ilk debt ceiling / per-CDP floor (rad strings). */
|
|
25267
|
+
line: m.line !== null ? m.line.toString() : market.line,
|
|
25268
|
+
dust: m.dust !== null ? m.dust.toString() : market.dust,
|
|
25269
|
+
/** Debt accumulator (ray string) — art × rate = debt. */
|
|
25270
|
+
rate: m.rate !== null ? m.rate.toString() : void 0,
|
|
25271
|
+
/** Governance has retired the ilk: no new debt, exits only. */
|
|
25272
|
+
offboarded,
|
|
25273
|
+
addresses: {
|
|
25274
|
+
vat: cfg.vat,
|
|
25275
|
+
jug: cfg.jug,
|
|
25276
|
+
spot: cfg.spot,
|
|
25277
|
+
dog: cfg.dog,
|
|
25278
|
+
cdpManager: cfg.cdpManager,
|
|
25279
|
+
proxyActions: cfg.proxyActions,
|
|
25280
|
+
proxyRegistry: cfg.proxyRegistry,
|
|
25281
|
+
/** DaiJoin-equivalent — the debt enter/exit adapter. */
|
|
25282
|
+
debtJoin,
|
|
25283
|
+
/** @deprecated brand-specific alias of `debtJoin`. */
|
|
25284
|
+
usddJoin: debtJoin,
|
|
25285
|
+
gemJoin: market.gemJoin,
|
|
25286
|
+
clip: market.clip,
|
|
25287
|
+
pip: market.pip
|
|
25288
|
+
}
|
|
25289
|
+
};
|
|
25230
25290
|
entry.params = {
|
|
25231
25291
|
market: {
|
|
25232
25292
|
lender: lenderKey,
|
|
@@ -25235,41 +25295,16 @@ function convertUsddMarketsToResponse(raw, chainId, prices = {}, _additionalYiel
|
|
|
25235
25295
|
collateralDecimals: collDecimals,
|
|
25236
25296
|
// The gem join doubles as the market id (marketUid address) — one
|
|
25237
25297
|
// adapter per ilk, like River's TroveManager.
|
|
25238
|
-
id: market.gemJoin
|
|
25298
|
+
id: market.gemJoin?.toLowerCase(),
|
|
25239
25299
|
lltv: m.mat !== null ? m.mat.toString() : market.mat,
|
|
25240
25300
|
oracle: market.pip ?? zeroAddress,
|
|
25241
25301
|
irm: zeroAddress,
|
|
25242
25302
|
collateralAddress: collAddr,
|
|
25243
25303
|
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
|
-
}
|
|
25304
|
+
dss: descriptor,
|
|
25305
|
+
// Back-compat duplicate: worker-api + the term-sheet input list read
|
|
25306
|
+
// `market.usdd`. Same object, so the two can never drift.
|
|
25307
|
+
usdd: descriptor
|
|
25273
25308
|
}
|
|
25274
25309
|
};
|
|
25275
25310
|
entry.chainId = chainId;
|
|
@@ -25277,6 +25312,9 @@ function convertUsddMarketsToResponse(raw, chainId, prices = {}, _additionalYiel
|
|
|
25277
25312
|
}
|
|
25278
25313
|
return out;
|
|
25279
25314
|
}
|
|
25315
|
+
var convertUsddMarketsToResponse = convertDssMarketsToResponse;
|
|
25316
|
+
var usddLenderKey = dssLenderKey;
|
|
25317
|
+
var usddKeyParts = dssKeyParts;
|
|
25280
25318
|
var READS_PER_MARKET3 = 10;
|
|
25281
25319
|
var FRANKENCOIN_ABI_PER_READ = [
|
|
25282
25320
|
FrankencoinPositionAbi,
|
|
@@ -25324,26 +25362,26 @@ async function fetchFrankencoinMarkets(lender, chainId) {
|
|
|
25324
25362
|
} catch {
|
|
25325
25363
|
return { lender, config, chainData, markets: [] };
|
|
25326
25364
|
}
|
|
25327
|
-
const
|
|
25365
|
+
const big16 = (v) => {
|
|
25328
25366
|
if (typeof v === "bigint") return v;
|
|
25329
25367
|
if (typeof v === "number") return BigInt(v);
|
|
25330
25368
|
return null;
|
|
25331
25369
|
};
|
|
25332
25370
|
const out = markets.map((market, i) => {
|
|
25333
25371
|
const base = i * READS_PER_MARKET3;
|
|
25334
|
-
const expiration =
|
|
25372
|
+
const expiration = big16(results[base + 7]);
|
|
25335
25373
|
return {
|
|
25336
25374
|
market,
|
|
25337
|
-
price:
|
|
25338
|
-
minted:
|
|
25339
|
-
availableForClones:
|
|
25340
|
-
annualInterestPPM:
|
|
25341
|
-
currentFeePPM:
|
|
25342
|
-
reserveContribution:
|
|
25343
|
-
challengedAmount:
|
|
25375
|
+
price: big16(results[base]),
|
|
25376
|
+
minted: big16(results[base + 1]),
|
|
25377
|
+
availableForClones: big16(results[base + 2]),
|
|
25378
|
+
annualInterestPPM: big16(results[base + 3]),
|
|
25379
|
+
currentFeePPM: big16(results[base + 4]),
|
|
25380
|
+
reserveContribution: big16(results[base + 5]),
|
|
25381
|
+
challengedAmount: big16(results[base + 6]),
|
|
25344
25382
|
expiration,
|
|
25345
25383
|
isClosed: typeof results[base + 8] === "boolean" ? results[base + 8] : null,
|
|
25346
|
-
collateralBalance:
|
|
25384
|
+
collateralBalance: big16(results[base + 9])
|
|
25347
25385
|
};
|
|
25348
25386
|
});
|
|
25349
25387
|
return { lender, config, chainData, markets: out };
|
|
@@ -26188,7 +26226,7 @@ async function getLenderDataFromApi(lender, chainId, prices, additionalYields, i
|
|
|
26188
26226
|
if (isResupply(lender)) return await fetchResupplyMarkets(lender, chainId);
|
|
26189
26227
|
if (isCurvance(lender)) return await fetchCurvanceMarkets(lender, chainId);
|
|
26190
26228
|
if (isTermMax(lender)) return await fetchTermMaxMarkets(chainId);
|
|
26191
|
-
if (
|
|
26229
|
+
if (isDssType(lender)) return await fetchDssMarkets(lender, chainId);
|
|
26192
26230
|
if (isFrankencoin(lender))
|
|
26193
26231
|
return await fetchFrankencoinMarkets(lender, chainId);
|
|
26194
26232
|
return {};
|
|
@@ -26284,8 +26322,8 @@ function convertLenderDataFromApi(lender, chainId, data, prices, additionalYield
|
|
|
26284
26322
|
additionalYields,
|
|
26285
26323
|
list
|
|
26286
26324
|
);
|
|
26287
|
-
if (
|
|
26288
|
-
return
|
|
26325
|
+
if (isDssType(lender))
|
|
26326
|
+
return convertDssMarketsToResponse(
|
|
26289
26327
|
data,
|
|
26290
26328
|
chainId,
|
|
26291
26329
|
prices,
|
|
@@ -26503,7 +26541,7 @@ function lenderApiOnly(lender, chainId) {
|
|
|
26503
26541
|
if (isTermMax(lender)) return true;
|
|
26504
26542
|
if (isResupply(lender)) return true;
|
|
26505
26543
|
if (isCurvance(lender)) return true;
|
|
26506
|
-
if (
|
|
26544
|
+
if (isDssType(lender)) return true;
|
|
26507
26545
|
if (isFrankencoin(lender)) return true;
|
|
26508
26546
|
if (isLlamaLend(lender)) return true;
|
|
26509
26547
|
return false;
|
|
@@ -28183,13 +28221,13 @@ var buildCurvanceUserCall = async (chainId, lender, account) => {
|
|
|
28183
28221
|
])
|
|
28184
28222
|
]);
|
|
28185
28223
|
};
|
|
28186
|
-
var
|
|
28224
|
+
var DSS_CALLS_PER_CDP = 1;
|
|
28187
28225
|
var MAX_CDP_WALK = 64;
|
|
28188
28226
|
var CACHE_TTL_MS2 = 5 * 6e4;
|
|
28189
28227
|
var discoveryCache4 = /* @__PURE__ */ new Map();
|
|
28190
|
-
var cacheKey2 = (chainId, account) => `${chainId}:${account.toLowerCase()}`;
|
|
28191
|
-
var
|
|
28192
|
-
const hit = discoveryCache4.get(cacheKey2(chainId, account));
|
|
28228
|
+
var cacheKey2 = (lender, chainId, account) => `${lender}:${chainId}:${account.toLowerCase()}`;
|
|
28229
|
+
var getCachedDssCdps = (lender, chainId, account) => {
|
|
28230
|
+
const hit = discoveryCache4.get(cacheKey2(lender, chainId, account));
|
|
28193
28231
|
if (!hit || Date.now() - hit.at > CACHE_TTL_MS2) return void 0;
|
|
28194
28232
|
return hit;
|
|
28195
28233
|
};
|
|
@@ -28202,10 +28240,10 @@ var big3 = (v) => {
|
|
|
28202
28240
|
return 0n;
|
|
28203
28241
|
};
|
|
28204
28242
|
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);
|
|
28243
|
+
var buildDssUserCall = async (chainId, lender, account) => {
|
|
28244
|
+
const cfg = dssConfigFor(lender, chainId);
|
|
28245
|
+
const markets = dssChainData(lender, chainId)?.markets ?? [];
|
|
28246
|
+
const stash = (d) => discoveryCache4.set(cacheKey2(lender, chainId, account), d);
|
|
28209
28247
|
if (!cfg || markets.length === 0) {
|
|
28210
28248
|
stash({ cdps: [], ilks: [], at: Date.now() });
|
|
28211
28249
|
return [];
|
|
@@ -28255,7 +28293,7 @@ var buildUsddUserCall = async (chainId, lender, account) => {
|
|
|
28255
28293
|
);
|
|
28256
28294
|
if (head.count > BigInt(MAX_CDP_WALK)) {
|
|
28257
28295
|
console.warn(
|
|
28258
|
-
|
|
28296
|
+
`${lender}: owner ${head.owner} holds ${head.count} CDPs on chain ${chainId} \u2014 truncating discovery at ${MAX_CDP_WALK}`
|
|
28259
28297
|
);
|
|
28260
28298
|
}
|
|
28261
28299
|
for (let i = 0; i < steps && cursor !== 0n; i++) {
|
|
@@ -28289,13 +28327,13 @@ var buildUsddUserCall = async (chainId, lender, account) => {
|
|
|
28289
28327
|
const calls = cdps.map((c) => ({
|
|
28290
28328
|
address: cfg.vat,
|
|
28291
28329
|
name: "urns",
|
|
28292
|
-
params: [
|
|
28330
|
+
params: [dssIlkBytes32(c.ilk), c.urn]
|
|
28293
28331
|
}));
|
|
28294
28332
|
for (const ilk of ilks) {
|
|
28295
28333
|
calls.push({
|
|
28296
28334
|
address: cfg.vat,
|
|
28297
28335
|
name: "ilks",
|
|
28298
|
-
params: [
|
|
28336
|
+
params: [dssIlkBytes32(ilk)]
|
|
28299
28337
|
});
|
|
28300
28338
|
}
|
|
28301
28339
|
return calls;
|
|
@@ -28530,7 +28568,7 @@ async function buildUserCall(chainId, lender, account, params, getClient) {
|
|
|
28530
28568
|
return buildLlamaLendUserCall(chainId, lender, account);
|
|
28531
28569
|
if (isResupply(lender)) return buildResupplyUserCall(chainId, lender, account);
|
|
28532
28570
|
if (isCurvance(lender)) return buildCurvanceUserCall(chainId, lender, account);
|
|
28533
|
-
if (
|
|
28571
|
+
if (isDssType(lender)) return buildDssUserCall(chainId, lender, account);
|
|
28534
28572
|
if (isFrankencoin(lender))
|
|
28535
28573
|
return buildFrankencoinUserCall(chainId, lender, account);
|
|
28536
28574
|
if (isCompoundV3Type(lender))
|
|
@@ -28569,12 +28607,13 @@ function organizeUserQueries(queries) {
|
|
|
28569
28607
|
const teller = queries.filter((q) => isTeller(q.lender));
|
|
28570
28608
|
const termMax = queries.filter((q) => isTermMax(q.lender));
|
|
28571
28609
|
const usdd = queries.filter((q) => isUsdd(q.lender));
|
|
28610
|
+
const sky = queries.filter((q) => isSky(q.lender));
|
|
28572
28611
|
const llamaLend = queries.filter((q) => isLlamaLend(q.lender));
|
|
28573
28612
|
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)
|
|
28613
|
+
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
28614
|
return queries;
|
|
28576
28615
|
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) && !
|
|
28616
|
+
(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
28617
|
);
|
|
28579
28618
|
const morphoBlue = morphos.filter((q) => q.lender.startsWith("MORPHO_BLUE"));
|
|
28580
28619
|
const moolah = morphos.filter((q) => q.lender.startsWith("LISTA_DAO"));
|
|
@@ -28651,6 +28690,14 @@ function organizeUserQueries(queries) {
|
|
|
28651
28690
|
assets: void 0
|
|
28652
28691
|
});
|
|
28653
28692
|
}
|
|
28693
|
+
if (sky.length > 0) {
|
|
28694
|
+
result.push({
|
|
28695
|
+
lender: Lender.SKY,
|
|
28696
|
+
account: sky[0].account,
|
|
28697
|
+
params: sky.map((p) => p.lender),
|
|
28698
|
+
assets: void 0
|
|
28699
|
+
});
|
|
28700
|
+
}
|
|
28654
28701
|
if (llamaLend.length > 0) {
|
|
28655
28702
|
result.push({
|
|
28656
28703
|
lender: Lender.LLAMALEND,
|
|
@@ -32190,27 +32237,29 @@ var big10 = (v) => {
|
|
|
32190
32237
|
return 0n;
|
|
32191
32238
|
};
|
|
32192
32239
|
var field9 = (res, name, idx) => big10(res?.[name] ?? res?.[idx]);
|
|
32193
|
-
var
|
|
32194
|
-
const cfg =
|
|
32195
|
-
const markets =
|
|
32196
|
-
const discovery =
|
|
32240
|
+
var getDssUserDataConverter = (lender, chainId, account, meta) => {
|
|
32241
|
+
const cfg = dssConfigFor(lender, chainId);
|
|
32242
|
+
const markets = dssChainData(lender, chainId)?.markets ?? [];
|
|
32243
|
+
const discovery = getCachedDssCdps(lender, chainId, account);
|
|
32197
32244
|
const cdps = discovery?.cdps ?? [];
|
|
32198
32245
|
const ilks = discovery?.ilks ?? [];
|
|
32199
|
-
const expected = cfg && markets.length > 0 && cdps.length > 0 ? cdps.length *
|
|
32246
|
+
const expected = cfg && markets.length > 0 && cdps.length > 0 ? cdps.length * DSS_CALLS_PER_CDP + ilks.length : 0;
|
|
32200
32247
|
return [
|
|
32201
32248
|
(data) => {
|
|
32202
32249
|
if (!cfg || expected === 0) return void 0;
|
|
32203
32250
|
if (!data || data.length < expected) return void 0;
|
|
32204
|
-
const
|
|
32251
|
+
const rawDebtAddr = dssDebtToken(cfg);
|
|
32252
|
+
if (!rawDebtAddr) return void 0;
|
|
32253
|
+
const debtAddr = rawDebtAddr.toLowerCase();
|
|
32205
32254
|
const debtDecimals = cfg.debtDecimals ?? 18;
|
|
32206
32255
|
const rateByIlk = /* @__PURE__ */ new Map();
|
|
32207
32256
|
ilks.forEach((ilk, i) => {
|
|
32208
|
-
const res = data[cdps.length *
|
|
32257
|
+
const res = data[cdps.length * DSS_CALLS_PER_CDP + i];
|
|
32209
32258
|
if (!isFailedCall(res)) rateByIlk.set(ilk, field9(res, "rate", 1));
|
|
32210
32259
|
});
|
|
32211
32260
|
const perMarket = /* @__PURE__ */ new Map();
|
|
32212
32261
|
cdps.forEach((cdp, i) => {
|
|
32213
|
-
const res = data[i *
|
|
32262
|
+
const res = data[i * DSS_CALLS_PER_CDP];
|
|
32214
32263
|
if (isFailedCall(res)) return;
|
|
32215
32264
|
const ink = field9(res, "ink", 0);
|
|
32216
32265
|
const art = field9(res, "art", 1);
|
|
@@ -32219,7 +32268,7 @@ var getUsddUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
32219
32268
|
if (ink === 0n && debt === 0n) return;
|
|
32220
32269
|
const market = markets.find((m) => m.ilk === cdp.ilk);
|
|
32221
32270
|
if (!market) return;
|
|
32222
|
-
const key2 =
|
|
32271
|
+
const key2 = dssLenderKey(lender, chainId, cdp.ilk);
|
|
32223
32272
|
if (!perMarket.has(key2)) perMarket.set(key2, { market, positions: [] });
|
|
32224
32273
|
perMarket.get(key2).positions.push({ cdp, ink, debt });
|
|
32225
32274
|
});
|
|
@@ -32247,7 +32296,7 @@ var getUsddUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
32247
32296
|
const collNum = Number(collStr);
|
|
32248
32297
|
const debtStr = parseRawAmount(debt.toString(), debtDecimals);
|
|
32249
32298
|
const debtNum = Number(debtStr);
|
|
32250
|
-
const
|
|
32299
|
+
const dssInfo = { ...cdp };
|
|
32251
32300
|
lendingPositions[cdp.cdpId] = {
|
|
32252
32301
|
[collUid]: {
|
|
32253
32302
|
marketUid: collUid,
|
|
@@ -32280,7 +32329,7 @@ var getUsddUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
32280
32329
|
stableBorrowRate: "0",
|
|
32281
32330
|
collateralEnabled: false,
|
|
32282
32331
|
claimableRewards: 0,
|
|
32283
|
-
|
|
32332
|
+
dssInfo
|
|
32284
32333
|
}
|
|
32285
32334
|
};
|
|
32286
32335
|
modes[cdp.cdpId] = 0;
|
|
@@ -32768,21 +32817,21 @@ function checkSubAccount(entry) {
|
|
|
32768
32817
|
const accountId = entry?.accountId ?? "0";
|
|
32769
32818
|
const balance = entry?.balanceData;
|
|
32770
32819
|
const apr = entry?.aprData;
|
|
32771
|
-
for (const
|
|
32772
|
-
if (isBadNumber(balance?.[
|
|
32820
|
+
for (const field13 of BALANCE_FIELDS) {
|
|
32821
|
+
if (isBadNumber(balance?.[field13]))
|
|
32773
32822
|
violations.push({
|
|
32774
32823
|
accountId,
|
|
32775
32824
|
code: "non-finite",
|
|
32776
|
-
detail: `balanceData.${
|
|
32825
|
+
detail: `balanceData.${field13} = ${balance[field13]}`,
|
|
32777
32826
|
requiresFailedReads: false
|
|
32778
32827
|
});
|
|
32779
32828
|
}
|
|
32780
|
-
for (const
|
|
32781
|
-
if (isBadNumber(apr?.[
|
|
32829
|
+
for (const field13 of APR_FIELDS) {
|
|
32830
|
+
if (isBadNumber(apr?.[field13]))
|
|
32782
32831
|
violations.push({
|
|
32783
32832
|
accountId,
|
|
32784
32833
|
code: "non-finite",
|
|
32785
|
-
detail: `aprData.${
|
|
32834
|
+
detail: `aprData.${field13} = ${apr[field13]}`,
|
|
32786
32835
|
requiresFailedReads: false
|
|
32787
32836
|
});
|
|
32788
32837
|
}
|
|
@@ -32873,8 +32922,8 @@ function getUserDataConverter(lender, chainId, account, params, meta) {
|
|
|
32873
32922
|
return getResupplyUserDataConverter(lender, chainId, account, meta);
|
|
32874
32923
|
if (isCurvance(lender))
|
|
32875
32924
|
return getCurvanceUserDataConverter(lender, chainId, account, meta);
|
|
32876
|
-
if (
|
|
32877
|
-
return
|
|
32925
|
+
if (isDssType(lender))
|
|
32926
|
+
return getDssUserDataConverter(lender, chainId, account, meta);
|
|
32878
32927
|
if (isFrankencoin(lender))
|
|
32879
32928
|
return getFrankencoinUserDataConverter(lender, chainId, account, meta);
|
|
32880
32929
|
if (isCompoundV3Type(lender))
|
|
@@ -37532,7 +37581,7 @@ var getAbi2 = (lender) => {
|
|
|
37532
37581
|
return [...InverseMarketAbi, ...InverseEscrowAbi, ...InverseDbrAbi];
|
|
37533
37582
|
if (isLlamaLend(lender))
|
|
37534
37583
|
return [...LlamaLendControllerAbi, ...LlamaLendAmmAbi];
|
|
37535
|
-
if (
|
|
37584
|
+
if (isDssType(lender)) return [...UsddVatAbi];
|
|
37536
37585
|
if (isFrankencoin(lender))
|
|
37537
37586
|
return [...FrankencoinPositionAbi, ...erc20Abi];
|
|
37538
37587
|
if (isResupply(lender))
|
|
@@ -38304,8 +38353,8 @@ function calculateOverallNetApr(totalDepositsUSD, totalDebtUSD, avgDepositApr, a
|
|
|
38304
38353
|
return (totalDepositsUSD * avgDepositApr - totalDebtUSD * avgBorrowApr) / Math.abs(totalNetWorth) * (totalNetWorth > 0 ? 1 : -1);
|
|
38305
38354
|
}
|
|
38306
38355
|
function calculateWeightedAprs(items) {
|
|
38307
|
-
const wa = (
|
|
38308
|
-
items.filter((i) => i[weightField] !== 0).map((i) => ({ value: i[
|
|
38356
|
+
const wa = (field13, weightField) => calculateWeightedAverage(
|
|
38357
|
+
items.filter((i) => i[weightField] !== 0).map((i) => ({ value: i[field13], weight: Math.abs(i[weightField]) }))
|
|
38309
38358
|
);
|
|
38310
38359
|
return {
|
|
38311
38360
|
apr: wa("apr", "nav"),
|
|
@@ -47963,6 +48012,96 @@ var riverFetcher = {
|
|
|
47963
48012
|
parse: parseRiverResults,
|
|
47964
48013
|
getAbi: getRiverAbi
|
|
47965
48014
|
};
|
|
48015
|
+
var dssLendersByChain = (chainId) => [
|
|
48016
|
+
...skyLendersByChain(chainId),
|
|
48017
|
+
...usddLendersByChain(chainId)
|
|
48018
|
+
];
|
|
48019
|
+
function getDssCalls(chainId) {
|
|
48020
|
+
const results = [];
|
|
48021
|
+
for (const lender of dssLendersByChain(chainId)) {
|
|
48022
|
+
const cfg = dssConfigFor(lender, chainId);
|
|
48023
|
+
const markets = dssChainData(lender, chainId)?.markets ?? [];
|
|
48024
|
+
if (!cfg?.vat || markets.length === 0) continue;
|
|
48025
|
+
const debtToken = dssDebtToken(cfg);
|
|
48026
|
+
for (const m of markets) {
|
|
48027
|
+
if (!m.ilk || !m.collToken || !m.mat) continue;
|
|
48028
|
+
const calls = [
|
|
48029
|
+
{ address: cfg.vat, name: "ilks", params: [dssIlkBytes32(m.ilk)] }
|
|
48030
|
+
];
|
|
48031
|
+
results.push({
|
|
48032
|
+
calls,
|
|
48033
|
+
meta: {
|
|
48034
|
+
lender,
|
|
48035
|
+
chainId,
|
|
48036
|
+
ilk: m.ilk,
|
|
48037
|
+
collToken: m.collToken.toLowerCase(),
|
|
48038
|
+
debtToken: debtToken?.toLowerCase(),
|
|
48039
|
+
mat: String(m.mat)
|
|
48040
|
+
},
|
|
48041
|
+
lender: dssLenderKey(lender, chainId, m.ilk)
|
|
48042
|
+
});
|
|
48043
|
+
}
|
|
48044
|
+
}
|
|
48045
|
+
return results;
|
|
48046
|
+
}
|
|
48047
|
+
var RAY8 = 1e27;
|
|
48048
|
+
var big13 = (v) => {
|
|
48049
|
+
try {
|
|
48050
|
+
if (typeof v === "bigint") return v;
|
|
48051
|
+
if (v == null || v === "0x") return 0n;
|
|
48052
|
+
return BigInt(v);
|
|
48053
|
+
} catch {
|
|
48054
|
+
return 0n;
|
|
48055
|
+
}
|
|
48056
|
+
};
|
|
48057
|
+
var field12 = (res, name, idx) => {
|
|
48058
|
+
const v = res?.[name];
|
|
48059
|
+
if (typeof v === "bigint" || typeof v === "number" || typeof v === "string") {
|
|
48060
|
+
return big13(v);
|
|
48061
|
+
}
|
|
48062
|
+
return big13(res?.[idx]);
|
|
48063
|
+
};
|
|
48064
|
+
function parseDssResults(data, meta, context) {
|
|
48065
|
+
const { chainId } = context;
|
|
48066
|
+
const key2 = dssLenderKey(meta.lender, chainId, meta.ilk);
|
|
48067
|
+
const entries = [];
|
|
48068
|
+
const spot = field12(data?.[0], "spot", 2);
|
|
48069
|
+
const mat = big13(meta.mat);
|
|
48070
|
+
if (spot > 0n && mat > 0n) {
|
|
48071
|
+
const collUSD = Number(spot) / RAY8 * (Number(mat) / RAY8);
|
|
48072
|
+
if (collUSD > 0 && collUSD < 1e9) {
|
|
48073
|
+
entries.push({
|
|
48074
|
+
asset: meta.collToken,
|
|
48075
|
+
price: collUSD,
|
|
48076
|
+
priceUSD: collUSD,
|
|
48077
|
+
marketUid: createMarketUid(chainId, key2, meta.collToken),
|
|
48078
|
+
targetLender: key2,
|
|
48079
|
+
description: "Maker OSM via Vat.spot \xD7 Spot.mat (USD, ~1h delayed)"
|
|
48080
|
+
});
|
|
48081
|
+
}
|
|
48082
|
+
}
|
|
48083
|
+
if (meta.debtToken) {
|
|
48084
|
+
entries.push({
|
|
48085
|
+
asset: meta.debtToken,
|
|
48086
|
+
price: 1,
|
|
48087
|
+
priceUSD: 1,
|
|
48088
|
+
marketUid: createMarketUid(chainId, key2, meta.debtToken),
|
|
48089
|
+
targetLender: key2,
|
|
48090
|
+
description: "dss debt token (par)",
|
|
48091
|
+
staticBase: true,
|
|
48092
|
+
baseAsset: meta.debtToken
|
|
48093
|
+
});
|
|
48094
|
+
}
|
|
48095
|
+
return entries;
|
|
48096
|
+
}
|
|
48097
|
+
function getDssAbi() {
|
|
48098
|
+
return UsddVatAbi;
|
|
48099
|
+
}
|
|
48100
|
+
var dssFetcher = {
|
|
48101
|
+
getCalls: getDssCalls,
|
|
48102
|
+
parse: parseDssResults,
|
|
48103
|
+
getAbi: getDssAbi
|
|
48104
|
+
};
|
|
47966
48105
|
var READS_PER_ASSET = 2;
|
|
47967
48106
|
function getCurvanceCalls(chainId) {
|
|
47968
48107
|
const results = [];
|
|
@@ -50117,6 +50256,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
50117
50256
|
() => riverFetcher.getCalls(chainId),
|
|
50118
50257
|
getCallsErrors
|
|
50119
50258
|
) : [];
|
|
50259
|
+
const dssResults = isActive("dss") ? safeGetCalls("dss", () => dssFetcher.getCalls(chainId), getCallsErrors) : [];
|
|
50120
50260
|
const curvanceResults = isActive("curvance") ? safeGetCalls(
|
|
50121
50261
|
"curvance",
|
|
50122
50262
|
() => curvanceFetcher.getCalls(chainId),
|
|
@@ -50253,6 +50393,13 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
50253
50393
|
getRiverAbi(),
|
|
50254
50394
|
"direct"
|
|
50255
50395
|
);
|
|
50396
|
+
const dssGroup = buildGroup(
|
|
50397
|
+
"dss",
|
|
50398
|
+
dssResults,
|
|
50399
|
+
dssFetcher.parse,
|
|
50400
|
+
dssFetcher.getAbi(),
|
|
50401
|
+
"direct"
|
|
50402
|
+
);
|
|
50256
50403
|
const curvanceGroup = buildGroup(
|
|
50257
50404
|
"curvance",
|
|
50258
50405
|
curvanceResults,
|
|
@@ -50332,6 +50479,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
50332
50479
|
termGroup,
|
|
50333
50480
|
liquityGroup,
|
|
50334
50481
|
riverGroup,
|
|
50482
|
+
dssGroup,
|
|
50335
50483
|
curvanceGroup,
|
|
50336
50484
|
inverseGroup,
|
|
50337
50485
|
tellerGroup,
|
|
@@ -50382,6 +50530,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
50382
50530
|
termData,
|
|
50383
50531
|
liquityData,
|
|
50384
50532
|
riverData,
|
|
50533
|
+
dssData,
|
|
50385
50534
|
curvanceData,
|
|
50386
50535
|
inverseData,
|
|
50387
50536
|
tellerData,
|
|
@@ -50510,6 +50659,14 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
50510
50659
|
allowFailure,
|
|
50511
50660
|
rpcOverrides
|
|
50512
50661
|
),
|
|
50662
|
+
executeGroup(
|
|
50663
|
+
dssGroup,
|
|
50664
|
+
chainId,
|
|
50665
|
+
chainBatchSize,
|
|
50666
|
+
retries,
|
|
50667
|
+
allowFailure,
|
|
50668
|
+
rpcOverrides
|
|
50669
|
+
),
|
|
50513
50670
|
executeGroup(
|
|
50514
50671
|
curvanceGroup,
|
|
50515
50672
|
chainId,
|
|
@@ -50669,6 +50826,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
50669
50826
|
parseTrackers(termGroup, termData.results);
|
|
50670
50827
|
parseTrackers(liquityGroup, liquityData.results);
|
|
50671
50828
|
parseTrackers(riverGroup, riverData.results);
|
|
50829
|
+
parseTrackers(dssGroup, dssData.results);
|
|
50672
50830
|
parseTrackers(curvanceGroup, curvanceData.results);
|
|
50673
50831
|
parseTrackers(inverseGroup, inverseData.results);
|
|
50674
50832
|
if (siloV2GqlEntries != null) {
|
|
@@ -51269,10 +51427,10 @@ function createAssetArrayPerChain() {
|
|
|
51269
51427
|
return assetsPerChain;
|
|
51270
51428
|
}
|
|
51271
51429
|
var RELEVANT_LENDING_ASSETS = () => createAssetArrayPerChain();
|
|
51272
|
-
function createSimpleArrayPerChain(fork,
|
|
51430
|
+
function createSimpleArrayPerChain(fork, field13 = void 0) {
|
|
51273
51431
|
let pools = {};
|
|
51274
51432
|
Object.entries(fork ?? {}).forEach(([b2, data]) => {
|
|
51275
|
-
Object.entries(
|
|
51433
|
+
Object.entries(field13 ? data[field13] : data).forEach(
|
|
51276
51434
|
([chainId, address]) => {
|
|
51277
51435
|
if (!pools[chainId]) pools[chainId] = [];
|
|
51278
51436
|
pools[chainId] = uniq2([...pools[chainId], { address, pool: b2 }]);
|
|
@@ -53479,9 +53637,9 @@ query EvkByAssets($assets: [Bytes!]!) {
|
|
|
53479
53637
|
`;
|
|
53480
53638
|
var ZERO2 = 0n;
|
|
53481
53639
|
var RAY_TO_PERCENT3 = 1e25;
|
|
53482
|
-
function readAddress2(
|
|
53483
|
-
if (!
|
|
53484
|
-
return
|
|
53640
|
+
function readAddress2(field13) {
|
|
53641
|
+
if (!field13) return void 0;
|
|
53642
|
+
return field13.toLowerCase();
|
|
53485
53643
|
}
|
|
53486
53644
|
function parseVaultFee(v) {
|
|
53487
53645
|
if (v.performanceFee == null) return 0;
|
|
@@ -53846,7 +54004,7 @@ var num4 = (v) => {
|
|
|
53846
54004
|
const n = Number(v);
|
|
53847
54005
|
return Number.isFinite(n) ? n : 0;
|
|
53848
54006
|
};
|
|
53849
|
-
var
|
|
54007
|
+
var big14 = (v) => {
|
|
53850
54008
|
try {
|
|
53851
54009
|
if (v === void 0 || v === null || v === "") return "0";
|
|
53852
54010
|
const s = String(v);
|
|
@@ -53882,12 +54040,12 @@ async function fetchTermMaxVaultsFromApi(chainId, prices = {}, tokenList = {}, f
|
|
|
53882
54040
|
const assetEntry = tokenList[underlying];
|
|
53883
54041
|
const priceKey = toOracleKey(assetEntry?.assetGroup) || toGenericPriceKey(underlying, chainId);
|
|
53884
54042
|
const priceUsd = prices[priceKey];
|
|
53885
|
-
const totalAssets =
|
|
53886
|
-
const totalSupply =
|
|
54043
|
+
const totalAssets = big14(r.totalAssets);
|
|
54044
|
+
const totalSupply = big14(r.totalSupplyAmt);
|
|
53887
54045
|
const totalAssetsFormatted = Number(totalAssets) / scale2;
|
|
53888
54046
|
const supplyRate = num4(r.apr) * 100;
|
|
53889
54047
|
const rewardsRate = num4(r?.incentiveData?.TMX_APR) * 100;
|
|
53890
|
-
const rawLiquidity = BigInt(
|
|
54048
|
+
const rawLiquidity = BigInt(big14(r.redeemableAmt ?? r.idleFunds ?? "0"));
|
|
53891
54049
|
const totalAssetsBig = BigInt(totalAssets);
|
|
53892
54050
|
const liquidity = (rawLiquidity > totalAssetsBig ? totalAssetsBig : rawLiquidity).toString();
|
|
53893
54051
|
const liquidityFormatted = Number(liquidity) / scale2;
|
|
@@ -53923,7 +54081,7 @@ async function fetchTermMaxVaultsFromApi(chainId, prices = {}, tokenList = {}, f
|
|
|
53923
54081
|
liquidityUsd: priceUsd ? liquidityFormatted * priceUsd : 0,
|
|
53924
54082
|
version: r.version,
|
|
53925
54083
|
isPaused: r.isPaused === true || void 0,
|
|
53926
|
-
supplyCap: r.capacity ?
|
|
54084
|
+
supplyCap: r.capacity ? big14(r.capacity) : void 0,
|
|
53927
54085
|
basePool: r.poolAddress ? lower2(r.poolAddress) : void 0
|
|
53928
54086
|
};
|
|
53929
54087
|
}
|
|
@@ -53979,7 +54137,7 @@ var Erc20DecimalsBalanceAbi = [
|
|
|
53979
54137
|
|
|
53980
54138
|
// src/vaults/termmax/fetchFromChain.ts
|
|
53981
54139
|
var DECIMAL_BASE2 = 100000000n;
|
|
53982
|
-
var
|
|
54140
|
+
var big15 = (v) => {
|
|
53983
54141
|
if (v === void 0 || v === null || v === "0x") return 0n;
|
|
53984
54142
|
try {
|
|
53985
54143
|
return typeof v === "bigint" ? v : BigInt(v);
|
|
@@ -54043,7 +54201,7 @@ var fetchTermMaxVaultsFromChain = async (chainId, multicallRetry, prices = {}, t
|
|
|
54043
54201
|
vaults.forEach((address, i) => {
|
|
54044
54202
|
const at = (k) => res[i * READS_PER_VAULT + VAULT_READS.indexOf(k)];
|
|
54045
54203
|
const asset = addr(at("asset"));
|
|
54046
|
-
const totalAssets =
|
|
54204
|
+
const totalAssets = big15(at("totalAssets"));
|
|
54047
54205
|
if (!asset || totalAssets === 0n) return;
|
|
54048
54206
|
rows.push({
|
|
54049
54207
|
address,
|
|
@@ -54052,11 +54210,11 @@ var fetchTermMaxVaultsFromChain = async (chainId, multicallRetry, prices = {}, t
|
|
|
54052
54210
|
decimals: num5(at("decimals")) ?? 18,
|
|
54053
54211
|
asset,
|
|
54054
54212
|
totalAssets,
|
|
54055
|
-
totalSupply:
|
|
54056
|
-
annualizedInterest:
|
|
54057
|
-
accretingPrincipal:
|
|
54058
|
-
performanceFeeRate:
|
|
54059
|
-
aprRaw: at("apr") != null ?
|
|
54213
|
+
totalSupply: big15(at("totalSupply")),
|
|
54214
|
+
annualizedInterest: big15(at("annualizedInterest")),
|
|
54215
|
+
accretingPrincipal: big15(at("accretingPrincipal")),
|
|
54216
|
+
performanceFeeRate: big15(at("performanceFeeRate")),
|
|
54217
|
+
aprRaw: at("apr") != null ? big15(at("apr")) : void 0,
|
|
54060
54218
|
curator: addr(at("curator")),
|
|
54061
54219
|
guardian: addr(at("guardian")),
|
|
54062
54220
|
timelock: num5(at("timelock")),
|
|
@@ -54077,7 +54235,7 @@ var fetchTermMaxVaultsFromChain = async (chainId, multicallRetry, prices = {}, t
|
|
|
54077
54235
|
const out = {};
|
|
54078
54236
|
rows.forEach((r, i) => {
|
|
54079
54237
|
const assetDecimals = num5(res2[i * 2]) ?? r.decimals;
|
|
54080
|
-
const idle =
|
|
54238
|
+
const idle = big15(res2[i * 2 + 1]);
|
|
54081
54239
|
const assetEntry = tokenList[r.asset];
|
|
54082
54240
|
const priceKey = toOracleKey(assetEntry?.assetGroup) || toGenericPriceKey(r.asset, chainId);
|
|
54083
54241
|
const priceUsd = prices[priceKey];
|
|
@@ -61482,23 +61640,23 @@ var priceGmMarkets = async (chainId, multicallRetry, markets, prices) => {
|
|
|
61482
61640
|
const indexMax = price(prices, m.indexToken)?.max;
|
|
61483
61641
|
if (Array.isArray(dsRes) && longMax != null && shortMax != null) {
|
|
61484
61642
|
const base = i * SLOTS;
|
|
61485
|
-
const
|
|
61643
|
+
const big16 = (j) => typeof dsRes[base + j] === "bigint" ? dsRes[base + j] : 0n;
|
|
61486
61644
|
const cap = computeDepositCapacityUsd(
|
|
61487
|
-
[info?.longTokenAmount, longMax,
|
|
61488
|
-
[info?.shortTokenAmount, shortMax,
|
|
61645
|
+
[info?.longTokenAmount, longMax, big16(0), big16(2)],
|
|
61646
|
+
[info?.shortTokenAmount, shortMax, big16(1), big16(3)]
|
|
61489
61647
|
);
|
|
61490
61648
|
if (cap != null) value.depositCapacityUsd = cap;
|
|
61491
61649
|
if (indexMax != null) {
|
|
61492
61650
|
const divisor = m.longToken.toLowerCase() === m.shortToken.toLowerCase() ? 2n : 1n;
|
|
61493
|
-
const reservedUsdLong = (
|
|
61494
|
-
const reservedUsdShort = (
|
|
61651
|
+
const reservedUsdLong = (big16(4) + big16(5)) / divisor * indexMax;
|
|
61652
|
+
const reservedUsdShort = (big16(6) + big16(7)) / divisor;
|
|
61495
61653
|
const liq = computeLiquidityUsd(
|
|
61496
61654
|
info?.longTokenUsd,
|
|
61497
61655
|
info?.shortTokenUsd,
|
|
61498
61656
|
reservedUsdLong,
|
|
61499
61657
|
reservedUsdShort,
|
|
61500
|
-
|
|
61501
|
-
|
|
61658
|
+
big16(8),
|
|
61659
|
+
big16(9)
|
|
61502
61660
|
);
|
|
61503
61661
|
if (liq != null)
|
|
61504
61662
|
value.liquidityUsd = Math.max(0, Math.min(liq, value.tvlUsd));
|
|
@@ -61697,21 +61855,21 @@ var fetchGmxExecutionFees = async (chainId, multicallRetry, gasPriceWei) => {
|
|
|
61697
61855
|
} catch {
|
|
61698
61856
|
return void 0;
|
|
61699
61857
|
}
|
|
61700
|
-
const
|
|
61701
|
-
const base =
|
|
61702
|
-
const mult =
|
|
61858
|
+
const big16 = (i) => typeof res[i] === "bigint" ? res[i] : 0n;
|
|
61859
|
+
const base = big16(0);
|
|
61860
|
+
const mult = big16(1);
|
|
61703
61861
|
if (base === 0n && mult === 0n) return void 0;
|
|
61704
61862
|
const PRECISION = 10n ** 30n;
|
|
61705
61863
|
const adjusted = (opGas) => base + opGas * mult / PRECISION;
|
|
61706
61864
|
const fee = (opGas) => (adjusted(opGas) * gasPriceWei).toString();
|
|
61707
|
-
const glvExtra =
|
|
61865
|
+
const glvExtra = big16(6) * GLV_NOMINAL_MARKET_COUNT;
|
|
61708
61866
|
return {
|
|
61709
61867
|
chainId,
|
|
61710
61868
|
gasPriceWei: gasPriceWei.toString(),
|
|
61711
|
-
deposit: fee(
|
|
61712
|
-
withdrawal: fee(
|
|
61713
|
-
glvDeposit: fee(
|
|
61714
|
-
glvWithdrawal: fee(
|
|
61869
|
+
deposit: fee(big16(2)),
|
|
61870
|
+
withdrawal: fee(big16(3)),
|
|
61871
|
+
glvDeposit: fee(big16(4) + glvExtra),
|
|
61872
|
+
glvWithdrawal: fee(big16(5) + glvExtra)
|
|
61715
61873
|
};
|
|
61716
61874
|
};
|
|
61717
61875
|
|
|
@@ -63059,6 +63217,7 @@ var ROW_DESCRIPTOR_KEYS = [
|
|
|
63059
63217
|
"inverse",
|
|
63060
63218
|
"exactly",
|
|
63061
63219
|
"usdd",
|
|
63220
|
+
"dss",
|
|
63062
63221
|
"termmax",
|
|
63063
63222
|
// These five were missing, and the failure is SILENT: the adapter still
|
|
63064
63223
|
// runs, reads an empty descriptor and returns a sheet that looks complete
|
|
@@ -63680,9 +63839,12 @@ var TERM_PROFILES = [
|
|
|
63680
63839
|
}
|
|
63681
63840
|
}),
|
|
63682
63841
|
P({
|
|
63683
|
-
id: "
|
|
63684
|
-
name: "
|
|
63685
|
-
family
|
|
63842
|
+
id: "dss.cdp@v1",
|
|
63843
|
+
name: "Maker-style (dss) CDP ilk",
|
|
63844
|
+
// One profile for the whole dss family — Sky (the original MakerDAO) and
|
|
63845
|
+
// its forks (USDD 2.0). The prose is identical because the mechanism is:
|
|
63846
|
+
// same Vat/Jug/Spot accounting, same governance-set stability fee.
|
|
63847
|
+
family: "dss",
|
|
63686
63848
|
borrow: {
|
|
63687
63849
|
description: "A Maker-style CDP with a governance-set stability fee and no utilization curve.",
|
|
63688
63850
|
implications: [
|
|
@@ -64003,8 +64165,8 @@ function resolveMinDebt(input) {
|
|
|
64003
64165
|
m.river?.minNetDebt,
|
|
64004
64166
|
// Inverse FiRM.
|
|
64005
64167
|
m.inverse?.minDebt,
|
|
64006
|
-
//
|
|
64007
|
-
m.usdd?.dust,
|
|
64168
|
+
// dss (Sky / the USDD fork): `dust` IS the per-vault debt floor.
|
|
64169
|
+
m.dss?.dust ?? m.usdd?.dust,
|
|
64008
64170
|
// Gearbox credit facade.
|
|
64009
64171
|
m.gearbox?.minDebt,
|
|
64010
64172
|
// Resupply — a hard per-position floor that also bounds partial repayment.
|
|
@@ -65170,10 +65332,10 @@ var inverseAdapter = {
|
|
|
65170
65332
|
}
|
|
65171
65333
|
})
|
|
65172
65334
|
};
|
|
65173
|
-
var
|
|
65174
|
-
id: "
|
|
65175
|
-
matches:
|
|
65176
|
-
profileId: () => "
|
|
65335
|
+
var dssAdapter = {
|
|
65336
|
+
id: "dss",
|
|
65337
|
+
matches: isDssType,
|
|
65338
|
+
profileId: () => "dss.cdp@v1",
|
|
65177
65339
|
build: () => ({
|
|
65178
65340
|
borrow: {
|
|
65179
65341
|
rate: { kind: "variable-managed", source: "governance", isLocked: false },
|
|
@@ -65587,7 +65749,7 @@ var TERM_ADAPTERS = [
|
|
|
65587
65749
|
liquityAdapter,
|
|
65588
65750
|
riverAdapter,
|
|
65589
65751
|
inverseAdapter,
|
|
65590
|
-
|
|
65752
|
+
dssAdapter,
|
|
65591
65753
|
compoundV3Adapter,
|
|
65592
65754
|
fluidAdapter,
|
|
65593
65755
|
gearboxAdapter,
|
|
@@ -66029,6 +66191,6 @@ function validateTermSheets(sheets) {
|
|
|
66029
66191
|
return sheets.flatMap((s) => validateTermSheet(s));
|
|
66030
66192
|
}
|
|
66031
66193
|
|
|
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 };
|
|
66194
|
+
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, ilkToKeySegment, inverseKeyParts, inverseLenderKey, isFailedCall, isStablecoinSymbol, isYearnV3, keySegmentToIlk, 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
66195
|
//# sourceMappingURL=index.js.map
|
|
66034
66196
|
//# sourceMappingURL=index.js.map
|