@1delta/margin-fetcher 0.0.409 → 0.0.411
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ccip-VK5PCUV6.js +5 -0
- package/dist/{ccip-5UG36BRY.js.map → ccip-VK5PCUV6.js.map} +1 -1
- package/dist/{chunk-SRWUFRRR.js → chunk-YILYOOYB.js} +200 -4
- package/dist/chunk-YILYOOYB.js.map +1 -0
- package/dist/index.d.ts +298 -44
- package/dist/index.js +1719 -421
- package/dist/index.js.map +1 -1
- package/package.json +6 -6
- package/dist/ccip-5UG36BRY.js +0 -5
- package/dist/chunk-SRWUFRRR.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { parseAbi, keccak256, encodeAbiParameters, formatEther, BaseError, pad, encodeFunctionData, formatUnits, isAddress, getAddress, decodeFunctionResult, decodeAbiParameters, concat, AbiEncodingLengthMismatchError, concatHex, toBytes, slice,
|
|
1
|
+
import { parseAbi, keccak256, encodeAbiParameters, formatEther, BaseError, stringToHex, erc20Abi, pad, encodeFunctionData, formatUnits, isAddress, 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, LIQUITY_FAMILY_LENDERS, isAaveType, isCompoundV3, isMultiMarket, isSiloV2Type, isSiloV3Type, isDolomite, isMidnight, isTerm, isExactly, isLiquityFamily, isRiver, isTeller, isInverse, isTermMax, isEulerType, isAaveV4Type, isInit, isMorphoType, isCompoundV2Type, isVenusType, isSumerType, AAVE_V3_LENDERS, AAVE_V2_LENDERS, isAaveV2Type, isAaveV32Type, isAaveV3Type, isFluid, isGearboxV3, isYLDR, isCompoundV3Type, isLista, isTectonicType, isKineticType, isBenqiType } from '@1delta/lender-registry';
|
|
4
|
+
import { Lender, LIQUITY_FAMILY_LENDERS, isAaveType, isCompoundV3, isMultiMarket, isSiloV2Type, isSiloV3Type, isDolomite, isMidnight, isTerm, isExactly, isLiquityFamily, isRiver, isTeller, isInverse, isTermMax, isUsdd, isEulerType, isAaveV4Type, isInit, isMorphoType, isCompoundV2Type, isVenusType, isSumerType, AAVE_V3_LENDERS, AAVE_V2_LENDERS, isAaveV2Type, isAaveV32Type, isAaveV3Type, isFluid, isGearboxV3, isYLDR, isCompoundV3Type, isLista, isTectonicType, isKineticType, isBenqiType } from '@1delta/lender-registry';
|
|
5
5
|
export { 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, tellerConfigByChain, tellerPoolsByChain, termMaxConfigByChain, aaveReserves, compoundV3Reserves, liquityConfigFor, liquityBranchesByChain, riverConfigFor, riverChainData, termMaxApiBaseUrl, termMaxLenderKey, inverseConfigFor, inverseChainData, aaveOracles, morphoTypeMarkets, resolveMidnightApiBase, resolveTermApiBase, getSiloV2MarketEntry, getSiloV3MarketEntry, dolomiteEmode, aaveTokens, morphoTypeVaults, eulerConfigs, gearboxMarketCompressor, gearboxMarketConfigurators, gearboxV3LenderKey, midnightMarketsByChain, parseAaveV4SpokeLenderKey, gearboxAccountCompressor, compoundV2Tokens, exactlyMarketsByChain, aaveOraclesConfig, compoundV2Oracles, compoundV2TokenArray, compoundV2OraclesConfig, compoundV3OraclesData, compoundV3BaseData, compoundV2Reserves, aaveV4Oracles } from '@1delta/data-sdk';
|
|
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, usddLendersByChain, tellerConfigByChain, tellerPoolsByChain, termMaxConfigByChain, aaveReserves, compoundV3Reserves, liquityConfigFor, liquityBranchesByChain, riverConfigFor, riverChainData, termMaxApiBaseUrl, termMaxLenderKey, inverseConfigFor, inverseChainData, usddConfigFor, usddChainData, aaveOracles, morphoTypeMarkets, resolveMidnightApiBase, resolveTermApiBase, getSiloV2MarketEntry, getSiloV3MarketEntry, dolomiteEmode, 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 { multicallRetryUniversal, getEvmClient, getEvmChain, getEvmClientUniversal } from '@1delta/providers';
|
|
9
|
-
import { LiquityTroveManagerAbi, LiquityActivePoolAbi, LiquityStabilityPoolAbi, LiquityPriceFeedAbi, LiquitySortedTrovesAbi, RiverTroveManagerAbi, RiverStabilityPoolAbi, TellerMarketRegistryAbi, TellerV2Abi, InverseMarketAbi, InverseOracleAbi, InverseDbrAbi, Erc20Abi, MetaMorphoAbi, ExactlyPreviewerAbi, ExactlyAuditorAbi, LenderCommitmentGroupAbi, FluidLendingResolverAbi, FluidVaultResolverAbi, FluidLiquidityResolverAbi, MoolahVaultAbi, MorphoLensAbi, AaveV4SpokeAbi, AaveV4OracleAbi, AaveV4HubAbi, DolomiteMarginAbi, GearboxMarketCompressorV310Abi, MorphoBlueAbi, MidnightAbi, TermRepoTokenAbi, TermRepoServicerAbi, TermRepoCollateralManagerAbi, LiquityTroveNFTAbi, LiquityCollSurplusPoolAbi, TellerCollateralManagerAbi, InverseEscrowAbi, GearboxCreditAccountCompressorV310Abi, TermPriceConsumerAbi, TermMaxOracleAggregatorV2Abi } from '@1delta/abis';
|
|
9
|
+
import { LiquityTroveManagerAbi, LiquityActivePoolAbi, LiquityStabilityPoolAbi, LiquityPriceFeedAbi, LiquitySortedTrovesAbi, RiverTroveManagerAbi, RiverStabilityPoolAbi, TellerMarketRegistryAbi, TellerV2Abi, InverseMarketAbi, InverseOracleAbi, InverseDbrAbi, Erc20Abi, MetaMorphoAbi, ExactlyPreviewerAbi, ExactlyAuditorAbi, LenderCommitmentGroupAbi, UsddVatAbi, UsddJugAbi, UsddSpotAbi, FluidLendingResolverAbi, FluidVaultResolverAbi, FluidLiquidityResolverAbi, MoolahVaultAbi, MorphoLensAbi, AaveV4SpokeAbi, AaveV4OracleAbi, AaveV4HubAbi, DolomiteMarginAbi, GearboxMarketCompressorV310Abi, MorphoBlueAbi, MidnightAbi, TermRepoTokenAbi, TermRepoServicerAbi, TermRepoCollateralManagerAbi, LiquityTroveNFTAbi, LiquityCollSurplusPoolAbi, TellerCollateralManagerAbi, TermMaxViewerAbi, InverseEscrowAbi, GearboxCreditAccountCompressorV310Abi, UsddCdpManagerAbi, UsddProxyRegistryAbi, TermPriceConsumerAbi, TermMaxOracleAggregatorV2Abi } from '@1delta/abis';
|
|
10
10
|
export { MorphoLensAbi } from '@1delta/abis';
|
|
11
11
|
import { prepareDebitDataMulticall, prepareLenderDebitMulticall, parseDebitDataResult, parseLenderDebitResult, getPermit2ContractAddress, getCompoundV3CometAddress as getCompoundV3CometAddress$1, getMorphoAddress, getAaveCollateralTokenAddress, getSiloHalfForUnderlying, InitMarginAddresses, getLstAcceptedInputs } from '@1delta/calldata-sdk';
|
|
12
12
|
import { proxyNativeFetch } from '@1delta/proxy-fetch';
|
|
@@ -7519,6 +7519,9 @@ var getLendersForChain = (c) => {
|
|
|
7519
7519
|
for (const l of inverseLendersByChain(c)) {
|
|
7520
7520
|
lenders.push(l);
|
|
7521
7521
|
}
|
|
7522
|
+
for (const l of usddLendersByChain(c)) {
|
|
7523
|
+
lenders.push(l);
|
|
7524
|
+
}
|
|
7522
7525
|
if (tellerConfigByChain(c)?.tellerV2 && tellerPoolsByChain(c).length > 0) {
|
|
7523
7526
|
lenders.push(Lender.TELLER);
|
|
7524
7527
|
}
|
|
@@ -7540,7 +7543,7 @@ var filterLendersByProtocol = (allLenders, protocolList) => {
|
|
|
7540
7543
|
(b) => protocolList.includes(b)
|
|
7541
7544
|
);
|
|
7542
7545
|
return allLenders.filter(
|
|
7543
|
-
(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")
|
|
7546
|
+
(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")
|
|
7544
7547
|
);
|
|
7545
7548
|
};
|
|
7546
7549
|
var getAavesForChain = () => {
|
|
@@ -11205,8 +11208,8 @@ async function fetchListaBrokerUserData(chainId, account, marketKeys, nowSecs =
|
|
|
11205
11208
|
const brokers = await resolveListaBrokers(chainId, marketKeys, getClient);
|
|
11206
11209
|
const ids = Object.keys(brokers);
|
|
11207
11210
|
const out = {};
|
|
11208
|
-
const
|
|
11209
|
-
BROKER_USER_CACHE[
|
|
11211
|
+
const cacheKey6 = `${chainId}:${account.toLowerCase()}`;
|
|
11212
|
+
BROKER_USER_CACHE[cacheKey6] = out;
|
|
11210
11213
|
if (ids.length === 0) return out;
|
|
11211
11214
|
try {
|
|
11212
11215
|
const client = getClient(chainId);
|
|
@@ -13035,7 +13038,7 @@ function normalizeToBytes(input) {
|
|
|
13035
13038
|
return out;
|
|
13036
13039
|
}
|
|
13037
13040
|
function readAddress(bytes, offset, len) {
|
|
13038
|
-
const hex =
|
|
13041
|
+
const hex = toHex2(bytes.subarray(offset, offset + len));
|
|
13039
13042
|
return "0x" + hex;
|
|
13040
13043
|
}
|
|
13041
13044
|
function readUintBE(bytes, offset, len) {
|
|
@@ -13046,7 +13049,7 @@ function readUintBE(bytes, offset, len) {
|
|
|
13046
13049
|
}
|
|
13047
13050
|
return v;
|
|
13048
13051
|
}
|
|
13049
|
-
function
|
|
13052
|
+
function toHex2(arr) {
|
|
13050
13053
|
let s = "";
|
|
13051
13054
|
for (let i = 0; i < arr.length; i++) {
|
|
13052
13055
|
const h = arr[i].toString(16).padStart(2, "0");
|
|
@@ -22124,15 +22127,7 @@ function exactlyPairLtv(collateralAdjustFactor, borrowAdjustFactor) {
|
|
|
22124
22127
|
|
|
22125
22128
|
// src/lending/public-data/exactly/convertPublic.ts
|
|
22126
22129
|
var nowSec3 = () => Math.floor(Date.now() / 1e3);
|
|
22127
|
-
|
|
22128
|
-
const body = market.startsWith("0x") ? market.slice(2) : market;
|
|
22129
|
-
return "EXACTLY_" + body.toUpperCase();
|
|
22130
|
-
}
|
|
22131
|
-
function exactlyMarketFromLenderKey(lender) {
|
|
22132
|
-
if (!lender.startsWith("EXACTLY_")) return void 0;
|
|
22133
|
-
const body = lender.slice("EXACTLY_".length);
|
|
22134
|
-
return body.length === 40 ? "0x" + body.toLowerCase() : void 0;
|
|
22135
|
-
}
|
|
22130
|
+
var EXACTLY_LENDER_KEY = "EXACTLY";
|
|
22136
22131
|
function toHuman(raw, decimals) {
|
|
22137
22132
|
return Number(raw) / 10 ** decimals;
|
|
22138
22133
|
}
|
|
@@ -22148,9 +22143,12 @@ function convertExactlyMarketsToResponse(raw, chainId, prices = {}, _additionalY
|
|
|
22148
22143
|
const out = {};
|
|
22149
22144
|
const now = nowSec3();
|
|
22150
22145
|
const markets = raw?.markets ?? [];
|
|
22146
|
+
if (markets.length === 0) return out;
|
|
22151
22147
|
const liqBonus = raw?.liquidationIncentive ? Number(raw.liquidationIncentive.liquidator) / 1e18 : 0;
|
|
22148
|
+
const lenderKey = EXACTLY_LENDER_KEY;
|
|
22149
|
+
const entry = { data: {} };
|
|
22150
|
+
const penaltyAprs = [];
|
|
22152
22151
|
for (const m of markets) {
|
|
22153
|
-
const lenderKey = exactlyLenderKey(m.market);
|
|
22154
22152
|
const assetAddr = m.asset.toLowerCase();
|
|
22155
22153
|
const decimals = m.decimals;
|
|
22156
22154
|
const asset = tokens[assetAddr];
|
|
@@ -22182,9 +22180,10 @@ function convertExactlyMarketsToResponse(raw, chainId, prices = {}, _additionalY
|
|
|
22182
22180
|
const totalDebt = toHuman(m.totalFloatingBorrowAssets, decimals) + fixedBorrowed;
|
|
22183
22181
|
const borrowLiquidity = toHuman(m.floatingAvailableAssets, decimals);
|
|
22184
22182
|
const utilization = totalDeposits > 0 ? totalDebt / totalDeposits : 0;
|
|
22185
|
-
const
|
|
22183
|
+
const adjustFactor = Number(m.adjustFactor) / 1e18;
|
|
22184
|
+
const borrowFactor = adjustFactor > 0 ? 1 / adjustFactor : 1;
|
|
22186
22185
|
const penaltyApr = exactlyPenaltyRateToAprPercent(m.penaltyRate);
|
|
22187
|
-
|
|
22186
|
+
penaltyAprs.push(penaltyApr);
|
|
22188
22187
|
const loanUid = createMarketUid(chainId, lenderKey, assetAddr);
|
|
22189
22188
|
entry.data[loanUid] = {
|
|
22190
22189
|
marketUid: loanUid,
|
|
@@ -22212,17 +22211,28 @@ function convertExactlyMarketsToResponse(raw, chainId, prices = {}, _additionalY
|
|
|
22212
22211
|
variableBorrowRate: exactlyWadRateToPercent(m.floatingBorrowRate),
|
|
22213
22212
|
rateModel: "fixedTerm",
|
|
22214
22213
|
// Fixed-rate lender convention (Term/Lista): best fixed borrow APR on the
|
|
22215
|
-
// stable slot; the full per-maturity menu is
|
|
22214
|
+
// stable slot; the full per-maturity menu is this entry's `terms`.
|
|
22216
22215
|
stableBorrowRate: bestFixedBorrowApr,
|
|
22216
|
+
// PER-ASSET fixed-term menu + descriptor. Cross-margin means one lender
|
|
22217
|
+
// key spans every asset, and each asset has its OWN fixed pools — so
|
|
22218
|
+
// these cannot live on `params.market` (which assumes one borrowable
|
|
22219
|
+
// asset per key, true for every isolated fixed-term lender but not here).
|
|
22220
|
+
terms: terms.length > 0 ? terms : void 0,
|
|
22221
|
+
fixedTerm: {
|
|
22222
|
+
model: "exactly",
|
|
22223
|
+
fees: { latePenaltyApr: penaltyApr },
|
|
22224
|
+
earlyRepay: { kind: "discount" },
|
|
22225
|
+
provider: { kind: "pool", address: m.market.toLowerCase() }
|
|
22226
|
+
},
|
|
22217
22227
|
intrinsicYield: 0,
|
|
22218
22228
|
rewards: void 0,
|
|
22219
22229
|
decimals,
|
|
22220
22230
|
config: {
|
|
22221
22231
|
0: {
|
|
22222
22232
|
category: 0,
|
|
22223
|
-
borrowCollateralFactor:
|
|
22224
|
-
collateralFactor:
|
|
22225
|
-
borrowFactor
|
|
22233
|
+
borrowCollateralFactor: adjustFactor,
|
|
22234
|
+
collateralFactor: adjustFactor,
|
|
22235
|
+
borrowFactor,
|
|
22226
22236
|
liquidationPenalty: liqBonus,
|
|
22227
22237
|
closeFactor: 1,
|
|
22228
22238
|
collateralDisabled: false,
|
|
@@ -22237,93 +22247,50 @@ function convertExactlyMarketsToResponse(raw, chainId, prices = {}, _additionalY
|
|
|
22237
22247
|
// Exactly DOES have a variable (floating) borrow side.
|
|
22238
22248
|
variableBorrowDisabled: false,
|
|
22239
22249
|
isActive: true,
|
|
22240
|
-
isFrozen: false
|
|
22241
|
-
|
|
22242
|
-
|
|
22243
|
-
|
|
22244
|
-
|
|
22245
|
-
|
|
22246
|
-
const collUid = createMarketUid(chainId, lenderKey, collAddr);
|
|
22247
|
-
entry.data[collUid] = {
|
|
22248
|
-
marketUid: collUid,
|
|
22249
|
-
name: "Collateral " + c.assetSymbol,
|
|
22250
|
-
poolId: c.market.toLowerCase(),
|
|
22251
|
-
underlying: collAddr,
|
|
22252
|
-
asset: currencyFor3(collAddr, c.decimals, c.assetSymbol, tokens),
|
|
22253
|
-
totalDeposits: 0,
|
|
22254
|
-
totalDebtStable: 0,
|
|
22255
|
-
totalDebt: 0,
|
|
22256
|
-
totalLiquidity: 0,
|
|
22257
|
-
borrowLiquidity: 0,
|
|
22258
|
-
totalLiquidityUSD: 0,
|
|
22259
|
-
borrowLiquidityUSD: 0,
|
|
22260
|
-
totalDepositsUSD: 0,
|
|
22261
|
-
totalDebtStableUSD: 0,
|
|
22262
|
-
totalDebtUSD: 0,
|
|
22263
|
-
utilization: 0,
|
|
22264
|
-
depositRate: 0,
|
|
22265
|
-
variableBorrowRate: 0,
|
|
22266
|
-
stableBorrowRate: 0,
|
|
22267
|
-
intrinsicYield: 0,
|
|
22268
|
-
rewards: void 0,
|
|
22269
|
-
decimals: c.decimals,
|
|
22270
|
-
config: {
|
|
22271
|
-
0: {
|
|
22272
|
-
category: 0,
|
|
22273
|
-
borrowCollateralFactor: ltv,
|
|
22274
|
-
collateralFactor: ltv,
|
|
22275
|
-
borrowFactor: 1,
|
|
22276
|
-
liquidationPenalty: liqBonus,
|
|
22277
|
-
closeFactor: 1,
|
|
22278
|
-
collateralDisabled: false,
|
|
22279
|
-
debtDisabled: true
|
|
22280
|
-
}
|
|
22281
|
-
},
|
|
22282
|
-
closeFactor: 1,
|
|
22283
|
-
collateralActive: true,
|
|
22284
|
-
borrowingEnabled: false,
|
|
22285
|
-
depositsEnabled: true,
|
|
22286
|
-
hasStable: false,
|
|
22287
|
-
isActive: true,
|
|
22288
|
-
isFrozen: false
|
|
22289
|
-
};
|
|
22290
|
-
}
|
|
22291
|
-
entry.params = {
|
|
22292
|
-
market: {
|
|
22293
|
-
lender: lenderKey,
|
|
22294
|
-
name: "Exactly " + m.assetSymbol,
|
|
22295
|
-
loanDecimals: decimals,
|
|
22296
|
-
collateralDecimals: decimals,
|
|
22297
|
-
// Market address doubles as the market id (it IS the lender-key body).
|
|
22298
|
-
id: m.market.toLowerCase(),
|
|
22299
|
-
// Self-pair adjust factor (WAD string); pairwise LTVs live on the
|
|
22300
|
-
// per-collateral entries above.
|
|
22301
|
-
lltv: m.adjustFactor.toString(),
|
|
22302
|
-
oracle: zeroAddress,
|
|
22303
|
-
irm: zeroAddress,
|
|
22304
|
-
collateralAddress: assetAddr,
|
|
22305
|
-
loanAddress: assetAddr,
|
|
22306
|
-
terms: terms.length > 0 ? terms : void 0,
|
|
22307
|
-
// Canonical cross-protocol fixed-term descriptor. Exactly: MENU of
|
|
22308
|
-
// calendar maturities (terms[], termId = maturity), pool-fronted
|
|
22309
|
-
// utilization-curve rates, early repay = DISCOUNT (unassigned-earnings
|
|
22310
|
-
// rebate via previewRepayAtMaturity), late repay = per-second penalty.
|
|
22311
|
-
fixedTerm: {
|
|
22312
|
-
model: "exactly",
|
|
22313
|
-
fees: { latePenaltyApr: penaltyApr },
|
|
22314
|
-
earlyRepay: { kind: "discount" },
|
|
22315
|
-
provider: { kind: "pool", address: m.market.toLowerCase() }
|
|
22316
|
-
},
|
|
22317
|
-
// Exactly-specific extras (consumed by calldata / worker-api resolvers)
|
|
22250
|
+
isFrozen: false,
|
|
22251
|
+
// Per-asset Exactly extras. `poolId` above already carries the Market
|
|
22252
|
+
// address (the write target — resolve it from the ASSET now, via
|
|
22253
|
+
// `exactlyMarketByAsset`, never from the lender key).
|
|
22254
|
+
exactly: {
|
|
22255
|
+
market: m.market.toLowerCase(),
|
|
22318
22256
|
penaltyRate: m.penaltyRate.toString(),
|
|
22319
22257
|
adjustFactor: m.adjustFactor.toString(),
|
|
22320
22258
|
maxFuturePools: m.maxFuturePools,
|
|
22321
22259
|
usdPrice: m.usdPrice.toString()
|
|
22322
22260
|
}
|
|
22323
22261
|
};
|
|
22324
|
-
entry.chainId = chainId;
|
|
22325
|
-
out[lenderKey] = entry;
|
|
22326
22262
|
}
|
|
22263
|
+
const uniformPenaltyApr = penaltyAprs.length > 0 && penaltyAprs.every((p) => p === penaltyAprs[0]) ? penaltyAprs[0] : void 0;
|
|
22264
|
+
entry.params = {
|
|
22265
|
+
market: {
|
|
22266
|
+
lender: lenderKey,
|
|
22267
|
+
name: "Exactly",
|
|
22268
|
+
// The per-chain Auditor — the shared cross-margin risk module every
|
|
22269
|
+
// Market reports to (Compound V2's Comptroller seam).
|
|
22270
|
+
id: (exactlyConfig()?.[chainId]?.auditor ?? zeroAddress).toLowerCase(),
|
|
22271
|
+
// No market-level LLTV: risk is per-asset (collateralFactor/borrowFactor
|
|
22272
|
+
// on each entry) and effective pair LTV is their product.
|
|
22273
|
+
lltv: "0",
|
|
22274
|
+
oracle: zeroAddress,
|
|
22275
|
+
irm: zeroAddress,
|
|
22276
|
+
collateralAddress: zeroAddress,
|
|
22277
|
+
loanAddress: zeroAddress,
|
|
22278
|
+
// `terms` is deliberately ABSENT at market level — each asset has its own
|
|
22279
|
+
// fixed pools, so the menu is on `data[*].terms`. A market-level
|
|
22280
|
+
// descriptor is still emitted so consumers that only probe
|
|
22281
|
+
// `params.market.fixedTerm` still recognise Exactly as fixed-term; its
|
|
22282
|
+
// `provider.address` is omitted (no single Market) and the late-penalty
|
|
22283
|
+
// rate is carried only when every asset agrees (it does today).
|
|
22284
|
+
fixedTerm: {
|
|
22285
|
+
model: "exactly",
|
|
22286
|
+
fees: uniformPenaltyApr !== void 0 ? { latePenaltyApr: uniformPenaltyApr } : {},
|
|
22287
|
+
earlyRepay: { kind: "discount" },
|
|
22288
|
+
provider: { kind: "pool" }
|
|
22289
|
+
}
|
|
22290
|
+
}
|
|
22291
|
+
};
|
|
22292
|
+
entry.chainId = chainId;
|
|
22293
|
+
out[lenderKey] = entry;
|
|
22327
22294
|
return out;
|
|
22328
22295
|
}
|
|
22329
22296
|
var READS_PER_BRANCH = 8;
|
|
@@ -22915,7 +22882,7 @@ async function fetchTellerMarkets(chainId) {
|
|
|
22915
22882
|
} catch {
|
|
22916
22883
|
return { chainId, pools: [] };
|
|
22917
22884
|
}
|
|
22918
|
-
const
|
|
22885
|
+
const big9 = (i) => {
|
|
22919
22886
|
const r = results[i];
|
|
22920
22887
|
if (typeof r === "bigint") return r;
|
|
22921
22888
|
if (typeof r === "number") return BigInt(r);
|
|
@@ -22929,20 +22896,20 @@ async function fetchTellerMarkets(chainId) {
|
|
|
22929
22896
|
return null;
|
|
22930
22897
|
};
|
|
22931
22898
|
const num9 = (i) => {
|
|
22932
|
-
const b =
|
|
22899
|
+
const b = big9(i);
|
|
22933
22900
|
return b === null ? null : Number(b);
|
|
22934
22901
|
};
|
|
22935
22902
|
const pool0 = pools.map((config, i) => {
|
|
22936
22903
|
const base = i * READS_PER_POOL;
|
|
22937
22904
|
return {
|
|
22938
22905
|
config,
|
|
22939
|
-
available:
|
|
22940
|
-
committed:
|
|
22906
|
+
available: big9(base),
|
|
22907
|
+
committed: big9(base + 1),
|
|
22941
22908
|
minRateBps: num9(base + 2),
|
|
22942
|
-
collateralPerPrincipal:
|
|
22909
|
+
collateralPerPrincipal: big9(base + 3),
|
|
22943
22910
|
maxLoanDuration: num9(base + 4),
|
|
22944
|
-
marketId:
|
|
22945
|
-
totalAssets:
|
|
22911
|
+
marketId: big9(base + 5),
|
|
22912
|
+
totalAssets: big9(base + 6)
|
|
22946
22913
|
};
|
|
22947
22914
|
});
|
|
22948
22915
|
const attByMarket = /* @__PURE__ */ new Map();
|
|
@@ -24175,6 +24142,264 @@ function convertInverseMarketsToResponse(raw, chainId, prices = {}, _additionalY
|
|
|
24175
24142
|
}
|
|
24176
24143
|
return out;
|
|
24177
24144
|
}
|
|
24145
|
+
var READS_PER_ILK = 4;
|
|
24146
|
+
var USDD_ABI_PER_READ = [UsddVatAbi, UsddJugAbi, UsddSpotAbi, erc20Abi];
|
|
24147
|
+
var usddIlkBytes32 = (ilk) => stringToHex(ilk, { size: 32 });
|
|
24148
|
+
async function fetchUsddMarkets(lender, chainId) {
|
|
24149
|
+
const config = usddConfigFor(lender, chainId);
|
|
24150
|
+
const chainData = usddChainData(lender, chainId);
|
|
24151
|
+
const markets = chainData?.markets ?? [];
|
|
24152
|
+
if (!config || markets.length === 0) {
|
|
24153
|
+
return { lender, config, chainData, markets: [] };
|
|
24154
|
+
}
|
|
24155
|
+
const calls = markets.flatMap((m) => {
|
|
24156
|
+
const ilk32 = usddIlkBytes32(m.ilk);
|
|
24157
|
+
return [
|
|
24158
|
+
{ address: config.vat, name: "ilks", params: [ilk32] },
|
|
24159
|
+
{ address: config.jug, name: "ilks", params: [ilk32] },
|
|
24160
|
+
{ address: config.spot, name: "ilks", params: [ilk32] },
|
|
24161
|
+
{ address: m.collToken, name: "balanceOf", params: [m.gemJoin] }
|
|
24162
|
+
];
|
|
24163
|
+
});
|
|
24164
|
+
let results = [];
|
|
24165
|
+
try {
|
|
24166
|
+
results = await multicallRetryUniversal({
|
|
24167
|
+
chain: chainId,
|
|
24168
|
+
calls,
|
|
24169
|
+
abi: markets.flatMap(() => USDD_ABI_PER_READ),
|
|
24170
|
+
allowFailure: true
|
|
24171
|
+
});
|
|
24172
|
+
} catch {
|
|
24173
|
+
return { lender, config, chainData, markets: [] };
|
|
24174
|
+
}
|
|
24175
|
+
const big9 = (v) => {
|
|
24176
|
+
if (typeof v === "bigint") return v;
|
|
24177
|
+
if (typeof v === "number") return BigInt(v);
|
|
24178
|
+
return null;
|
|
24179
|
+
};
|
|
24180
|
+
const field12 = (res, name, idx) => big9(res?.[name] ?? res?.[idx]);
|
|
24181
|
+
const out = markets.map((market, i) => {
|
|
24182
|
+
const base = i * READS_PER_ILK;
|
|
24183
|
+
const vatIlk = results[base];
|
|
24184
|
+
const jugIlk = results[base + 1];
|
|
24185
|
+
const spotIlk = results[base + 2];
|
|
24186
|
+
return {
|
|
24187
|
+
market,
|
|
24188
|
+
Art: field12(vatIlk, "Art", 0),
|
|
24189
|
+
rate: field12(vatIlk, "rate", 1),
|
|
24190
|
+
spot: field12(vatIlk, "spot", 2),
|
|
24191
|
+
line: field12(vatIlk, "line", 3),
|
|
24192
|
+
dust: field12(vatIlk, "dust", 4),
|
|
24193
|
+
duty: field12(jugIlk, "duty", 0),
|
|
24194
|
+
mat: field12(spotIlk, "mat", 1),
|
|
24195
|
+
joinBalance: big9(results[base + 3])
|
|
24196
|
+
};
|
|
24197
|
+
});
|
|
24198
|
+
return { lender, config, chainData, markets: out };
|
|
24199
|
+
}
|
|
24200
|
+
|
|
24201
|
+
// src/lending/public-data/usdd/convertPublic.ts
|
|
24202
|
+
function usddLenderKey(lender, chainId, ilk) {
|
|
24203
|
+
return `${lender}_${chainId}_${ilk}`;
|
|
24204
|
+
}
|
|
24205
|
+
function usddKeyParts(key) {
|
|
24206
|
+
if (!key.startsWith("USDD_")) return void 0;
|
|
24207
|
+
const suffix = key.slice("USDD_".length);
|
|
24208
|
+
const m = suffix.match(/^(\d+)_([A-Z0-9][A-Z0-9-]*)$/);
|
|
24209
|
+
if (!m) return void 0;
|
|
24210
|
+
return { lender: "USDD", chainId: m[1], ilk: m[2] };
|
|
24211
|
+
}
|
|
24212
|
+
var WAD8 = 1e18;
|
|
24213
|
+
var RAY3 = 1e27;
|
|
24214
|
+
var RAD = 1e45;
|
|
24215
|
+
var YEAR_SECONDS2 = 31536e3;
|
|
24216
|
+
function toHuman4(raw, decimals) {
|
|
24217
|
+
return Number(raw) / 10 ** decimals;
|
|
24218
|
+
}
|
|
24219
|
+
function currencyFor9(address, decimals, symbol, tokens) {
|
|
24220
|
+
const lower3 = address.toLowerCase();
|
|
24221
|
+
return tokens[lower3] ?? { address: lower3, symbol, name: symbol, decimals };
|
|
24222
|
+
}
|
|
24223
|
+
function convertUsddMarketsToResponse(raw, chainId, prices = {}, _additionalYields = {
|
|
24224
|
+
intrinsicYields: {},
|
|
24225
|
+
lenderRewards: {},
|
|
24226
|
+
loaded: true
|
|
24227
|
+
}, tokens = {}) {
|
|
24228
|
+
const out = {};
|
|
24229
|
+
const cfg = raw?.config;
|
|
24230
|
+
const chainData = raw?.chainData;
|
|
24231
|
+
if (!cfg || !chainData) return out;
|
|
24232
|
+
const debtAddr = cfg.usdd.toLowerCase();
|
|
24233
|
+
const debtDecimals = cfg.debtDecimals ?? 18;
|
|
24234
|
+
const debtToken = tokens[debtAddr];
|
|
24235
|
+
const debtSymbol = debtToken?.symbol ?? "USDD";
|
|
24236
|
+
const debtPriceKey = toOracleKey(debtToken?.assetGroup) || toGenericPriceKey(debtAddr, chainId);
|
|
24237
|
+
const debtPrice = prices[debtPriceKey] || 1;
|
|
24238
|
+
for (const m of raw.markets ?? []) {
|
|
24239
|
+
const market = m.market;
|
|
24240
|
+
const lenderKey = usddLenderKey(raw.lender, chainId, market.ilk);
|
|
24241
|
+
const collAddr = market.collToken.toLowerCase();
|
|
24242
|
+
const collDecimals = market.collDecimals;
|
|
24243
|
+
const collToken = tokens[collAddr];
|
|
24244
|
+
const collSymbol = collToken?.symbol ?? market.collSymbol ?? market.ilk.split("-")[0];
|
|
24245
|
+
const marketName = market.name ?? `${debtSymbol} / ${collSymbol}`;
|
|
24246
|
+
const collPriceKey = toOracleKey(collToken?.assetGroup) || toGenericPriceKey(collAddr, chainId);
|
|
24247
|
+
const spotDerivedPrice = m.spot !== null && m.mat !== null ? Number(m.spot) / RAY3 * (Number(m.mat) / RAY3) : 0;
|
|
24248
|
+
const collPrice = spotDerivedPrice || (prices[collPriceKey] ?? 0);
|
|
24249
|
+
const totalDebt = m.Art !== null && m.rate !== null ? Number(m.Art * m.rate / BigInt(1e27)) / 10 ** debtDecimals : 0;
|
|
24250
|
+
const totalColl = m.joinBalance !== null ? toHuman4(m.joinBalance, collDecimals) : 0;
|
|
24251
|
+
const mat = m.mat !== null ? Number(m.mat) / RAY3 : Number(market.mat) / RAY3 || 1.5;
|
|
24252
|
+
const ltv = mat > 0 ? 1 / mat : 0;
|
|
24253
|
+
const chop = market.chop ? Number(market.chop) / WAD8 : 0;
|
|
24254
|
+
const liqPenalty = chop > 1 ? chop - 1 : 0;
|
|
24255
|
+
const duty = m.duty !== null ? m.duty : BigInt(market.duty ?? 0);
|
|
24256
|
+
const borrowApr = duty > BigInt(1e27) ? Number(duty - BigInt(10) ** BigInt(27)) / RAY3 * YEAR_SECONDS2 * 100 : 0;
|
|
24257
|
+
const line = m.line !== null ? Number(m.line) / RAD : 0;
|
|
24258
|
+
let borrowLiquidity = Math.max(0, line - totalDebt);
|
|
24259
|
+
const halted = line === 0;
|
|
24260
|
+
const entry = { data: {} };
|
|
24261
|
+
const collUid = createMarketUid(chainId, lenderKey, collAddr);
|
|
24262
|
+
entry.data[collUid] = {
|
|
24263
|
+
marketUid: collUid,
|
|
24264
|
+
name: "Collateral " + collSymbol,
|
|
24265
|
+
poolId: market.gemJoin.toLowerCase(),
|
|
24266
|
+
underlying: collAddr,
|
|
24267
|
+
asset: currencyFor9(collAddr, collDecimals, collSymbol, tokens),
|
|
24268
|
+
totalDeposits: totalColl,
|
|
24269
|
+
totalDebtStable: 0,
|
|
24270
|
+
totalDebt: 0,
|
|
24271
|
+
totalLiquidity: totalColl,
|
|
24272
|
+
borrowLiquidity: 0,
|
|
24273
|
+
totalLiquidityUSD: totalColl * collPrice,
|
|
24274
|
+
borrowLiquidityUSD: 0,
|
|
24275
|
+
totalDepositsUSD: totalColl * collPrice,
|
|
24276
|
+
totalDebtStableUSD: 0,
|
|
24277
|
+
totalDebtUSD: 0,
|
|
24278
|
+
utilization: 0,
|
|
24279
|
+
depositRate: 0,
|
|
24280
|
+
variableBorrowRate: 0,
|
|
24281
|
+
stableBorrowRate: 0,
|
|
24282
|
+
intrinsicYield: 0,
|
|
24283
|
+
rewards: void 0,
|
|
24284
|
+
decimals: collDecimals,
|
|
24285
|
+
config: {
|
|
24286
|
+
0: {
|
|
24287
|
+
category: 0,
|
|
24288
|
+
borrowCollateralFactor: ltv,
|
|
24289
|
+
collateralFactor: ltv,
|
|
24290
|
+
borrowFactor: 1,
|
|
24291
|
+
liquidationPenalty: liqPenalty,
|
|
24292
|
+
closeFactor: 1,
|
|
24293
|
+
collateralDisabled: false,
|
|
24294
|
+
debtDisabled: true
|
|
24295
|
+
}
|
|
24296
|
+
},
|
|
24297
|
+
closeFactor: 1,
|
|
24298
|
+
collateralActive: true,
|
|
24299
|
+
borrowingEnabled: false,
|
|
24300
|
+
depositsEnabled: !halted,
|
|
24301
|
+
hasStable: false,
|
|
24302
|
+
isActive: !halted,
|
|
24303
|
+
isFrozen: halted
|
|
24304
|
+
};
|
|
24305
|
+
const loanUid = createMarketUid(chainId, lenderKey, debtAddr);
|
|
24306
|
+
entry.data[loanUid] = {
|
|
24307
|
+
marketUid: loanUid,
|
|
24308
|
+
name: debtSymbol,
|
|
24309
|
+
poolId: cfg.vat.toLowerCase(),
|
|
24310
|
+
underlying: debtAddr,
|
|
24311
|
+
asset: currencyFor9(debtAddr, debtDecimals, debtSymbol, tokens),
|
|
24312
|
+
totalDeposits: 0,
|
|
24313
|
+
totalDebtStable: 0,
|
|
24314
|
+
totalDebt,
|
|
24315
|
+
totalLiquidity: borrowLiquidity,
|
|
24316
|
+
borrowLiquidity,
|
|
24317
|
+
totalLiquidityUSD: borrowLiquidity * debtPrice,
|
|
24318
|
+
borrowLiquidityUSD: borrowLiquidity * debtPrice,
|
|
24319
|
+
totalDepositsUSD: 0,
|
|
24320
|
+
totalDebtStableUSD: 0,
|
|
24321
|
+
totalDebtUSD: totalDebt * debtPrice,
|
|
24322
|
+
utilization: 0,
|
|
24323
|
+
// The earn side is sUSDD (savings provider), not a lending deposit.
|
|
24324
|
+
depositRate: 0,
|
|
24325
|
+
variableBorrowRate: borrowApr,
|
|
24326
|
+
stableBorrowRate: 0,
|
|
24327
|
+
// Governance-set per-ilk stability fee — no utilization curve.
|
|
24328
|
+
rateModel: "protocolSet",
|
|
24329
|
+
intrinsicYield: 0,
|
|
24330
|
+
rewards: void 0,
|
|
24331
|
+
decimals: debtDecimals,
|
|
24332
|
+
config: {
|
|
24333
|
+
0: {
|
|
24334
|
+
category: 0,
|
|
24335
|
+
borrowCollateralFactor: 0,
|
|
24336
|
+
collateralFactor: 0,
|
|
24337
|
+
borrowFactor: 1,
|
|
24338
|
+
liquidationPenalty: liqPenalty,
|
|
24339
|
+
closeFactor: 1,
|
|
24340
|
+
collateralDisabled: true,
|
|
24341
|
+
debtDisabled: halted
|
|
24342
|
+
}
|
|
24343
|
+
},
|
|
24344
|
+
closeFactor: 1,
|
|
24345
|
+
collateralActive: false,
|
|
24346
|
+
borrowingEnabled: !halted,
|
|
24347
|
+
depositsEnabled: false,
|
|
24348
|
+
hasStable: false,
|
|
24349
|
+
variableBorrowDisabled: halted,
|
|
24350
|
+
isActive: !halted,
|
|
24351
|
+
isFrozen: halted
|
|
24352
|
+
};
|
|
24353
|
+
entry.params = {
|
|
24354
|
+
market: {
|
|
24355
|
+
lender: lenderKey,
|
|
24356
|
+
name: marketName,
|
|
24357
|
+
loanDecimals: debtDecimals,
|
|
24358
|
+
collateralDecimals: collDecimals,
|
|
24359
|
+
// The gem join doubles as the market id (marketUid address) — one
|
|
24360
|
+
// adapter per ilk, like River's TroveManager.
|
|
24361
|
+
id: market.gemJoin.toLowerCase(),
|
|
24362
|
+
lltv: m.mat !== null ? m.mat.toString() : market.mat,
|
|
24363
|
+
oracle: market.pip ?? zeroAddress,
|
|
24364
|
+
irm: zeroAddress,
|
|
24365
|
+
collateralAddress: collAddr,
|
|
24366
|
+
loanAddress: debtAddr,
|
|
24367
|
+
// --- USDD descriptor (metadata + live snapshot; consumed by the
|
|
24368
|
+
// calldata builders + worker-api resolvers) ---
|
|
24369
|
+
usdd: {
|
|
24370
|
+
ilk: market.ilk,
|
|
24371
|
+
/** Per-second stability fee (ray string) — live, metadata fallback. */
|
|
24372
|
+
duty: duty.toString(),
|
|
24373
|
+
/** Liquidation ratio (ray string). */
|
|
24374
|
+
mat: m.mat !== null ? m.mat.toString() : market.mat,
|
|
24375
|
+
/** Liquidation penalty multiplier (wad string, Dog.chop). */
|
|
24376
|
+
chop: market.chop,
|
|
24377
|
+
/** Ilk debt ceiling / per-CDP floor (rad strings). */
|
|
24378
|
+
line: m.line !== null ? m.line.toString() : market.line,
|
|
24379
|
+
dust: m.dust !== null ? m.dust.toString() : market.dust,
|
|
24380
|
+
/** Debt accumulator (ray string) — art × rate = debt. */
|
|
24381
|
+
rate: m.rate !== null ? m.rate.toString() : void 0,
|
|
24382
|
+
addresses: {
|
|
24383
|
+
vat: cfg.vat,
|
|
24384
|
+
jug: cfg.jug,
|
|
24385
|
+
spot: cfg.spot,
|
|
24386
|
+
dog: cfg.dog,
|
|
24387
|
+
cdpManager: cfg.cdpManager,
|
|
24388
|
+
proxyActions: cfg.proxyActions,
|
|
24389
|
+
proxyRegistry: cfg.proxyRegistry,
|
|
24390
|
+
usddJoin: cfg.usddJoin,
|
|
24391
|
+
gemJoin: market.gemJoin,
|
|
24392
|
+
clip: market.clip,
|
|
24393
|
+
pip: market.pip
|
|
24394
|
+
}
|
|
24395
|
+
}
|
|
24396
|
+
}
|
|
24397
|
+
};
|
|
24398
|
+
entry.chainId = chainId;
|
|
24399
|
+
out[lenderKey] = entry;
|
|
24400
|
+
}
|
|
24401
|
+
return out;
|
|
24402
|
+
}
|
|
24178
24403
|
|
|
24179
24404
|
// src/lending/public-data/silo-v2/fetchPublic.ts
|
|
24180
24405
|
var BASE_URL2 = "https://api-v3.silo.finance";
|
|
@@ -24785,6 +25010,7 @@ async function getLenderDataFromApi(lender, chainId, prices, additionalYields, i
|
|
|
24785
25010
|
if (isTeller(lender)) return await fetchTellerMarkets(chainId);
|
|
24786
25011
|
if (isInverse(lender)) return await fetchInverseMarkets(lender, chainId);
|
|
24787
25012
|
if (isTermMax(lender)) return await fetchTermMaxMarkets(chainId);
|
|
25013
|
+
if (isUsdd(lender)) return await fetchUsddMarkets(lender, chainId);
|
|
24788
25014
|
return {};
|
|
24789
25015
|
}
|
|
24790
25016
|
function convertLenderDataFromApi(lender, chainId, data, prices, additionalYields, list = {}) {
|
|
@@ -24846,6 +25072,14 @@ function convertLenderDataFromApi(lender, chainId, data, prices, additionalYield
|
|
|
24846
25072
|
additionalYields,
|
|
24847
25073
|
list
|
|
24848
25074
|
);
|
|
25075
|
+
if (isUsdd(lender))
|
|
25076
|
+
return convertUsddMarketsToResponse(
|
|
25077
|
+
data,
|
|
25078
|
+
chainId,
|
|
25079
|
+
prices,
|
|
25080
|
+
additionalYields,
|
|
25081
|
+
list
|
|
25082
|
+
);
|
|
24849
25083
|
if (isTermMax(lender))
|
|
24850
25084
|
return convertTermMaxMarketsToResponse(
|
|
24851
25085
|
data,
|
|
@@ -25055,6 +25289,7 @@ function lenderApiOnly(lender, chainId) {
|
|
|
25055
25289
|
if (isTeller(lender)) return true;
|
|
25056
25290
|
if (isInverse(lender)) return true;
|
|
25057
25291
|
if (isTermMax(lender)) return true;
|
|
25292
|
+
if (isUsdd(lender)) return true;
|
|
25058
25293
|
return false;
|
|
25059
25294
|
}
|
|
25060
25295
|
function lenderApiWithOnChainFallback(lender, chainId) {
|
|
@@ -26246,15 +26481,132 @@ var buildInverseUserCall = (chainId, lender, account) => {
|
|
|
26246
26481
|
);
|
|
26247
26482
|
return calls;
|
|
26248
26483
|
};
|
|
26249
|
-
var
|
|
26484
|
+
var USDD_CALLS_PER_CDP = 1;
|
|
26485
|
+
var MAX_CDP_WALK = 64;
|
|
26250
26486
|
var CACHE_TTL_MS2 = 5 * 6e4;
|
|
26251
26487
|
var discoveryCache2 = /* @__PURE__ */ new Map();
|
|
26252
26488
|
var cacheKey2 = (chainId, account) => `${chainId}:${account.toLowerCase()}`;
|
|
26253
|
-
var
|
|
26489
|
+
var getCachedUsddCdps = (chainId, account) => {
|
|
26254
26490
|
const hit = discoveryCache2.get(cacheKey2(chainId, account));
|
|
26255
26491
|
if (!hit || Date.now() - hit.at > CACHE_TTL_MS2) return void 0;
|
|
26256
26492
|
return hit;
|
|
26257
26493
|
};
|
|
26494
|
+
var big = (v) => {
|
|
26495
|
+
try {
|
|
26496
|
+
if (typeof v === "bigint") return v;
|
|
26497
|
+
if (typeof v === "number" || typeof v === "string") return BigInt(v);
|
|
26498
|
+
} catch {
|
|
26499
|
+
}
|
|
26500
|
+
return 0n;
|
|
26501
|
+
};
|
|
26502
|
+
var field6 = (res, name, idx) => res?.[name] ?? res?.[idx];
|
|
26503
|
+
var buildUsddUserCall = async (chainId, lender, account) => {
|
|
26504
|
+
const cfg = usddConfigFor(lender, chainId);
|
|
26505
|
+
const markets = usddChainData(lender, chainId)?.markets ?? [];
|
|
26506
|
+
const stash = (d) => discoveryCache2.set(cacheKey2(chainId, account), d);
|
|
26507
|
+
if (!cfg || markets.length === 0) {
|
|
26508
|
+
stash({ cdps: [], ilks: [], at: Date.now() });
|
|
26509
|
+
return [];
|
|
26510
|
+
}
|
|
26511
|
+
const curated = new Set(markets.map((m) => m.ilk));
|
|
26512
|
+
const zero = "0x0000000000000000000000000000000000000000";
|
|
26513
|
+
const owners = [];
|
|
26514
|
+
try {
|
|
26515
|
+
const [rawCount, rawFirst, rawProxy] = await multicallRetryUniversal({
|
|
26516
|
+
chain: chainId,
|
|
26517
|
+
abi: [...UsddCdpManagerAbi, ...UsddProxyRegistryAbi],
|
|
26518
|
+
calls: [
|
|
26519
|
+
{ address: cfg.cdpManager, name: "count", params: [account] },
|
|
26520
|
+
{ address: cfg.cdpManager, name: "first", params: [account] },
|
|
26521
|
+
{ address: cfg.proxyRegistry, name: "proxies", params: [account] }
|
|
26522
|
+
],
|
|
26523
|
+
allowFailure: false
|
|
26524
|
+
});
|
|
26525
|
+
owners.push({ owner: account, count: big(rawCount), cursor: big(rawFirst) });
|
|
26526
|
+
const proxy = String(rawProxy ?? zero);
|
|
26527
|
+
if (proxy.toLowerCase() !== zero) {
|
|
26528
|
+
const [pCount, pFirst] = await multicallRetryUniversal({
|
|
26529
|
+
chain: chainId,
|
|
26530
|
+
abi: UsddCdpManagerAbi,
|
|
26531
|
+
calls: [
|
|
26532
|
+
{ address: cfg.cdpManager, name: "count", params: [proxy] },
|
|
26533
|
+
{ address: cfg.cdpManager, name: "first", params: [proxy] }
|
|
26534
|
+
],
|
|
26535
|
+
allowFailure: false
|
|
26536
|
+
});
|
|
26537
|
+
owners.push({ owner: proxy, count: big(pCount), cursor: big(pFirst) });
|
|
26538
|
+
}
|
|
26539
|
+
} catch {
|
|
26540
|
+
return [];
|
|
26541
|
+
}
|
|
26542
|
+
const live = owners.filter((o) => o.count > 0n && o.cursor !== 0n);
|
|
26543
|
+
if (live.length === 0) {
|
|
26544
|
+
stash({ cdps: [], ilks: [], at: Date.now() });
|
|
26545
|
+
return [];
|
|
26546
|
+
}
|
|
26547
|
+
const cdps = [];
|
|
26548
|
+
try {
|
|
26549
|
+
for (const head of live) {
|
|
26550
|
+
let cursor = head.cursor;
|
|
26551
|
+
const steps = Number(
|
|
26552
|
+
head.count > BigInt(MAX_CDP_WALK) ? MAX_CDP_WALK : head.count
|
|
26553
|
+
);
|
|
26554
|
+
if (head.count > BigInt(MAX_CDP_WALK)) {
|
|
26555
|
+
console.warn(
|
|
26556
|
+
`USDD: owner ${head.owner} holds ${head.count} CDPs on chain ${chainId} \u2014 truncating discovery at ${MAX_CDP_WALK}`
|
|
26557
|
+
);
|
|
26558
|
+
}
|
|
26559
|
+
for (let i = 0; i < steps && cursor !== 0n; i++) {
|
|
26560
|
+
const [urn, ilk32, link] = await multicallRetryUniversal({
|
|
26561
|
+
chain: chainId,
|
|
26562
|
+
abi: UsddCdpManagerAbi,
|
|
26563
|
+
calls: [
|
|
26564
|
+
{ address: cfg.cdpManager, name: "urns", params: [cursor] },
|
|
26565
|
+
{ address: cfg.cdpManager, name: "ilks", params: [cursor] },
|
|
26566
|
+
{ address: cfg.cdpManager, name: "list", params: [cursor] }
|
|
26567
|
+
],
|
|
26568
|
+
allowFailure: false
|
|
26569
|
+
});
|
|
26570
|
+
let ilk = "";
|
|
26571
|
+
try {
|
|
26572
|
+
ilk = hexToString(ilk32, { size: 32 }).replace(/[\s\0]+$/g, "");
|
|
26573
|
+
} catch {
|
|
26574
|
+
}
|
|
26575
|
+
if (curated.has(ilk)) {
|
|
26576
|
+
cdps.push({ cdpId: cursor.toString(), urn: String(urn), ilk });
|
|
26577
|
+
}
|
|
26578
|
+
cursor = big(field6(link, "next", 1));
|
|
26579
|
+
}
|
|
26580
|
+
}
|
|
26581
|
+
} catch {
|
|
26582
|
+
return [];
|
|
26583
|
+
}
|
|
26584
|
+
const ilks = [...new Set(cdps.map((c) => c.ilk))];
|
|
26585
|
+
stash({ cdps, ilks, at: Date.now() });
|
|
26586
|
+
if (cdps.length === 0) return [];
|
|
26587
|
+
const calls = cdps.map((c) => ({
|
|
26588
|
+
address: cfg.vat,
|
|
26589
|
+
name: "urns",
|
|
26590
|
+
params: [usddIlkBytes32(c.ilk), c.urn]
|
|
26591
|
+
}));
|
|
26592
|
+
for (const ilk of ilks) {
|
|
26593
|
+
calls.push({
|
|
26594
|
+
address: cfg.vat,
|
|
26595
|
+
name: "ilks",
|
|
26596
|
+
params: [usddIlkBytes32(ilk)]
|
|
26597
|
+
});
|
|
26598
|
+
}
|
|
26599
|
+
return calls;
|
|
26600
|
+
};
|
|
26601
|
+
var TELLER_CALLS_PER_BID = 4;
|
|
26602
|
+
var CACHE_TTL_MS3 = 5 * 6e4;
|
|
26603
|
+
var discoveryCache3 = /* @__PURE__ */ new Map();
|
|
26604
|
+
var cacheKey3 = (chainId, account) => `${chainId}:${account.toLowerCase()}`;
|
|
26605
|
+
var getCachedTellerBids = (chainId, account) => {
|
|
26606
|
+
const hit = discoveryCache3.get(cacheKey3(chainId, account));
|
|
26607
|
+
if (!hit || Date.now() - hit.at > CACHE_TTL_MS3) return void 0;
|
|
26608
|
+
return hit;
|
|
26609
|
+
};
|
|
26258
26610
|
var nowSec5 = () => Math.floor(Date.now() / 1e3);
|
|
26259
26611
|
var toBigints = (arr) => {
|
|
26260
26612
|
if (!Array.isArray(arr)) return [];
|
|
@@ -26292,7 +26644,7 @@ var buildTellerUserCall = async (chainId, _lender, account) => {
|
|
|
26292
26644
|
return [];
|
|
26293
26645
|
}
|
|
26294
26646
|
if (ids.length === 0) {
|
|
26295
|
-
|
|
26647
|
+
discoveryCache3.set(cacheKey3(chainId, account), { bids: [], at: Date.now() });
|
|
26296
26648
|
return [];
|
|
26297
26649
|
}
|
|
26298
26650
|
const poolByAddr = /* @__PURE__ */ new Map();
|
|
@@ -26319,7 +26671,7 @@ var buildTellerUserCall = async (chainId, _lender, account) => {
|
|
|
26319
26671
|
const pool = poolByAddr.get(lenderAddr);
|
|
26320
26672
|
if (pool) kept.push({ bidId: id, pool });
|
|
26321
26673
|
});
|
|
26322
|
-
|
|
26674
|
+
discoveryCache3.set(cacheKey3(chainId, account), { bids: kept, at: Date.now() });
|
|
26323
26675
|
if (kept.length === 0) return [];
|
|
26324
26676
|
const ts = nowSec5();
|
|
26325
26677
|
const calls = [];
|
|
@@ -26344,12 +26696,12 @@ var buildTellerUserCall = async (chainId, _lender, account) => {
|
|
|
26344
26696
|
return calls;
|
|
26345
26697
|
};
|
|
26346
26698
|
var TERMMAX_CALLS_PER_ACCOUNT = 1;
|
|
26347
|
-
var
|
|
26348
|
-
var
|
|
26349
|
-
var
|
|
26699
|
+
var CACHE_TTL_MS4 = 5 * 6e4;
|
|
26700
|
+
var discoveryCache4 = /* @__PURE__ */ new Map();
|
|
26701
|
+
var cacheKey4 = (chainId, account) => `${chainId}:${account.toLowerCase()}`;
|
|
26350
26702
|
var getCachedTermMaxDiscovery = (chainId, account) => {
|
|
26351
|
-
const hit =
|
|
26352
|
-
if (!hit || Date.now() - hit.at >
|
|
26703
|
+
const hit = discoveryCache4.get(cacheKey4(chainId, account));
|
|
26704
|
+
if (!hit || Date.now() - hit.at > CACHE_TTL_MS4) return void 0;
|
|
26353
26705
|
return hit;
|
|
26354
26706
|
};
|
|
26355
26707
|
var buildTermMaxUserCall = async (chainId, _lender, account) => {
|
|
@@ -26364,11 +26716,11 @@ var buildTermMaxUserCall = async (chainId, _lender, account) => {
|
|
|
26364
26716
|
}
|
|
26365
26717
|
}
|
|
26366
26718
|
if (markets.length === 0) {
|
|
26367
|
-
|
|
26719
|
+
discoveryCache4.set(cacheKey4(chainId, account), { markets: [], at: Date.now() });
|
|
26368
26720
|
return [];
|
|
26369
26721
|
}
|
|
26370
26722
|
markets = [...markets].sort((a, b) => a.market.localeCompare(b.market));
|
|
26371
|
-
|
|
26723
|
+
discoveryCache4.set(cacheKey4(chainId, account), { markets, at: Date.now() });
|
|
26372
26724
|
return [
|
|
26373
26725
|
{
|
|
26374
26726
|
address: proto.viewer,
|
|
@@ -26401,22 +26753,30 @@ async function buildUserCall(chainId, lender, account, params, getClient) {
|
|
|
26401
26753
|
if (isTeller(lender)) return buildTellerUserCall(chainId, lender, account);
|
|
26402
26754
|
if (isTermMax(lender)) return buildTermMaxUserCall(chainId, lender, account);
|
|
26403
26755
|
if (isInverse(lender)) return buildInverseUserCall(chainId, lender, account);
|
|
26756
|
+
if (isUsdd(lender)) return buildUsddUserCall(chainId, lender, account);
|
|
26404
26757
|
if (isCompoundV3Type(lender))
|
|
26405
26758
|
return buildCompoundV3UserCall(chainId, lender, account);
|
|
26406
26759
|
if (isEulerType(lender))
|
|
26407
|
-
return buildEulerUserCall(
|
|
26408
|
-
|
|
26409
|
-
|
|
26410
|
-
|
|
26411
|
-
|
|
26760
|
+
return buildEulerUserCall(
|
|
26761
|
+
chainId,
|
|
26762
|
+
lender,
|
|
26763
|
+
account,
|
|
26764
|
+
params?.subAccountIndexes
|
|
26765
|
+
);
|
|
26766
|
+
if (isSiloV2Type(lender)) return buildSiloV2UserCall(chainId, lender, account);
|
|
26767
|
+
if (isSiloV3Type(lender)) return buildSiloV3UserCall(chainId, lender, account);
|
|
26412
26768
|
if (isCompoundV2Type(lender))
|
|
26413
26769
|
return buildCompoundV2UserCall(chainId, lender, account);
|
|
26414
|
-
if (isFluid(lender))
|
|
26415
|
-
return buildFluidUserCall(chainId, lender, account);
|
|
26770
|
+
if (isFluid(lender)) return buildFluidUserCall(chainId, lender, account);
|
|
26416
26771
|
if (isGearboxV3(lender))
|
|
26417
26772
|
return buildGearboxV3UserCall(chainId, lender, account);
|
|
26418
26773
|
if (isDolomite(lender))
|
|
26419
|
-
return buildDolomiteUserCall(
|
|
26774
|
+
return buildDolomiteUserCall(
|
|
26775
|
+
chainId,
|
|
26776
|
+
lender,
|
|
26777
|
+
account,
|
|
26778
|
+
params?.accountNumbers
|
|
26779
|
+
);
|
|
26420
26780
|
return [];
|
|
26421
26781
|
}
|
|
26422
26782
|
function organizeUserQueries(queries) {
|
|
@@ -26429,10 +26789,11 @@ function organizeUserQueries(queries) {
|
|
|
26429
26789
|
const river = queries.filter((q) => isRiver(q.lender));
|
|
26430
26790
|
const teller = queries.filter((q) => isTeller(q.lender));
|
|
26431
26791
|
const termMax = queries.filter((q) => isTermMax(q.lender));
|
|
26432
|
-
|
|
26792
|
+
const usdd = queries.filter((q) => isUsdd(q.lender));
|
|
26793
|
+
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)
|
|
26433
26794
|
return queries;
|
|
26434
26795
|
const others = queries.filter(
|
|
26435
|
-
(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)
|
|
26796
|
+
(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) && !isUsdd(q.lender)
|
|
26436
26797
|
);
|
|
26437
26798
|
const morphoBlue = morphos.filter((q) => q.lender.startsWith("MORPHO_BLUE"));
|
|
26438
26799
|
const moolah = morphos.filter((q) => q.lender.startsWith("LISTA_DAO"));
|
|
@@ -26493,6 +26854,14 @@ function organizeUserQueries(queries) {
|
|
|
26493
26854
|
assets: void 0
|
|
26494
26855
|
});
|
|
26495
26856
|
}
|
|
26857
|
+
if (usdd.length > 0) {
|
|
26858
|
+
result.push({
|
|
26859
|
+
lender: Lender.USDD,
|
|
26860
|
+
account: usdd[0].account,
|
|
26861
|
+
params: usdd.map((p) => p.lender),
|
|
26862
|
+
assets: void 0
|
|
26863
|
+
});
|
|
26864
|
+
}
|
|
26496
26865
|
if (teller.length > 0) {
|
|
26497
26866
|
result.push({
|
|
26498
26867
|
lender: Lender.TELLER,
|
|
@@ -28856,7 +29225,7 @@ var getMidnightUserDataConverter = (_lender, chainId, account, meta) => {
|
|
|
28856
29225
|
totalCalls
|
|
28857
29226
|
];
|
|
28858
29227
|
};
|
|
28859
|
-
var
|
|
29228
|
+
var WAD9 = 1000000000000000000n;
|
|
28860
29229
|
function toBigInt11(v) {
|
|
28861
29230
|
if (v === void 0 || v === null || v === "0x") return 0n;
|
|
28862
29231
|
if (typeof v === "bigint") return v;
|
|
@@ -28898,8 +29267,8 @@ var getTermUserDataConverter = (_lender, chainId, account, meta) => {
|
|
|
28898
29267
|
const debtStr = parseRawAmount(debtUnits.toString(), market.loanDecimals);
|
|
28899
29268
|
const debtNum = Number(debtStr);
|
|
28900
29269
|
const repoBalance = toBigInt11(balanceResult);
|
|
28901
|
-
const redemptionValue = toBigInt11(redemptionResult) || toBigInt11(market.redemptionValue) ||
|
|
28902
|
-
const lentUnits = repoBalance * redemptionValue /
|
|
29270
|
+
const redemptionValue = toBigInt11(redemptionResult) || toBigInt11(market.redemptionValue) || WAD9;
|
|
29271
|
+
const lentUnits = repoBalance * redemptionValue / WAD9;
|
|
28903
29272
|
const depositsStr = parseRawAmount(lentUnits.toString(), market.loanDecimals);
|
|
28904
29273
|
const depositsNum = Number(depositsStr);
|
|
28905
29274
|
const posData = {};
|
|
@@ -28976,18 +29345,41 @@ var getTermUserDataConverter = (_lender, chainId, account, meta) => {
|
|
|
28976
29345
|
];
|
|
28977
29346
|
};
|
|
28978
29347
|
var nowSec6 = () => Math.floor(Date.now() / 1e3);
|
|
29348
|
+
var DAY_SECONDS = 86400n;
|
|
29349
|
+
var WAD10 = 10n ** 18n;
|
|
28979
29350
|
function sumPreview(positions) {
|
|
28980
29351
|
return positions.reduce((acc, p) => acc + p.previewValue, 0n);
|
|
28981
29352
|
}
|
|
28982
|
-
|
|
28983
|
-
|
|
28984
|
-
|
|
28985
|
-
|
|
28986
|
-
|
|
28987
|
-
|
|
28988
|
-
previewValue
|
|
28989
|
-
|
|
28990
|
-
|
|
29353
|
+
var faceOf = (p) => p.position.principal + p.position.fee;
|
|
29354
|
+
function toDetail(positions, kind, now, penaltyRate, penaltyApr) {
|
|
29355
|
+
return positions.map((p) => {
|
|
29356
|
+
const maturity = Number(p.maturity);
|
|
29357
|
+
const overdue = maturity < now;
|
|
29358
|
+
const face = faceOf(p);
|
|
29359
|
+
const gap = face > p.previewValue ? face - p.previewValue : 0n;
|
|
29360
|
+
const excess = p.previewValue > face ? p.previewValue - face : 0n;
|
|
29361
|
+
return {
|
|
29362
|
+
maturity,
|
|
29363
|
+
kind,
|
|
29364
|
+
principal: p.position.principal.toString(),
|
|
29365
|
+
fee: p.position.fee.toString(),
|
|
29366
|
+
faceValue: face.toString(),
|
|
29367
|
+
previewValue: p.previewValue.toString(),
|
|
29368
|
+
overdue,
|
|
29369
|
+
secondsLate: overdue ? now - maturity : 0,
|
|
29370
|
+
...kind === "borrow" ? {
|
|
29371
|
+
...overdue ? { latePenalty: excess.toString() } : { earlyRepayDiscount: gap.toString() },
|
|
29372
|
+
// face × penaltyRate × 1 day — what another day of being late adds.
|
|
29373
|
+
latePenaltyPerDay: (face * penaltyRate * DAY_SECONDS / WAD10).toString(),
|
|
29374
|
+
latePenaltyApr: penaltyApr
|
|
29375
|
+
} : {
|
|
29376
|
+
...overdue ? {} : { earlyExitCost: gap.toString() },
|
|
29377
|
+
// Deposits carry no penalty: at/after maturity the payout is face.
|
|
29378
|
+
latePenaltyPerDay: "0",
|
|
29379
|
+
latePenaltyApr: 0
|
|
29380
|
+
}
|
|
29381
|
+
};
|
|
29382
|
+
});
|
|
28991
29383
|
}
|
|
28992
29384
|
var getExactlyUserDataConverter = (_lender, chainId, account, meta) => {
|
|
28993
29385
|
const expected = exactlyConfig()?.[chainId]?.previewer ? 1 : 0;
|
|
@@ -28998,50 +29390,66 @@ var getExactlyUserDataConverter = (_lender, chainId, account, meta) => {
|
|
|
28998
29390
|
if (!res || res === "0x" || !Array.isArray(res)) return void 0;
|
|
28999
29391
|
const markets = res;
|
|
29000
29392
|
const now = nowSec6();
|
|
29001
|
-
const
|
|
29393
|
+
const lenderKey = EXACTLY_LENDER_KEY;
|
|
29394
|
+
const metaMap = meta?.[lenderKey];
|
|
29395
|
+
if (!metaMap) return void 0;
|
|
29396
|
+
const posData = {};
|
|
29397
|
+
let depositsUSD24h = 0;
|
|
29398
|
+
let debtUSD24h = 0;
|
|
29002
29399
|
for (const m of markets) {
|
|
29003
|
-
const lenderKey = exactlyLenderKey(m.market);
|
|
29004
|
-
const metaMap = meta?.[lenderKey];
|
|
29005
|
-
if (!metaMap) continue;
|
|
29006
29400
|
const assetAddr = m.asset.toLowerCase();
|
|
29007
29401
|
const loanUid = createMarketUid(chainId, lenderKey, assetAddr);
|
|
29008
29402
|
const loanMeta = metaMap[loanUid];
|
|
29009
29403
|
const decimals = loanMeta?.asset?.decimals ?? m.decimals;
|
|
29010
|
-
const
|
|
29011
|
-
const
|
|
29012
|
-
const
|
|
29404
|
+
const displayPrice = loanMeta ? getDisplayPrice(loanMeta) : 0;
|
|
29405
|
+
const oraclePrice = loanMeta ? getOraclePrice(loanMeta) : 0;
|
|
29406
|
+
const priceHist = loanMeta?.price?.priceUsd24h ?? displayPrice;
|
|
29013
29407
|
const fixedDebtUnits = sumPreview(m.fixedBorrowPositions);
|
|
29014
29408
|
const depositUnits = m.floatingDepositAssets + sumPreview(m.fixedDepositPositions);
|
|
29015
29409
|
const debtUnits = m.floatingBorrowAssets + fixedDebtUnits;
|
|
29016
29410
|
if (depositUnits === 0n && debtUnits === 0n) continue;
|
|
29017
29411
|
const depositsStr = parseRawAmount(depositUnits.toString(), decimals);
|
|
29018
29412
|
const depositsNum = Number(depositsStr);
|
|
29019
|
-
const debtStr = parseRawAmount(debtUnits.toString(), decimals);
|
|
29020
|
-
const debtNum = Number(debtStr);
|
|
29021
29413
|
const floatingDebtStr = parseRawAmount(
|
|
29022
29414
|
m.floatingBorrowAssets.toString(),
|
|
29023
29415
|
decimals
|
|
29024
29416
|
);
|
|
29025
29417
|
const fixedDebtStr = parseRawAmount(fixedDebtUnits.toString(), decimals);
|
|
29418
|
+
const debtNum = Number(floatingDebtStr) + Number(fixedDebtStr);
|
|
29419
|
+
const penaltyApr = exactlyPenaltyRateToAprPercent(m.penaltyRate);
|
|
29026
29420
|
const fixedPositions = [
|
|
29027
|
-
...toDetail(
|
|
29028
|
-
|
|
29421
|
+
...toDetail(
|
|
29422
|
+
m.fixedDepositPositions,
|
|
29423
|
+
"deposit",
|
|
29424
|
+
now,
|
|
29425
|
+
m.penaltyRate,
|
|
29426
|
+
penaltyApr
|
|
29427
|
+
),
|
|
29428
|
+
...toDetail(
|
|
29429
|
+
m.fixedBorrowPositions,
|
|
29430
|
+
"borrow",
|
|
29431
|
+
now,
|
|
29432
|
+
m.penaltyRate,
|
|
29433
|
+
penaltyApr
|
|
29434
|
+
)
|
|
29029
29435
|
];
|
|
29030
|
-
|
|
29031
|
-
|
|
29436
|
+
depositsUSD24h += depositsNum * priceHist;
|
|
29437
|
+
debtUSD24h += debtNum * priceHist;
|
|
29032
29438
|
posData[loanUid] = {
|
|
29033
29439
|
marketUid: loanUid,
|
|
29034
29440
|
underlying: assetAddr,
|
|
29035
29441
|
deposits: depositsStr,
|
|
29036
29442
|
debt: floatingDebtStr,
|
|
29037
29443
|
debtStable: fixedDebtStr,
|
|
29038
|
-
depositsUSD: depositsNum *
|
|
29039
|
-
debtUSD: Number(floatingDebtStr) *
|
|
29040
|
-
debtStableUSD: Number(fixedDebtStr) *
|
|
29041
|
-
depositsUSDOracle: depositsNum *
|
|
29042
|
-
debtUSDOracle: Number(floatingDebtStr) *
|
|
29043
|
-
debtStableUSDOracle: Number(fixedDebtStr) *
|
|
29444
|
+
depositsUSD: depositsNum * displayPrice,
|
|
29445
|
+
debtUSD: Number(floatingDebtStr) * displayPrice,
|
|
29446
|
+
debtStableUSD: Number(fixedDebtStr) * displayPrice,
|
|
29447
|
+
depositsUSDOracle: depositsNum * oraclePrice,
|
|
29448
|
+
debtUSDOracle: Number(floatingDebtStr) * oraclePrice,
|
|
29449
|
+
debtStableUSDOracle: Number(fixedDebtStr) * oraclePrice,
|
|
29044
29450
|
stableBorrowRate: "0",
|
|
29451
|
+
// The Auditor's per-asset `enterMarket` flag: only entered deposits
|
|
29452
|
+
// back debt. A deposit with this false is inert collateral-wise.
|
|
29045
29453
|
collateralEnabled: m.isCollateral,
|
|
29046
29454
|
claimableRewards: 0,
|
|
29047
29455
|
// Per-maturity fixed-position detail (survives to the output — the
|
|
@@ -29051,6 +29459,11 @@ var getExactlyUserDataConverter = (_lender, chainId, account, meta) => {
|
|
|
29051
29459
|
for (const p of m.fixedBorrowPositions) {
|
|
29052
29460
|
const maturity = Number(p.maturity);
|
|
29053
29461
|
const trancheStr = parseRawAmount(p.previewValue.toString(), decimals);
|
|
29462
|
+
const isMatured = maturity < now;
|
|
29463
|
+
const face = faceOf(p);
|
|
29464
|
+
const faceStr = parseRawAmount(face.toString(), decimals);
|
|
29465
|
+
const discount = isMatured ? "0" : parseRawAmount((face - p.previewValue).toString(), decimals);
|
|
29466
|
+
const penalty = isMatured ? parseRawAmount((p.previewValue - face).toString(), decimals) : "0";
|
|
29054
29467
|
posData[`${loanUid}#${maturity}`] = {
|
|
29055
29468
|
marketUid: loanUid,
|
|
29056
29469
|
underlying: assetAddr,
|
|
@@ -29060,83 +29473,64 @@ var getExactlyUserDataConverter = (_lender, chainId, account, meta) => {
|
|
|
29060
29473
|
debtStable: trancheStr,
|
|
29061
29474
|
depositsUSD: 0,
|
|
29062
29475
|
debtUSD: 0,
|
|
29063
|
-
debtStableUSD: Number(trancheStr) *
|
|
29476
|
+
debtStableUSD: Number(trancheStr) * displayPrice,
|
|
29064
29477
|
depositsUSDOracle: 0,
|
|
29065
29478
|
debtUSDOracle: 0,
|
|
29066
|
-
debtStableUSDOracle: Number(trancheStr) *
|
|
29479
|
+
debtStableUSDOracle: Number(trancheStr) * oraclePrice,
|
|
29067
29480
|
collateralEnabled: false,
|
|
29068
29481
|
claimableRewards: 0,
|
|
29069
29482
|
term: {
|
|
29070
29483
|
loanId: String(maturity),
|
|
29071
29484
|
termId: maturity,
|
|
29072
29485
|
isDynamic: false,
|
|
29486
|
+
// `debt` is the repay-NOW cost (discounted early, penalized when
|
|
29487
|
+
// overdue); `faceValue` is what settling AT maturity costs.
|
|
29073
29488
|
debt: trancheStr,
|
|
29489
|
+
faceValue: faceStr,
|
|
29074
29490
|
maturity,
|
|
29075
29491
|
accruedInterest: parseRawAmount(
|
|
29076
29492
|
p.position.fee.toString(),
|
|
29077
29493
|
decimals
|
|
29078
29494
|
),
|
|
29079
|
-
isMatured
|
|
29495
|
+
isMatured,
|
|
29496
|
+
/** rebate if repaid now, before maturity (never a fee) */
|
|
29497
|
+
earlyRepayDiscount: discount,
|
|
29498
|
+
/** penalty already accrued past maturity */
|
|
29499
|
+
latePenalty: penalty,
|
|
29500
|
+
/** further penalty per day overdue — linear on face */
|
|
29501
|
+
latePenaltyPerDay: parseRawAmount(
|
|
29502
|
+
(face * m.penaltyRate * DAY_SECONDS / WAD10).toString(),
|
|
29503
|
+
decimals
|
|
29504
|
+
),
|
|
29505
|
+
latePenaltyApr: penaltyApr,
|
|
29506
|
+
secondsLate: isMatured ? now - maturity : 0
|
|
29080
29507
|
}
|
|
29081
29508
|
};
|
|
29082
29509
|
}
|
|
29083
|
-
|
|
29084
|
-
|
|
29085
|
-
|
|
29086
|
-
|
|
29087
|
-
|
|
29088
|
-
|
|
29089
|
-
|
|
29090
|
-
|
|
29091
|
-
|
|
29092
|
-
|
|
29093
|
-
|
|
29094
|
-
|
|
29095
|
-
|
|
29096
|
-
|
|
29097
|
-
const collNum = Number(collStr);
|
|
29098
|
-
depositsUSD24h += collNum * collPriceHist;
|
|
29099
|
-
posData[collUid] = {
|
|
29100
|
-
marketUid: collUid,
|
|
29101
|
-
underlying: collAddr,
|
|
29102
|
-
deposits: collStr,
|
|
29103
|
-
debt: "0",
|
|
29104
|
-
debtStable: "0",
|
|
29105
|
-
depositsUSD: collNum * collDisplayPrice,
|
|
29106
|
-
debtUSD: 0,
|
|
29107
|
-
debtStableUSD: 0,
|
|
29108
|
-
depositsUSDOracle: collNum * collOraclePrice,
|
|
29109
|
-
debtUSDOracle: 0,
|
|
29110
|
-
debtStableUSDOracle: 0,
|
|
29111
|
-
stableBorrowRate: "0",
|
|
29112
|
-
collateralEnabled: true,
|
|
29113
|
-
claimableRewards: 0
|
|
29114
|
-
};
|
|
29510
|
+
}
|
|
29511
|
+
if (Object.keys(posData).length === 0) return void 0;
|
|
29512
|
+
const userData = createMultiAccountTypeUserState(
|
|
29513
|
+
{
|
|
29514
|
+
chainId,
|
|
29515
|
+
account,
|
|
29516
|
+
lendingPositions: { "0": posData },
|
|
29517
|
+
modes: { "0": 0 }
|
|
29518
|
+
},
|
|
29519
|
+
metaMap,
|
|
29520
|
+
{
|
|
29521
|
+
"0": {
|
|
29522
|
+
totalDeposits24h: depositsUSD24h,
|
|
29523
|
+
totalDebt24h: debtUSD24h
|
|
29115
29524
|
}
|
|
29116
29525
|
}
|
|
29117
|
-
|
|
29118
|
-
|
|
29119
|
-
|
|
29120
|
-
account,
|
|
29121
|
-
lendingPositions: { "0": posData },
|
|
29122
|
-
modes: { "0": 0 }
|
|
29123
|
-
},
|
|
29124
|
-
metaMap,
|
|
29125
|
-
{
|
|
29126
|
-
"0": {
|
|
29127
|
-
totalDeposits24h: depositsUSD24h,
|
|
29128
|
-
totalDebt24h: debtNum * loanPriceHist
|
|
29129
|
-
}
|
|
29130
|
-
}
|
|
29131
|
-
);
|
|
29132
|
-
if (userData && userData.data.length > 0) out[lenderKey] = userData;
|
|
29133
|
-
}
|
|
29134
|
-
return Object.keys(out).length > 0 ? out : void 0;
|
|
29526
|
+
);
|
|
29527
|
+
if (!userData || userData.data.length === 0) return void 0;
|
|
29528
|
+
return { [lenderKey]: userData };
|
|
29135
29529
|
},
|
|
29136
29530
|
expected
|
|
29137
29531
|
];
|
|
29138
29532
|
};
|
|
29139
|
-
var
|
|
29533
|
+
var big2 = (v) => {
|
|
29140
29534
|
try {
|
|
29141
29535
|
if (typeof v === "bigint") return v;
|
|
29142
29536
|
if (typeof v === "number" || typeof v === "string") return BigInt(v);
|
|
@@ -29144,7 +29538,7 @@ var big = (v) => {
|
|
|
29144
29538
|
}
|
|
29145
29539
|
return 0n;
|
|
29146
29540
|
};
|
|
29147
|
-
var
|
|
29541
|
+
var field7 = (res, name, idx) => big2(res?.[name] ?? res?.[idx]);
|
|
29148
29542
|
var getLiquityUserDataConverter = (lender, chainId, account, meta) => {
|
|
29149
29543
|
const cfg = liquityConfigFor(lender, chainId);
|
|
29150
29544
|
const branches = liquityBranchesByChain(lender, chainId);
|
|
@@ -29191,29 +29585,29 @@ var getLiquityUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
29191
29585
|
const owner = typeof ownerRaw === "string" ? ownerRaw.toLowerCase() : void 0;
|
|
29192
29586
|
if (owner !== accountLower) return;
|
|
29193
29587
|
if (!troveData || troveData === "0x") return;
|
|
29194
|
-
const entireDebt =
|
|
29195
|
-
const entireColl =
|
|
29588
|
+
const entireDebt = field7(troveData, "entireDebt", 0);
|
|
29589
|
+
const entireColl = field7(troveData, "entireColl", 1);
|
|
29196
29590
|
if (entireDebt === 0n && entireColl === 0n) return;
|
|
29197
29591
|
const troveInfo = {
|
|
29198
29592
|
troveId: t.troveId,
|
|
29199
29593
|
collIndex: branch.collIndex,
|
|
29200
|
-
annualInterestRate:
|
|
29594
|
+
annualInterestRate: field7(
|
|
29201
29595
|
troveData,
|
|
29202
29596
|
"annualInterestRate",
|
|
29203
29597
|
6
|
|
29204
29598
|
).toString(),
|
|
29205
29599
|
lastInterestRateAdjTime: Number(
|
|
29206
|
-
|
|
29600
|
+
field7(troveData, "lastInterestRateAdjTime", 9)
|
|
29207
29601
|
),
|
|
29208
29602
|
zombie: t.zombie,
|
|
29209
|
-
redistCollGain:
|
|
29210
|
-
redistBoldDebtGain:
|
|
29603
|
+
redistCollGain: field7(troveData, "redistCollGain", 3).toString(),
|
|
29604
|
+
redistBoldDebtGain: field7(
|
|
29211
29605
|
troveData,
|
|
29212
29606
|
"redistBoldDebtGain",
|
|
29213
29607
|
2
|
|
29214
29608
|
).toString(),
|
|
29215
|
-
accruedInterest:
|
|
29216
|
-
accruedBatchManagementFee:
|
|
29609
|
+
accruedInterest: field7(troveData, "accruedInterest", 4).toString(),
|
|
29610
|
+
accruedBatchManagementFee: field7(
|
|
29217
29611
|
troveData,
|
|
29218
29612
|
"accruedBatchManagementFee",
|
|
29219
29613
|
8
|
|
@@ -29265,11 +29659,11 @@ var getLiquityUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
29265
29659
|
};
|
|
29266
29660
|
});
|
|
29267
29661
|
const spBase = troves.length * 2;
|
|
29268
|
-
const spDeposit =
|
|
29269
|
-
const spYield =
|
|
29270
|
-
const spCollGain =
|
|
29271
|
-
const spStashed =
|
|
29272
|
-
const collSurplus = branch.collSurplusPool ?
|
|
29662
|
+
const spDeposit = big2(slice2[spBase]);
|
|
29663
|
+
const spYield = big2(slice2[spBase + 1]);
|
|
29664
|
+
const spCollGain = big2(slice2[spBase + 2]);
|
|
29665
|
+
const spStashed = big2(slice2[spBase + 3]);
|
|
29666
|
+
const collSurplus = branch.collSurplusPool ? big2(slice2[spBase + 4]) : 0n;
|
|
29273
29667
|
const spStable = spDeposit + spYield;
|
|
29274
29668
|
const spColl = spCollGain + spStashed + collSurplus;
|
|
29275
29669
|
if (spStable > 0n || spColl > 0n) {
|
|
@@ -29348,7 +29742,7 @@ var getLiquityUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
29348
29742
|
expected
|
|
29349
29743
|
];
|
|
29350
29744
|
};
|
|
29351
|
-
var
|
|
29745
|
+
var big3 = (v) => {
|
|
29352
29746
|
try {
|
|
29353
29747
|
if (typeof v === "bigint") return v;
|
|
29354
29748
|
if (typeof v === "number" || typeof v === "string") return BigInt(v);
|
|
@@ -29356,7 +29750,7 @@ var big2 = (v) => {
|
|
|
29356
29750
|
}
|
|
29357
29751
|
return 0n;
|
|
29358
29752
|
};
|
|
29359
|
-
var
|
|
29753
|
+
var field8 = (res, name, idx) => big3(res?.[name] ?? res?.[idx]);
|
|
29360
29754
|
var getRiverUserDataConverter = (lender, chainId, account, meta) => {
|
|
29361
29755
|
const cfg = riverConfigFor(lender, chainId);
|
|
29362
29756
|
const markets = riverChainData(lender, chainId)?.markets ?? [];
|
|
@@ -29368,13 +29762,13 @@ var getRiverUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
29368
29762
|
const debtAddr = cfg.debtToken.toLowerCase();
|
|
29369
29763
|
const debtDecimals = cfg.debtDecimals ?? 18;
|
|
29370
29764
|
const out = {};
|
|
29371
|
-
const spDeposit =
|
|
29765
|
+
const spDeposit = big3(data[markets.length * RIVER_CALLS_PER_MARKET]);
|
|
29372
29766
|
markets.forEach((market, i) => {
|
|
29373
29767
|
const base = i * RIVER_CALLS_PER_MARKET;
|
|
29374
29768
|
const entire = data[base];
|
|
29375
29769
|
if (isFailedCall(entire) || isFailedCall(data[base + 1])) return;
|
|
29376
|
-
const status = Number(
|
|
29377
|
-
const surplus =
|
|
29770
|
+
const status = Number(big3(data[base + 1]));
|
|
29771
|
+
const surplus = big3(data[base + 2]);
|
|
29378
29772
|
const lenderKey = riverLenderKey(lender, chainId, market.index);
|
|
29379
29773
|
const metaMap = meta?.[lenderKey];
|
|
29380
29774
|
if (!metaMap) return;
|
|
@@ -29393,8 +29787,8 @@ var getRiverUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
29393
29787
|
const lendingPositions = {};
|
|
29394
29788
|
const modes = {};
|
|
29395
29789
|
const hist = {};
|
|
29396
|
-
const debt =
|
|
29397
|
-
const coll =
|
|
29790
|
+
const debt = field8(entire, "debt", 0);
|
|
29791
|
+
const coll = field8(entire, "coll", 1);
|
|
29398
29792
|
if (status === 1 && (debt > 0n || coll > 0n)) {
|
|
29399
29793
|
const riverInfo = {
|
|
29400
29794
|
index: market.index,
|
|
@@ -29482,7 +29876,7 @@ var getRiverUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
29482
29876
|
expected
|
|
29483
29877
|
];
|
|
29484
29878
|
};
|
|
29485
|
-
var
|
|
29879
|
+
var big4 = (v) => {
|
|
29486
29880
|
try {
|
|
29487
29881
|
if (typeof v === "bigint") return v;
|
|
29488
29882
|
if (typeof v === "number" || typeof v === "string") return BigInt(v);
|
|
@@ -29501,20 +29895,20 @@ var getInverseUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
29501
29895
|
const dolaAddr = cfg.dola.toLowerCase();
|
|
29502
29896
|
const debtDecimals = cfg.debtDecimals ?? 18;
|
|
29503
29897
|
const tailBase = markets.length * INVERSE_CALLS_PER_MARKET;
|
|
29504
|
-
const dbrBalance =
|
|
29505
|
-
const dbrDeficit =
|
|
29898
|
+
const dbrBalance = big4(data[tailBase]);
|
|
29899
|
+
const dbrDeficit = big4(data[tailBase + 1]);
|
|
29506
29900
|
const dbrSignedRaw = data[tailBase + 2];
|
|
29507
|
-
const dbrSigned = isFailedCall(dbrSignedRaw) ? 0n :
|
|
29901
|
+
const dbrSigned = isFailedCall(dbrSignedRaw) ? 0n : big4(dbrSignedRaw);
|
|
29508
29902
|
const out = {};
|
|
29509
29903
|
markets.forEach((market, i) => {
|
|
29510
29904
|
const base = i * INVERSE_CALLS_PER_MARKET;
|
|
29511
|
-
const escrowBal = isFailedCall(data[base]) ? 0n :
|
|
29905
|
+
const escrowBal = isFailedCall(data[base]) ? 0n : big4(data[base]);
|
|
29512
29906
|
const debtRaw = data[base + 1];
|
|
29513
29907
|
if (isFailedCall(debtRaw)) return;
|
|
29514
|
-
const debt =
|
|
29908
|
+
const debt = big4(debtRaw);
|
|
29515
29909
|
if (escrowBal === 0n && debt === 0n) return;
|
|
29516
|
-
const creditLimit = isFailedCall(data[base + 2]) ? 0n :
|
|
29517
|
-
const withdrawalLimit = isFailedCall(data[base + 3]) ? 0n :
|
|
29910
|
+
const creditLimit = isFailedCall(data[base + 2]) ? 0n : big4(data[base + 2]);
|
|
29911
|
+
const withdrawalLimit = isFailedCall(data[base + 3]) ? 0n : big4(data[base + 3]);
|
|
29518
29912
|
const lenderKey = inverseLenderKey(lender, market.address);
|
|
29519
29913
|
const metaMap = meta?.[lenderKey];
|
|
29520
29914
|
if (!metaMap) return;
|
|
@@ -29597,10 +29991,132 @@ var getInverseUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
29597
29991
|
expected
|
|
29598
29992
|
];
|
|
29599
29993
|
};
|
|
29994
|
+
var RAY4 = 10n ** 27n;
|
|
29995
|
+
var big5 = (v) => {
|
|
29996
|
+
try {
|
|
29997
|
+
if (typeof v === "bigint") return v;
|
|
29998
|
+
if (typeof v === "number" || typeof v === "string") return BigInt(v);
|
|
29999
|
+
} catch {
|
|
30000
|
+
}
|
|
30001
|
+
return 0n;
|
|
30002
|
+
};
|
|
30003
|
+
var field9 = (res, name, idx) => big5(res?.[name] ?? res?.[idx]);
|
|
30004
|
+
var getUsddUserDataConverter = (lender, chainId, account, meta) => {
|
|
30005
|
+
const cfg = usddConfigFor(lender, chainId);
|
|
30006
|
+
const markets = usddChainData(lender, chainId)?.markets ?? [];
|
|
30007
|
+
const discovery = getCachedUsddCdps(chainId, account);
|
|
30008
|
+
const cdps = discovery?.cdps ?? [];
|
|
30009
|
+
const ilks = discovery?.ilks ?? [];
|
|
30010
|
+
const expected = cfg && markets.length > 0 && cdps.length > 0 ? cdps.length * USDD_CALLS_PER_CDP + ilks.length : 0;
|
|
30011
|
+
return [
|
|
30012
|
+
(data) => {
|
|
30013
|
+
if (!cfg || expected === 0) return void 0;
|
|
30014
|
+
if (!data || data.length < expected) return void 0;
|
|
30015
|
+
const debtAddr = cfg.usdd.toLowerCase();
|
|
30016
|
+
const debtDecimals = cfg.debtDecimals ?? 18;
|
|
30017
|
+
const rateByIlk = /* @__PURE__ */ new Map();
|
|
30018
|
+
ilks.forEach((ilk, i) => {
|
|
30019
|
+
const res = data[cdps.length * USDD_CALLS_PER_CDP + i];
|
|
30020
|
+
if (!isFailedCall(res)) rateByIlk.set(ilk, field9(res, "rate", 1));
|
|
30021
|
+
});
|
|
30022
|
+
const perMarket = /* @__PURE__ */ new Map();
|
|
30023
|
+
cdps.forEach((cdp, i) => {
|
|
30024
|
+
const res = data[i * USDD_CALLS_PER_CDP];
|
|
30025
|
+
if (isFailedCall(res)) return;
|
|
30026
|
+
const ink = field9(res, "ink", 0);
|
|
30027
|
+
const art = field9(res, "art", 1);
|
|
30028
|
+
const rate = rateByIlk.get(cdp.ilk) ?? RAY4;
|
|
30029
|
+
const debt = art * rate / RAY4;
|
|
30030
|
+
if (ink === 0n && debt === 0n) return;
|
|
30031
|
+
const market = markets.find((m) => m.ilk === cdp.ilk);
|
|
30032
|
+
if (!market) return;
|
|
30033
|
+
const key = usddLenderKey(lender, chainId, cdp.ilk);
|
|
30034
|
+
if (!perMarket.has(key)) perMarket.set(key, { market, positions: [] });
|
|
30035
|
+
perMarket.get(key).positions.push({ cdp, ink, debt });
|
|
30036
|
+
});
|
|
30037
|
+
const out = {};
|
|
30038
|
+
for (const [lenderKey, { market, positions }] of perMarket) {
|
|
30039
|
+
const metaMap = meta?.[lenderKey];
|
|
30040
|
+
if (!metaMap) continue;
|
|
30041
|
+
const collAddr = market.collToken.toLowerCase();
|
|
30042
|
+
const collUid = createMarketUid(chainId, lenderKey, collAddr);
|
|
30043
|
+
const loanUid = createMarketUid(chainId, lenderKey, debtAddr);
|
|
30044
|
+
const collMeta = metaMap[collUid];
|
|
30045
|
+
const loanMeta = metaMap[loanUid];
|
|
30046
|
+
collMeta?.asset?.decimals ?? market.collDecimals;
|
|
30047
|
+
const collDisplay = collMeta ? getDisplayPrice(collMeta) : 0;
|
|
30048
|
+
const collOracle = collMeta ? getOraclePrice(collMeta) : 0;
|
|
30049
|
+
const collHist = collMeta?.price?.priceUsd24h ?? collDisplay;
|
|
30050
|
+
const loanDisplay = loanMeta ? getDisplayPrice(loanMeta) : 0;
|
|
30051
|
+
const loanOracle = loanMeta ? getOraclePrice(loanMeta) : 0;
|
|
30052
|
+
const loanHist = loanMeta?.price?.priceUsd24h ?? loanDisplay;
|
|
30053
|
+
const lendingPositions = {};
|
|
30054
|
+
const modes = {};
|
|
30055
|
+
const hist = {};
|
|
30056
|
+
for (const { cdp, ink, debt } of positions) {
|
|
30057
|
+
const collStr = parseRawAmount(ink.toString(), 18);
|
|
30058
|
+
const collNum = Number(collStr);
|
|
30059
|
+
const debtStr = parseRawAmount(debt.toString(), debtDecimals);
|
|
30060
|
+
const debtNum = Number(debtStr);
|
|
30061
|
+
const usddInfo = { ...cdp };
|
|
30062
|
+
lendingPositions[cdp.cdpId] = {
|
|
30063
|
+
[collUid]: {
|
|
30064
|
+
marketUid: collUid,
|
|
30065
|
+
underlying: collAddr,
|
|
30066
|
+
deposits: collStr,
|
|
30067
|
+
debt: "0",
|
|
30068
|
+
debtStable: "0",
|
|
30069
|
+
depositsUSD: collNum * collDisplay,
|
|
30070
|
+
debtUSD: 0,
|
|
30071
|
+
debtStableUSD: 0,
|
|
30072
|
+
depositsUSDOracle: collNum * collOracle,
|
|
30073
|
+
debtUSDOracle: 0,
|
|
30074
|
+
debtStableUSDOracle: 0,
|
|
30075
|
+
stableBorrowRate: "0",
|
|
30076
|
+
collateralEnabled: true,
|
|
30077
|
+
claimableRewards: 0
|
|
30078
|
+
},
|
|
30079
|
+
[loanUid]: {
|
|
30080
|
+
marketUid: loanUid,
|
|
30081
|
+
underlying: debtAddr,
|
|
30082
|
+
deposits: "0",
|
|
30083
|
+
debt: debtStr,
|
|
30084
|
+
debtStable: "0",
|
|
30085
|
+
depositsUSD: 0,
|
|
30086
|
+
debtUSD: debtNum * loanDisplay,
|
|
30087
|
+
debtStableUSD: 0,
|
|
30088
|
+
depositsUSDOracle: 0,
|
|
30089
|
+
debtUSDOracle: debtNum * loanOracle,
|
|
30090
|
+
debtStableUSDOracle: 0,
|
|
30091
|
+
stableBorrowRate: "0",
|
|
30092
|
+
collateralEnabled: false,
|
|
30093
|
+
claimableRewards: 0,
|
|
30094
|
+
usddInfo
|
|
30095
|
+
}
|
|
30096
|
+
};
|
|
30097
|
+
modes[cdp.cdpId] = 0;
|
|
30098
|
+
hist[cdp.cdpId] = {
|
|
30099
|
+
totalDeposits24h: collNum * collHist,
|
|
30100
|
+
totalDebt24h: debtNum * loanHist
|
|
30101
|
+
};
|
|
30102
|
+
}
|
|
30103
|
+
if (Object.keys(lendingPositions).length === 0) continue;
|
|
30104
|
+
const userData = createMultiAccountTypeUserState(
|
|
30105
|
+
{ chainId, account, lendingPositions, modes },
|
|
30106
|
+
metaMap,
|
|
30107
|
+
hist
|
|
30108
|
+
);
|
|
30109
|
+
if (userData && userData.data.length > 0) out[lenderKey] = userData;
|
|
30110
|
+
}
|
|
30111
|
+
return Object.keys(out).length > 0 ? out : void 0;
|
|
30112
|
+
},
|
|
30113
|
+
expected
|
|
30114
|
+
];
|
|
30115
|
+
};
|
|
29600
30116
|
|
|
29601
30117
|
// src/lending/user-data/teller/userCallParse.ts
|
|
29602
30118
|
var nowSec7 = () => Math.floor(Date.now() / 1e3);
|
|
29603
|
-
var
|
|
30119
|
+
var big6 = (v) => {
|
|
29604
30120
|
try {
|
|
29605
30121
|
if (typeof v === "bigint") return v;
|
|
29606
30122
|
if (typeof v === "number" || typeof v === "string") return BigInt(v);
|
|
@@ -29608,7 +30124,7 @@ var big4 = (v) => {
|
|
|
29608
30124
|
}
|
|
29609
30125
|
return 0n;
|
|
29610
30126
|
};
|
|
29611
|
-
var
|
|
30127
|
+
var field10 = (res, name, idx) => res?.[name] ?? res?.[idx];
|
|
29612
30128
|
var getTellerUserDataConverter = (_lender, chainId, account, meta) => {
|
|
29613
30129
|
const discovery = getCachedTellerBids(chainId, account);
|
|
29614
30130
|
const kept = discovery?.bids ?? [];
|
|
@@ -29622,7 +30138,7 @@ var getTellerUserDataConverter = (_lender, chainId, account, meta) => {
|
|
|
29622
30138
|
const base = i * TELLER_CALLS_PER_BID;
|
|
29623
30139
|
const bidRes = data[base];
|
|
29624
30140
|
const owed = data[base + 1];
|
|
29625
|
-
const collAmount =
|
|
30141
|
+
const collAmount = big6(data[base + 2]);
|
|
29626
30142
|
const defaulted = !!data[base + 3];
|
|
29627
30143
|
if (isFailedCall(bidRes) || isFailedCall(owed) || !bidRes) return;
|
|
29628
30144
|
const pool = b.pool;
|
|
@@ -29643,17 +30159,17 @@ var getTellerUserDataConverter = (_lender, chainId, account, meta) => {
|
|
|
29643
30159
|
const collDisplay = collMeta ? getDisplayPrice(collMeta) : 0;
|
|
29644
30160
|
const collOracle = collMeta ? getOraclePrice(collMeta) : 0;
|
|
29645
30161
|
const collHist = collMeta?.price?.priceUsd24h ?? collDisplay;
|
|
29646
|
-
const owedPrincipal =
|
|
29647
|
-
const owedInterest =
|
|
30162
|
+
const owedPrincipal = big6(field10(owed, "principal", 0));
|
|
30163
|
+
const owedInterest = big6(field10(owed, "interest", 1));
|
|
29648
30164
|
const owedTotal = owedPrincipal + owedInterest;
|
|
29649
30165
|
if (owedTotal === 0n && collAmount === 0n) return;
|
|
29650
|
-
const loanDetails =
|
|
29651
|
-
const terms =
|
|
30166
|
+
const loanDetails = field10(bidRes, "loanDetails", 5);
|
|
30167
|
+
const terms = field10(bidRes, "terms", 6);
|
|
29652
30168
|
const acceptedTs = Number(
|
|
29653
|
-
|
|
30169
|
+
big6(field10(loanDetails, "acceptedTimestamp", 4))
|
|
29654
30170
|
);
|
|
29655
|
-
const loanDuration = Number(
|
|
29656
|
-
const aprBps = Number(
|
|
30171
|
+
const loanDuration = Number(big6(field10(loanDetails, "loanDuration", 6)));
|
|
30172
|
+
const aprBps = Number(big6(field10(terms, "APR", 2)));
|
|
29657
30173
|
const maturity = acceptedTs > 0 ? acceptedTs + loanDuration : void 0;
|
|
29658
30174
|
const isMatured = defaulted || maturity !== void 0 && maturity < now;
|
|
29659
30175
|
const collStr = parseRawAmount(collAmount.toString(), collDecimals);
|
|
@@ -29751,7 +30267,7 @@ function toBigInt12(v) {
|
|
|
29751
30267
|
return 0n;
|
|
29752
30268
|
}
|
|
29753
30269
|
}
|
|
29754
|
-
function
|
|
30270
|
+
function field11(res, name, index) {
|
|
29755
30271
|
if (res && typeof res === "object" && !Array.isArray(res) && name in res) {
|
|
29756
30272
|
return res[name];
|
|
29757
30273
|
}
|
|
@@ -29759,18 +30275,18 @@ function field9(res, name, index) {
|
|
|
29759
30275
|
return void 0;
|
|
29760
30276
|
}
|
|
29761
30277
|
function parsePosition(res) {
|
|
29762
|
-
const ftBalance = toBigInt12(
|
|
29763
|
-
const xtBalance = toBigInt12(
|
|
29764
|
-
const rawGts =
|
|
30278
|
+
const ftBalance = toBigInt12(field11(res, "ftBalance", 2));
|
|
30279
|
+
const xtBalance = toBigInt12(field11(res, "xtBalance", 3));
|
|
30280
|
+
const rawGts = field11(res, "gtInfo", 4);
|
|
29765
30281
|
const gts = [];
|
|
29766
30282
|
if (Array.isArray(rawGts)) {
|
|
29767
30283
|
for (const g of rawGts) {
|
|
29768
|
-
const loanId = toBigInt12(
|
|
30284
|
+
const loanId = toBigInt12(field11(g, "loanId", 0));
|
|
29769
30285
|
if (loanId === 0n) continue;
|
|
29770
30286
|
gts.push({
|
|
29771
30287
|
loanId: loanId.toString(),
|
|
29772
|
-
collateralAmt: toBigInt12(
|
|
29773
|
-
debtAmt: toBigInt12(
|
|
30288
|
+
collateralAmt: toBigInt12(field11(g, "collateralAmt", 1)),
|
|
30289
|
+
debtAmt: toBigInt12(field11(g, "debtAmt", 2))
|
|
29774
30290
|
});
|
|
29775
30291
|
}
|
|
29776
30292
|
}
|
|
@@ -29951,6 +30467,8 @@ function getUserDataConverter(lender, chainId, account, params, meta) {
|
|
|
29951
30467
|
return getTermMaxUserDataConverter(lender, chainId, account, meta);
|
|
29952
30468
|
if (isInverse(lender))
|
|
29953
30469
|
return getInverseUserDataConverter(lender, chainId, account, meta);
|
|
30470
|
+
if (isUsdd(lender))
|
|
30471
|
+
return getUsddUserDataConverter(lender, chainId, account, meta);
|
|
29954
30472
|
if (isCompoundV3Type(lender))
|
|
29955
30473
|
return getCompoundV3UserDataConverter(
|
|
29956
30474
|
lender,
|
|
@@ -30063,7 +30581,7 @@ var convertLenderUserDataResult = (chainId, queriesRaw, rawResults, lenderState,
|
|
|
30063
30581
|
};
|
|
30064
30582
|
|
|
30065
30583
|
// src/utils/rpcCall.ts
|
|
30066
|
-
var
|
|
30584
|
+
var multicall3Abi2 = [
|
|
30067
30585
|
{
|
|
30068
30586
|
type: "function",
|
|
30069
30587
|
name: "aggregate3",
|
|
@@ -30139,7 +30657,7 @@ function createMulticallRpcCall(preparedCalls, multicallAddress, batchSize = MUL
|
|
|
30139
30657
|
};
|
|
30140
30658
|
});
|
|
30141
30659
|
const multicallData = encodeFunctionData({
|
|
30142
|
-
abi:
|
|
30660
|
+
abi: multicall3Abi2,
|
|
30143
30661
|
functionName: "aggregate3",
|
|
30144
30662
|
args: [aggregate3Calls]
|
|
30145
30663
|
});
|
|
@@ -34548,8 +35066,10 @@ var getAbi2 = (lender) => {
|
|
|
34548
35066
|
return [...RiverTroveManagerAbi, ...RiverStabilityPoolAbi];
|
|
34549
35067
|
if (isTeller(lender))
|
|
34550
35068
|
return [...TellerV2Abi, ...TellerCollateralManagerAbi];
|
|
35069
|
+
if (isTermMax(lender)) return [...TermMaxViewerAbi];
|
|
34551
35070
|
if (isInverse(lender))
|
|
34552
35071
|
return [...InverseMarketAbi, ...InverseEscrowAbi, ...InverseDbrAbi];
|
|
35072
|
+
if (isUsdd(lender)) return [...UsddVatAbi];
|
|
34553
35073
|
if (isInit(lender)) return InitLensAbi;
|
|
34554
35074
|
if (isEulerType(lender)) return accountLensAbi;
|
|
34555
35075
|
if (isCompoundV2Type(lender))
|
|
@@ -35106,7 +35626,7 @@ var MORPHO_API_CHAIN_IDS = {
|
|
|
35106
35626
|
[Chain.UNICHAIN]: 130
|
|
35107
35627
|
};
|
|
35108
35628
|
var FETCH_TIMEOUT_MS = 3e3;
|
|
35109
|
-
var
|
|
35629
|
+
var CACHE_TTL_MS5 = 2e3;
|
|
35110
35630
|
var buildSubgraphQuery = (account) => `
|
|
35111
35631
|
{
|
|
35112
35632
|
account(id: "${account.toLowerCase()}") {
|
|
@@ -35161,11 +35681,11 @@ async function fetchJsonWithProxyFallback(url, body, proxyConfig) {
|
|
|
35161
35681
|
}
|
|
35162
35682
|
var inflight = /* @__PURE__ */ new Map();
|
|
35163
35683
|
var resolved = /* @__PURE__ */ new Map();
|
|
35164
|
-
function
|
|
35684
|
+
function cacheKey5(chainId, account) {
|
|
35165
35685
|
return `${chainId}:${account.toLowerCase()}`;
|
|
35166
35686
|
}
|
|
35167
35687
|
async function dedupedFetch(chainId, account, loader) {
|
|
35168
|
-
const key =
|
|
35688
|
+
const key = cacheKey5(chainId, account);
|
|
35169
35689
|
const now = Date.now();
|
|
35170
35690
|
const cached = resolved.get(key);
|
|
35171
35691
|
if (cached && cached.expiresAt > now) {
|
|
@@ -35174,7 +35694,7 @@ async function dedupedFetch(chainId, account, loader) {
|
|
|
35174
35694
|
const existing = inflight.get(key);
|
|
35175
35695
|
if (existing) return existing;
|
|
35176
35696
|
const promise = loader().then((value) => {
|
|
35177
|
-
resolved.set(key, { value, expiresAt: Date.now() +
|
|
35697
|
+
resolved.set(key, { value, expiresAt: Date.now() + CACHE_TTL_MS5 });
|
|
35178
35698
|
return value;
|
|
35179
35699
|
}).finally(() => {
|
|
35180
35700
|
inflight.delete(key);
|
|
@@ -35306,8 +35826,8 @@ function calculateOverallNetApr(totalDepositsUSD, totalDebtUSD, avgDepositApr, a
|
|
|
35306
35826
|
return (totalDepositsUSD * avgDepositApr - totalDebtUSD * avgBorrowApr) / Math.abs(totalNetWorth) * (totalNetWorth > 0 ? 1 : -1);
|
|
35307
35827
|
}
|
|
35308
35828
|
function calculateWeightedAprs(items) {
|
|
35309
|
-
const wa = (
|
|
35310
|
-
items.filter((i) => i[weightField] !== 0).map((i) => ({ value: i[
|
|
35829
|
+
const wa = (field12, weightField) => calculateWeightedAverage(
|
|
35830
|
+
items.filter((i) => i[weightField] !== 0).map((i) => ({ value: i[field12], weight: Math.abs(i[weightField]) }))
|
|
35311
35831
|
);
|
|
35312
35832
|
return {
|
|
35313
35833
|
apr: wa("apr", "nav"),
|
|
@@ -36577,8 +37097,8 @@ var rswethFetcher = {
|
|
|
36577
37097
|
};
|
|
36578
37098
|
|
|
36579
37099
|
// src/yields/intrinsic/annualizeRate.ts
|
|
36580
|
-
var
|
|
36581
|
-
var annualizeGrowthPercent = (growth, elapsedSeconds) => growth * (
|
|
37100
|
+
var YEAR_SECONDS3 = 365 * 24 * 60 * 60;
|
|
37101
|
+
var annualizeGrowthPercent = (growth, elapsedSeconds) => growth * (YEAR_SECONDS3 / elapsedSeconds) * 100;
|
|
36582
37102
|
var annualizeRateDeltaPercent = (rateNow, rateThen, elapsedSeconds) => {
|
|
36583
37103
|
const growth = typeof rateNow === "bigint" && typeof rateThen === "bigint" ? Number(rateNow - rateThen) / Number(rateThen) : Number(rateNow) / Number(rateThen) - 1;
|
|
36584
37104
|
return annualizeGrowthPercent(growth, elapsedSeconds);
|
|
@@ -37045,8 +37565,8 @@ var stKaiaFetcher = {
|
|
|
37045
37565
|
// src/yields/intrinsic/fetchers/lista.ts
|
|
37046
37566
|
var HISTORY_URL = "https://api.lista.org/api/datachart/history";
|
|
37047
37567
|
var SLISBNB = "Lista Staked BNB::slisBNB";
|
|
37048
|
-
var
|
|
37049
|
-
var LOOKBACK_SECONDS = 14 *
|
|
37568
|
+
var DAY_SECONDS2 = 86400;
|
|
37569
|
+
var LOOKBACK_SECONDS = 14 * DAY_SECONDS2;
|
|
37050
37570
|
var TIMEOUT_MS = 8e3;
|
|
37051
37571
|
var slisBnbFetcher = {
|
|
37052
37572
|
label: "SLISBNB",
|
|
@@ -37620,7 +38140,7 @@ var FRXETH_SUMMARY_URL = "https://api.frax.finance/v2/frxeth/summary/latest";
|
|
|
37620
38140
|
var SFRXETH = "0xac3e018457b222d93114458476f3e3416abbe38f";
|
|
37621
38141
|
var SFRXUSD = "0xcf62f905562626cfcdd2261162a51fd02fc9c5b6";
|
|
37622
38142
|
var SFRAX = "0xa663b02cf0a4b149d2ad41910cb81e23e1c41c32";
|
|
37623
|
-
var
|
|
38143
|
+
var YEAR_SECONDS4 = 31536000n;
|
|
37624
38144
|
var ONE_E186 = 10n ** 18n;
|
|
37625
38145
|
var SFRXETH_KEY = "SFRXETH";
|
|
37626
38146
|
var SFRXUSD_KEY = "SFRXUSD";
|
|
@@ -37720,7 +38240,7 @@ var fetchSfrxEthAprOnChain = async () => {
|
|
|
37720
38240
|
const window = BigInt(cycleEnd) - BigInt(lastSync);
|
|
37721
38241
|
if (window <= 0n || totalAssets === 0n) return 0;
|
|
37722
38242
|
const perSecond = lastRewardAmount / window;
|
|
37723
|
-
return Number(perSecond *
|
|
38243
|
+
return Number(perSecond * YEAR_SECONDS4 * ONE_E186 / totalAssets) / 1e16;
|
|
37724
38244
|
};
|
|
37725
38245
|
var fetchSfrxEthApr = async () => {
|
|
37726
38246
|
try {
|
|
@@ -37752,7 +38272,7 @@ var fetchFraxSavingsAprs = async () => {
|
|
|
37752
38272
|
const uncapped = window > 0n ? rewardCycleAmount / window : 0n;
|
|
37753
38273
|
const cap = maxPerSecondPerAsset * storedTotalAssets / ONE_E186;
|
|
37754
38274
|
const perSecond = uncapped < cap ? uncapped : cap;
|
|
37755
|
-
return Number(perSecond *
|
|
38275
|
+
return Number(perSecond * YEAR_SECONDS4 * ONE_E186 / storedTotalAssets) / 1e16;
|
|
37756
38276
|
};
|
|
37757
38277
|
return { sfrxUsd: aprAt(0), sfrax: aprAt(3) };
|
|
37758
38278
|
};
|
|
@@ -39380,8 +39900,8 @@ var hastraPrimeFetcher = {
|
|
|
39380
39900
|
return { [HASTRA_PRIME_KEY]: Math.max(0, apr) };
|
|
39381
39901
|
}
|
|
39382
39902
|
};
|
|
39383
|
-
var
|
|
39384
|
-
var
|
|
39903
|
+
var RAY5 = 10n ** 27n;
|
|
39904
|
+
var YEAR_SECONDS5 = 31536e3;
|
|
39385
39905
|
var SPARK_VAULTS_V2 = [
|
|
39386
39906
|
{
|
|
39387
39907
|
chainId: Chain.ETHEREUM_MAINNET,
|
|
@@ -39457,9 +39977,9 @@ var SSR_ABI = [
|
|
|
39457
39977
|
}
|
|
39458
39978
|
];
|
|
39459
39979
|
var aprFromVsr = (vsr) => {
|
|
39460
|
-
if (vsr <=
|
|
39461
|
-
const perSecond = Number(vsr -
|
|
39462
|
-
return perSecond *
|
|
39980
|
+
if (vsr <= RAY5) return 0;
|
|
39981
|
+
const perSecond = Number(vsr - RAY5) / 1e27;
|
|
39982
|
+
return perSecond * YEAR_SECONDS5 * 100;
|
|
39463
39983
|
};
|
|
39464
39984
|
var chainsOf = (vaults) => [
|
|
39465
39985
|
...new Set(vaults.map((v) => v.chainId))
|
|
@@ -39478,7 +39998,7 @@ var fetchChain = async (chainId, vaults) => {
|
|
|
39478
39998
|
const out = {};
|
|
39479
39999
|
vaults.forEach((v, i) => {
|
|
39480
40000
|
const vsr = results[i];
|
|
39481
|
-
if (typeof vsr !== "bigint" || vsr <
|
|
40001
|
+
if (typeof vsr !== "bigint" || vsr < RAY5) return;
|
|
39482
40002
|
const apr = aprFromVsr(vsr);
|
|
39483
40003
|
out[sparkVaultV2Key(v.chainId, v.symbol)] = apr;
|
|
39484
40004
|
if (v.assetGroup) out[v.assetGroup] = apr;
|
|
@@ -39492,7 +40012,7 @@ var fetchSusdcApr = async () => {
|
|
|
39492
40012
|
calls: [{ address: SKY_SSR_SOURCE, name: "ssr", params: [] }],
|
|
39493
40013
|
allowFailure: false
|
|
39494
40014
|
});
|
|
39495
|
-
if (typeof ssr !== "bigint" || ssr <
|
|
40015
|
+
if (typeof ssr !== "bigint" || ssr < RAY5) {
|
|
39496
40016
|
throw new Error("Spark sUSDC: unreadable ssr()");
|
|
39497
40017
|
}
|
|
39498
40018
|
const apr = aprFromVsr(ssr);
|
|
@@ -39551,9 +40071,9 @@ var SUSDP_VAULTS = [
|
|
|
39551
40071
|
address: "0x472ed57b376fe400259fb28e5c46eb53f0e3e7e7"
|
|
39552
40072
|
}
|
|
39553
40073
|
];
|
|
39554
|
-
var
|
|
40074
|
+
var YEAR_SECONDS6 = 31536e3;
|
|
39555
40075
|
var BASE_27 = 1e27;
|
|
39556
|
-
var aprFromRate = (rate) => Number(rate) / BASE_27 *
|
|
40076
|
+
var aprFromRate = (rate) => Number(rate) / BASE_27 * YEAR_SECONDS6 * 100;
|
|
39557
40077
|
var SUSDP_KEY = "SUSDP";
|
|
39558
40078
|
var SUSDP_GROUP_KEY = "Staked USDp::sUSDp";
|
|
39559
40079
|
var parallelFetcher = {
|
|
@@ -39716,7 +40236,9 @@ var reProtocolFetcher = {
|
|
|
39716
40236
|
var USD3_KEY = "3JANE::USD3";
|
|
39717
40237
|
var SUSD3_KEY = "3JANE::sUSD3";
|
|
39718
40238
|
var USD3_GROUP_KEY = "3Jane USD3::USD3";
|
|
39719
|
-
var SUSD3_GROUP_KEY = "3Jane Staked USD3::
|
|
40239
|
+
var SUSD3_GROUP_KEY = "3Jane Staked USD3::sUSD3";
|
|
40240
|
+
var USD3_LEGACY_GROUP_KEY = "USD3::USD3";
|
|
40241
|
+
var SUSD3_LEGACY_GROUP_KEY = "sUSD3::sUSD3";
|
|
39720
40242
|
var USD3_POOL = "f8cd444e-d99f-4132-b234-fd3482bf8806";
|
|
39721
40243
|
var SUSD3_POOL = "a99bb965-ebaa-4d98-9ed2-fa18de52c605";
|
|
39722
40244
|
var threeJaneFetcher = {
|
|
@@ -39731,11 +40253,13 @@ var threeJaneFetcher = {
|
|
|
39731
40253
|
const apr = apyToAprPercent(usd3.value);
|
|
39732
40254
|
out[USD3_KEY] = apr;
|
|
39733
40255
|
out[USD3_GROUP_KEY] = apr;
|
|
40256
|
+
out[USD3_LEGACY_GROUP_KEY] = apr;
|
|
39734
40257
|
}
|
|
39735
40258
|
if (susd3.status === "fulfilled") {
|
|
39736
40259
|
const apr = apyToAprPercent(susd3.value);
|
|
39737
40260
|
out[SUSD3_KEY] = apr;
|
|
39738
40261
|
out[SUSD3_GROUP_KEY] = apr;
|
|
40262
|
+
out[SUSD3_LEGACY_GROUP_KEY] = apr;
|
|
39739
40263
|
}
|
|
39740
40264
|
if (Object.keys(out).length === 0) {
|
|
39741
40265
|
throw new Error("3Jane: DefiLlama returned no apy for either pool");
|
|
@@ -39771,7 +40295,7 @@ var toriFetcher = {
|
|
|
39771
40295
|
};
|
|
39772
40296
|
var CHAIN_ID8 = Chain.ETHEREUM_MAINNET;
|
|
39773
40297
|
var SNUSD = "0x08efcc2f3e61185d0ea7f8830b3fec9bfa2ee313";
|
|
39774
|
-
var
|
|
40298
|
+
var YEAR_SECONDS7 = 31536000n;
|
|
39775
40299
|
var ONE_E187 = 10n ** 18n;
|
|
39776
40300
|
var SNUSD_KEY = "SNUSD";
|
|
39777
40301
|
var SNUSD_GROUP_KEY = "Staked NUSD::sNUSD";
|
|
@@ -39823,7 +40347,7 @@ var fetchSnusdAprOnChain = async () => {
|
|
|
39823
40347
|
const window = elapsed > vestingPeriod ? elapsed : vestingPeriod;
|
|
39824
40348
|
if (window <= 0n) return 0;
|
|
39825
40349
|
const perSecond = vestingAmount / window;
|
|
39826
|
-
return Number(perSecond *
|
|
40350
|
+
return Number(perSecond * YEAR_SECONDS7 * ONE_E187 / totalAssets) / 1e16;
|
|
39827
40351
|
};
|
|
39828
40352
|
var snusdFetcher = {
|
|
39829
40353
|
label: "SNUSD",
|
|
@@ -39836,8 +40360,179 @@ var snusdFetcher = {
|
|
|
39836
40360
|
};
|
|
39837
40361
|
}
|
|
39838
40362
|
};
|
|
39839
|
-
var
|
|
39840
|
-
var
|
|
40363
|
+
var CHAIN_ID9 = Chain.ETHEREUM_MAINNET;
|
|
40364
|
+
var APYUSD = "0x38eeb52f0771140d10c4e9a9a72349a329fe8a6a";
|
|
40365
|
+
var APYX_LINEAR_VEST = "0x0d62b4cc02b4b51ed19ddf41d7a7979cf394c99f";
|
|
40366
|
+
var APYX_DISCOVER_URL = "https://api.apyx.fi/v1/rewards/seasons/2/discover";
|
|
40367
|
+
var APYX_DEFILLAMA_POOL = "cb6139f9-4a68-4efd-8245-0312a92aee55";
|
|
40368
|
+
var YEAR_SECONDS8 = 31536000n;
|
|
40369
|
+
var ONE_E188 = 10n ** 18n;
|
|
40370
|
+
var APYUSD_KEY = "APYUSD";
|
|
40371
|
+
var APYUSD_GROUP_KEY = "apyUSD::APYUSD";
|
|
40372
|
+
var APYUSD_LEGACY_GROUP_KEY = "apyUSD::apyUSD";
|
|
40373
|
+
var APYX_READ_ABI = [
|
|
40374
|
+
{
|
|
40375
|
+
name: "totalAssets",
|
|
40376
|
+
type: "function",
|
|
40377
|
+
stateMutability: "view",
|
|
40378
|
+
inputs: [],
|
|
40379
|
+
outputs: [{ type: "uint256" }]
|
|
40380
|
+
},
|
|
40381
|
+
{
|
|
40382
|
+
name: "unvestedAmount",
|
|
40383
|
+
type: "function",
|
|
40384
|
+
stateMutability: "view",
|
|
40385
|
+
inputs: [],
|
|
40386
|
+
outputs: [{ type: "uint256" }]
|
|
40387
|
+
},
|
|
40388
|
+
{
|
|
40389
|
+
name: "vestingPeriodRemaining",
|
|
40390
|
+
type: "function",
|
|
40391
|
+
stateMutability: "view",
|
|
40392
|
+
inputs: [],
|
|
40393
|
+
outputs: [{ type: "uint256" }]
|
|
40394
|
+
}
|
|
40395
|
+
];
|
|
40396
|
+
var fetchApyusdAprOnChain = async () => {
|
|
40397
|
+
const [totalAssets, unvested, periodRemaining] = await multicallRetryUniversal({
|
|
40398
|
+
chain: CHAIN_ID9,
|
|
40399
|
+
abi: APYX_READ_ABI,
|
|
40400
|
+
calls: [
|
|
40401
|
+
{ address: APYUSD, name: "totalAssets", params: [] },
|
|
40402
|
+
{ address: APYX_LINEAR_VEST, name: "unvestedAmount", params: [] },
|
|
40403
|
+
{
|
|
40404
|
+
address: APYX_LINEAR_VEST,
|
|
40405
|
+
name: "vestingPeriodRemaining",
|
|
40406
|
+
params: []
|
|
40407
|
+
}
|
|
40408
|
+
],
|
|
40409
|
+
allowFailure: false
|
|
40410
|
+
});
|
|
40411
|
+
if (totalAssets === 0n || periodRemaining === 0n || unvested === 0n) {
|
|
40412
|
+
throw new Error("apyx vesting state empty");
|
|
40413
|
+
}
|
|
40414
|
+
const perSecond = unvested / periodRemaining;
|
|
40415
|
+
return Number(perSecond * YEAR_SECONDS8 * ONE_E188 / totalAssets) / 1e16;
|
|
40416
|
+
};
|
|
40417
|
+
var fetchApyusdApyFromApi = async () => {
|
|
40418
|
+
const res = await fetch(APYX_DISCOVER_URL, {
|
|
40419
|
+
headers: { accept: "application/json" },
|
|
40420
|
+
signal: AbortSignal.timeout(8e3)
|
|
40421
|
+
});
|
|
40422
|
+
if (!res.ok) throw new Error(`HTTP ${res.status}`);
|
|
40423
|
+
const items = (await res.json())?.data?.items ?? [];
|
|
40424
|
+
const row = items.find(
|
|
40425
|
+
(it) => it?.protocol === "Apyx" && it?.network === "ethereum" && Array.isArray(it?.assetSymbols) && it.assetSymbols.includes("apyUSD") && it?.apy != null
|
|
40426
|
+
);
|
|
40427
|
+
const apy = Number(row?.apy);
|
|
40428
|
+
if (Number.isFinite(apy) && apy > 0) return apy;
|
|
40429
|
+
throw new Error("apyUSD apy missing");
|
|
40430
|
+
};
|
|
40431
|
+
var apyxFetcher = {
|
|
40432
|
+
label: "APYUSD",
|
|
40433
|
+
fetch: async () => {
|
|
40434
|
+
const apr = await fetchApyusdAprOnChain().catch(async () => apyToAprPercent(await fetchApyusdApyFromApi())).catch(() => fetchDefiLlamaApy(APYX_DEFILLAMA_POOL)).catch(() => 0);
|
|
40435
|
+
return {
|
|
40436
|
+
[APYUSD_KEY]: apr,
|
|
40437
|
+
[APYUSD_GROUP_KEY]: apr,
|
|
40438
|
+
[APYUSD_LEGACY_GROUP_KEY]: apr
|
|
40439
|
+
};
|
|
40440
|
+
}
|
|
40441
|
+
};
|
|
40442
|
+
|
|
40443
|
+
// src/yields/intrinsic/fetchers/strata.ts
|
|
40444
|
+
var STRATA_ANALYTICS_URL = "https://s3.strata.money/tranches/analytics-v18.json";
|
|
40445
|
+
var SRUSDE_KEY = "Strata Senior USDe::SRUSDE";
|
|
40446
|
+
var JRUSDE_KEY = "Strata Junior USDe::jrUSDe";
|
|
40447
|
+
var SRNUSD_KEY = "Strata Senior NUSD::srNUSD";
|
|
40448
|
+
var JRNUSD_KEY = "Strata Junior NUSD::JRNUSD";
|
|
40449
|
+
var SRMHYPER_KEY = "Strata Senior mHYPER::srmHYPER";
|
|
40450
|
+
var JRMHYPER_KEY = "Strata Junior mHYPER::JRMHYPER";
|
|
40451
|
+
var SRMM1USD_KEY = "Strata Senior mM1-USD::SRMM1-USD";
|
|
40452
|
+
var JRMM1USD_KEY = "Strata Junior mM1-USD::JRMM1-USD";
|
|
40453
|
+
var SRUSDAT_KEY = "Strata Senior USDat::SRUSDAT";
|
|
40454
|
+
var JRUSDAT_KEY = "Strata Junior USDat::JRUSDAT";
|
|
40455
|
+
var SRPRIME_KEY = "Strata Senior PRIME::srPRIME";
|
|
40456
|
+
var JRPRIME_KEY = "Strata Junior PRIME::jrPRIME";
|
|
40457
|
+
var STRATA_MARKETS = [
|
|
40458
|
+
{
|
|
40459
|
+
cdo: "ethenaCdo",
|
|
40460
|
+
sr: { key: SRUSDE_KEY, llamaPool: "843be062-d836-43ef-9670-c78d6ecb60bf" },
|
|
40461
|
+
jr: { key: JRUSDE_KEY, llamaPool: "8352355c-5ad7-45c5-aca2-628de224f8d8" }
|
|
40462
|
+
},
|
|
40463
|
+
{
|
|
40464
|
+
cdo: "neutrlCdo",
|
|
40465
|
+
sr: { key: SRNUSD_KEY, llamaPool: "979711ce-d0c0-4aae-a5fc-d7b76e868649" },
|
|
40466
|
+
jr: { key: JRNUSD_KEY, llamaPool: "947928b7-c446-49d7-a378-392df37660f7" }
|
|
40467
|
+
},
|
|
40468
|
+
{
|
|
40469
|
+
cdo: "mhyperCdo",
|
|
40470
|
+
sr: {
|
|
40471
|
+
key: SRMHYPER_KEY,
|
|
40472
|
+
llamaPool: "a0560647-eb43-45d9-880d-3155db6d357e"
|
|
40473
|
+
},
|
|
40474
|
+
jr: {
|
|
40475
|
+
key: JRMHYPER_KEY,
|
|
40476
|
+
llamaPool: "908664de-79ee-4f4f-9347-40da76a43552"
|
|
40477
|
+
}
|
|
40478
|
+
},
|
|
40479
|
+
{
|
|
40480
|
+
cdo: "mm1usdCdo",
|
|
40481
|
+
sr: {
|
|
40482
|
+
key: SRMM1USD_KEY,
|
|
40483
|
+
llamaPool: "8139ac7b-c983-4800-bb98-60abe3d68157"
|
|
40484
|
+
},
|
|
40485
|
+
jr: {
|
|
40486
|
+
key: JRMM1USD_KEY,
|
|
40487
|
+
llamaPool: "2172d4b0-9a76-4452-af46-2ce833d2c612"
|
|
40488
|
+
}
|
|
40489
|
+
},
|
|
40490
|
+
{
|
|
40491
|
+
cdo: "saturnCdo",
|
|
40492
|
+
sr: { key: SRUSDAT_KEY, llamaPool: "d0f93146-6936-4fac-841e-68178b5a59b2" },
|
|
40493
|
+
jr: { key: JRUSDAT_KEY, llamaPool: "1f42963b-ff24-4563-acb7-0fd35e6ec45b" }
|
|
40494
|
+
},
|
|
40495
|
+
{
|
|
40496
|
+
cdo: "figureCdo",
|
|
40497
|
+
sr: { key: SRPRIME_KEY, llamaPool: "c590eff9-9de2-462c-b629-7e9c89f0b8e9" },
|
|
40498
|
+
jr: { key: JRPRIME_KEY, llamaPool: "f88ff950-9096-46c0-bb9e-93f4d8266c41" }
|
|
40499
|
+
}
|
|
40500
|
+
];
|
|
40501
|
+
var fetchStrataAnalytics = async () => {
|
|
40502
|
+
const res = await fetch(STRATA_ANALYTICS_URL, {
|
|
40503
|
+
headers: { accept: "application/json" },
|
|
40504
|
+
signal: AbortSignal.timeout(8e3)
|
|
40505
|
+
});
|
|
40506
|
+
if (!res.ok) throw new Error(`Strata analytics HTTP ${res.status}`);
|
|
40507
|
+
return await res.json();
|
|
40508
|
+
};
|
|
40509
|
+
var strataFetcher = {
|
|
40510
|
+
label: "STRATA",
|
|
40511
|
+
fetch: async () => {
|
|
40512
|
+
const analytics = await fetchStrataAnalytics().catch(() => null);
|
|
40513
|
+
const out = {};
|
|
40514
|
+
await Promise.all(
|
|
40515
|
+
STRATA_MARKETS.flatMap(
|
|
40516
|
+
({ cdo, sr, jr }) => [
|
|
40517
|
+
[sr, analytics?.[cdo]?.week?.srt?.apr],
|
|
40518
|
+
[jr, analytics?.[cdo]?.week?.jrt?.apr]
|
|
40519
|
+
].map(async ([tranche, apr]) => {
|
|
40520
|
+
if (typeof apr === "number" && Number.isFinite(apr)) {
|
|
40521
|
+
out[tranche.key] = apr;
|
|
40522
|
+
return;
|
|
40523
|
+
}
|
|
40524
|
+
const llamaApy = await fetchDefiLlamaApy(tranche.llamaPool).catch(
|
|
40525
|
+
() => null
|
|
40526
|
+
);
|
|
40527
|
+
if (llamaApy !== null) out[tranche.key] = apyToAprPercent(llamaApy);
|
|
40528
|
+
})
|
|
40529
|
+
)
|
|
40530
|
+
);
|
|
40531
|
+
return out;
|
|
40532
|
+
}
|
|
40533
|
+
};
|
|
40534
|
+
var RAY6 = 10n ** 27n;
|
|
40535
|
+
var YEAR_SECONDS9 = 31536e3;
|
|
39841
40536
|
var DSR_ABI = [
|
|
39842
40537
|
{
|
|
39843
40538
|
name: "dsr",
|
|
@@ -39863,9 +40558,9 @@ var USDD_EARN_APY_URL = "https://openapi.usdd.io/api/v1/external/earn-apy";
|
|
|
39863
40558
|
var susddKey = (chainId) => `USDD::${chainId}::sUSDD`;
|
|
39864
40559
|
var SUSDD_GROUP_KEY = "Savings Usdd::sUSDD";
|
|
39865
40560
|
var aprFromDsr = (dsr) => {
|
|
39866
|
-
if (dsr <=
|
|
39867
|
-
const perSecond = Number(dsr -
|
|
39868
|
-
return perSecond *
|
|
40561
|
+
if (dsr <= RAY6) return 0;
|
|
40562
|
+
const perSecond = Number(dsr - RAY6) / 1e27;
|
|
40563
|
+
return perSecond * YEAR_SECONDS9 * 100;
|
|
39869
40564
|
};
|
|
39870
40565
|
var fetchChainDsr = async (chainId, pot) => {
|
|
39871
40566
|
const [dsr] = await multicallRetryUniversal({
|
|
@@ -39874,7 +40569,7 @@ var fetchChainDsr = async (chainId, pot) => {
|
|
|
39874
40569
|
calls: [{ address: pot, name: "dsr", params: [] }],
|
|
39875
40570
|
allowFailure: false
|
|
39876
40571
|
});
|
|
39877
|
-
if (typeof dsr !== "bigint" || dsr <
|
|
40572
|
+
if (typeof dsr !== "bigint" || dsr < RAY6) {
|
|
39878
40573
|
throw new Error(`USDD: unreadable dsr() on chain ${chainId}`);
|
|
39879
40574
|
}
|
|
39880
40575
|
return aprFromDsr(dsr);
|
|
@@ -41410,6 +42105,270 @@ var SINGLE_CHAIN_ENTRIES = {
|
|
|
41410
42105
|
yieldFetcher: snusdFetcher,
|
|
41411
42106
|
yieldKey: SNUSD_KEY
|
|
41412
42107
|
},
|
|
42108
|
+
{
|
|
42109
|
+
// Apyx apyUSD — ERC-4626 over apxUSD, the "Dividend-Backed
|
|
42110
|
+
// Dollar" (variable-rate perpetual preferred stock of DAT
|
|
42111
|
+
// companies, STRC/Strategy). Yield = off-chain dividends minted
|
|
42112
|
+
// as apxUSD and dripped in through a 14-day LinearVestV0
|
|
42113
|
+
// (0x0d62b4cc…, `pullVestedYield`). No on-chain solvency
|
|
42114
|
+
// invariant — RWA/NAV trust class. apxUSD minting is
|
|
42115
|
+
// EIP-712/m-of-n gated (institutional) but the 4626 stake side is
|
|
42116
|
+
// permissionless (`maxDeposit` = uint.max), with deep secondary
|
|
42117
|
+
// apxUSD liquidity (Curve / Uni v4).
|
|
42118
|
+
//
|
|
42119
|
+
// EXIT (fork-verified 2026-08-04, and NOT what the docs site
|
|
42120
|
+
// describes): a 4626 redeem pays the caller nothing. It takes the
|
|
42121
|
+
// vault's flat `unlockingFee()` (0.1%), escrows the apxUSD in the
|
|
42122
|
+
// unlock-RECEIPT contract (`receipt()` = 0x9bf51f33…) and mints a
|
|
42123
|
+
// soulbound ERC-721 keyed by tokenId. Claims are blocked for
|
|
42124
|
+
// `feeCurve.minDuration` (3 days — hence the cooldown below) and
|
|
42125
|
+
// then carry a fee decaying to zero at `maxDuration` (20 days):
|
|
42126
|
+
// measured 3.40% at 3d, 2.60% at 7d, 0% at 20d. The curve is
|
|
42127
|
+
// GLOBAL and admin-settable (capped 5%), so it re-prices receipts
|
|
42128
|
+
// already in flight — quote `previewClaim(tokenId)` live rather
|
|
42129
|
+
// than trusting a stored figure. The vault's legacy
|
|
42130
|
+
// `unlockToken()` (0x93775e2d…) is still deployed but off the
|
|
42131
|
+
// redemption path. Base/BNB carry bridged mirrors whose 4626
|
|
42132
|
+
// surface reverts (plus Solana) — Ethereum-only row.
|
|
42133
|
+
address: "0x38eeb52f0771140d10c4e9a9a72349a329fe8a6a",
|
|
42134
|
+
underlying: "0x98a878b1cd98131b271883b390f68d2c90674665",
|
|
42135
|
+
// apxUSD
|
|
42136
|
+
symbol: "apyUSD",
|
|
42137
|
+
brand: "Apyx",
|
|
42138
|
+
description: "apxUSD is Apyx's dividend-backed dollar \u2014 collateralized by variable-rate perpetual preferred stock issued by Digital Asset Treasury companies (e.g. Strategy's STRC). apyUSD stakes it and accrues the preferred-share dividends via an appreciating share price. Exiting mints a transfer-locked receipt NFT: it cannot be claimed for 3 days, then costs a fee that decays from ~3.4% to zero at 20 days (plus a flat 0.1% on the way out). The backing lives off-chain (NAV trust).",
|
|
42139
|
+
decimals: 18,
|
|
42140
|
+
isRebasing: false,
|
|
42141
|
+
isMintable: true,
|
|
42142
|
+
withdrawalMode: "request-based",
|
|
42143
|
+
// Earliest claim = the receipt's `claimableAt` (`feeCurve.minDuration`,
|
|
42144
|
+
// 3 days). Waiting the full 20 days is what makes the exit free —
|
|
42145
|
+
// see the note above; both bounds are admin-mutable.
|
|
42146
|
+
withdrawalCooldownSeconds: 3 * 86400,
|
|
42147
|
+
withdrawQueue: "0x9bf51f33955ec70f87c4b5c49441815589043237",
|
|
42148
|
+
yieldFetcher: apyxFetcher,
|
|
42149
|
+
yieldKey: APYUSD_KEY
|
|
42150
|
+
},
|
|
42151
|
+
// ---- Strata (docs.strata.markets) — senior/junior risk tranches ----
|
|
42152
|
+
//
|
|
42153
|
+
// Six CDO markets, twelve ERC-4626 tranche tokens, all Ethereum.
|
|
42154
|
+
// Each market pools a yield-bearing collateral (sUSDe, sNUSD,
|
|
42155
|
+
// mHYPER, mM1-USD, sUSDat, PRIME) and splits its realized yield:
|
|
42156
|
+
// the senior earns a benchmark-floored rate (its `maxDeposit` is
|
|
42157
|
+
// coverage-cap-gated), the junior takes the residual — levered
|
|
42158
|
+
// upside AND first-loss capital (jrUSDat marked down to ~0.36
|
|
42159
|
+
// absorbing the 2026-07 USDat depeg; junior redemptions pause when
|
|
42160
|
+
// senior coverage drops below the market's minimum). Exits are
|
|
42161
|
+
// two-legged and both escrow through the market's cooldown
|
|
42162
|
+
// contracts, claimed via `finalize`: redeeming into the collateral
|
|
42163
|
+
// token runs a governance cooldown (0 seconds = effectively instant
|
|
42164
|
+
// on every market at integration), while the plain-4626 base-asset
|
|
42165
|
+
// redeem unstakes the collateral first (7d Ethena, 10d Neutrl, ≲3d
|
|
42166
|
+
// Midas) — hence `request-based`, with `withdrawQueue` pointing at
|
|
42167
|
+
// the market's UnstakeCooldown. `previewRedeem` (but NOT
|
|
42168
|
+
// `convertToAssets`) already nets the coverage-dependent exit fee
|
|
42169
|
+
// (0–20 bps). Rates are Strata's own trailing-7d realized figures —
|
|
42170
|
+
// see the fetcher for the junior-tranche caveats. Verified on-chain
|
|
42171
|
+
// 2026-08-04.
|
|
42172
|
+
{
|
|
42173
|
+
address: "0x3d7d6fdf07ee548b939a80edbc9b2256d0cdc003",
|
|
42174
|
+
underlying: "0x4c9edd5852cd905f086c759e8383e09bff1e68b3",
|
|
42175
|
+
// USDe
|
|
42176
|
+
symbol: "srUSDe",
|
|
42177
|
+
brand: "Strata",
|
|
42178
|
+
description: "Strata's senior tranche over Ethena USDe: pooled deposits sit in sUSDe and the senior earns a benchmark-floored share of its yield, with the junior tranche absorbing losses first. Exits claim through cooldown contracts \u2014 the sUSDe leg is effectively instant, the USDe leg waits Ethena's 7-day unstake \u2014 minus a small coverage-dependent exit fee.",
|
|
42179
|
+
decimals: 18,
|
|
42180
|
+
isRebasing: false,
|
|
42181
|
+
isMintable: true,
|
|
42182
|
+
withdrawalMode: "request-based",
|
|
42183
|
+
withdrawalCooldownSeconds: 7 * 86400,
|
|
42184
|
+
withdrawQueue: "0x735eddf50ca2371aa48466469c742e684c610f74",
|
|
42185
|
+
yieldFetcher: strataFetcher,
|
|
42186
|
+
yieldKey: SRUSDE_KEY
|
|
42187
|
+
},
|
|
42188
|
+
{
|
|
42189
|
+
address: "0xc58d044404d8b14e953c115e67823784dea53d8f",
|
|
42190
|
+
underlying: "0x4c9edd5852cd905f086c759e8383e09bff1e68b3",
|
|
42191
|
+
// USDe
|
|
42192
|
+
symbol: "jrUSDe",
|
|
42193
|
+
brand: "Strata",
|
|
42194
|
+
description: "Strata's junior tranche over Ethena USDe: earns the residual sUSDe yield after the senior's benchmark payment \u2014 levered upside when rates run hot, first-loss capital when they don't (the trailing APR can go negative). Exits mirror srUSDe (instant-ish sUSDe leg, 7-day USDe leg) but pause while senior coverage is below 105%.",
|
|
42195
|
+
decimals: 18,
|
|
42196
|
+
isRebasing: false,
|
|
42197
|
+
isMintable: true,
|
|
42198
|
+
withdrawalMode: "request-based",
|
|
42199
|
+
withdrawalCooldownSeconds: 7 * 86400,
|
|
42200
|
+
withdrawQueue: "0x735eddf50ca2371aa48466469c742e684c610f74",
|
|
42201
|
+
yieldFetcher: strataFetcher,
|
|
42202
|
+
yieldKey: JRUSDE_KEY
|
|
42203
|
+
},
|
|
42204
|
+
{
|
|
42205
|
+
address: "0x65a44528e8868166401ea08b549e19552af589db",
|
|
42206
|
+
underlying: "0xe556aba6fe6036275ec1f87eda296be72c811bce",
|
|
42207
|
+
// NUSD
|
|
42208
|
+
symbol: "srNUSD",
|
|
42209
|
+
brand: "Strata",
|
|
42210
|
+
description: "Strata's senior tranche over Neutrl NUSD: pooled deposits sit in sNUSD and the senior earns a benchmark-floored share of its yield, junior-protected. Exits claim through cooldown contracts \u2014 the sNUSD leg is effectively instant, the NUSD leg waits Neutrl's 10-day unstake \u2014 minus a 0\u20135 bps coverage-dependent exit fee.",
|
|
42211
|
+
decimals: 18,
|
|
42212
|
+
isRebasing: false,
|
|
42213
|
+
isMintable: true,
|
|
42214
|
+
withdrawalMode: "request-based",
|
|
42215
|
+
withdrawalCooldownSeconds: 10 * 86400,
|
|
42216
|
+
withdrawQueue: "0x2a52363a2a0d765b31cb117a8e4d9ce58c2bc749",
|
|
42217
|
+
yieldFetcher: strataFetcher,
|
|
42218
|
+
yieldKey: SRNUSD_KEY
|
|
42219
|
+
},
|
|
42220
|
+
{
|
|
42221
|
+
address: "0xfc807058a352b61aeef6a38e2d0fc3990225e772",
|
|
42222
|
+
underlying: "0xe556aba6fe6036275ec1f87eda296be72c811bce",
|
|
42223
|
+
// NUSD
|
|
42224
|
+
symbol: "jrNUSD",
|
|
42225
|
+
brand: "Strata",
|
|
42226
|
+
description: "Strata's junior tranche over Neutrl NUSD: residual yield after the senior's benchmark payment, first-loss against sNUSD underperformance. Exits run the same cooldown claims as srNUSD (NUSD leg = 10-day unstake) with a 0\u201320 bps coverage-dependent fee, and pause while senior coverage is below the market minimum.",
|
|
42227
|
+
decimals: 18,
|
|
42228
|
+
isRebasing: false,
|
|
42229
|
+
isMintable: true,
|
|
42230
|
+
withdrawalMode: "request-based",
|
|
42231
|
+
withdrawalCooldownSeconds: 10 * 86400,
|
|
42232
|
+
withdrawQueue: "0x2a52363a2a0d765b31cb117a8e4d9ce58c2bc749",
|
|
42233
|
+
yieldFetcher: strataFetcher,
|
|
42234
|
+
yieldKey: JRNUSD_KEY
|
|
42235
|
+
},
|
|
42236
|
+
{
|
|
42237
|
+
// 18-dec shares over 6-dec USDC (the yUSD case) — the collateral
|
|
42238
|
+
// is 18-dec mHYPER, but the vault accounts in USDC.
|
|
42239
|
+
address: "0x627ea69929212916ec57b1b26d2e1a19f6129b53",
|
|
42240
|
+
underlying: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
|
|
42241
|
+
// USDC
|
|
42242
|
+
symbol: "srmHYPER",
|
|
42243
|
+
brand: "Strata",
|
|
42244
|
+
description: "Strata's senior tranche over Midas mHYPER (Hyperithm's multi-chain stablecoin yield strategy), accounted in USDC: benchmark-floored yield (Aave USDC/USDT supply rate + 3% premium), junior-protected. Exits claim through cooldown contracts \u2014 the mHYPER leg is effectively instant, the USDC leg follows Midas's \u22723-day redemption schedule \u2014 minus a 0\u20135 bps fee.",
|
|
42245
|
+
decimals: 18,
|
|
42246
|
+
underlyingDecimals: 6,
|
|
42247
|
+
isRebasing: false,
|
|
42248
|
+
isMintable: true,
|
|
42249
|
+
withdrawalMode: "request-based",
|
|
42250
|
+
withdrawalCooldownSeconds: 3 * 86400,
|
|
42251
|
+
withdrawQueue: "0x7910cb19a4f5a36caa2bed0af82cbfff2e08805c",
|
|
42252
|
+
yieldFetcher: strataFetcher,
|
|
42253
|
+
yieldKey: SRMHYPER_KEY
|
|
42254
|
+
},
|
|
42255
|
+
{
|
|
42256
|
+
address: "0xeb205d26e9e605ec82d1c0d652e00037c278714b",
|
|
42257
|
+
underlying: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
|
|
42258
|
+
// USDC
|
|
42259
|
+
symbol: "jrmHYPER",
|
|
42260
|
+
brand: "Strata",
|
|
42261
|
+
description: "Strata's junior tranche over Midas mHYPER, accounted in USDC: residual yield after the senior's benchmark payment, first-loss against the mHYPER strategy. Exits mirror srmHYPER (USDC leg \u22723 days via Midas) and pause while senior coverage is below the market minimum.",
|
|
42262
|
+
decimals: 18,
|
|
42263
|
+
underlyingDecimals: 6,
|
|
42264
|
+
isRebasing: false,
|
|
42265
|
+
isMintable: true,
|
|
42266
|
+
withdrawalMode: "request-based",
|
|
42267
|
+
withdrawalCooldownSeconds: 3 * 86400,
|
|
42268
|
+
withdrawQueue: "0x7910cb19a4f5a36caa2bed0af82cbfff2e08805c",
|
|
42269
|
+
yieldFetcher: strataFetcher,
|
|
42270
|
+
yieldKey: JRMHYPER_KEY
|
|
42271
|
+
},
|
|
42272
|
+
{
|
|
42273
|
+
address: "0xcced21d609cac4a272d0c01a8ff4de9cebc40d60",
|
|
42274
|
+
underlying: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
|
|
42275
|
+
// USDC
|
|
42276
|
+
symbol: "srmM1-USD",
|
|
42277
|
+
brand: "Strata",
|
|
42278
|
+
description: "Strata's senior tranche over Midas mM1-USD, accounted in USDC: benchmark-floored share of the mM1-USD yield, junior-protected. Exits claim through cooldown contracts \u2014 the mM1-USD leg is effectively instant, the USDC leg follows Midas's redemption schedule.",
|
|
42279
|
+
decimals: 18,
|
|
42280
|
+
underlyingDecimals: 6,
|
|
42281
|
+
isRebasing: false,
|
|
42282
|
+
isMintable: true,
|
|
42283
|
+
withdrawalMode: "request-based",
|
|
42284
|
+
withdrawalCooldownSeconds: 3 * 86400,
|
|
42285
|
+
withdrawQueue: "0x6f6904ed406cefb34893054a742c6148e9d681c1",
|
|
42286
|
+
yieldFetcher: strataFetcher,
|
|
42287
|
+
yieldKey: SRMM1USD_KEY
|
|
42288
|
+
},
|
|
42289
|
+
{
|
|
42290
|
+
address: "0xf7eb8dfec75c42d2d2247fe76ccaedc59f821688",
|
|
42291
|
+
underlying: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
|
|
42292
|
+
// USDC
|
|
42293
|
+
symbol: "jrmM1-USD",
|
|
42294
|
+
brand: "Strata",
|
|
42295
|
+
description: "Strata's junior tranche over Midas mM1-USD, accounted in USDC: residual yield after the senior's benchmark payment, first-loss against the mM1-USD strategy. Exits mirror srmM1-USD and pause while senior coverage is below the market minimum.",
|
|
42296
|
+
decimals: 18,
|
|
42297
|
+
underlyingDecimals: 6,
|
|
42298
|
+
isRebasing: false,
|
|
42299
|
+
isMintable: true,
|
|
42300
|
+
withdrawalMode: "request-based",
|
|
42301
|
+
withdrawalCooldownSeconds: 3 * 86400,
|
|
42302
|
+
withdrawQueue: "0x6f6904ed406cefb34893054a742c6148e9d681c1",
|
|
42303
|
+
yieldFetcher: strataFetcher,
|
|
42304
|
+
yieldKey: JRMM1USD_KEY
|
|
42305
|
+
},
|
|
42306
|
+
{
|
|
42307
|
+
// Accounted in 6-dec USDat (Saturn Dollar); collateral is staked
|
|
42308
|
+
// 18-dec sUSDat.
|
|
42309
|
+
address: "0xfaa9a0e1db9e22ae3a20b2b58a68dc24d053d066",
|
|
42310
|
+
underlying: "0x23238f20b894f29041f48d88ee91131c395aaa71",
|
|
42311
|
+
// USDat
|
|
42312
|
+
symbol: "srUSDat",
|
|
42313
|
+
brand: "Strata",
|
|
42314
|
+
description: "Strata's senior tranche over Saturn USDat (a Strategy-preferred-stock-backed dollar): fixed yield at 65% of the STRC dividend rate, junior-protected \u2014 the senior held its rate straight through the 2026-07 USDat depeg that the junior absorbed. Exits claim through cooldown contracts (the sUSDat leg effectively instant) minus a 0\u20135 bps fee.",
|
|
42315
|
+
decimals: 18,
|
|
42316
|
+
underlyingDecimals: 6,
|
|
42317
|
+
isRebasing: false,
|
|
42318
|
+
isMintable: true,
|
|
42319
|
+
withdrawalMode: "request-based",
|
|
42320
|
+
withdrawQueue: "0x616af703d5739f2122af48c0d1ce0b37e09381ac",
|
|
42321
|
+
yieldFetcher: strataFetcher,
|
|
42322
|
+
yieldKey: SRUSDAT_KEY
|
|
42323
|
+
},
|
|
42324
|
+
{
|
|
42325
|
+
address: "0x011e55d2b28306458e37ca7e997c879bb25a455d",
|
|
42326
|
+
underlying: "0x23238f20b894f29041f48d88ee91131c395aaa71",
|
|
42327
|
+
// USDat
|
|
42328
|
+
symbol: "jrUSDat",
|
|
42329
|
+
brand: "Strata",
|
|
42330
|
+
description: "Strata's junior tranche over Saturn USDat \u2014 first-loss capital that proved it: the 2026-07 USDat collateral depeg marked jrUSDat down to ~0.36 while the senior stayed whole, and its trailing APR is depeg-recovery-inflated. Exits claim through cooldown contracts and pause while senior coverage is below the market minimum.",
|
|
42331
|
+
decimals: 18,
|
|
42332
|
+
underlyingDecimals: 6,
|
|
42333
|
+
isRebasing: false,
|
|
42334
|
+
isMintable: true,
|
|
42335
|
+
withdrawalMode: "request-based",
|
|
42336
|
+
withdrawQueue: "0x616af703d5739f2122af48c0d1ce0b37e09381ac",
|
|
42337
|
+
yieldFetcher: strataFetcher,
|
|
42338
|
+
yieldKey: JRUSDAT_KEY
|
|
42339
|
+
},
|
|
42340
|
+
{
|
|
42341
|
+
address: "0x35bff778d3fc53a561486bf28e761428499232eb",
|
|
42342
|
+
underlying: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
|
|
42343
|
+
// USDC
|
|
42344
|
+
symbol: "srPRIME",
|
|
42345
|
+
brand: "Strata",
|
|
42346
|
+
description: "Strata's senior tranche over Hastra PRIME (yield sourced from Figure's YLDS-based lending), accounted in USDC: benchmark-floored share of the PRIME yield, junior-protected. Exits claim through cooldown contracts \u2014 the PRIME leg is effectively instant, the USDC leg follows the strategy's redemption schedule.",
|
|
42347
|
+
decimals: 18,
|
|
42348
|
+
underlyingDecimals: 6,
|
|
42349
|
+
isRebasing: false,
|
|
42350
|
+
isMintable: true,
|
|
42351
|
+
withdrawalMode: "request-based",
|
|
42352
|
+
withdrawQueue: "0x440938fcb03d64afe50a8168d4b3cfcc341bfbaa",
|
|
42353
|
+
yieldFetcher: strataFetcher,
|
|
42354
|
+
yieldKey: SRPRIME_KEY
|
|
42355
|
+
},
|
|
42356
|
+
{
|
|
42357
|
+
address: "0xf4c91f24e20ee8ed5eda905e501a1136334c2f27",
|
|
42358
|
+
underlying: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
|
|
42359
|
+
// USDC
|
|
42360
|
+
symbol: "jrPRIME",
|
|
42361
|
+
brand: "Strata",
|
|
42362
|
+
description: "Strata's junior tranche over Hastra PRIME, accounted in USDC: residual yield after the senior's benchmark payment, first-loss against the PRIME strategy. Exits mirror srPRIME and pause while senior coverage is below the market minimum.",
|
|
42363
|
+
decimals: 18,
|
|
42364
|
+
underlyingDecimals: 6,
|
|
42365
|
+
isRebasing: false,
|
|
42366
|
+
isMintable: true,
|
|
42367
|
+
withdrawalMode: "request-based",
|
|
42368
|
+
withdrawQueue: "0x440938fcb03d64afe50a8168d4b3cfcc341bfbaa",
|
|
42369
|
+
yieldFetcher: strataFetcher,
|
|
42370
|
+
yieldKey: JRPRIME_KEY
|
|
42371
|
+
},
|
|
41413
42372
|
{
|
|
41414
42373
|
// Avant savETH — staked avETH (Ethereum, where avETH is native);
|
|
41415
42374
|
// StakedUSDeV2-style 24h cooldown.
|
|
@@ -42639,25 +43598,14 @@ var tethFetcher = {
|
|
|
42639
43598
|
}
|
|
42640
43599
|
};
|
|
42641
43600
|
|
|
42642
|
-
// src/yields/intrinsic/fetchers/strata.ts
|
|
42643
|
-
var SRNUSD_POOL_ID = "979711ce-d0c0-4aae-a5fc-d7b76e868649";
|
|
42644
|
-
var KEYS3 = ["Strata Senior NUSD::srNUSD"];
|
|
42645
|
-
var srnusdFetcher = {
|
|
42646
|
-
label: "SRNUSD",
|
|
42647
|
-
fetch: async () => {
|
|
42648
|
-
const apr = apyToAprPercent(await fetchDefiLlamaApy(SRNUSD_POOL_ID));
|
|
42649
|
-
return Object.fromEntries(KEYS3.map((k) => [k, apr]));
|
|
42650
|
-
}
|
|
42651
|
-
};
|
|
42652
|
-
|
|
42653
43601
|
// src/yields/intrinsic/fetchers/anzen.ts
|
|
42654
43602
|
var SUSDZ_POOL_ID = "46518e93-8197-4539-9861-2340c2ac965a";
|
|
42655
|
-
var
|
|
43603
|
+
var KEYS3 = ["Anzen Staked USDz::SUSDZ", "Anzen Staked USDz::sUSDz", "Staked USDz::sUSDz"];
|
|
42656
43604
|
var susdzFetcher = {
|
|
42657
43605
|
label: "SUSDZ",
|
|
42658
43606
|
fetch: async () => {
|
|
42659
43607
|
const apr = apyToAprPercent(await fetchDefiLlamaApy(SUSDZ_POOL_ID));
|
|
42660
|
-
return Object.fromEntries(
|
|
43608
|
+
return Object.fromEntries(KEYS3.map((k) => [k, apr]));
|
|
42661
43609
|
}
|
|
42662
43610
|
};
|
|
42663
43611
|
|
|
@@ -42692,7 +43640,8 @@ var LENDING_ONLY_FETCHERS = [
|
|
|
42692
43640
|
// DefiLlama-mapped intrinsic yields for classifier assets lacking a bespoke source
|
|
42693
43641
|
lsethFetcher,
|
|
42694
43642
|
tethFetcher,
|
|
42695
|
-
|
|
43643
|
+
// strataFetcher is NOT here: the Strata tranche savings rows vault-wire
|
|
43644
|
+
// it, so it reaches the global map via `collectVaultFetchers`.
|
|
42696
43645
|
susdzFetcher
|
|
42697
43646
|
];
|
|
42698
43647
|
var collectVaultFetchers = () => {
|
|
@@ -43555,14 +44504,15 @@ function parseExactlyResults(data, _meta, context) {
|
|
|
43555
44504
|
if (tracked.size > 0 && !tracked.has(market.toLowerCase())) continue;
|
|
43556
44505
|
const priceUSD = Number(usdPrice) / 1e18;
|
|
43557
44506
|
if (!(priceUSD > 0)) continue;
|
|
43558
|
-
const lenderKey = exactlyLenderKey(market);
|
|
43559
44507
|
entries.push({
|
|
43560
44508
|
asset,
|
|
43561
44509
|
// Direct USD price — no oracle-unit denomination, so raw == USD.
|
|
43562
44510
|
price: priceUSD,
|
|
43563
44511
|
priceUSD,
|
|
43564
|
-
|
|
43565
|
-
|
|
44512
|
+
// ONE Exactly key per chain (cross-margin); the asset segment of the
|
|
44513
|
+
// marketUid is what distinguishes the per-asset rows.
|
|
44514
|
+
marketUid: createMarketUid(chainId, EXACTLY_LENDER_KEY, asset),
|
|
44515
|
+
targetLender: EXACTLY_LENDER_KEY,
|
|
43566
44516
|
description: "Exactly market oracle (USD)"
|
|
43567
44517
|
});
|
|
43568
44518
|
}
|
|
@@ -46876,10 +47826,10 @@ function createAssetArrayPerChain() {
|
|
|
46876
47826
|
return assetsPerChain;
|
|
46877
47827
|
}
|
|
46878
47828
|
var RELEVANT_LENDING_ASSETS = () => createAssetArrayPerChain();
|
|
46879
|
-
function createSimpleArrayPerChain(fork,
|
|
47829
|
+
function createSimpleArrayPerChain(fork, field12 = void 0) {
|
|
46880
47830
|
let pools = {};
|
|
46881
47831
|
Object.entries(fork ?? {}).forEach(([b2, data]) => {
|
|
46882
|
-
Object.entries(
|
|
47832
|
+
Object.entries(field12 ? data[field12] : data).forEach(
|
|
46883
47833
|
([chainId, address]) => {
|
|
46884
47834
|
if (!pools[chainId]) pools[chainId] = [];
|
|
46885
47835
|
pools[chainId] = uniq2([...pools[chainId], { address, pool: b2 }]);
|
|
@@ -49088,9 +50038,9 @@ query EvkByAssets($assets: [Bytes!]!) {
|
|
|
49088
50038
|
`;
|
|
49089
50039
|
var ZERO = 0n;
|
|
49090
50040
|
var RAY_TO_PERCENT3 = 1e25;
|
|
49091
|
-
function readAddress2(
|
|
49092
|
-
if (!
|
|
49093
|
-
return
|
|
50041
|
+
function readAddress2(field12) {
|
|
50042
|
+
if (!field12) return void 0;
|
|
50043
|
+
return field12.toLowerCase();
|
|
49094
50044
|
}
|
|
49095
50045
|
function parseVaultFee(v) {
|
|
49096
50046
|
if (v.performanceFee == null) return 0;
|
|
@@ -49455,7 +50405,7 @@ var num2 = (v) => {
|
|
|
49455
50405
|
const n = Number(v);
|
|
49456
50406
|
return Number.isFinite(n) ? n : 0;
|
|
49457
50407
|
};
|
|
49458
|
-
var
|
|
50408
|
+
var big7 = (v) => {
|
|
49459
50409
|
try {
|
|
49460
50410
|
if (v === void 0 || v === null || v === "") return "0";
|
|
49461
50411
|
const s = String(v);
|
|
@@ -49491,12 +50441,12 @@ async function fetchTermMaxVaultsFromApi(chainId, prices = {}, tokenList = {}, f
|
|
|
49491
50441
|
const assetEntry = tokenList[underlying];
|
|
49492
50442
|
const priceKey = toOracleKey(assetEntry?.assetGroup) || toGenericPriceKey(underlying, chainId);
|
|
49493
50443
|
const priceUsd = prices[priceKey];
|
|
49494
|
-
const totalAssets =
|
|
49495
|
-
const totalSupply =
|
|
50444
|
+
const totalAssets = big7(r.totalAssets);
|
|
50445
|
+
const totalSupply = big7(r.totalSupplyAmt);
|
|
49496
50446
|
const totalAssetsFormatted = Number(totalAssets) / scale;
|
|
49497
50447
|
const supplyRate = num2(r.apr) * 100;
|
|
49498
50448
|
const rewardsRate = num2(r?.incentiveData?.TMX_APR) * 100;
|
|
49499
|
-
const rawLiquidity = BigInt(
|
|
50449
|
+
const rawLiquidity = BigInt(big7(r.redeemableAmt ?? r.idleFunds ?? "0"));
|
|
49500
50450
|
const totalAssetsBig = BigInt(totalAssets);
|
|
49501
50451
|
const liquidity = (rawLiquidity > totalAssetsBig ? totalAssetsBig : rawLiquidity).toString();
|
|
49502
50452
|
const liquidityFormatted = Number(liquidity) / scale;
|
|
@@ -49532,7 +50482,7 @@ async function fetchTermMaxVaultsFromApi(chainId, prices = {}, tokenList = {}, f
|
|
|
49532
50482
|
liquidityUsd: priceUsd ? liquidityFormatted * priceUsd : 0,
|
|
49533
50483
|
version: r.version,
|
|
49534
50484
|
isPaused: r.isPaused === true || void 0,
|
|
49535
|
-
supplyCap: r.capacity ?
|
|
50485
|
+
supplyCap: r.capacity ? big7(r.capacity) : void 0,
|
|
49536
50486
|
basePool: r.poolAddress ? lower2(r.poolAddress) : void 0
|
|
49537
50487
|
};
|
|
49538
50488
|
}
|
|
@@ -49588,7 +50538,7 @@ var Erc20DecimalsBalanceAbi = [
|
|
|
49588
50538
|
|
|
49589
50539
|
// src/vaults/termmax/fetchFromChain.ts
|
|
49590
50540
|
var DECIMAL_BASE2 = 100000000n;
|
|
49591
|
-
var
|
|
50541
|
+
var big8 = (v) => {
|
|
49592
50542
|
if (v === void 0 || v === null || v === "0x") return 0n;
|
|
49593
50543
|
try {
|
|
49594
50544
|
return typeof v === "bigint" ? v : BigInt(v);
|
|
@@ -49652,7 +50602,7 @@ var fetchTermMaxVaultsFromChain = async (chainId, multicallRetry, prices = {}, t
|
|
|
49652
50602
|
vaults.forEach((address, i) => {
|
|
49653
50603
|
const at = (k) => res[i * READS_PER_VAULT + VAULT_READS.indexOf(k)];
|
|
49654
50604
|
const asset = addr(at("asset"));
|
|
49655
|
-
const totalAssets =
|
|
50605
|
+
const totalAssets = big8(at("totalAssets"));
|
|
49656
50606
|
if (!asset || totalAssets === 0n) return;
|
|
49657
50607
|
rows.push({
|
|
49658
50608
|
address,
|
|
@@ -49661,11 +50611,11 @@ var fetchTermMaxVaultsFromChain = async (chainId, multicallRetry, prices = {}, t
|
|
|
49661
50611
|
decimals: num3(at("decimals")) ?? 18,
|
|
49662
50612
|
asset,
|
|
49663
50613
|
totalAssets,
|
|
49664
|
-
totalSupply:
|
|
49665
|
-
annualizedInterest:
|
|
49666
|
-
accretingPrincipal:
|
|
49667
|
-
performanceFeeRate:
|
|
49668
|
-
aprRaw: at("apr") != null ?
|
|
50614
|
+
totalSupply: big8(at("totalSupply")),
|
|
50615
|
+
annualizedInterest: big8(at("annualizedInterest")),
|
|
50616
|
+
accretingPrincipal: big8(at("accretingPrincipal")),
|
|
50617
|
+
performanceFeeRate: big8(at("performanceFeeRate")),
|
|
50618
|
+
aprRaw: at("apr") != null ? big8(at("apr")) : void 0,
|
|
49669
50619
|
curator: addr(at("curator")),
|
|
49670
50620
|
guardian: addr(at("guardian")),
|
|
49671
50621
|
timelock: num3(at("timelock")),
|
|
@@ -49686,7 +50636,7 @@ var fetchTermMaxVaultsFromChain = async (chainId, multicallRetry, prices = {}, t
|
|
|
49686
50636
|
const out = {};
|
|
49687
50637
|
rows.forEach((r, i) => {
|
|
49688
50638
|
const assetDecimals = num3(res2[i * 2]) ?? r.decimals;
|
|
49689
|
-
const idle =
|
|
50639
|
+
const idle = big8(res2[i * 2 + 1]);
|
|
49690
50640
|
const assetEntry = tokenList[r.asset];
|
|
49691
50641
|
const priceKey = toOracleKey(assetEntry?.assetGroup) || toGenericPriceKey(r.asset, chainId);
|
|
49692
50642
|
const priceUsd = prices[priceKey];
|
|
@@ -49806,7 +50756,7 @@ var Erc4626PreviewRedeemAbi = [
|
|
|
49806
50756
|
];
|
|
49807
50757
|
|
|
49808
50758
|
// src/vaults/lst/readers/shared.ts
|
|
49809
|
-
var
|
|
50759
|
+
var ONE_E189 = 10n ** 18n;
|
|
49810
50760
|
var rescaleDecimals = (v, fromDec, toDec) => toDec >= fromDec ? v * 10n ** BigInt(toDec - fromDec) : v / 10n ** BigInt(fromDec - toDec);
|
|
49811
50761
|
var MULTICALL3_ADDRESS = "0xcA11bde05977b3631167028862bE2a173976CA11";
|
|
49812
50762
|
var Multicall3BalanceAbi = [
|
|
@@ -49849,7 +50799,7 @@ var readerBeetsStS = (entry) => ({
|
|
|
49849
50799
|
}
|
|
49850
50800
|
const liquidity = toBigInt13(pool);
|
|
49851
50801
|
return {
|
|
49852
|
-
totalAssets: totalSupply * exchangeRate /
|
|
50802
|
+
totalAssets: totalSupply * exchangeRate / ONE_E189,
|
|
49853
50803
|
totalSupply,
|
|
49854
50804
|
exchangeRate,
|
|
49855
50805
|
liquidity
|
|
@@ -49882,7 +50832,7 @@ var readerBenqiSavax = (entry) => ({
|
|
|
49882
50832
|
{
|
|
49883
50833
|
address: entry.address,
|
|
49884
50834
|
name: "getPooledAvaxByShares",
|
|
49885
|
-
params: [
|
|
50835
|
+
params: [ONE_E189]
|
|
49886
50836
|
},
|
|
49887
50837
|
{ address: entry.address, name: "totalPooledAvax", params: [] }
|
|
49888
50838
|
],
|
|
@@ -49893,7 +50843,7 @@ var readerBenqiSavax = (entry) => ({
|
|
|
49893
50843
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
49894
50844
|
return void 0;
|
|
49895
50845
|
}
|
|
49896
|
-
const totalAssets = toBigInt13(totalPooled) ?? totalSupply * exchangeRate /
|
|
50846
|
+
const totalAssets = toBigInt13(totalPooled) ?? totalSupply * exchangeRate / ONE_E189;
|
|
49897
50847
|
return {
|
|
49898
50848
|
totalAssets,
|
|
49899
50849
|
totalSupply,
|
|
@@ -49912,7 +50862,7 @@ var readerBgtWrapper1to1 = (entry) => ({
|
|
|
49912
50862
|
return {
|
|
49913
50863
|
totalAssets: totalSupply,
|
|
49914
50864
|
totalSupply,
|
|
49915
|
-
exchangeRate:
|
|
50865
|
+
exchangeRate: ONE_E189
|
|
49916
50866
|
};
|
|
49917
50867
|
}
|
|
49918
50868
|
});
|
|
@@ -49942,7 +50892,7 @@ var readerDineroBeraEth = (entry) => ({
|
|
|
49942
50892
|
return void 0;
|
|
49943
50893
|
}
|
|
49944
50894
|
return {
|
|
49945
|
-
totalAssets: totalSupply * exchangeRate /
|
|
50895
|
+
totalAssets: totalSupply * exchangeRate / ONE_E189,
|
|
49946
50896
|
totalSupply,
|
|
49947
50897
|
exchangeRate
|
|
49948
50898
|
};
|
|
@@ -49954,7 +50904,7 @@ var readerErc4626 = (entry) => ({
|
|
|
49954
50904
|
calls: [
|
|
49955
50905
|
{ address: entry.address, name: "totalAssets", params: [] },
|
|
49956
50906
|
{ address: entry.address, name: "totalSupply", params: [] },
|
|
49957
|
-
{ address: entry.address, name: "convertToAssets", params: [
|
|
50907
|
+
{ address: entry.address, name: "convertToAssets", params: [ONE_E189] }
|
|
49958
50908
|
],
|
|
49959
50909
|
abis: [Erc4626ReadAbi, TotalSupplyAbi, Erc4626ReadAbi],
|
|
49960
50910
|
parse: ([assets, supply, rate]) => {
|
|
@@ -49971,7 +50921,7 @@ var readerErc4626PreviewRedeem = (entry) => ({
|
|
|
49971
50921
|
calls: [
|
|
49972
50922
|
{ address: entry.address, name: "totalAssets", params: [] },
|
|
49973
50923
|
{ address: entry.address, name: "totalSupply", params: [] },
|
|
49974
|
-
{ address: entry.address, name: "previewRedeem", params: [
|
|
50924
|
+
{ address: entry.address, name: "previewRedeem", params: [ONE_E189] }
|
|
49975
50925
|
],
|
|
49976
50926
|
abis: [Erc4626PreviewRedeemAbi, TotalSupplyAbi, Erc4626PreviewRedeemAbi],
|
|
49977
50927
|
parse: ([assets, supply, rate]) => {
|
|
@@ -50051,7 +51001,7 @@ var readerEtherFiWeEth = (entry) => {
|
|
|
50051
51001
|
}
|
|
50052
51002
|
}
|
|
50053
51003
|
return {
|
|
50054
|
-
totalAssets: totalSupply * exchangeRate /
|
|
51004
|
+
totalAssets: totalSupply * exchangeRate / ONE_E189,
|
|
50055
51005
|
totalSupply,
|
|
50056
51006
|
exchangeRate,
|
|
50057
51007
|
liquidity
|
|
@@ -50084,7 +51034,7 @@ var readerHyperbeatBeHype = (entry) => {
|
|
|
50084
51034
|
return {
|
|
50085
51035
|
totalAssets: totalSupply,
|
|
50086
51036
|
totalSupply,
|
|
50087
|
-
exchangeRate:
|
|
51037
|
+
exchangeRate: ONE_E189
|
|
50088
51038
|
};
|
|
50089
51039
|
}
|
|
50090
51040
|
};
|
|
@@ -50092,7 +51042,7 @@ var readerHyperbeatBeHype = (entry) => {
|
|
|
50092
51042
|
return {
|
|
50093
51043
|
calls: [
|
|
50094
51044
|
{ address: entry.address, name: "totalSupply", params: [] },
|
|
50095
|
-
{ address: stakingCore, name: "BeHYPEToHYPE", params: [
|
|
51045
|
+
{ address: stakingCore, name: "BeHYPEToHYPE", params: [ONE_E189] }
|
|
50096
51046
|
],
|
|
50097
51047
|
abis: [TotalSupplyAbi, HyperbeatStakingCoreAbi],
|
|
50098
51048
|
parse: ([supply, rate]) => {
|
|
@@ -50102,7 +51052,7 @@ var readerHyperbeatBeHype = (entry) => {
|
|
|
50102
51052
|
return void 0;
|
|
50103
51053
|
}
|
|
50104
51054
|
return {
|
|
50105
|
-
totalAssets: totalSupply * exchangeRate /
|
|
51055
|
+
totalAssets: totalSupply * exchangeRate / ONE_E189,
|
|
50106
51056
|
totalSupply,
|
|
50107
51057
|
exchangeRate
|
|
50108
51058
|
};
|
|
@@ -50134,7 +51084,7 @@ var readerKelpRsEth = (entry) => {
|
|
|
50134
51084
|
return {
|
|
50135
51085
|
totalAssets: totalSupply,
|
|
50136
51086
|
totalSupply,
|
|
50137
|
-
exchangeRate:
|
|
51087
|
+
exchangeRate: ONE_E189
|
|
50138
51088
|
};
|
|
50139
51089
|
}
|
|
50140
51090
|
};
|
|
@@ -50152,7 +51102,7 @@ var readerKelpRsEth = (entry) => {
|
|
|
50152
51102
|
return void 0;
|
|
50153
51103
|
}
|
|
50154
51104
|
return {
|
|
50155
|
-
totalAssets: totalSupply * exchangeRate /
|
|
51105
|
+
totalAssets: totalSupply * exchangeRate / ONE_E189,
|
|
50156
51106
|
totalSupply,
|
|
50157
51107
|
exchangeRate
|
|
50158
51108
|
};
|
|
@@ -50184,7 +51134,7 @@ var readerKinetiqKHype = (entry) => {
|
|
|
50184
51134
|
return {
|
|
50185
51135
|
totalAssets: totalSupply,
|
|
50186
51136
|
totalSupply,
|
|
50187
|
-
exchangeRate:
|
|
51137
|
+
exchangeRate: ONE_E189
|
|
50188
51138
|
};
|
|
50189
51139
|
}
|
|
50190
51140
|
};
|
|
@@ -50192,7 +51142,7 @@ var readerKinetiqKHype = (entry) => {
|
|
|
50192
51142
|
return {
|
|
50193
51143
|
calls: [
|
|
50194
51144
|
{ address: entry.address, name: "totalSupply", params: [] },
|
|
50195
|
-
{ address: accountant, name: "kHYPEToHYPE", params: [
|
|
51145
|
+
{ address: accountant, name: "kHYPEToHYPE", params: [ONE_E189] }
|
|
50196
51146
|
],
|
|
50197
51147
|
abis: [TotalSupplyAbi, KinetiqStakingAccountantAbi],
|
|
50198
51148
|
parse: ([supply, rate]) => {
|
|
@@ -50202,7 +51152,7 @@ var readerKinetiqKHype = (entry) => {
|
|
|
50202
51152
|
return void 0;
|
|
50203
51153
|
}
|
|
50204
51154
|
return {
|
|
50205
|
-
totalAssets: totalSupply * exchangeRate /
|
|
51155
|
+
totalAssets: totalSupply * exchangeRate / ONE_E189,
|
|
50206
51156
|
totalSupply,
|
|
50207
51157
|
exchangeRate
|
|
50208
51158
|
};
|
|
@@ -50242,7 +51192,7 @@ var readerLairStKaia = (entry) => ({
|
|
|
50242
51192
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
50243
51193
|
return void 0;
|
|
50244
51194
|
}
|
|
50245
|
-
const totalAssets = toBigInt13(totalStaking) ?? totalSupply * exchangeRate /
|
|
51195
|
+
const totalAssets = toBigInt13(totalStaking) ?? totalSupply * exchangeRate / ONE_E189;
|
|
50246
51196
|
return {
|
|
50247
51197
|
totalAssets,
|
|
50248
51198
|
totalSupply,
|
|
@@ -50276,7 +51226,7 @@ var readerLidoWstEth = (entry) => ({
|
|
|
50276
51226
|
return void 0;
|
|
50277
51227
|
}
|
|
50278
51228
|
return {
|
|
50279
|
-
totalAssets: totalSupply * exchangeRate /
|
|
51229
|
+
totalAssets: totalSupply * exchangeRate / ONE_E189,
|
|
50280
51230
|
totalSupply,
|
|
50281
51231
|
exchangeRate
|
|
50282
51232
|
};
|
|
@@ -50314,7 +51264,7 @@ var readerListaSlisBnb = (entry) => {
|
|
|
50314
51264
|
return {
|
|
50315
51265
|
totalAssets: totalSupply,
|
|
50316
51266
|
totalSupply,
|
|
50317
|
-
exchangeRate:
|
|
51267
|
+
exchangeRate: ONE_E189
|
|
50318
51268
|
};
|
|
50319
51269
|
}
|
|
50320
51270
|
};
|
|
@@ -50322,7 +51272,7 @@ var readerListaSlisBnb = (entry) => {
|
|
|
50322
51272
|
return {
|
|
50323
51273
|
calls: [
|
|
50324
51274
|
{ address: entry.address, name: "totalSupply", params: [] },
|
|
50325
|
-
{ address: manager, name: "convertSnBnbToBnb", params: [
|
|
51275
|
+
{ address: manager, name: "convertSnBnbToBnb", params: [ONE_E189] },
|
|
50326
51276
|
{ address: manager, name: "getTotalPooledBnb", params: [] }
|
|
50327
51277
|
],
|
|
50328
51278
|
abis: [TotalSupplyAbi, ListaStakeManagerReadAbi, ListaStakeManagerReadAbi],
|
|
@@ -50333,7 +51283,7 @@ var readerListaSlisBnb = (entry) => {
|
|
|
50333
51283
|
return void 0;
|
|
50334
51284
|
}
|
|
50335
51285
|
const pooledBnb = toBigInt13(pooled);
|
|
50336
|
-
const totalAssets = pooledBnb ?? totalSupply * exchangeRate /
|
|
51286
|
+
const totalAssets = pooledBnb ?? totalSupply * exchangeRate / ONE_E189;
|
|
50337
51287
|
return { totalAssets, totalSupply, exchangeRate };
|
|
50338
51288
|
}
|
|
50339
51289
|
};
|
|
@@ -50363,7 +51313,7 @@ var readerMantleMEth = (entry) => {
|
|
|
50363
51313
|
return {
|
|
50364
51314
|
totalAssets: totalSupply,
|
|
50365
51315
|
totalSupply,
|
|
50366
|
-
exchangeRate:
|
|
51316
|
+
exchangeRate: ONE_E189
|
|
50367
51317
|
};
|
|
50368
51318
|
}
|
|
50369
51319
|
};
|
|
@@ -50371,7 +51321,7 @@ var readerMantleMEth = (entry) => {
|
|
|
50371
51321
|
return {
|
|
50372
51322
|
calls: [
|
|
50373
51323
|
{ address: entry.address, name: "totalSupply", params: [] },
|
|
50374
|
-
{ address: staking, name: "mETHToETH", params: [
|
|
51324
|
+
{ address: staking, name: "mETHToETH", params: [ONE_E189] }
|
|
50375
51325
|
],
|
|
50376
51326
|
abis: [TotalSupplyAbi, MantleStakingAbi],
|
|
50377
51327
|
parse: ([supply, rate]) => {
|
|
@@ -50381,7 +51331,7 @@ var readerMantleMEth = (entry) => {
|
|
|
50381
51331
|
return void 0;
|
|
50382
51332
|
}
|
|
50383
51333
|
return {
|
|
50384
|
-
totalAssets: totalSupply * exchangeRate /
|
|
51334
|
+
totalAssets: totalSupply * exchangeRate / ONE_E189,
|
|
50385
51335
|
totalSupply,
|
|
50386
51336
|
exchangeRate
|
|
50387
51337
|
};
|
|
@@ -50402,7 +51352,7 @@ var readerOffChain = (entry) => {
|
|
|
50402
51352
|
return {
|
|
50403
51353
|
totalAssets: rescaleDecimals(totalSupply, shareDec, underlyingDec),
|
|
50404
51354
|
totalSupply,
|
|
50405
|
-
exchangeRate:
|
|
51355
|
+
exchangeRate: ONE_E189
|
|
50406
51356
|
};
|
|
50407
51357
|
}
|
|
50408
51358
|
};
|
|
@@ -50436,7 +51386,7 @@ var readerRenzoEzEth = (entry) => {
|
|
|
50436
51386
|
return {
|
|
50437
51387
|
totalAssets: totalSupply,
|
|
50438
51388
|
totalSupply,
|
|
50439
|
-
exchangeRate:
|
|
51389
|
+
exchangeRate: ONE_E189
|
|
50440
51390
|
};
|
|
50441
51391
|
}
|
|
50442
51392
|
};
|
|
@@ -50455,7 +51405,7 @@ var readerRenzoEzEth = (entry) => {
|
|
|
50455
51405
|
return {
|
|
50456
51406
|
totalAssets: totalTvl,
|
|
50457
51407
|
totalSupply,
|
|
50458
|
-
exchangeRate: totalTvl *
|
|
51408
|
+
exchangeRate: totalTvl * ONE_E189 / totalSupply
|
|
50459
51409
|
};
|
|
50460
51410
|
}
|
|
50461
51411
|
};
|
|
@@ -50511,7 +51461,7 @@ var readerRocketReth = (entry) => {
|
|
|
50511
51461
|
}
|
|
50512
51462
|
const liquidity = depositPool ? toBigInt13(slice2[2]) : void 0;
|
|
50513
51463
|
return {
|
|
50514
|
-
totalAssets: totalSupply * exchangeRate /
|
|
51464
|
+
totalAssets: totalSupply * exchangeRate / ONE_E189,
|
|
50515
51465
|
totalSupply,
|
|
50516
51466
|
exchangeRate,
|
|
50517
51467
|
liquidity
|
|
@@ -50553,7 +51503,7 @@ var readerStaderEthx = (entry) => {
|
|
|
50553
51503
|
return {
|
|
50554
51504
|
totalAssets: totalSupply,
|
|
50555
51505
|
totalSupply,
|
|
50556
|
-
exchangeRate:
|
|
51506
|
+
exchangeRate: ONE_E189
|
|
50557
51507
|
};
|
|
50558
51508
|
}
|
|
50559
51509
|
};
|
|
@@ -50571,7 +51521,7 @@ var readerStaderEthx = (entry) => {
|
|
|
50571
51521
|
return void 0;
|
|
50572
51522
|
}
|
|
50573
51523
|
return {
|
|
50574
|
-
totalAssets: totalSupply * exchangeRate /
|
|
51524
|
+
totalAssets: totalSupply * exchangeRate / ONE_E189,
|
|
50575
51525
|
totalSupply,
|
|
50576
51526
|
exchangeRate
|
|
50577
51527
|
};
|
|
@@ -50588,7 +51538,7 @@ var readerStaderMaticX = (entry) => {
|
|
|
50588
51538
|
{
|
|
50589
51539
|
address: rateAddress,
|
|
50590
51540
|
name: "convertMaticXToMatic",
|
|
50591
|
-
params: [
|
|
51541
|
+
params: [ONE_E189],
|
|
50592
51542
|
chainId: homeChainId
|
|
50593
51543
|
}
|
|
50594
51544
|
],
|
|
@@ -50603,7 +51553,7 @@ var readerStaderMaticX = (entry) => {
|
|
|
50603
51553
|
}
|
|
50604
51554
|
const isCrossChain = homeContract !== void 0;
|
|
50605
51555
|
return {
|
|
50606
|
-
totalAssets: isCrossChain ? totalSupply * amountInMatic /
|
|
51556
|
+
totalAssets: isCrossChain ? totalSupply * amountInMatic / ONE_E189 : totalPooledMatic ?? totalSupply * amountInMatic / ONE_E189,
|
|
50607
51557
|
totalSupply,
|
|
50608
51558
|
exchangeRate: amountInMatic
|
|
50609
51559
|
};
|
|
@@ -50635,7 +51585,7 @@ var readerStakeWiseOsEth = (entry) => {
|
|
|
50635
51585
|
return {
|
|
50636
51586
|
totalAssets: totalSupply,
|
|
50637
51587
|
totalSupply,
|
|
50638
|
-
exchangeRate:
|
|
51588
|
+
exchangeRate: ONE_E189
|
|
50639
51589
|
};
|
|
50640
51590
|
}
|
|
50641
51591
|
};
|
|
@@ -50643,7 +51593,7 @@ var readerStakeWiseOsEth = (entry) => {
|
|
|
50643
51593
|
return {
|
|
50644
51594
|
calls: [
|
|
50645
51595
|
{ address: entry.address, name: "totalSupply", params: [] },
|
|
50646
|
-
{ address: controller, name: "convertToAssets", params: [
|
|
51596
|
+
{ address: controller, name: "convertToAssets", params: [ONE_E189] }
|
|
50647
51597
|
],
|
|
50648
51598
|
abis: [TotalSupplyAbi, StakeWiseOsTokenAbi],
|
|
50649
51599
|
parse: ([supply, rate]) => {
|
|
@@ -50653,7 +51603,7 @@ var readerStakeWiseOsEth = (entry) => {
|
|
|
50653
51603
|
return void 0;
|
|
50654
51604
|
}
|
|
50655
51605
|
return {
|
|
50656
|
-
totalAssets: totalSupply * exchangeRate /
|
|
51606
|
+
totalAssets: totalSupply * exchangeRate / ONE_E189,
|
|
50657
51607
|
totalSupply,
|
|
50658
51608
|
exchangeRate
|
|
50659
51609
|
};
|
|
@@ -50685,7 +51635,7 @@ var readerStCelo = (entry) => {
|
|
|
50685
51635
|
return {
|
|
50686
51636
|
totalAssets: totalSupply,
|
|
50687
51637
|
totalSupply,
|
|
50688
|
-
exchangeRate:
|
|
51638
|
+
exchangeRate: ONE_E189
|
|
50689
51639
|
};
|
|
50690
51640
|
}
|
|
50691
51641
|
};
|
|
@@ -50693,7 +51643,7 @@ var readerStCelo = (entry) => {
|
|
|
50693
51643
|
return {
|
|
50694
51644
|
calls: [
|
|
50695
51645
|
{ address: entry.address, name: "totalSupply", params: [] },
|
|
50696
|
-
{ address: manager, name: "toCelo", params: [
|
|
51646
|
+
{ address: manager, name: "toCelo", params: [ONE_E189] }
|
|
50697
51647
|
],
|
|
50698
51648
|
abis: [TotalSupplyAbi, StCeloManagerAbi],
|
|
50699
51649
|
parse: ([supply, rate]) => {
|
|
@@ -50703,7 +51653,7 @@ var readerStCelo = (entry) => {
|
|
|
50703
51653
|
return void 0;
|
|
50704
51654
|
}
|
|
50705
51655
|
return {
|
|
50706
|
-
totalAssets: totalSupply * exchangeRate /
|
|
51656
|
+
totalAssets: totalSupply * exchangeRate / ONE_E189,
|
|
50707
51657
|
totalSupply,
|
|
50708
51658
|
exchangeRate
|
|
50709
51659
|
};
|
|
@@ -50736,7 +51686,7 @@ var readerSwellGetRate = (entry) => ({
|
|
|
50736
51686
|
return void 0;
|
|
50737
51687
|
}
|
|
50738
51688
|
return {
|
|
50739
|
-
totalAssets: totalSupply * exchangeRate /
|
|
51689
|
+
totalAssets: totalSupply * exchangeRate / ONE_E189,
|
|
50740
51690
|
totalSupply,
|
|
50741
51691
|
exchangeRate
|
|
50742
51692
|
};
|
|
@@ -50767,7 +51717,7 @@ var readerValantisWstHype = (entry) => {
|
|
|
50767
51717
|
return {
|
|
50768
51718
|
totalAssets: totalSupply,
|
|
50769
51719
|
totalSupply,
|
|
50770
|
-
exchangeRate:
|
|
51720
|
+
exchangeRate: ONE_E189
|
|
50771
51721
|
};
|
|
50772
51722
|
}
|
|
50773
51723
|
};
|
|
@@ -50785,7 +51735,7 @@ var readerValantisWstHype = (entry) => {
|
|
|
50785
51735
|
return void 0;
|
|
50786
51736
|
}
|
|
50787
51737
|
return {
|
|
50788
|
-
totalAssets: totalSupply * exchangeRate /
|
|
51738
|
+
totalAssets: totalSupply * exchangeRate / ONE_E189,
|
|
50789
51739
|
totalSupply,
|
|
50790
51740
|
exchangeRate
|
|
50791
51741
|
};
|
|
@@ -50819,7 +51769,7 @@ var readerVedaAccountant = (entry) => {
|
|
|
50819
51769
|
return {
|
|
50820
51770
|
totalAssets: rescaleDecimals(totalSupply, shareDec, underlyingDec),
|
|
50821
51771
|
totalSupply,
|
|
50822
|
-
exchangeRate:
|
|
51772
|
+
exchangeRate: ONE_E189
|
|
50823
51773
|
};
|
|
50824
51774
|
}
|
|
50825
51775
|
};
|
|
@@ -50838,7 +51788,7 @@ var readerVedaAccountant = (entry) => {
|
|
|
50838
51788
|
const exchangeRate = rawRate * scale;
|
|
50839
51789
|
return {
|
|
50840
51790
|
totalAssets: rescaleDecimals(
|
|
50841
|
-
totalSupply * exchangeRate /
|
|
51791
|
+
totalSupply * exchangeRate / ONE_E189,
|
|
50842
51792
|
shareDec,
|
|
50843
51793
|
underlyingDec
|
|
50844
51794
|
),
|
|
@@ -50874,9 +51824,9 @@ var readerAnkrRatio = (entry) => ({
|
|
|
50874
51824
|
return void 0;
|
|
50875
51825
|
}
|
|
50876
51826
|
return {
|
|
50877
|
-
totalAssets: totalSupply *
|
|
51827
|
+
totalAssets: totalSupply * ONE_E189 / r,
|
|
50878
51828
|
totalSupply,
|
|
50879
|
-
exchangeRate:
|
|
51829
|
+
exchangeRate: ONE_E189 * ONE_E189 / r
|
|
50880
51830
|
};
|
|
50881
51831
|
}
|
|
50882
51832
|
});
|
|
@@ -50920,7 +51870,7 @@ var readerCoreEarnRate = (entry) => {
|
|
|
50920
51870
|
return {
|
|
50921
51871
|
totalAssets: totalSupply * r / CORE_RATE_DENOM,
|
|
50922
51872
|
totalSupply,
|
|
50923
|
-
exchangeRate: r *
|
|
51873
|
+
exchangeRate: r * ONE_E189 / CORE_RATE_DENOM
|
|
50924
51874
|
};
|
|
50925
51875
|
}
|
|
50926
51876
|
};
|
|
@@ -50942,7 +51892,7 @@ var readerCoreStakedRatio = (entry) => {
|
|
|
50942
51892
|
return {
|
|
50943
51893
|
totalAssets: totalStaked,
|
|
50944
51894
|
totalSupply,
|
|
50945
|
-
exchangeRate: totalStaked *
|
|
51895
|
+
exchangeRate: totalStaked * ONE_E189 / totalSupply
|
|
50946
51896
|
};
|
|
50947
51897
|
}
|
|
50948
51898
|
};
|
|
@@ -50973,7 +51923,7 @@ var readerStellaStDot = (entry) => ({
|
|
|
50973
51923
|
{
|
|
50974
51924
|
address: entry.address,
|
|
50975
51925
|
name: "getPooledTokenByShares",
|
|
50976
|
-
params: [
|
|
51926
|
+
params: [ONE_E189]
|
|
50977
51927
|
},
|
|
50978
51928
|
{ address: entry.address, name: "getTotalPooledToken", params: [] }
|
|
50979
51929
|
],
|
|
@@ -50984,7 +51934,7 @@ var readerStellaStDot = (entry) => ({
|
|
|
50984
51934
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
50985
51935
|
return void 0;
|
|
50986
51936
|
}
|
|
50987
|
-
const totalAssets = toBigInt13(pooled) ?? totalSupply * exchangeRate /
|
|
51937
|
+
const totalAssets = toBigInt13(pooled) ?? totalSupply * exchangeRate / ONE_E189;
|
|
50988
51938
|
return {
|
|
50989
51939
|
totalAssets,
|
|
50990
51940
|
totalSupply,
|
|
@@ -51022,7 +51972,7 @@ var readerKintsuSMon = (entry) => ({
|
|
|
51022
51972
|
const totalAssets = toBigInt13(pooled);
|
|
51023
51973
|
const totalSupply = toBigInt13(shares);
|
|
51024
51974
|
if (totalAssets === void 0 || totalSupply === void 0) return void 0;
|
|
51025
|
-
const exchangeRate = totalSupply > 0n ? totalAssets *
|
|
51975
|
+
const exchangeRate = totalSupply > 0n ? totalAssets * ONE_E189 / totalSupply : ONE_E189;
|
|
51026
51976
|
return { totalAssets, totalSupply, exchangeRate };
|
|
51027
51977
|
}
|
|
51028
51978
|
});
|
|
@@ -51458,7 +52408,7 @@ var getLstValidators = async (chainId, shareToken) => {
|
|
|
51458
52408
|
};
|
|
51459
52409
|
|
|
51460
52410
|
// src/vaults/lst/fetchPublic.ts
|
|
51461
|
-
var
|
|
52411
|
+
var ONE_E1810 = 10n ** 18n;
|
|
51462
52412
|
var ERC20_BALANCE_ABI = parseAbi([
|
|
51463
52413
|
"function balanceOf(address) view returns (uint256)"
|
|
51464
52414
|
]);
|
|
@@ -51573,8 +52523,8 @@ var fetchLstShareTokens = async (chainId, multicallRetry, prices = {}, tokenList
|
|
|
51573
52523
|
const underlyingUnit = 10n ** BigInt(underlyingDec);
|
|
51574
52524
|
const totalAssetsFormatted = Number(state.totalAssets) / 10 ** underlyingDec;
|
|
51575
52525
|
const totalAssetsUsd = priceUsd !== void 0 ? totalAssetsFormatted * priceUsd : 0;
|
|
51576
|
-
const convertToAssets = state.exchangeRate * underlyingUnit /
|
|
51577
|
-
const convertToShares = state.exchangeRate > 0n ?
|
|
52526
|
+
const convertToAssets = state.exchangeRate * underlyingUnit / ONE_E1810;
|
|
52527
|
+
const convertToShares = state.exchangeRate > 0n ? ONE_E1810 * shareUnit / state.exchangeRate : 0n;
|
|
51578
52528
|
let liquidityRaw;
|
|
51579
52529
|
if (state.liquidity !== void 0) {
|
|
51580
52530
|
liquidityRaw = state.liquidity;
|
|
@@ -52245,16 +53195,17 @@ var Erc7540Abi = [
|
|
|
52245
53195
|
// src/vaults/lst/withdrawals/readers/erc7540.ts
|
|
52246
53196
|
var readerErc7540 = {
|
|
52247
53197
|
fetch: async (user, multicallRetry, chainId, entry) => {
|
|
53198
|
+
const requestContract = entry.lst;
|
|
52248
53199
|
const stage1 = await multicallRetry({
|
|
52249
53200
|
chain: chainId,
|
|
52250
53201
|
calls: [
|
|
52251
53202
|
{
|
|
52252
|
-
address:
|
|
53203
|
+
address: requestContract,
|
|
52253
53204
|
name: "pendingRedeemRequest",
|
|
52254
53205
|
params: [0n, user]
|
|
52255
53206
|
},
|
|
52256
53207
|
{
|
|
52257
|
-
address:
|
|
53208
|
+
address: requestContract,
|
|
52258
53209
|
name: "claimableRedeemRequest",
|
|
52259
53210
|
params: [0n, user]
|
|
52260
53211
|
}
|
|
@@ -52269,7 +53220,7 @@ var readerErc7540 = {
|
|
|
52269
53220
|
chain: chainId,
|
|
52270
53221
|
calls: [
|
|
52271
53222
|
{
|
|
52272
|
-
address:
|
|
53223
|
+
address: requestContract,
|
|
52273
53224
|
name: "convertToAssets",
|
|
52274
53225
|
params: [claimable]
|
|
52275
53226
|
}
|
|
@@ -52283,6 +53234,8 @@ var readerErc7540 = {
|
|
|
52283
53234
|
symbol: entry.symbol,
|
|
52284
53235
|
requestId: "0",
|
|
52285
53236
|
amountUnderlying: amount.toString(),
|
|
53237
|
+
// The 7540 claim (`redeem`) takes the share amount.
|
|
53238
|
+
shares: claimable.toString(),
|
|
52286
53239
|
status: "claimable"
|
|
52287
53240
|
});
|
|
52288
53241
|
}
|
|
@@ -52295,6 +53248,7 @@ var readerErc7540 = {
|
|
|
52295
53248
|
// Approximate to the share value at current price; UI can
|
|
52296
53249
|
// re-convert if it has the share exchangeRate.
|
|
52297
53250
|
amountUnderlying: pending.toString(),
|
|
53251
|
+
shares: pending.toString(),
|
|
52298
53252
|
status: "pending"
|
|
52299
53253
|
});
|
|
52300
53254
|
}
|
|
@@ -52353,6 +53307,172 @@ var readerEthenaCooldown = {
|
|
|
52353
53307
|
}
|
|
52354
53308
|
};
|
|
52355
53309
|
|
|
53310
|
+
// src/vaults/lst/withdrawals/abis/susd3.ts
|
|
53311
|
+
var Susd3CooldownStatusAbi = [
|
|
53312
|
+
{
|
|
53313
|
+
name: "getCooldownStatus",
|
|
53314
|
+
type: "function",
|
|
53315
|
+
stateMutability: "view",
|
|
53316
|
+
inputs: [{ type: "address", name: "user" }],
|
|
53317
|
+
outputs: [
|
|
53318
|
+
{ type: "uint256", name: "cooldownEnd" },
|
|
53319
|
+
{ type: "uint256", name: "windowEnd" },
|
|
53320
|
+
{ type: "uint256", name: "shares" }
|
|
53321
|
+
]
|
|
53322
|
+
},
|
|
53323
|
+
{
|
|
53324
|
+
name: "convertToAssets",
|
|
53325
|
+
type: "function",
|
|
53326
|
+
stateMutability: "view",
|
|
53327
|
+
inputs: [{ type: "uint256", name: "shares" }],
|
|
53328
|
+
outputs: [{ type: "uint256", name: "assets" }]
|
|
53329
|
+
}
|
|
53330
|
+
];
|
|
53331
|
+
|
|
53332
|
+
// src/vaults/lst/withdrawals/readers/susd3.ts
|
|
53333
|
+
var readerSusd3Cooldown = {
|
|
53334
|
+
fetch: async (user, multicallRetry, chainId, entry) => {
|
|
53335
|
+
const res = await multicallRetry({
|
|
53336
|
+
chain: chainId,
|
|
53337
|
+
calls: [
|
|
53338
|
+
{ address: entry.lst, name: "getCooldownStatus", params: [user] }
|
|
53339
|
+
],
|
|
53340
|
+
abi: [Susd3CooldownStatusAbi]
|
|
53341
|
+
});
|
|
53342
|
+
const cell = res[0];
|
|
53343
|
+
let cooldownEnd;
|
|
53344
|
+
let windowEnd;
|
|
53345
|
+
let shares;
|
|
53346
|
+
if (Array.isArray(cell)) {
|
|
53347
|
+
cooldownEnd = toBigInt14(cell[0]);
|
|
53348
|
+
windowEnd = toBigInt14(cell[1]);
|
|
53349
|
+
shares = toBigInt14(cell[2]);
|
|
53350
|
+
} else if (cell && typeof cell === "object") {
|
|
53351
|
+
cooldownEnd = toBigInt14(cell.cooldownEnd);
|
|
53352
|
+
windowEnd = toBigInt14(cell.windowEnd);
|
|
53353
|
+
shares = toBigInt14(cell.shares);
|
|
53354
|
+
}
|
|
53355
|
+
if (!shares || shares === 0n) return [];
|
|
53356
|
+
let amount = shares;
|
|
53357
|
+
try {
|
|
53358
|
+
const stage2 = await multicallRetry({
|
|
53359
|
+
chain: chainId,
|
|
53360
|
+
calls: [
|
|
53361
|
+
{ address: entry.lst, name: "convertToAssets", params: [shares] }
|
|
53362
|
+
],
|
|
53363
|
+
abi: [Susd3CooldownStatusAbi]
|
|
53364
|
+
});
|
|
53365
|
+
amount = toBigInt14(stage2[0]) ?? shares;
|
|
53366
|
+
} catch {
|
|
53367
|
+
}
|
|
53368
|
+
const readyAt = Number(cooldownEnd ?? 0n);
|
|
53369
|
+
const expiresAt = windowEnd && windowEnd > 0n && windowEnd < 10n ** 12n ? Number(windowEnd) : void 0;
|
|
53370
|
+
const out = [
|
|
53371
|
+
{
|
|
53372
|
+
lst: entry.lst,
|
|
53373
|
+
brand: entry.brand,
|
|
53374
|
+
symbol: entry.symbol,
|
|
53375
|
+
requestId: "0",
|
|
53376
|
+
amountUnderlying: amount.toString(),
|
|
53377
|
+
shares: shares.toString(),
|
|
53378
|
+
status: computeStatus(readyAt, expiresAt),
|
|
53379
|
+
readyAt,
|
|
53380
|
+
...expiresAt !== void 0 ? { expiresAt } : {}
|
|
53381
|
+
}
|
|
53382
|
+
];
|
|
53383
|
+
return out;
|
|
53384
|
+
}
|
|
53385
|
+
};
|
|
53386
|
+
|
|
53387
|
+
// src/vaults/lst/withdrawals/abis/strataCooldown.ts
|
|
53388
|
+
var StrataCooldownBalanceAbi = [
|
|
53389
|
+
{
|
|
53390
|
+
name: "balanceOf",
|
|
53391
|
+
type: "function",
|
|
53392
|
+
stateMutability: "view",
|
|
53393
|
+
inputs: [
|
|
53394
|
+
{ type: "address", name: "token" },
|
|
53395
|
+
{ type: "address", name: "user" }
|
|
53396
|
+
],
|
|
53397
|
+
outputs: [
|
|
53398
|
+
{
|
|
53399
|
+
type: "tuple",
|
|
53400
|
+
name: "state",
|
|
53401
|
+
components: [
|
|
53402
|
+
{ type: "uint256", name: "pending" },
|
|
53403
|
+
{ type: "uint256", name: "claimable" },
|
|
53404
|
+
{ type: "uint256", name: "nextUnlockAt" },
|
|
53405
|
+
{ type: "uint256", name: "nextUnlockAmount" },
|
|
53406
|
+
{ type: "uint256", name: "totalRequests" }
|
|
53407
|
+
]
|
|
53408
|
+
}
|
|
53409
|
+
]
|
|
53410
|
+
}
|
|
53411
|
+
];
|
|
53412
|
+
|
|
53413
|
+
// src/vaults/lst/withdrawals/readers/strataCooldown.ts
|
|
53414
|
+
var readerStrataCooldown = {
|
|
53415
|
+
fetch: async (user, multicallRetry, chainId, entry) => {
|
|
53416
|
+
const escrowToken = entry.escrowToken;
|
|
53417
|
+
if (!escrowToken) return [];
|
|
53418
|
+
const contracts = [
|
|
53419
|
+
entry.withdrawalContract,
|
|
53420
|
+
entry.secondaryWithdrawalContract
|
|
53421
|
+
].filter((c) => !!c);
|
|
53422
|
+
if (contracts.length === 0) return [];
|
|
53423
|
+
const res = await multicallRetry({
|
|
53424
|
+
chain: chainId,
|
|
53425
|
+
calls: contracts.map((address) => ({
|
|
53426
|
+
address,
|
|
53427
|
+
name: "balanceOf",
|
|
53428
|
+
params: [escrowToken, user]
|
|
53429
|
+
})),
|
|
53430
|
+
abi: contracts.map(() => StrataCooldownBalanceAbi)
|
|
53431
|
+
});
|
|
53432
|
+
const out = [];
|
|
53433
|
+
for (let i = 0; i < contracts.length; i++) {
|
|
53434
|
+
const cell = res[i];
|
|
53435
|
+
let pending;
|
|
53436
|
+
let claimable;
|
|
53437
|
+
let nextUnlockAt;
|
|
53438
|
+
if (Array.isArray(cell)) {
|
|
53439
|
+
pending = toBigInt14(cell[0]);
|
|
53440
|
+
claimable = toBigInt14(cell[1]);
|
|
53441
|
+
nextUnlockAt = toNumber(cell[2]);
|
|
53442
|
+
} else if (cell && typeof cell === "object") {
|
|
53443
|
+
pending = toBigInt14(cell.pending);
|
|
53444
|
+
claimable = toBigInt14(cell.claimable);
|
|
53445
|
+
nextUnlockAt = toNumber(cell.nextUnlockAt);
|
|
53446
|
+
}
|
|
53447
|
+
const escrow = { withdrawQueue: contracts[i], claimToken: escrowToken };
|
|
53448
|
+
if (claimable && claimable > 0n) {
|
|
53449
|
+
out.push({
|
|
53450
|
+
lst: entry.lst,
|
|
53451
|
+
brand: entry.brand,
|
|
53452
|
+
symbol: entry.symbol,
|
|
53453
|
+
requestId: `${i * 2}`,
|
|
53454
|
+
amountUnderlying: claimable.toString(),
|
|
53455
|
+
status: "claimable",
|
|
53456
|
+
...escrow
|
|
53457
|
+
});
|
|
53458
|
+
}
|
|
53459
|
+
if (pending && pending > 0n) {
|
|
53460
|
+
out.push({
|
|
53461
|
+
lst: entry.lst,
|
|
53462
|
+
brand: entry.brand,
|
|
53463
|
+
symbol: entry.symbol,
|
|
53464
|
+
requestId: `${i * 2 + 1}`,
|
|
53465
|
+
amountUnderlying: pending.toString(),
|
|
53466
|
+
status: "pending",
|
|
53467
|
+
...nextUnlockAt ? { readyAt: nextUnlockAt } : {},
|
|
53468
|
+
...escrow
|
|
53469
|
+
});
|
|
53470
|
+
}
|
|
53471
|
+
}
|
|
53472
|
+
return out;
|
|
53473
|
+
}
|
|
53474
|
+
};
|
|
53475
|
+
|
|
52356
53476
|
// src/vaults/lst/withdrawals/abis/etherfi.ts
|
|
52357
53477
|
var EtherFiWithdrawRequestAbi = [
|
|
52358
53478
|
{
|
|
@@ -52567,7 +53687,9 @@ var readerKelp = {
|
|
|
52567
53687
|
}
|
|
52568
53688
|
const stage2 = await multicallRetry({
|
|
52569
53689
|
chain: chainId,
|
|
52570
|
-
calls: detailCalls.map(
|
|
53690
|
+
calls: detailCalls.map(
|
|
53691
|
+
({ _asset: _3, ...rest }) => rest
|
|
53692
|
+
),
|
|
52571
53693
|
abi: detailCalls.map(() => KelpWithdrawalManagerAbi)
|
|
52572
53694
|
});
|
|
52573
53695
|
const out = [];
|
|
@@ -53121,9 +54243,7 @@ var readerMantle = {
|
|
|
53121
54243
|
const results = await multicallRetry({
|
|
53122
54244
|
chain: chainId,
|
|
53123
54245
|
calls,
|
|
53124
|
-
abi: calls.map(
|
|
53125
|
-
() => MantleUnstakeRequestsManagerAbi
|
|
53126
|
-
)
|
|
54246
|
+
abi: calls.map(() => MantleUnstakeRequestsManagerAbi)
|
|
53127
54247
|
});
|
|
53128
54248
|
const out = [];
|
|
53129
54249
|
const lcUser = user.toLowerCase();
|
|
@@ -54000,6 +55120,10 @@ var buildWithdrawalReader = (entry) => {
|
|
|
54000
55120
|
return readerErc7540;
|
|
54001
55121
|
case "ethenaCooldown":
|
|
54002
55122
|
return readerEthenaCooldown;
|
|
55123
|
+
case "susd3Cooldown":
|
|
55124
|
+
return readerSusd3Cooldown;
|
|
55125
|
+
case "strataCooldown":
|
|
55126
|
+
return readerStrataCooldown;
|
|
54003
55127
|
case "swellNft":
|
|
54004
55128
|
return readerSwell;
|
|
54005
55129
|
case "stakeWiseSubgraph":
|
|
@@ -54063,6 +55187,14 @@ var LST_WITHDRAWAL_REGISTRY = {
|
|
|
54063
55187
|
symbol: "LBTC",
|
|
54064
55188
|
reader: "unverified"
|
|
54065
55189
|
},
|
|
55190
|
+
{
|
|
55191
|
+
// Lombard LBTCv (Veda BoringVault) — queue mechanics not yet
|
|
55192
|
+
// implemented; placeholder so the orchestrator surfaces the asset.
|
|
55193
|
+
lst: "0x5401b8620e5fb570064ca9114fd1e135fd77d57c",
|
|
55194
|
+
brand: "Lombard",
|
|
55195
|
+
symbol: "LBTCv",
|
|
55196
|
+
reader: "unverified"
|
|
55197
|
+
},
|
|
54066
55198
|
{
|
|
54067
55199
|
lst: "0x657e8c867d8b37dcc18fa4caead9c45eb088c642",
|
|
54068
55200
|
brand: "ether.fi",
|
|
@@ -54129,6 +55261,134 @@ var LST_WITHDRAWAL_REGISTRY = {
|
|
|
54129
55261
|
symbol: "savETH",
|
|
54130
55262
|
reader: "ethenaCooldown"
|
|
54131
55263
|
},
|
|
55264
|
+
{
|
|
55265
|
+
// Tori strUSD — StakedUSDeV2 clone over trUSD; same cooldowns(address)
|
|
55266
|
+
// escrow surface (7d, owner-mutable), claim via `unstake`.
|
|
55267
|
+
lst: "0x280839980a7ed0d7717f64125fe241012e5f5815",
|
|
55268
|
+
brand: "Tori",
|
|
55269
|
+
symbol: "strUSD",
|
|
55270
|
+
reader: "ethenaCooldown"
|
|
55271
|
+
},
|
|
55272
|
+
{
|
|
55273
|
+
// Neutrl sNUSD — StakedUSDeV2 clone over NUSD; cooldowns(address)
|
|
55274
|
+
// escrow (10d), claim via `unstake`.
|
|
55275
|
+
lst: "0x08efcc2f3e61185d0ea7f8830b3fec9bfa2ee313",
|
|
55276
|
+
brand: "Neutrl",
|
|
55277
|
+
symbol: "sNUSD",
|
|
55278
|
+
reader: "ethenaCooldown"
|
|
55279
|
+
},
|
|
55280
|
+
{
|
|
55281
|
+
// 3Jane sUSD3 — startCooldown(shares) → 30d → plain 4626 redeem
|
|
55282
|
+
// inside the withdrawal window; getCooldownStatus(address) getter.
|
|
55283
|
+
lst: "0xf689555121e529ff0463e191f9bd9d1e496164a7",
|
|
55284
|
+
brand: "3Jane",
|
|
55285
|
+
symbol: "sUSD3",
|
|
55286
|
+
reader: "susd3Cooldown"
|
|
55287
|
+
},
|
|
55288
|
+
{
|
|
55289
|
+
// Apyx apyUSD — NOT enumerable today. The 4626 redeem escrows the
|
|
55290
|
+
// apxUSD and mints a **soulbound ERC-721** on the receipt contract
|
|
55291
|
+
// `apyUSD.receipt()` = 0x9bf51f33…, which is the only handle on the
|
|
55292
|
+
// pending exit and exposes no per-owner enumeration. The vault also
|
|
55293
|
+
// has an `unlockToken()` (0x93775e2d…) carrying 7540-shaped getters,
|
|
55294
|
+
// but they are the wrong surface: verified 2026-08-04 that
|
|
55295
|
+
// `pendingRedeemRequest(0, user)` / `claimableRedeemRequest(0, user)`
|
|
55296
|
+
// both return 0 for addresses genuinely holding open receipt NFTs.
|
|
55297
|
+
// The claim needs the `tokenId` (read from the redeem's `Transfer`
|
|
55298
|
+
// log), so the real fix is a caller-supplied-ids reader in the
|
|
55299
|
+
// Mantle/Puffer/TruFin mould — see INDEXING_STRATEGIES.md.
|
|
55300
|
+
lst: "0x38eeb52f0771140d10c4e9a9a72349a329fe8a6a",
|
|
55301
|
+
brand: "Apyx",
|
|
55302
|
+
symbol: "apyUSD",
|
|
55303
|
+
reader: "unverified"
|
|
55304
|
+
},
|
|
55305
|
+
// Strata tranche markets — ONE entry per market (not per tranche):
|
|
55306
|
+
// both tranches escrow into the same two per-market ICooldown
|
|
55307
|
+
// contracts keyed by (escrowToken, user) with no tranche
|
|
55308
|
+
// attribution, so per-tranche rows would double-report. `lst` is the
|
|
55309
|
+
// SENIOR tranche address — the catalog resolves it to the savings
|
|
55310
|
+
// provider, and the calldata-sdk `strata` claim built against it
|
|
55311
|
+
// finalizes the whole market's unlocked requests (senior AND
|
|
55312
|
+
// junior). The escrow is KEYED by the collateral token but its
|
|
55313
|
+
// recorded amounts are per-leg — see the reader for the trap.
|
|
55314
|
+
{
|
|
55315
|
+
lst: "0x3d7d6fdf07ee548b939a80edbc9b2256d0cdc003",
|
|
55316
|
+
// srUSDe
|
|
55317
|
+
brand: "Strata",
|
|
55318
|
+
symbol: "srUSDe/jrUSDe",
|
|
55319
|
+
reader: "strataCooldown",
|
|
55320
|
+
withdrawalContract: "0x735eddf50ca2371aa48466469c742e684c610f74",
|
|
55321
|
+
// UnstakeCooldown
|
|
55322
|
+
secondaryWithdrawalContract: "0xd6dad17d025cddded27305aebab8b277996a6faf",
|
|
55323
|
+
// ERC20Cooldown
|
|
55324
|
+
escrowToken: "0x9d39a5de30e57443bff2a8307a4256c8797a3497"
|
|
55325
|
+
// sUSDe
|
|
55326
|
+
},
|
|
55327
|
+
{
|
|
55328
|
+
lst: "0x65a44528e8868166401ea08b549e19552af589db",
|
|
55329
|
+
// srNUSD
|
|
55330
|
+
brand: "Strata",
|
|
55331
|
+
symbol: "srNUSD/jrNUSD",
|
|
55332
|
+
reader: "strataCooldown",
|
|
55333
|
+
withdrawalContract: "0x2a52363a2a0d765b31cb117a8e4d9ce58c2bc749",
|
|
55334
|
+
// NeutrlUnstakeCooldown
|
|
55335
|
+
secondaryWithdrawalContract: "0x1abc3c3c15a862276d057b2acbcfeab358907990",
|
|
55336
|
+
// NeutrlERC20Cooldown
|
|
55337
|
+
escrowToken: "0x08efcc2f3e61185d0ea7f8830b3fec9bfa2ee313"
|
|
55338
|
+
// sNUSD
|
|
55339
|
+
},
|
|
55340
|
+
{
|
|
55341
|
+
lst: "0x627ea69929212916ec57b1b26d2e1a19f6129b53",
|
|
55342
|
+
// srmHYPER
|
|
55343
|
+
brand: "Strata",
|
|
55344
|
+
symbol: "srmHYPER/jrmHYPER",
|
|
55345
|
+
reader: "strataCooldown",
|
|
55346
|
+
withdrawalContract: "0x7910cb19a4f5a36caa2bed0af82cbfff2e08805c",
|
|
55347
|
+
// MHyperUnstakeCooldown
|
|
55348
|
+
secondaryWithdrawalContract: "0x71ec07bba60e854c4b2466068be1c8d5b5788fda",
|
|
55349
|
+
// MHyperERC20Cooldown
|
|
55350
|
+
escrowToken: "0x9b5528528656dbc094765e2abb79f293c21191b9"
|
|
55351
|
+
// mHYPER
|
|
55352
|
+
},
|
|
55353
|
+
{
|
|
55354
|
+
lst: "0xcced21d609cac4a272d0c01a8ff4de9cebc40d60",
|
|
55355
|
+
// srmM1-USD
|
|
55356
|
+
brand: "Strata",
|
|
55357
|
+
symbol: "srmM1-USD/jrmM1-USD",
|
|
55358
|
+
reader: "strataCooldown",
|
|
55359
|
+
withdrawalContract: "0x6f6904ed406cefb34893054a742c6148e9d681c1",
|
|
55360
|
+
// MM1USDUnstakeCooldown
|
|
55361
|
+
secondaryWithdrawalContract: "0x4c2680ae06a0bb0b091e5ccca13cb03f4f72296e",
|
|
55362
|
+
// MM1USDERC20Cooldown
|
|
55363
|
+
escrowToken: "0xcc5c22c7a6bcc25e66726aef011dde74289ed203"
|
|
55364
|
+
// mM1-USD
|
|
55365
|
+
},
|
|
55366
|
+
{
|
|
55367
|
+
lst: "0xfaa9a0e1db9e22ae3a20b2b58a68dc24d053d066",
|
|
55368
|
+
// srUSDat
|
|
55369
|
+
brand: "Strata",
|
|
55370
|
+
symbol: "srUSDat/jrUSDat",
|
|
55371
|
+
reader: "strataCooldown",
|
|
55372
|
+
withdrawalContract: "0x616af703d5739f2122af48c0d1ce0b37e09381ac",
|
|
55373
|
+
// SaturnUnstakeCooldown
|
|
55374
|
+
secondaryWithdrawalContract: "0x25138d10837ab0278eb860454e1045f2b92929ab",
|
|
55375
|
+
// SaturnERC20Cooldown
|
|
55376
|
+
escrowToken: "0xd166337499e176bbc38a1fbd113ab144e5bd2df7"
|
|
55377
|
+
// sUSDat
|
|
55378
|
+
},
|
|
55379
|
+
{
|
|
55380
|
+
lst: "0x35bff778d3fc53a561486bf28e761428499232eb",
|
|
55381
|
+
// srPRIME
|
|
55382
|
+
brand: "Strata",
|
|
55383
|
+
symbol: "srPRIME/jrPRIME",
|
|
55384
|
+
reader: "strataCooldown",
|
|
55385
|
+
withdrawalContract: "0x440938fcb03d64afe50a8168d4b3cfcc341bfbaa",
|
|
55386
|
+
// FigureUnstakeCooldown
|
|
55387
|
+
secondaryWithdrawalContract: "0xbe71d21addba5c9aac5b4e006db1715ef1e324be",
|
|
55388
|
+
// FigureERC20Cooldown
|
|
55389
|
+
escrowToken: "0x19ebb35279a16207ec4ba82799cc64715065f7f6"
|
|
55390
|
+
// PRIME
|
|
55391
|
+
},
|
|
54132
55392
|
{
|
|
54133
55393
|
lst: "0xcd5fe23c85820f7b72d0926fc9b05b43e359b7ee",
|
|
54134
55394
|
brand: "EtherFi",
|
|
@@ -54228,6 +55488,14 @@ var LST_WITHDRAWAL_REGISTRY = {
|
|
|
54228
55488
|
symbol: "rETH",
|
|
54229
55489
|
reader: "noQueue"
|
|
54230
55490
|
},
|
|
55491
|
+
{
|
|
55492
|
+
// Frax sfrxETH — vanilla ERC-4626 instant redeem to frxETH (the
|
|
55493
|
+
// frxETH → ETH leg is DEX-only, not a protocol queue).
|
|
55494
|
+
lst: "0xac3e018457b222d93114458476f3e3416abbe38f",
|
|
55495
|
+
brand: "Frax",
|
|
55496
|
+
symbol: "sfrxETH",
|
|
55497
|
+
reader: "noQueue"
|
|
55498
|
+
},
|
|
54231
55499
|
{
|
|
54232
55500
|
lst: "0xbe9895146f7af43049ca1c1ae358b0541ea49704",
|
|
54233
55501
|
brand: "Coinbase",
|
|
@@ -54350,6 +55618,36 @@ var LST_WITHDRAWAL_REGISTRY = {
|
|
|
54350
55618
|
reader: "ethenaCooldown"
|
|
54351
55619
|
}
|
|
54352
55620
|
],
|
|
55621
|
+
// Monad LSTs — all four are `queued` in the main registry but their
|
|
55622
|
+
// per-protocol request enumeration is not implemented yet; listed as
|
|
55623
|
+
// `unverified` placeholders so the orchestrator surfaces the asset
|
|
55624
|
+
// (returning []) instead of silently omitting it.
|
|
55625
|
+
"143": [
|
|
55626
|
+
{
|
|
55627
|
+
lst: "0x1b68626dca36c7fe922fd2d55e4f631d962de19c",
|
|
55628
|
+
brand: "Shmonad",
|
|
55629
|
+
symbol: "shMON",
|
|
55630
|
+
reader: "unverified"
|
|
55631
|
+
},
|
|
55632
|
+
{
|
|
55633
|
+
lst: "0x0c65a0bc65a5d819235b71f554d210d3f80e0852",
|
|
55634
|
+
brand: "aPriori",
|
|
55635
|
+
symbol: "aprMON",
|
|
55636
|
+
reader: "unverified"
|
|
55637
|
+
},
|
|
55638
|
+
{
|
|
55639
|
+
lst: "0xa3227c5969757783154c60bf0bc1944180ed81b9",
|
|
55640
|
+
brand: "Kintsu",
|
|
55641
|
+
symbol: "sMON",
|
|
55642
|
+
reader: "unverified"
|
|
55643
|
+
},
|
|
55644
|
+
{
|
|
55645
|
+
lst: "0x8498312a6b3cbd158bf0c93abdcf29e6e4f55081",
|
|
55646
|
+
brand: "Magma",
|
|
55647
|
+
symbol: "gMON",
|
|
55648
|
+
reader: "unverified"
|
|
55649
|
+
}
|
|
55650
|
+
],
|
|
54353
55651
|
"146": [
|
|
54354
55652
|
{
|
|
54355
55653
|
lst: "0xe5da20f15420ad15de0fa650600afc998bbe3955",
|
|
@@ -54631,7 +55929,7 @@ var NavOracleReadAbi = [
|
|
|
54631
55929
|
];
|
|
54632
55930
|
|
|
54633
55931
|
// src/vaults/savings/readers/shared.ts
|
|
54634
|
-
var
|
|
55932
|
+
var ONE_E1811 = 10n ** 18n;
|
|
54635
55933
|
var toBigInt15 = (v) => {
|
|
54636
55934
|
if (v === void 0 || v === null) return void 0;
|
|
54637
55935
|
if (typeof v === "bigint") return v;
|
|
@@ -54672,7 +55970,7 @@ var readerErc46262 = (entry) => {
|
|
|
54672
55970
|
return {
|
|
54673
55971
|
totalAssets,
|
|
54674
55972
|
totalSupply,
|
|
54675
|
-
exchangeRate: convertToAssetsRaw *
|
|
55973
|
+
exchangeRate: convertToAssetsRaw * ONE_E1811 / underlyingUnit
|
|
54676
55974
|
};
|
|
54677
55975
|
}
|
|
54678
55976
|
};
|
|
@@ -54780,7 +56078,7 @@ var readerErc4626Idle = (entry) => {
|
|
|
54780
56078
|
return {
|
|
54781
56079
|
totalAssets,
|
|
54782
56080
|
totalSupply,
|
|
54783
|
-
exchangeRate: convertToAssetsRaw *
|
|
56081
|
+
exchangeRate: convertToAssetsRaw * ONE_E1811 / underlyingUnit,
|
|
54784
56082
|
...capacity !== void 0 ? {
|
|
54785
56083
|
instantRedeemCapacity: capacity,
|
|
54786
56084
|
instantRedeemEnabled: true,
|
|
@@ -54829,7 +56127,7 @@ var readerErc4626WithdrawLimit = (entry) => {
|
|
|
54829
56127
|
return {
|
|
54830
56128
|
totalAssets,
|
|
54831
56129
|
totalSupply,
|
|
54832
|
-
exchangeRate: convertToAssetsRaw *
|
|
56130
|
+
exchangeRate: convertToAssetsRaw * ONE_E1811 / underlyingUnit,
|
|
54833
56131
|
...capacity !== void 0 ? {
|
|
54834
56132
|
instantRedeemCapacity: capacity,
|
|
54835
56133
|
instantRedeemEnabled: true,
|
|
@@ -54861,7 +56159,7 @@ var readerNavOracle = (entry) => {
|
|
|
54861
56159
|
const exchangeRate = toBigInt15(raw);
|
|
54862
56160
|
if (exchangeRate === void 0 || exchangeRate <= 0n) return void 0;
|
|
54863
56161
|
return {
|
|
54864
|
-
totalAssets: totalSupply * exchangeRate * underlyingUnit / (
|
|
56162
|
+
totalAssets: totalSupply * exchangeRate * underlyingUnit / (ONE_E1811 * shareUnit),
|
|
54865
56163
|
totalSupply,
|
|
54866
56164
|
exchangeRate
|
|
54867
56165
|
};
|
|
@@ -54875,7 +56173,7 @@ var readerNativeWnlp = (entry) => {
|
|
|
54875
56173
|
return {
|
|
54876
56174
|
calls: [
|
|
54877
56175
|
{ address, name: "totalSupply", params: [] },
|
|
54878
|
-
{ address, name: "getNlpByWnlp", params: [
|
|
56176
|
+
{ address, name: "getNlpByWnlp", params: [ONE_E1811] },
|
|
54879
56177
|
{ address, name: "instantRedeemFeeBips", params: [] },
|
|
54880
56178
|
{ address, name: "instantRedeemEnabled", params: [] },
|
|
54881
56179
|
// Falls back to the vault itself when no CreditVault is pinned —
|
|
@@ -54909,7 +56207,7 @@ var readerNativeWnlp = (entry) => {
|
|
|
54909
56207
|
const windowSeconds = toBigInt15(window);
|
|
54910
56208
|
const bips = toBigInt15(feeBips);
|
|
54911
56209
|
return {
|
|
54912
|
-
totalAssets: totalSupply * exchangeRate /
|
|
56210
|
+
totalAssets: totalSupply * exchangeRate / ONE_E1811,
|
|
54913
56211
|
totalSupply,
|
|
54914
56212
|
exchangeRate,
|
|
54915
56213
|
// `instantRedeemFeeBips` on-chain is already basis points, so it
|
|
@@ -54947,7 +56245,7 @@ var buildReader2 = (entry) => {
|
|
|
54947
56245
|
var resolveYieldApr2 = async (entries) => (await resolveEntryApr(entries)).apr;
|
|
54948
56246
|
|
|
54949
56247
|
// src/vaults/savings/fetchPublic.ts
|
|
54950
|
-
var
|
|
56248
|
+
var ONE_E1812 = 10n ** 18n;
|
|
54951
56249
|
var fetchSavingsVaults = async (chainId, multicallRetry, prices = {}, tokenList = {}) => {
|
|
54952
56250
|
const entries = getSavingsRegistry(chainId);
|
|
54953
56251
|
if (entries.length === 0) return {};
|
|
@@ -54996,8 +56294,8 @@ var fetchSavingsVaults = async (chainId, multicallRetry, prices = {}, tokenList
|
|
|
54996
56294
|
1,
|
|
54997
56295
|
Number(liquidityAmount * 1000000n / state.totalAssets) / 1e6
|
|
54998
56296
|
) : 1;
|
|
54999
|
-
const convertToAssets = state.exchangeRate * underlyingUnit /
|
|
55000
|
-
const convertToShares = state.exchangeRate > 0n ?
|
|
56297
|
+
const convertToAssets = state.exchangeRate * underlyingUnit / ONE_E1812;
|
|
56298
|
+
const convertToShares = state.exchangeRate > 0n ? ONE_E1812 * shareUnit / state.exchangeRate : 0n;
|
|
55001
56299
|
const displayName = composeVaultDisplayName(
|
|
55002
56300
|
entry.brand,
|
|
55003
56301
|
entry.brand,
|
|
@@ -56714,23 +58012,23 @@ var priceGmMarkets = async (chainId, multicallRetry, markets, prices) => {
|
|
|
56714
58012
|
const indexMax = price(prices, m.indexToken)?.max;
|
|
56715
58013
|
if (Array.isArray(dsRes) && longMax != null && shortMax != null) {
|
|
56716
58014
|
const base = i * SLOTS;
|
|
56717
|
-
const
|
|
58015
|
+
const big9 = (j) => typeof dsRes[base + j] === "bigint" ? dsRes[base + j] : 0n;
|
|
56718
58016
|
const cap = computeDepositCapacityUsd(
|
|
56719
|
-
[info?.longTokenAmount, longMax,
|
|
56720
|
-
[info?.shortTokenAmount, shortMax,
|
|
58017
|
+
[info?.longTokenAmount, longMax, big9(0), big9(2)],
|
|
58018
|
+
[info?.shortTokenAmount, shortMax, big9(1), big9(3)]
|
|
56721
58019
|
);
|
|
56722
58020
|
if (cap != null) value.depositCapacityUsd = cap;
|
|
56723
58021
|
if (indexMax != null) {
|
|
56724
58022
|
const divisor = m.longToken.toLowerCase() === m.shortToken.toLowerCase() ? 2n : 1n;
|
|
56725
|
-
const reservedUsdLong = (
|
|
56726
|
-
const reservedUsdShort = (
|
|
58023
|
+
const reservedUsdLong = (big9(4) + big9(5)) / divisor * indexMax;
|
|
58024
|
+
const reservedUsdShort = (big9(6) + big9(7)) / divisor;
|
|
56727
58025
|
const liq = computeLiquidityUsd(
|
|
56728
58026
|
info?.longTokenUsd,
|
|
56729
58027
|
info?.shortTokenUsd,
|
|
56730
58028
|
reservedUsdLong,
|
|
56731
58029
|
reservedUsdShort,
|
|
56732
|
-
|
|
56733
|
-
|
|
58030
|
+
big9(8),
|
|
58031
|
+
big9(9)
|
|
56734
58032
|
);
|
|
56735
58033
|
if (liq != null)
|
|
56736
58034
|
value.liquidityUsd = Math.max(0, Math.min(liq, value.tvlUsd));
|
|
@@ -56929,21 +58227,21 @@ var fetchGmxExecutionFees = async (chainId, multicallRetry, gasPriceWei) => {
|
|
|
56929
58227
|
} catch {
|
|
56930
58228
|
return void 0;
|
|
56931
58229
|
}
|
|
56932
|
-
const
|
|
56933
|
-
const base =
|
|
56934
|
-
const mult =
|
|
58230
|
+
const big9 = (i) => typeof res[i] === "bigint" ? res[i] : 0n;
|
|
58231
|
+
const base = big9(0);
|
|
58232
|
+
const mult = big9(1);
|
|
56935
58233
|
if (base === 0n && mult === 0n) return void 0;
|
|
56936
58234
|
const PRECISION = 10n ** 30n;
|
|
56937
58235
|
const adjusted = (opGas) => base + opGas * mult / PRECISION;
|
|
56938
58236
|
const fee = (opGas) => (adjusted(opGas) * gasPriceWei).toString();
|
|
56939
|
-
const glvExtra =
|
|
58237
|
+
const glvExtra = big9(6) * GLV_NOMINAL_MARKET_COUNT;
|
|
56940
58238
|
return {
|
|
56941
58239
|
chainId,
|
|
56942
58240
|
gasPriceWei: gasPriceWei.toString(),
|
|
56943
|
-
deposit: fee(
|
|
56944
|
-
withdrawal: fee(
|
|
56945
|
-
glvDeposit: fee(
|
|
56946
|
-
glvWithdrawal: fee(
|
|
58241
|
+
deposit: fee(big9(2)),
|
|
58242
|
+
withdrawal: fee(big9(3)),
|
|
58243
|
+
glvDeposit: fee(big9(4) + glvExtra),
|
|
58244
|
+
glvWithdrawal: fee(big9(5) + glvExtra)
|
|
56947
58245
|
};
|
|
56948
58246
|
};
|
|
56949
58247
|
|
|
@@ -57330,7 +58628,7 @@ var readVaultSharePrices = async (chainId, addresses, multicallRetry) => {
|
|
|
57330
58628
|
};
|
|
57331
58629
|
|
|
57332
58630
|
// src/vaults/yield/annualize.ts
|
|
57333
|
-
var
|
|
58631
|
+
var YEAR_SECONDS10 = 365 * 24 * 60 * 60;
|
|
57334
58632
|
var SCALE = 10n ** 18n;
|
|
57335
58633
|
var appendSnapshot = (points, snap, options) => {
|
|
57336
58634
|
const maxPoints = options?.maxPoints ?? 90;
|
|
@@ -57359,7 +58657,7 @@ var computeVaultApr = (points, options) => {
|
|
|
57359
58657
|
if (pThen === 0n) return void 0;
|
|
57360
58658
|
const ratioScaled = BigInt(now.p) * SCALE / pThen;
|
|
57361
58659
|
const ratio = Number(ratioScaled) / 1e18;
|
|
57362
|
-
const apr = (ratio - 1) * (
|
|
58660
|
+
const apr = (ratio - 1) * (YEAR_SECONDS10 / windowSeconds);
|
|
57363
58661
|
return {
|
|
57364
58662
|
apr,
|
|
57365
58663
|
sharePriceNow: now.p,
|
|
@@ -58162,6 +59460,6 @@ async function fetchTokenBalances(chainId, account, tokens, options = {}) {
|
|
|
58162
59460
|
return parseTokenBalanceResult(rawResult, prepared.query);
|
|
58163
59461
|
}
|
|
58164
59462
|
|
|
58165
|
-
export { ApiBookSource, DEFAULT_MIDNIGHT_API, DEFAULT_OUTLIER_GUARD, DEFAULT_STALE_REJECT_SECONDS, DEFAULT_TERMMAX_API, EMPTY_BALANCE, 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, 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, TermMaxApiSource, TermSubgraphSource, UPSHIFT_CHAIN_IDS, UPSHIFT_VAULTS_URL, VAULT_SHARE_PRICE_PROBE, VOLATILE_VAULT_OVERRIDES, YEARN_CHAIN_IDS, YEARN_YDAEMON_BASE, accountDepositListKey, accountWithdrawalListKey, appendSnapshot, applyPositionDelta, attachPricesToFlashLiquidity, buildFluidFTokensCall, buildLiquityUserCall, buildLoopResult, buildMorphoTypeCall, buildMorphoTypeUserCallWithLens, buildPortfolioTotals, buildSumerAccumulators, buildSummaries, buildTellerUserCall, buildTermMaxUserCall, 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, convertInverseMarketsToResponse, convertLenderUserDataResult, convertLiquityMarketsToResponse, convertRiverMarketsToResponse, convertTellerMarketsToResponse, convertTermMarketsToResponse, convertTermMaxMarketsToResponse, createMarketUid, createMidnightBookSource, createMulticallRpcCall, createRawRpcCalls, createTermBookSource, createTermMaxDataSource, decodeListaMarkets, decodeMarkets, decodePackedListaUserDataset, decodePackedMorphoUserDataset, detectInterfaceKinds, encodeBalanceFetcherCalldata,
|
|
59463
|
+
export { ApiBookSource, DEFAULT_MIDNIGHT_API, DEFAULT_OUTLIER_GUARD, 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, 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, TermMaxApiSource, TermSubgraphSource, UPSHIFT_CHAIN_IDS, UPSHIFT_VAULTS_URL, VAULT_SHARE_PRICE_PROBE, VOLATILE_VAULT_OVERRIDES, YEARN_CHAIN_IDS, YEARN_YDAEMON_BASE, accountDepositListKey, accountWithdrawalListKey, appendSnapshot, applyPositionDelta, attachPricesToFlashLiquidity, buildFluidFTokensCall, buildLiquityUserCall, buildLoopResult, buildMorphoTypeCall, buildMorphoTypeUserCallWithLens, buildPortfolioTotals, buildSumerAccumulators, buildSummaries, buildTellerUserCall, buildTermMaxUserCall, 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, convertInverseMarketsToResponse, convertLenderUserDataResult, convertLiquityMarketsToResponse, convertRiverMarketsToResponse, convertTellerMarketsToResponse, convertTermMarketsToResponse, convertTermMaxMarketsToResponse, convertUsddMarketsToResponse, createMarketUid, createMidnightBookSource, createMulticallRpcCall, createRawRpcCalls, createTermBookSource, createTermMaxDataSource, decodeListaMarkets, decodeMarkets, decodePackedListaUserDataset, decodePackedMorphoUserDataset, detectInterfaceKinds, encodeBalanceFetcherCalldata, exactlyPairLtv, exactlyPenaltyRateToAprPercent, exactlyWadRateToPercent, feedKeyOf, feedStatKey, fetchDolomiteAccountNumbers, fetchEulerEarnVaults, fetchEulerEarnVaultsFromSubgraph, fetchEulerSubAccountIndexes, fetchExactlyMarkets, fetchFlashLiquidityForChain, fetchFluidFTokens, fetchGeneralYields, fetchGeneralYieldsByMarketUid, fetchGmxExecutionFees, fetchGmxTickerPrices, fetchGmxVaults, fetchHypercoreVaults, fetchInverseMarkets, fetchLagoonApiVaults, fetchLagoonVaults, fetchLiquityMarkets, fetchListaVaultsFromChain, fetchMorphoUserBalances, fetchMorphoUserPositionMarkets, fetchMorphoVaults, fetchMorphoVaultsFromApi, fetchMorphoVaultsFromChain, fetchOraclePrices, fetchPendlePrices, fetchRiverMarkets, fetchSiloVaults, fetchTellerMarkets, fetchTermMarkets, fetchTermMaxMarkets, fetchTokenBalances, fetchTokenMetadata, fetchUpshiftApiVaults, fetchUpshiftVaults, fetchUsddMarkets, fetchYearnApiVaults, fetchYearnVaults, filterActiveLenders, filterLendersByProtocol, 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, getResolvedDolomiteAccountNumbers, getStCeloValidatorGroups, getSubAccountAddress, getSubAccountIndex, getVaultPublicDataAll, getVaultWithdrawalRequests, hasEulerEarnVaultSubgraph, hasLagoonVaults, hasMorphoPositionIndex, hasMorphoUserApi, hasMorphoUserSubgraph, hasUpshiftVaults, hasYearnVaults, inverseKeyParts, inverseLenderKey, isStablecoinSymbol, isYearnV3, keysFromMaps, lenderApiOnly, lenderFamily, liquityCandidateTroveIds, liquityKeyParts, liquityLenderKey, multicall3Abi2 as multicall3Abi, nanTo, needsLenderApproval, needsTokenApproval, noOpResult, normalizeToBytes, parseBalanceFetcherResult, parseMergedResult, parseMulticallRpcResponses, parseRawRpcBatchResponses, parseRawRpcResponses, parseTermMaxLtv, parseTokenBalanceResult, positivePart2 as positivePart, predictInverseEscrow, prepareLenderUserDataRpcCalls, prepareMergedMulticallParams, prepareMergedRpcCalls, prepareMulticallInputs, prepareTokenBalanceRpcCalls, priceGlvVaults, priceGmMarkets, probeAaveFeedTimestamps, pruneFeedStats, readVaultSharePrices, rejectOutliers as rejectPriceOutliers, resolveDerivation, resolveStCeloDepositGroup, riverKeyParts, riverLenderKey, selectAssetGroupPrices, stampVaultClassification, 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, unflattenLenderData, updateFeedStats, usddIlkBytes32, usddKeyParts, usddLenderKey };
|
|
58166
59464
|
//# sourceMappingURL=index.js.map
|
|
58167
59465
|
//# sourceMappingURL=index.js.map
|