@1delta/margin-fetcher 5.0.64 → 5.0.66
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +125 -1
- package/dist/index.js +892 -396
- package/dist/index.js.map +1 -1
- package/package.json +6 -6
package/dist/index.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { parseAbi, keccak256, encodeAbiParameters, formatEther, BaseError, erc20Abi, stringToHex, isAddress, pad, encodeFunctionData, formatUnits, getAddress, decodeFunctionResult, decodeAbiParameters, concat, parseAbiParameters, AbiEncodingLengthMismatchError, concatHex, toBytes, slice, hexToString, InvalidAddressError, boolToHex, integerRegex, numberToHex, bytesRegex, BytesSizeMismatchError, arrayRegex, UnsupportedPackedAbiType } from './chunk-JUYF2XLF.js';
|
|
2
2
|
import './chunk-BYTNVMX7.js';
|
|
3
3
|
import './chunk-PR4QN5HX.js';
|
|
4
|
-
import { Lender, isExactly, isMidnight, isTerm, isTermMax, isTeller, isListaDao, isLiquityFamily, isRiver, isInverse, isCooler, isDssType, isCompoundV3Type, isFluid, isGearboxV3, isLlamaLend, isFrankencoin, isResupply, isCurvance, isTwyne, isFraxlend, isAaveV4Type, LIQUITY_FAMILY_LENDERS, isAaveType, isCompoundV3, isCompoundV2Type, isMultiMarket, isSiloV2Type, isSiloV3Type, isDolomite, isMorphoType, isUsdd, isSky, hasCrossMarginRisk, isEulerType, isInit, isVenusType, isSumerType, AAVE_V3_LENDERS, AAVE_V2_LENDERS, isMorphoBlue, isAaveV2Type, isAaveV32Type, isAaveV3Type, isYLDR, isLista, hasSubAccounts, isTectonicType, isKineticType, isBenqiType } from '@1delta/lender-registry';
|
|
4
|
+
import { Lender, isExactly, isMidnight, isTerm, isTermMax, isTeller, isListaDao, isLiquityFamily, isRiver, isInverse, isCooler, isDssType, isCompoundV3Type, isFluid, isGearboxV3, isLlamaLend, isFrankencoin, isResupply, isCurvance, isTwyne, isFraxlend, isAaveV4Type, LIQUITY_FAMILY_LENDERS, isAaveType, isCompoundV3, isCompoundV2Type, isMultiMarket, isSiloV2Type, isSiloV3Type, isDolomite, isFlyingTulip, isMorphoType, isUsdd, isSky, hasCrossMarginRisk, isEulerType, isInit, isVenusType, isSumerType, AAVE_V3_LENDERS, AAVE_V2_LENDERS, isMorphoBlue, isAaveV2Type, isAaveV32Type, isAaveV3Type, isYLDR, isLista, hasSubAccounts, isTectonicType, isKineticType, isBenqiType } from '@1delta/lender-registry';
|
|
5
5
|
export { hasCrossMarginRisk, isAaveType, isAaveV2Type, isAaveV32Type, isAaveV3Type, isCompoundV3, isCompoundV3Type, isInit, isMorphoType, isMultiMarket, isYLDR } from '@1delta/lender-registry';
|
|
6
|
-
import { fetchTokenLists, fetchTokenList, aavePools, compoundV3Pools, initConfig, morphoPools, compoundV2Pools, eulerVaults, siloMarkets, siloV2LenderKey, siloMarketsV3, siloV3LenderKey, aaveV4Spokes, aaveV4SpokeLenderKey, fluidResolvers, gearboxResolvers, dolomiteConfigs, midnightConfig, termConfig, termMarketsByChain, exactlyConfig, liquityLendersByChain, riverLendersByChain, inverseLendersByChain, coolerLendersByChain, llamaLendLendersByChain, usddLendersByChain, skyLendersByChain, frankencoinLendersByChain, resupplyLendersByChain, curvanceLendersByChain, fraxlendLendersByChain, twyneLendersByChain, tellerConfigByChain, tellerPoolsByChain, termMaxConfigByChain, aaveReserves, compoundV3Reserves, resolveTermApiBase, liquityConfigFor, liquityBranchesByChain, riverConfigFor, riverChainData, termMaxApiBaseUrl, termMaxLenderKey, inverseConfigFor, inverseChainData, coolerConfigFor, llamaLendConfigFor, llamaLendChainData, llamaLendApiBaseUrl, resupplyConfigFor, fraxlendConfigFor, dssConfigFor, dssChainData, dssDebtToken, dssDebtJoin, frankencoinConfigFor, frankencoinChainData, aaveOracles, morphoTypeMarkets, resolveMidnightApiBase, llamaLendMarketByVault, getSiloV2MarketEntry, getSiloV3MarketEntry, dolomiteEmode, curvanceConfigFor, aaveTokens, morphoTypeVaults, listaCollateralProvider, eulerConfigs, gearboxMarketCompressor, gearboxMarketConfigurators, compoundV2TokenArray, gearboxV3LenderKey, midnightMarketsByChain, twyneConfigFor, twyneChainData, parseAaveV4SpokeLenderKey, fraxlendPairsFor, gearboxAccountCompressor, compoundV2Tokens, exactlyMarketsByChain, aaveOraclesConfig, compoundV2Oracles, compoundV2OraclesConfig, compoundV3OraclesData, compoundV3BaseData, compoundV2Reserves, aaveV4Oracles, morphoTypeOracles } 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, flyingTulipLendersByChain, liquityLendersByChain, riverLendersByChain, inverseLendersByChain, coolerLendersByChain, llamaLendLendersByChain, usddLendersByChain, skyLendersByChain, frankencoinLendersByChain, resupplyLendersByChain, curvanceLendersByChain, fraxlendLendersByChain, twyneLendersByChain, tellerConfigByChain, tellerPoolsByChain, termMaxConfigByChain, aaveReserves, compoundV3Reserves, resolveTermApiBase, flyingTulipConfigFor, flyingTulipAssetsFor, liquityConfigFor, liquityBranchesByChain, riverConfigFor, riverChainData, termMaxApiBaseUrl, termMaxLenderKey, inverseConfigFor, inverseChainData, coolerConfigFor, llamaLendConfigFor, llamaLendChainData, llamaLendApiBaseUrl, resupplyConfigFor, fraxlendConfigFor, dssConfigFor, dssChainData, dssDebtToken, dssDebtJoin, frankencoinConfigFor, frankencoinChainData, aaveOracles, morphoTypeMarkets, resolveMidnightApiBase, llamaLendMarketByVault, getSiloV2MarketEntry, getSiloV3MarketEntry, dolomiteEmode, curvanceConfigFor, aaveTokens, morphoTypeVaults, listaCollateralProvider, eulerConfigs, gearboxMarketCompressor, gearboxMarketConfigurators, compoundV2TokenArray, gearboxV3LenderKey, midnightMarketsByChain, twyneConfigFor, twyneChainData, parseAaveV4SpokeLenderKey, fraxlendPairsFor, gearboxAccountCompressor, compoundV2Tokens, exactlyMarketsByChain, aaveOraclesConfig, compoundV2Oracles, compoundV2OraclesConfig, compoundV3OraclesData, compoundV3BaseData, compoundV2Reserves, aaveV4Oracles, morphoTypeOracles } from '@1delta/data-sdk';
|
|
7
7
|
import lodash from 'lodash';
|
|
8
8
|
import { Chain } from '@1delta/chain-registry';
|
|
9
9
|
import { multicallRetryUniversal, getEvmClient, getEvmChain, getEvmClientUniversal } from '@1delta/providers';
|
|
10
|
-
import { LiquityTroveManagerAbi, LiquityActivePoolAbi, LiquityStabilityPoolAbi, LiquityPriceFeedAbi, LiquitySortedTrovesAbi, RiverTroveManagerAbi, RiverStabilityPoolAbi, TellerMarketRegistryAbi, TellerV2Abi, InverseMarketAbi, InverseOracleAbi, InverseDbrAbi, Erc20Abi, CoolerMonoAbi, CoolerLtvOracleAbi, LlamaLendControllerAbi, LlamaLendControllerV1Abi, LlamaLendControllerV2Abi, LlamaLendVaultAbi, LlamaLendAmmAbi, TwyneCollateralVaultAbi, MetaMorphoAbi, FluidDexResolverAbi, ExactlyPreviewerAbi, ExactlyAuditorAbi, LenderCommitmentGroupAbi, ResupplyRegistryAbi, ResupplyPairAbi, ResupplyUtilitiesAbi, ResupplyRewardHandlerAbi, ResupplyPairEmissionsAbi, ConvexPoolUtilAbi, FraxlendPairAbi, FraxlendLeverAbi, FrankencoinPositionAbi, FluidLendingResolverAbi, FluidVaultResolverAbi, FluidLiquidityResolverAbi, MoolahVaultAbi, UsddVatAbi, UsddJugAbi, UsddSpotAbi, MorphoLensAbi, AaveV4SpokeAbi, AaveV4OracleAbi, AaveV4HubAbi, DolomiteMarginAbi, GearboxMarketCompressorV310Abi, MorphoBlueAbi, MidnightAbi, TermRepoTokenAbi, TermRepoServicerAbi, TermRepoCollateralManagerAbi, LiquityTroveNFTAbi, LiquityCollSurplusPoolAbi, TellerCollateralManagerAbi, TermMaxViewerAbi, InverseEscrowAbi, CurvanceMarketManagerAbi, CurvanceCTokenAbi, GearboxCreditAccountCompressorV310Abi, TwyneVaultManagerAbi, TwyneCollateralVaultFactoryAbi, AaveV2V3Abi, TwyneATokenWrapperAbi, UsddCdpManagerAbi, UsddProxyRegistryAbi, CurvanceProtocolReaderAbi, CurvanceCentralRegistryAbi, TermPriceConsumerAbi, CurvanceOracleManagerAbi, TermMaxOracleAggregatorV2Abi } from '@1delta/abis';
|
|
10
|
+
import { LiquityTroveManagerAbi, LiquityActivePoolAbi, LiquityStabilityPoolAbi, LiquityPriceFeedAbi, LiquitySortedTrovesAbi, RiverTroveManagerAbi, RiverStabilityPoolAbi, TellerMarketRegistryAbi, TellerV2Abi, InverseMarketAbi, InverseOracleAbi, InverseDbrAbi, Erc20Abi, CoolerMonoAbi, CoolerLtvOracleAbi, LlamaLendControllerAbi, LlamaLendControllerV1Abi, LlamaLendControllerV2Abi, LlamaLendVaultAbi, LlamaLendAmmAbi, TwyneCollateralVaultAbi, MetaMorphoAbi, FluidDexResolverAbi, ExactlyPreviewerAbi, ExactlyAuditorAbi, FlyingTulipLendingLensAbi, LenderCommitmentGroupAbi, ResupplyRegistryAbi, ResupplyPairAbi, ResupplyUtilitiesAbi, ResupplyRewardHandlerAbi, ResupplyPairEmissionsAbi, ConvexPoolUtilAbi, FraxlendPairAbi, FraxlendLeverAbi, FrankencoinPositionAbi, FluidLendingResolverAbi, FluidVaultResolverAbi, FluidLiquidityResolverAbi, MoolahVaultAbi, UsddVatAbi, UsddJugAbi, UsddSpotAbi, MorphoLensAbi, AaveV4SpokeAbi, AaveV4OracleAbi, AaveV4HubAbi, DolomiteMarginAbi, GearboxMarketCompressorV310Abi, MorphoBlueAbi, MidnightAbi, TermRepoTokenAbi, TermRepoServicerAbi, TermRepoCollateralManagerAbi, LiquityTroveNFTAbi, LiquityCollSurplusPoolAbi, TellerCollateralManagerAbi, TermMaxViewerAbi, InverseEscrowAbi, CurvanceMarketManagerAbi, CurvanceCTokenAbi, GearboxCreditAccountCompressorV310Abi, TwyneVaultManagerAbi, TwyneCollateralVaultFactoryAbi, AaveV2V3Abi, TwyneATokenWrapperAbi, UsddCdpManagerAbi, UsddProxyRegistryAbi, CurvanceProtocolReaderAbi, CurvanceCentralRegistryAbi, TermPriceConsumerAbi, CurvanceOracleManagerAbi, TermMaxOracleAggregatorV2Abi } from '@1delta/abis';
|
|
11
11
|
export { MorphoLensAbi } from '@1delta/abis';
|
|
12
|
-
import { prepareDebitDataMulticall, prepareLenderDebitMulticall, parseDebitDataResult, parseLenderDebitResult, getPermit2ContractAddress, getLstAcceptedInputs, getCompoundV3CometAddress as getCompoundV3CometAddress$1, getMorphoAddress, getAaveCollateralTokenAddress, getSiloHalfForUnderlying, findSavingsWithdrawEntry, bandLtvCurve, InitMarginAddresses } from '@1delta/calldata-sdk';
|
|
12
|
+
import { prepareDebitDataMulticall, prepareLenderDebitMulticall, parseDebitDataResult, parseLenderDebitResult, getPermit2ContractAddress, getLstAcceptedInputs, getCompoundV3CometAddress as getCompoundV3CometAddress$1, getMorphoAddress, getAaveCollateralTokenAddress, getSiloHalfForUnderlying, findSavingsWithdrawEntry, bandLtvCurve, InitMarginAddresses, ignoresReceiver, buildLstWithdrawRequest, SAVINGS_RECEIVER_CAPABILITY } from '@1delta/calldata-sdk';
|
|
13
13
|
import { proxyNativeFetch } from '@1delta/proxy-fetch';
|
|
14
14
|
import { BALANCER_V2_FORKS, BALANCER_V3_FORKS, UNISWAP_V4_FORKS, isFlashLoanSourceExcluded, FLASH_LOAN_IDS } from '@1delta/dex-registry';
|
|
15
15
|
|
|
@@ -6444,6 +6444,9 @@ var getLendersForChain = (c) => {
|
|
|
6444
6444
|
if (exactlyConfig()?.[c]?.previewer) {
|
|
6445
6445
|
lenders.push(Lender.EXACTLY);
|
|
6446
6446
|
}
|
|
6447
|
+
for (const l of flyingTulipLendersByChain(c)) {
|
|
6448
|
+
lenders.push(l);
|
|
6449
|
+
}
|
|
6447
6450
|
for (const l of liquityLendersByChain(c)) {
|
|
6448
6451
|
lenders.push(l);
|
|
6449
6452
|
}
|
|
@@ -16661,13 +16664,13 @@ var REPAIR_BACKOFF_JITTER_MS = 60;
|
|
|
16661
16664
|
var sleep = (ms) => new Promise((resolve) => setTimeout(resolve, Math.max(0, ms)));
|
|
16662
16665
|
var backoffForRound = (round) => REPAIR_BACKOFF_BASE_MS * 2 ** round + Math.random() * REPAIR_BACKOFF_JITTER_MS;
|
|
16663
16666
|
var endpointUrl = (client, rpcId) => client?.transport?.url ?? `rpc#${rpcId}`;
|
|
16664
|
-
var resolveEndpoint = (chainId,
|
|
16667
|
+
var resolveEndpoint = (chainId, getEvmClient20, startRpcId, tried, maxProbe = 12, timeoutMs) => {
|
|
16665
16668
|
let fallback = null;
|
|
16666
16669
|
for (let probe = 0; probe < maxProbe; probe++) {
|
|
16667
16670
|
const rpcId = startRpcId + probe;
|
|
16668
16671
|
let client;
|
|
16669
16672
|
try {
|
|
16670
|
-
client =
|
|
16673
|
+
client = getEvmClient20(chainId, rpcId, { timeoutMs });
|
|
16671
16674
|
} catch {
|
|
16672
16675
|
break;
|
|
16673
16676
|
}
|
|
@@ -16696,7 +16699,7 @@ var recordPermanentFailures = (slots, offset, collector) => {
|
|
|
16696
16699
|
if (slots[i].permanent) collector.add(offset + i);
|
|
16697
16700
|
}
|
|
16698
16701
|
};
|
|
16699
|
-
var repairFailedSlots = async (chainId, contracts, slots,
|
|
16702
|
+
var repairFailedSlots = async (chainId, contracts, slots, getEvmClient20, nextRpcId, batchSize, logs, rounds = MULTICALL_REPAIR_ROUNDS, options) => {
|
|
16700
16703
|
let searchFrom = nextRpcId;
|
|
16701
16704
|
for (let round = 0; round < rounds; round++) {
|
|
16702
16705
|
const failedIdx = [];
|
|
@@ -16706,7 +16709,7 @@ var repairFailedSlots = async (chainId, contracts, slots, getEvmClient19, nextRp
|
|
|
16706
16709
|
if (failedIdx.length === 0) return slots;
|
|
16707
16710
|
const endpoint = resolveEndpoint(
|
|
16708
16711
|
chainId,
|
|
16709
|
-
|
|
16712
|
+
getEvmClient20,
|
|
16710
16713
|
searchFrom,
|
|
16711
16714
|
options?.tried
|
|
16712
16715
|
);
|
|
@@ -16758,7 +16761,7 @@ var repairFailedSlots = async (chainId, contracts, slots, getEvmClient19, nextRp
|
|
|
16758
16761
|
}
|
|
16759
16762
|
return slots;
|
|
16760
16763
|
};
|
|
16761
|
-
var multicallShardedAbiArray = async (chainId, abi, calls,
|
|
16764
|
+
var multicallShardedAbiArray = async (chainId, abi, calls, getEvmClient20, poolSize, retries = maxRetries, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, logs = false, retryFailed = false, permanentFailures, options) => {
|
|
16762
16765
|
const abiIsArray = isArray(abi[0]);
|
|
16763
16766
|
const contracts = calls.map(({ address, name, params }, i) => ({
|
|
16764
16767
|
abi: abiIsArray ? abi?.[i] : abi,
|
|
@@ -16832,7 +16835,7 @@ var multicallShardedAbiArray = async (chainId, abi, calls, getEvmClient19, poolS
|
|
|
16832
16835
|
const attemptHedged = async (items, startRpcId, tried) => {
|
|
16833
16836
|
const primary = resolveEndpoint(
|
|
16834
16837
|
chainId,
|
|
16835
|
-
|
|
16838
|
+
getEvmClient20,
|
|
16836
16839
|
startRpcId,
|
|
16837
16840
|
tried,
|
|
16838
16841
|
12,
|
|
@@ -16856,7 +16859,7 @@ var multicallShardedAbiArray = async (chainId, abi, calls, getEvmClient19, poolS
|
|
|
16856
16859
|
clearTimeout(timer);
|
|
16857
16860
|
const alt = resolveEndpoint(
|
|
16858
16861
|
chainId,
|
|
16859
|
-
|
|
16862
|
+
getEvmClient20,
|
|
16860
16863
|
primary.rpcId + 1,
|
|
16861
16864
|
tried,
|
|
16862
16865
|
12,
|
|
@@ -16908,7 +16911,7 @@ var multicallShardedAbiArray = async (chainId, abi, calls, getEvmClient19, poolS
|
|
|
16908
16911
|
chainId,
|
|
16909
16912
|
batch.items,
|
|
16910
16913
|
slots,
|
|
16911
|
-
|
|
16914
|
+
getEvmClient20,
|
|
16912
16915
|
won.rpcId + 1,
|
|
16913
16916
|
requestBytes,
|
|
16914
16917
|
logs,
|
|
@@ -16930,7 +16933,7 @@ var multicallShardedAbiArray = async (chainId, abi, calls, getEvmClient19, poolS
|
|
|
16930
16933
|
const tried = /* @__PURE__ */ new Set();
|
|
16931
16934
|
const start = resolveEndpoint(
|
|
16932
16935
|
chainId,
|
|
16933
|
-
|
|
16936
|
+
getEvmClient20,
|
|
16934
16937
|
workerId,
|
|
16935
16938
|
void 0,
|
|
16936
16939
|
12,
|
|
@@ -22658,6 +22661,231 @@ function convertExactlyMarketsToResponse(raw, chainId, prices = {}, _additionalY
|
|
|
22658
22661
|
out[lenderKey] = entry;
|
|
22659
22662
|
return out;
|
|
22660
22663
|
}
|
|
22664
|
+
|
|
22665
|
+
// src/lending/public-data/flying-tulip/convertPublic.ts
|
|
22666
|
+
var FLYING_TULIP_LENDER_KEY = "FLYING_TULIP";
|
|
22667
|
+
function toHuman2(raw, decimals) {
|
|
22668
|
+
return Number(raw) / 10 ** decimals;
|
|
22669
|
+
}
|
|
22670
|
+
function currencyFor4(address, decimals, symbol, name, tokens) {
|
|
22671
|
+
const lower4 = address.toLowerCase();
|
|
22672
|
+
return tokens[lower4] ?? { address: lower4, symbol, name, decimals };
|
|
22673
|
+
}
|
|
22674
|
+
function convertFlyingTulipMarketsToResponse(raw, chainId, prices = {}, _additionalYields = {
|
|
22675
|
+
intrinsicYields: {},
|
|
22676
|
+
lenderRewards: {},
|
|
22677
|
+
loaded: true
|
|
22678
|
+
}, tokens = {}) {
|
|
22679
|
+
const out = {};
|
|
22680
|
+
const assets = raw?.assets ?? [];
|
|
22681
|
+
if (assets.length === 0) return out;
|
|
22682
|
+
const lenderKey = FLYING_TULIP_LENDER_KEY;
|
|
22683
|
+
const hfSafe = raw.hfSafeBps / 1e4;
|
|
22684
|
+
const hfTgt = raw.hfTargetBps / 1e4;
|
|
22685
|
+
const entry = { data: {} };
|
|
22686
|
+
for (const a of assets) {
|
|
22687
|
+
const assetAddr = a.address;
|
|
22688
|
+
const decimals = a.decimals;
|
|
22689
|
+
const token = tokens[assetAddr];
|
|
22690
|
+
const priceKey = toOracleKey(token?.assetGroup) || toGenericPriceKey(assetAddr, chainId);
|
|
22691
|
+
const price2 = (a.priceWad != null ? Number(a.priceWad) / 1e18 : 0) || (prices[priceKey] ?? 0);
|
|
22692
|
+
const totalDeposits = toHuman2(a.cash + a.borrows - a.reserves, decimals);
|
|
22693
|
+
const totalDebt = toHuman2(a.borrows, decimals);
|
|
22694
|
+
const borrowLiquidity = toHuman2(a.cash, decimals);
|
|
22695
|
+
const utilization = Number(a.utilWad) / 1e18;
|
|
22696
|
+
const mm = a.mmBps / 1e4;
|
|
22697
|
+
const borrowCollateralFactor = Math.max(0, 1 - hfSafe * mm);
|
|
22698
|
+
const collateralFactor = Math.max(0, 1 - hfTgt * mm);
|
|
22699
|
+
const borrowFactor = 1 / (1 + hfSafe * mm);
|
|
22700
|
+
const variableBorrowRate = a.borrowAprWad != null ? Number(a.borrowAprWad) / 1e18 * 100 : 0;
|
|
22701
|
+
const borrowingEnabled = a.enabled && a.borrowable && !a.borrowPaused;
|
|
22702
|
+
const collateralActive = a.enabled && a.isCollateral;
|
|
22703
|
+
const loanUid = createMarketUid(chainId, lenderKey, assetAddr);
|
|
22704
|
+
entry.data[loanUid] = {
|
|
22705
|
+
marketUid: loanUid,
|
|
22706
|
+
name: a.symbol,
|
|
22707
|
+
poolId: raw.positionsManager,
|
|
22708
|
+
underlying: assetAddr,
|
|
22709
|
+
asset: currencyFor4(assetAddr, decimals, a.symbol, a.name, tokens),
|
|
22710
|
+
totalDeposits,
|
|
22711
|
+
totalDebtStable: 0,
|
|
22712
|
+
totalDebt,
|
|
22713
|
+
totalLiquidity: borrowLiquidity,
|
|
22714
|
+
borrowLiquidity,
|
|
22715
|
+
totalLiquidityUSD: borrowLiquidity * price2,
|
|
22716
|
+
borrowLiquidityUSD: borrowLiquidity * price2,
|
|
22717
|
+
totalDepositsUSD: totalDeposits * price2,
|
|
22718
|
+
totalDebtStableUSD: 0,
|
|
22719
|
+
totalDebtUSD: totalDebt * price2,
|
|
22720
|
+
utilization,
|
|
22721
|
+
// Supply leg = borrow × utilization, no reserve factor. Reproduces Flying
|
|
22722
|
+
// Tulip's own "Deposit APY" column exactly — see the doc comment for the
|
|
22723
|
+
// 6/6 verification and for why this is an APR despite their label.
|
|
22724
|
+
depositRate: variableBorrowRate * utilization,
|
|
22725
|
+
variableBorrowRate,
|
|
22726
|
+
stableBorrowRate: 0,
|
|
22727
|
+
intrinsicYield: 0,
|
|
22728
|
+
rewards: void 0,
|
|
22729
|
+
decimals,
|
|
22730
|
+
config: {
|
|
22731
|
+
0: {
|
|
22732
|
+
category: 0,
|
|
22733
|
+
borrowCollateralFactor,
|
|
22734
|
+
collateralFactor,
|
|
22735
|
+
borrowFactor,
|
|
22736
|
+
// Liquidation is a permissioned RFQ fill (no fixed on-chain bonus).
|
|
22737
|
+
liquidationPenalty: 0,
|
|
22738
|
+
closeFactor: 1,
|
|
22739
|
+
collateralDisabled: !collateralActive,
|
|
22740
|
+
debtDisabled: !borrowingEnabled
|
|
22741
|
+
}
|
|
22742
|
+
},
|
|
22743
|
+
closeFactor: 1,
|
|
22744
|
+
collateralActive,
|
|
22745
|
+
borrowingEnabled,
|
|
22746
|
+
depositsEnabled: a.enabled && !a.depositPaused,
|
|
22747
|
+
hasStable: false,
|
|
22748
|
+
variableBorrowDisabled: !borrowingEnabled,
|
|
22749
|
+
isActive: a.enabled,
|
|
22750
|
+
isFrozen: !a.enabled,
|
|
22751
|
+
// Per-asset Flying Tulip extras (caps are raw base units).
|
|
22752
|
+
flyingTulip: {
|
|
22753
|
+
irm: a.irm,
|
|
22754
|
+
mmBps: a.mmBps,
|
|
22755
|
+
supplyCap: a.supplyCap.toString(),
|
|
22756
|
+
borrowCap: a.borrowCap.toString(),
|
|
22757
|
+
withdrawPaused: a.withdrawPaused,
|
|
22758
|
+
// FT itself: oracle-unpriceable, `collateral: false, mmBps: 0` — it
|
|
22759
|
+
// contributes nothing to equity/maintenance and must never become a
|
|
22760
|
+
// collateral row.
|
|
22761
|
+
unpriceable: !a.priceable
|
|
22762
|
+
}
|
|
22763
|
+
};
|
|
22764
|
+
}
|
|
22765
|
+
entry.params = {
|
|
22766
|
+
market: {
|
|
22767
|
+
lender: lenderKey,
|
|
22768
|
+
name: "Flying Tulip",
|
|
22769
|
+
id: raw.positionsManager,
|
|
22770
|
+
// No market-level LLTV: risk is per-asset and pair LTV multiplicative.
|
|
22771
|
+
lltv: "0",
|
|
22772
|
+
oracle: raw.oracleRouter || zeroAddress,
|
|
22773
|
+
irm: zeroAddress,
|
|
22774
|
+
collateralAddress: zeroAddress,
|
|
22775
|
+
loanAddress: zeroAddress,
|
|
22776
|
+
flyingTulip: {
|
|
22777
|
+
hfSafeBps: raw.hfSafeBps,
|
|
22778
|
+
hfTargetBps: raw.hfTargetBps,
|
|
22779
|
+
// PER CHAIN ($250 Ethereum / $10 Sonic) — read, never pinned.
|
|
22780
|
+
minEquityUSDWad: raw.minEquityUSDWad
|
|
22781
|
+
}
|
|
22782
|
+
}
|
|
22783
|
+
};
|
|
22784
|
+
entry.chainId = chainId;
|
|
22785
|
+
out[lenderKey] = entry;
|
|
22786
|
+
return out;
|
|
22787
|
+
}
|
|
22788
|
+
|
|
22789
|
+
// src/lending/public-data/flying-tulip/fetchPublic.ts
|
|
22790
|
+
var EMPTY = {
|
|
22791
|
+
hfSafeBps: 0,
|
|
22792
|
+
hfTargetBps: 0,
|
|
22793
|
+
minEquityUSDWad: "0",
|
|
22794
|
+
positionsManager: "",
|
|
22795
|
+
oracleRouter: "",
|
|
22796
|
+
assets: []
|
|
22797
|
+
};
|
|
22798
|
+
var big = (v) => {
|
|
22799
|
+
try {
|
|
22800
|
+
return v == null ? null : BigInt(v);
|
|
22801
|
+
} catch {
|
|
22802
|
+
return null;
|
|
22803
|
+
}
|
|
22804
|
+
};
|
|
22805
|
+
async function fetchFlyingTulipMarkets(chainId) {
|
|
22806
|
+
const lender = FLYING_TULIP_LENDER_KEY;
|
|
22807
|
+
const cfg = flyingTulipConfigFor(lender, chainId);
|
|
22808
|
+
const roster = flyingTulipAssetsFor(lender, chainId);
|
|
22809
|
+
const lens = cfg?.lendingLens;
|
|
22810
|
+
const assets = roster?.assets ?? [];
|
|
22811
|
+
if (!lens || assets.length === 0) return EMPTY;
|
|
22812
|
+
const CALLS_PER_ASSET = 8;
|
|
22813
|
+
const calls = assets.flatMap((a) => [
|
|
22814
|
+
{ address: lens, name: "assetState", params: [a.address] },
|
|
22815
|
+
{ address: lens, name: "assetCfg", params: [a.address] },
|
|
22816
|
+
{ address: lens, name: "supplyCap", params: [a.address] },
|
|
22817
|
+
{ address: lens, name: "borrowCap", params: [a.address] },
|
|
22818
|
+
{ address: lens, name: "depositPaused", params: [a.address] },
|
|
22819
|
+
{ address: lens, name: "withdrawPaused", params: [a.address] },
|
|
22820
|
+
{ address: lens, name: "borrowPaused", params: [a.address] },
|
|
22821
|
+
{ address: lens, name: "priceAndDecimals", params: [a.address] }
|
|
22822
|
+
]);
|
|
22823
|
+
let results;
|
|
22824
|
+
try {
|
|
22825
|
+
results = await multicallRetryUniversal({
|
|
22826
|
+
chain: chainId,
|
|
22827
|
+
calls,
|
|
22828
|
+
abi: FlyingTulipLendingLensAbi,
|
|
22829
|
+
allowFailure: true
|
|
22830
|
+
});
|
|
22831
|
+
} catch {
|
|
22832
|
+
return EMPTY;
|
|
22833
|
+
}
|
|
22834
|
+
const rows = assets.map((a, i) => {
|
|
22835
|
+
const o = i * CALLS_PER_ASSET;
|
|
22836
|
+
const state = results[o];
|
|
22837
|
+
const acfg = results[o + 1];
|
|
22838
|
+
const px = results[o + 7];
|
|
22839
|
+
return {
|
|
22840
|
+
address: a.address.toLowerCase(),
|
|
22841
|
+
symbol: a.symbol,
|
|
22842
|
+
name: a.name,
|
|
22843
|
+
decimals: a.decimals,
|
|
22844
|
+
irm: (acfg?.[0] ? String(acfg[0]) : a.irm).toLowerCase(),
|
|
22845
|
+
mmBps: acfg ? Number(acfg[1]) : a.mmBps,
|
|
22846
|
+
enabled: acfg ? Boolean(acfg[2]) : a.enabled,
|
|
22847
|
+
borrowable: acfg ? Boolean(acfg[3]) : a.borrowable,
|
|
22848
|
+
isCollateral: acfg ? Boolean(acfg[4]) : a.collateral,
|
|
22849
|
+
supplyCap: big(results[o + 2]) ?? BigInt(a.supplyCap),
|
|
22850
|
+
borrowCap: big(results[o + 3]) ?? BigInt(a.borrowCap),
|
|
22851
|
+
depositPaused: results[o + 4] == null ? a.depositPaused : Boolean(results[o + 4]),
|
|
22852
|
+
withdrawPaused: results[o + 5] == null ? a.withdrawPaused : Boolean(results[o + 5]),
|
|
22853
|
+
borrowPaused: results[o + 6] == null ? a.borrowPaused : Boolean(results[o + 6]),
|
|
22854
|
+
priceable: a.priceable,
|
|
22855
|
+
priceWad: big(px?.[0]),
|
|
22856
|
+
cash: big(state?.[0]) ?? 0n,
|
|
22857
|
+
borrows: big(state?.[1]) ?? 0n,
|
|
22858
|
+
reserves: big(state?.[2]) ?? 0n,
|
|
22859
|
+
utilWad: big(state?.[3]) ?? 0n,
|
|
22860
|
+
borrowAprWad: null
|
|
22861
|
+
};
|
|
22862
|
+
});
|
|
22863
|
+
try {
|
|
22864
|
+
const aprResults = await multicallRetryUniversal({
|
|
22865
|
+
chain: chainId,
|
|
22866
|
+
calls: rows.map((r) => ({
|
|
22867
|
+
address: lens,
|
|
22868
|
+
name: "irmSampleAPR",
|
|
22869
|
+
params: [r.irm, [r.utilWad]]
|
|
22870
|
+
})),
|
|
22871
|
+
abi: FlyingTulipLendingLensAbi,
|
|
22872
|
+
allowFailure: true
|
|
22873
|
+
});
|
|
22874
|
+
rows.forEach((r, i) => {
|
|
22875
|
+
const arr = aprResults[i];
|
|
22876
|
+
r.borrowAprWad = Array.isArray(arr) ? big(arr[0]) : null;
|
|
22877
|
+
});
|
|
22878
|
+
} catch {
|
|
22879
|
+
}
|
|
22880
|
+
return {
|
|
22881
|
+
hfSafeBps: roster?.marginHfSafeBps ?? 15e3,
|
|
22882
|
+
hfTargetBps: roster?.marginHfTargetBps ?? 12500,
|
|
22883
|
+
minEquityUSDWad: roster?.marginMinEquityUSDWad ?? "0",
|
|
22884
|
+
positionsManager: (cfg?.positionsManager ?? "").toLowerCase(),
|
|
22885
|
+
oracleRouter: (cfg?.oracleRouter ?? "").toLowerCase(),
|
|
22886
|
+
assets: rows
|
|
22887
|
+
};
|
|
22888
|
+
}
|
|
22661
22889
|
var READS_PER_BRANCH = 8;
|
|
22662
22890
|
var LIQUITY_PUBLIC_READ_ABI = [
|
|
22663
22891
|
...LiquityTroveManagerAbi,
|
|
@@ -22736,10 +22964,10 @@ function liquityCollateralPrice(raw, collDecimals, priceDecimals) {
|
|
|
22736
22964
|
const adjusted = Number(raw) / 10 ** (36 - collDecimals);
|
|
22737
22965
|
return adjusted <= MAX_PLAUSIBLE_UNIT_USD ? adjusted : 0;
|
|
22738
22966
|
}
|
|
22739
|
-
function
|
|
22967
|
+
function toHuman3(raw, decimals) {
|
|
22740
22968
|
return Number(raw) / 10 ** decimals;
|
|
22741
22969
|
}
|
|
22742
|
-
function
|
|
22970
|
+
function currencyFor5(address, decimals, symbol, tokens) {
|
|
22743
22971
|
const lower4 = address.toLowerCase();
|
|
22744
22972
|
return tokens[lower4] ?? { address: lower4, symbol, name: symbol, decimals };
|
|
22745
22973
|
}
|
|
@@ -22768,9 +22996,9 @@ function convertLiquityMarketsToResponse(raw, chainId, prices = {}, _additionalY
|
|
|
22768
22996
|
const marketName2 = branch.name ?? `${stableSymbol} / ${collSymbol}`;
|
|
22769
22997
|
const collPriceKey = toOracleKey(collToken?.assetGroup) || toGenericPriceKey(collAddr, chainId);
|
|
22770
22998
|
const collPrice = liquityCollateralPrice(b.collPrice, collDecimals, branch.priceDecimals) || (prices[collPriceKey] ?? 0);
|
|
22771
|
-
const entireDebt = b.entireDebt !== null ?
|
|
22772
|
-
const entireColl = b.entireColl !== null ?
|
|
22773
|
-
const spDeposits = b.spDeposits !== null ?
|
|
22999
|
+
const entireDebt = b.entireDebt !== null ? toHuman3(b.entireDebt, stableDecimals) : 0;
|
|
23000
|
+
const entireColl = b.entireColl !== null ? toHuman3(b.entireColl, collDecimals) : 0;
|
|
23001
|
+
const spDeposits = b.spDeposits !== null ? toHuman3(b.spDeposits, stableDecimals) : 0;
|
|
22774
23002
|
const shutdown = b.shutdownTime !== null && b.shutdownTime > 0n;
|
|
22775
23003
|
const avgRate = b.aggWeightedDebtSum !== null && b.aggRecordedDebt !== null && b.aggRecordedDebt > 0n ? Number(b.aggWeightedDebtSum / b.aggRecordedDebt) / WAD6 : 0;
|
|
22776
23004
|
const annualInterest = b.aggWeightedDebtSum !== null ? Number(b.aggWeightedDebtSum) / WAD6 / 10 ** stableDecimals : 0;
|
|
@@ -22807,7 +23035,7 @@ function convertLiquityMarketsToResponse(raw, chainId, prices = {}, _additionalY
|
|
|
22807
23035
|
name: "Collateral " + collSymbol,
|
|
22808
23036
|
poolId: branch.troveManager.toLowerCase(),
|
|
22809
23037
|
underlying: collAddr,
|
|
22810
|
-
asset:
|
|
23038
|
+
asset: currencyFor5(collAddr, collDecimals, collSymbol, tokens),
|
|
22811
23039
|
totalDeposits: entireColl,
|
|
22812
23040
|
totalDebtStable: 0,
|
|
22813
23041
|
totalDebt: 0,
|
|
@@ -22862,7 +23090,7 @@ function convertLiquityMarketsToResponse(raw, chainId, prices = {}, _additionalY
|
|
|
22862
23090
|
name: stableSymbol,
|
|
22863
23091
|
poolId: branch.stabilityPool.toLowerCase(),
|
|
22864
23092
|
underlying: stableAddr,
|
|
22865
|
-
asset:
|
|
23093
|
+
asset: currencyFor5(stableAddr, stableDecimals, stableSymbol, tokens),
|
|
22866
23094
|
totalDeposits: spDeposits,
|
|
22867
23095
|
totalDebtStable: 0,
|
|
22868
23096
|
totalDebt: entireDebt,
|
|
@@ -23037,10 +23265,10 @@ function riverKeyParts(key3) {
|
|
|
23037
23265
|
return { lender: "RIVER", chainId: m[1], index: Number(m[2]) };
|
|
23038
23266
|
}
|
|
23039
23267
|
var WAD7 = 1e18;
|
|
23040
|
-
function
|
|
23268
|
+
function toHuman4(raw, decimals) {
|
|
23041
23269
|
return Number(raw) / 10 ** decimals;
|
|
23042
23270
|
}
|
|
23043
|
-
function
|
|
23271
|
+
function currencyFor6(address, decimals, symbol, tokens) {
|
|
23044
23272
|
const lower4 = address.toLowerCase();
|
|
23045
23273
|
return tokens[lower4] ?? { address: lower4, symbol, name: symbol, decimals };
|
|
23046
23274
|
}
|
|
@@ -23059,7 +23287,7 @@ function convertRiverMarketsToResponse(raw, chainId, prices = {}, _additionalYie
|
|
|
23059
23287
|
const debtSymbol = debtToken?.symbol ?? "satUSD";
|
|
23060
23288
|
const debtPriceKey = toOracleKey(debtToken?.assetGroup) || toGenericPriceKey(debtAddr, chainId);
|
|
23061
23289
|
const debtPrice = prices[debtPriceKey] || 1;
|
|
23062
|
-
const spDeposits = raw.spDeposits !== null ?
|
|
23290
|
+
const spDeposits = raw.spDeposits !== null ? toHuman4(raw.spDeposits, debtDecimals) : 0;
|
|
23063
23291
|
for (const m of raw.markets ?? []) {
|
|
23064
23292
|
const market = m.market;
|
|
23065
23293
|
const lenderKey = riverLenderKey(raw.lender, chainId, market.index);
|
|
@@ -23070,8 +23298,8 @@ function convertRiverMarketsToResponse(raw, chainId, prices = {}, _additionalYie
|
|
|
23070
23298
|
const marketName2 = market.name ?? `${debtSymbol} / ${collSymbol}`;
|
|
23071
23299
|
const collPriceKey = toOracleKey(collToken?.assetGroup) || toGenericPriceKey(collAddr, chainId);
|
|
23072
23300
|
const collPrice = (m.price !== null ? Number(m.price) / WAD7 : 0) || (prices[collPriceKey] ?? 0);
|
|
23073
|
-
const entireDebt = m.entireDebt !== null ?
|
|
23074
|
-
const entireColl = m.entireColl !== null ?
|
|
23301
|
+
const entireDebt = m.entireDebt !== null ? toHuman4(m.entireDebt, debtDecimals) : 0;
|
|
23302
|
+
const entireColl = m.entireColl !== null ? toHuman4(m.entireColl, collDecimals) : 0;
|
|
23075
23303
|
const halted = !!market.paused || !!market.sunsetting;
|
|
23076
23304
|
const mcr = Number(market.mcr) / WAD7 || 1.1;
|
|
23077
23305
|
const ltv = 1 / mcr;
|
|
@@ -23093,7 +23321,7 @@ function convertRiverMarketsToResponse(raw, chainId, prices = {}, _additionalYie
|
|
|
23093
23321
|
name: "Collateral " + collSymbol,
|
|
23094
23322
|
poolId: market.troveManager.toLowerCase(),
|
|
23095
23323
|
underlying: collAddr,
|
|
23096
|
-
asset:
|
|
23324
|
+
asset: currencyFor6(collAddr, collDecimals, collSymbol, tokens),
|
|
23097
23325
|
totalDeposits: entireColl,
|
|
23098
23326
|
totalDebtStable: 0,
|
|
23099
23327
|
totalDebt: 0,
|
|
@@ -23137,7 +23365,7 @@ function convertRiverMarketsToResponse(raw, chainId, prices = {}, _additionalYie
|
|
|
23137
23365
|
name: debtSymbol,
|
|
23138
23366
|
poolId: cfg.xapp.toLowerCase(),
|
|
23139
23367
|
underlying: debtAddr,
|
|
23140
|
-
asset:
|
|
23368
|
+
asset: currencyFor6(debtAddr, debtDecimals, debtSymbol, tokens),
|
|
23141
23369
|
totalDeposits: spHere,
|
|
23142
23370
|
totalDebtStable: 0,
|
|
23143
23371
|
totalDebt: entireDebt,
|
|
@@ -23271,7 +23499,7 @@ async function fetchTellerMarkets(chainId) {
|
|
|
23271
23499
|
} catch {
|
|
23272
23500
|
return { chainId, pools: [] };
|
|
23273
23501
|
}
|
|
23274
|
-
const
|
|
23502
|
+
const big23 = (i) => {
|
|
23275
23503
|
const r = results[i];
|
|
23276
23504
|
if (typeof r === "bigint") return r;
|
|
23277
23505
|
if (typeof r === "number") return BigInt(r);
|
|
@@ -23285,20 +23513,20 @@ async function fetchTellerMarkets(chainId) {
|
|
|
23285
23513
|
return null;
|
|
23286
23514
|
};
|
|
23287
23515
|
const num19 = (i) => {
|
|
23288
|
-
const b =
|
|
23516
|
+
const b = big23(i);
|
|
23289
23517
|
return b === null ? null : Number(b);
|
|
23290
23518
|
};
|
|
23291
23519
|
const pool0 = pools.map((config, i) => {
|
|
23292
23520
|
const base = i * READS_PER_POOL;
|
|
23293
23521
|
return {
|
|
23294
23522
|
config,
|
|
23295
|
-
available:
|
|
23296
|
-
committed:
|
|
23523
|
+
available: big23(base),
|
|
23524
|
+
committed: big23(base + 1),
|
|
23297
23525
|
minRateBps: num19(base + 2),
|
|
23298
|
-
collateralPerPrincipal:
|
|
23526
|
+
collateralPerPrincipal: big23(base + 3),
|
|
23299
23527
|
maxLoanDuration: num19(base + 4),
|
|
23300
|
-
marketId:
|
|
23301
|
-
totalAssets:
|
|
23528
|
+
marketId: big23(base + 5),
|
|
23529
|
+
totalAssets: big23(base + 6)
|
|
23302
23530
|
};
|
|
23303
23531
|
});
|
|
23304
23532
|
const attByMarket = /* @__PURE__ */ new Map();
|
|
@@ -23774,7 +24002,7 @@ function tellerPoolFromLenderKey(lender) {
|
|
|
23774
24002
|
const body = lender.slice("TELLER_".length);
|
|
23775
24003
|
return body.length === 40 ? "0x" + body.toLowerCase() : void 0;
|
|
23776
24004
|
}
|
|
23777
|
-
function
|
|
24005
|
+
function currencyFor7(address, decimals, symbol, tokens) {
|
|
23778
24006
|
const lower4 = address.toLowerCase();
|
|
23779
24007
|
return tokens[lower4] ?? { address: lower4, symbol, name: symbol, decimals };
|
|
23780
24008
|
}
|
|
@@ -23838,7 +24066,7 @@ function convertTellerMarketsToResponse(raw, chainId, prices = {}, _additionalYi
|
|
|
23838
24066
|
name: cfg.principalSymbol,
|
|
23839
24067
|
poolId: cfg.pool.toLowerCase(),
|
|
23840
24068
|
underlying: principalAddr,
|
|
23841
|
-
asset:
|
|
24069
|
+
asset: currencyFor7(
|
|
23842
24070
|
principalAddr,
|
|
23843
24071
|
cfg.principalDecimals,
|
|
23844
24072
|
cfg.principalSymbol,
|
|
@@ -23895,7 +24123,7 @@ function convertTellerMarketsToResponse(raw, chainId, prices = {}, _additionalYi
|
|
|
23895
24123
|
name: "Collateral " + cfg.collateralSymbol,
|
|
23896
24124
|
poolId: cfg.pool.toLowerCase(),
|
|
23897
24125
|
underlying: collateralAddr,
|
|
23898
|
-
asset:
|
|
24126
|
+
asset: currencyFor7(
|
|
23899
24127
|
collateralAddr,
|
|
23900
24128
|
cfg.collateralDecimals,
|
|
23901
24129
|
cfg.collateralSymbol,
|
|
@@ -24120,7 +24348,7 @@ function termMaxLtvToWad(v) {
|
|
|
24120
24348
|
|
|
24121
24349
|
// src/lending/public-data/termmax/convertPublic.ts
|
|
24122
24350
|
var nowSec4 = () => Math.floor(Date.now() / 1e3);
|
|
24123
|
-
function
|
|
24351
|
+
function currencyFor8(address, decimals, tokens) {
|
|
24124
24352
|
const lower4 = address.toLowerCase();
|
|
24125
24353
|
return tokens[lower4] ?? {
|
|
24126
24354
|
address: lower4,
|
|
@@ -24180,7 +24408,7 @@ function convertTermMaxMarketsToResponse(raw, chainId, prices = {}, _additionalY
|
|
|
24180
24408
|
name: "Loan " + (tokens[debtAddr]?.symbol ?? ""),
|
|
24181
24409
|
poolId: debtAddr,
|
|
24182
24410
|
underlying: debtAddr,
|
|
24183
|
-
asset:
|
|
24411
|
+
asset: currencyFor8(debtAddr, config.debtDecimals, tokens),
|
|
24184
24412
|
totalDeposits: supplyLiquidity,
|
|
24185
24413
|
totalDebtStable: 0,
|
|
24186
24414
|
totalDebt: 0,
|
|
@@ -24264,7 +24492,7 @@ function convertTermMaxMarketsToResponse(raw, chainId, prices = {}, _additionalY
|
|
|
24264
24492
|
name: "Collateral " + (tokens[collAddr]?.symbol ?? ""),
|
|
24265
24493
|
poolId: collAddr,
|
|
24266
24494
|
underlying: collAddr,
|
|
24267
|
-
asset:
|
|
24495
|
+
asset: currencyFor8(collAddr, config.collateralDecimals, tokens),
|
|
24268
24496
|
totalDeposits: collCapacity,
|
|
24269
24497
|
totalDebtStable: 0,
|
|
24270
24498
|
totalDebt: 0,
|
|
@@ -24545,7 +24773,7 @@ var COOLER_PUBLIC_READ_ABI = [
|
|
|
24545
24773
|
...CoolerLtvOracleAbi,
|
|
24546
24774
|
...SUSDS_MAX_WITHDRAW_ABI
|
|
24547
24775
|
];
|
|
24548
|
-
var
|
|
24776
|
+
var big2 = (v) => {
|
|
24549
24777
|
try {
|
|
24550
24778
|
if (typeof v === "bigint") return v;
|
|
24551
24779
|
if (typeof v === "number") return BigInt(v);
|
|
@@ -24599,33 +24827,33 @@ async function fetchCoolerMarkets(lender, chainId) {
|
|
|
24599
24827
|
allowFailure: true
|
|
24600
24828
|
});
|
|
24601
24829
|
const ltvs = results[3];
|
|
24602
|
-
const oltvPrice = Array.isArray(ltvs) ?
|
|
24603
|
-
const lltvPrice = Array.isArray(ltvs) ?
|
|
24830
|
+
const oltvPrice = Array.isArray(ltvs) ? big2(ltvs[0]) : null;
|
|
24831
|
+
const lltvPrice = Array.isArray(ltvs) ? big2(ltvs[1]) : null;
|
|
24604
24832
|
const dripRaw = results[9];
|
|
24605
24833
|
let drip = null;
|
|
24606
24834
|
if (Array.isArray(dripRaw) && dripRaw.length >= 5) {
|
|
24607
|
-
const [startingValue, startTime, targetValue, targetTime, slope] = dripRaw.map(
|
|
24835
|
+
const [startingValue, startTime, targetValue, targetTime, slope] = dripRaw.map(big2);
|
|
24608
24836
|
if (startingValue !== null && startTime !== null && targetValue !== null && targetTime !== null && slope !== null) {
|
|
24609
24837
|
drip = { startingValue, startTime, targetValue, targetTime, slope };
|
|
24610
24838
|
}
|
|
24611
24839
|
}
|
|
24612
|
-
const premium =
|
|
24840
|
+
const premium = big2(results[10]);
|
|
24613
24841
|
return {
|
|
24614
24842
|
lender,
|
|
24615
24843
|
config,
|
|
24616
|
-
totalCollateral:
|
|
24617
|
-
totalDebt:
|
|
24618
|
-
interestRateWad:
|
|
24844
|
+
totalCollateral: big2(results[0]),
|
|
24845
|
+
totalDebt: big2(results[1]),
|
|
24846
|
+
interestRateWad: big2(results[2]),
|
|
24619
24847
|
oltvPrice,
|
|
24620
24848
|
lltvPrice,
|
|
24621
|
-
minDebtRequired:
|
|
24849
|
+
minDebtRequired: big2(results[4]),
|
|
24622
24850
|
borrowsPaused: typeof results[5] === "boolean" ? results[5] : null,
|
|
24623
24851
|
liquidationsPaused: typeof results[6] === "boolean" ? results[6] : null,
|
|
24624
24852
|
debtToken: typeof results[7] === "string" && results[7].startsWith("0x") ? results[7] : null,
|
|
24625
24853
|
collateralToken: typeof results[8] === "string" && results[8].startsWith("0x") ? results[8] : null,
|
|
24626
24854
|
drip,
|
|
24627
24855
|
liquidationLtvPremiumBps: premium !== null ? Number(premium) : null,
|
|
24628
|
-
susdsHeadroom:
|
|
24856
|
+
susdsHeadroom: big2(results[11]),
|
|
24629
24857
|
source: "chain"
|
|
24630
24858
|
};
|
|
24631
24859
|
} catch {
|
|
@@ -24925,7 +25153,7 @@ var STATE_READS = 14;
|
|
|
24925
25153
|
var ONE = 10n ** 18n;
|
|
24926
25154
|
var identityCache = /* @__PURE__ */ new Map();
|
|
24927
25155
|
var identityKey = (chainId, pair) => `${chainId}:${pair.toLowerCase()}`;
|
|
24928
|
-
var
|
|
25156
|
+
var big3 = (v) => {
|
|
24929
25157
|
if (typeof v === "bigint") return v;
|
|
24930
25158
|
if (typeof v === "number") return BigInt(v);
|
|
24931
25159
|
return null;
|
|
@@ -25134,28 +25362,28 @@ async function fetchResupplyMarkets(lender, chainId) {
|
|
|
25134
25362
|
const accounting = results[base + 5];
|
|
25135
25363
|
const rateInfo = results[base + 6];
|
|
25136
25364
|
const exchangeInfo = results[base + 7];
|
|
25137
|
-
const tuple = (v, idx) => Array.isArray(v) ?
|
|
25365
|
+
const tuple = (v, idx) => Array.isArray(v) ? big3(v[idx]) : null;
|
|
25138
25366
|
return {
|
|
25139
25367
|
identity,
|
|
25140
|
-
maxLTV:
|
|
25141
|
-
borrowLimit:
|
|
25142
|
-
liquidationFee:
|
|
25143
|
-
mintFee:
|
|
25144
|
-
minimumBorrowAmount:
|
|
25368
|
+
maxLTV: big3(results[base]),
|
|
25369
|
+
borrowLimit: big3(results[base + 1]),
|
|
25370
|
+
liquidationFee: big3(results[base + 2]),
|
|
25371
|
+
mintFee: big3(results[base + 3]),
|
|
25372
|
+
minimumBorrowAmount: big3(results[base + 4]),
|
|
25145
25373
|
totalBorrowAmount: tuple(accounting, 1),
|
|
25146
25374
|
totalBorrowShares: tuple(accounting, 2),
|
|
25147
25375
|
totalCollateral: tuple(accounting, 3),
|
|
25148
25376
|
ratePerSec: tuple(rateInfo, 1),
|
|
25149
25377
|
exchangeRate: tuple(exchangeInfo, 2),
|
|
25150
|
-
collateralPrice:
|
|
25378
|
+
collateralPrice: big3(results[base + 8]),
|
|
25151
25379
|
// Indices follow the PUSH ORDER above exactly: the two reward reads sit
|
|
25152
25380
|
// at +9/+10, BEFORE the lens block, so the lens reads are +11/+12.
|
|
25153
25381
|
// (Getting this wrong is silent — it produced a 3-billion-percent APR
|
|
25154
25382
|
// before the numbers were checked against a hand computation.)
|
|
25155
|
-
convexPid:
|
|
25156
|
-
rsupWeight: pairEmissions ?
|
|
25157
|
-
liveRatePerSec: utilities ?
|
|
25158
|
-
underlyingSupplyRatePerSec: utilities ?
|
|
25383
|
+
convexPid: big3(results[base + 9]),
|
|
25384
|
+
rsupWeight: pairEmissions ? big3(results[base + 10]) : null,
|
|
25385
|
+
liveRatePerSec: utilities ? big3(results[base + 11]) : null,
|
|
25386
|
+
underlyingSupplyRatePerSec: utilities ? big3(results[base + 12]) : null,
|
|
25159
25387
|
collateralRewards: []
|
|
25160
25388
|
};
|
|
25161
25389
|
});
|
|
@@ -25213,9 +25441,9 @@ async function readRewardContext(chainId, registry, utilities) {
|
|
|
25213
25441
|
],
|
|
25214
25442
|
allowFailure: true
|
|
25215
25443
|
});
|
|
25216
|
-
const periodFinish =
|
|
25217
|
-
const rewardRate =
|
|
25218
|
-
const totalWeight =
|
|
25444
|
+
const periodFinish = big3(stream[0]);
|
|
25445
|
+
const rewardRate = big3(stream[1]);
|
|
25446
|
+
const totalWeight = big3(stream[2]);
|
|
25219
25447
|
if (periodFinish === null || rewardRate === null || totalWeight === null || totalWeight === 0n) {
|
|
25220
25448
|
return { pairEmissions, convexPoolUtil };
|
|
25221
25449
|
}
|
|
@@ -25284,7 +25512,7 @@ function getCurvanceAssetRoster(chainId, lender) {
|
|
|
25284
25512
|
// src/lending/public-data/curvance/fetchPublic.ts
|
|
25285
25513
|
var FALLBACK_TOKEN_READS = 12;
|
|
25286
25514
|
var zero = "0x0000000000000000000000000000000000000000";
|
|
25287
|
-
var
|
|
25515
|
+
var big4 = (v) => {
|
|
25288
25516
|
if (typeof v === "bigint") return v;
|
|
25289
25517
|
if (typeof v === "number") return BigInt(v);
|
|
25290
25518
|
if (typeof v === "string" && v !== "0x") {
|
|
@@ -25399,41 +25627,41 @@ async function fetchViaReader(lender, chainId, config) {
|
|
|
25399
25627
|
assetSymbol: str(t?.asset?.symbol, "?"),
|
|
25400
25628
|
assetName: str(t?.asset?.name, "?"),
|
|
25401
25629
|
assetDecimals: num3(t?.asset?.decimals, 18),
|
|
25402
|
-
collRatio:
|
|
25403
|
-
collReqSoft:
|
|
25404
|
-
collReqHard:
|
|
25405
|
-
liqIncBase:
|
|
25406
|
-
liqIncCurve:
|
|
25407
|
-
closeFactorBase:
|
|
25408
|
-
maxLeverage:
|
|
25409
|
-
collateralCap:
|
|
25410
|
-
debtCap:
|
|
25630
|
+
collRatio: big4(t?.collRatio),
|
|
25631
|
+
collReqSoft: big4(t?.collReqSoft),
|
|
25632
|
+
collReqHard: big4(t?.collReqHard),
|
|
25633
|
+
liqIncBase: big4(t?.liqIncBase),
|
|
25634
|
+
liqIncCurve: big4(t?.liqIncCurve),
|
|
25635
|
+
closeFactorBase: big4(t?.closeFactorBase),
|
|
25636
|
+
maxLeverage: big4(t?.maxLeverage),
|
|
25637
|
+
collateralCap: big4(t?.collateralCap),
|
|
25638
|
+
debtCap: big4(t?.debtCap),
|
|
25411
25639
|
mintPaused: !!t?.mintPaused,
|
|
25412
25640
|
collateralizationPaused: !!t?.collateralizationPaused,
|
|
25413
25641
|
borrowPaused: !!t?.borrowPaused,
|
|
25414
25642
|
redeemPaused: !!t?.redeemPaused,
|
|
25415
|
-
totalAssets:
|
|
25416
|
-
totalSupply:
|
|
25417
|
-
exchangeRate:
|
|
25418
|
-
collateral:
|
|
25419
|
-
debt:
|
|
25420
|
-
liquidity:
|
|
25421
|
-
assetPrice:
|
|
25422
|
-
assetPriceLower:
|
|
25423
|
-
borrowRate:
|
|
25424
|
-
predictedBorrowRate:
|
|
25425
|
-
supplyRate:
|
|
25426
|
-
utilizationRate:
|
|
25427
|
-
interestFee:
|
|
25428
|
-
irmTargetRate:
|
|
25429
|
-
irmMaxRate:
|
|
25430
|
-
irmTargetUtilization:
|
|
25643
|
+
totalAssets: big4(d?.totalAssets),
|
|
25644
|
+
totalSupply: big4(d?.totalSupply),
|
|
25645
|
+
exchangeRate: big4(d?.exchangeRate),
|
|
25646
|
+
collateral: big4(d?.collateral),
|
|
25647
|
+
debt: big4(d?.debt),
|
|
25648
|
+
liquidity: big4(d?.liquidity),
|
|
25649
|
+
assetPrice: big4(d?.assetPrice),
|
|
25650
|
+
assetPriceLower: big4(d?.assetPriceLower),
|
|
25651
|
+
borrowRate: big4(d?.borrowRate),
|
|
25652
|
+
predictedBorrowRate: big4(d?.predictedBorrowRate),
|
|
25653
|
+
supplyRate: big4(d?.supplyRate),
|
|
25654
|
+
utilizationRate: big4(d?.utilizationRate),
|
|
25655
|
+
interestFee: big4(t?.interestFee),
|
|
25656
|
+
irmTargetRate: big4(t?.irmTargetRate),
|
|
25657
|
+
irmMaxRate: big4(t?.irmMaxRate),
|
|
25658
|
+
irmTargetUtilization: big4(t?.irmTargetUtilization)
|
|
25431
25659
|
});
|
|
25432
25660
|
}
|
|
25433
25661
|
if (tokens.length === 0) continue;
|
|
25434
25662
|
markets.push({
|
|
25435
25663
|
marketManager,
|
|
25436
|
-
cooldownLength:
|
|
25664
|
+
cooldownLength: big4(m?.cooldownLength),
|
|
25437
25665
|
// Filled in below — one batched round for every market at once.
|
|
25438
25666
|
minLoanSizeUsdWad: 0n,
|
|
25439
25667
|
tokens
|
|
@@ -25494,7 +25722,7 @@ async function fetchViaMulticall(lender, chainId, config) {
|
|
|
25494
25722
|
const pairs = [];
|
|
25495
25723
|
managers.forEach((mm, i) => {
|
|
25496
25724
|
const toks = listed[i * 2];
|
|
25497
|
-
const redeemPaused =
|
|
25725
|
+
const redeemPaused = big4(listed[i * 2 + 1]) === 2n;
|
|
25498
25726
|
if (!Array.isArray(toks)) return;
|
|
25499
25727
|
for (const t of toks) {
|
|
25500
25728
|
if (typeof t === "string" && t.startsWith("0x")) {
|
|
@@ -25580,9 +25808,9 @@ async function fetchViaMulticall(lender, chainId, config) {
|
|
|
25580
25808
|
const paused = results[base + 4];
|
|
25581
25809
|
const asset = results[base + 7];
|
|
25582
25810
|
if (!Array.isArray(coll) || typeof asset !== "string") return;
|
|
25583
|
-
const tuple = (v, idx) => Array.isArray(v) ?
|
|
25584
|
-
const held =
|
|
25585
|
-
const debt =
|
|
25811
|
+
const tuple = (v, idx) => Array.isArray(v) ? big4(v[idx]) : 0n;
|
|
25812
|
+
const held = big4(results[base + 10]);
|
|
25813
|
+
const debt = big4(results[base + 9]);
|
|
25586
25814
|
const token = {
|
|
25587
25815
|
cToken: p.cToken,
|
|
25588
25816
|
symbol: str(results[base + 5], "c?"),
|
|
@@ -25599,13 +25827,13 @@ async function fetchViaMulticall(lender, chainId, config) {
|
|
|
25599
25827
|
liqIncCurve: tuple(liq, 1),
|
|
25600
25828
|
closeFactorBase: tuple(liq, 4),
|
|
25601
25829
|
maxLeverage: 0n,
|
|
25602
|
-
collateralCap:
|
|
25603
|
-
debtCap:
|
|
25830
|
+
collateralCap: big4(results[base + 2]),
|
|
25831
|
+
debtCap: big4(results[base + 3]),
|
|
25604
25832
|
mintPaused: Array.isArray(paused) ? !!paused[0] : false,
|
|
25605
25833
|
collateralizationPaused: Array.isArray(paused) ? !!paused[1] : false,
|
|
25606
25834
|
borrowPaused: Array.isArray(paused) ? !!paused[2] : false,
|
|
25607
25835
|
redeemPaused: p.redeemPaused,
|
|
25608
|
-
totalAssets:
|
|
25836
|
+
totalAssets: big4(results[base + 8]),
|
|
25609
25837
|
totalSupply: 0n,
|
|
25610
25838
|
exchangeRate: 0n,
|
|
25611
25839
|
collateral: 0n,
|
|
@@ -25619,7 +25847,7 @@ async function fetchViaMulticall(lender, chainId, config) {
|
|
|
25619
25847
|
predictedBorrowRate: 0n,
|
|
25620
25848
|
supplyRate: 0n,
|
|
25621
25849
|
utilizationRate: held + debt > 0n ? debt * 10n ** 18n / (held + debt) : 0n,
|
|
25622
|
-
interestFee:
|
|
25850
|
+
interestFee: big4(results[base + 11]),
|
|
25623
25851
|
irmTargetRate: 0n,
|
|
25624
25852
|
irmMaxRate: 0n,
|
|
25625
25853
|
irmTargetUtilization: 0n
|
|
@@ -25706,7 +25934,7 @@ var ERC20_ABI = [
|
|
|
25706
25934
|
];
|
|
25707
25935
|
var RAY4 = 1e27;
|
|
25708
25936
|
var ok = (v) => v !== void 0 && v !== null && v !== "0x";
|
|
25709
|
-
var
|
|
25937
|
+
var big5 = (v) => {
|
|
25710
25938
|
if (typeof v === "bigint") return v;
|
|
25711
25939
|
if (typeof v === "number") return BigInt(v);
|
|
25712
25940
|
if (typeof v === "string" && /^(0x[0-9a-fA-F]+|\d+)$/.test(v)) return BigInt(v);
|
|
@@ -25814,10 +26042,10 @@ async function fetchTwyneMarkets(lender, chainId) {
|
|
|
25814
26042
|
const pendingDebtBalances = [];
|
|
25815
26043
|
markets.forEach((m, i) => {
|
|
25816
26044
|
const c = i * 8;
|
|
25817
|
-
const creditTotalAssets =
|
|
25818
|
-
const creditTotalBorrows =
|
|
25819
|
-
const creditCash =
|
|
25820
|
-
const creditRateSpy =
|
|
26045
|
+
const creditTotalAssets = big5(creditReads[c]);
|
|
26046
|
+
const creditTotalBorrows = big5(creditReads[c + 1]);
|
|
26047
|
+
const creditCash = big5(creditReads[c + 2]);
|
|
26048
|
+
const creditRateSpy = big5(creditReads[c + 3]);
|
|
25821
26049
|
if (creditTotalAssets === void 0 || creditCash === void 0 || creditRateSpy === void 0) return;
|
|
25822
26050
|
const aaveIdx = aaveMarkets.indexOf(m);
|
|
25823
26051
|
const eulerIdx = eulerMarkets.indexOf(m);
|
|
@@ -25836,21 +26064,21 @@ async function fetchTwyneMarkets(lender, chainId) {
|
|
|
25836
26064
|
if (ok(debtReserve) && debtReserve?.currentVariableBorrowRate !== void 0)
|
|
25837
26065
|
externalBorrowRate = Number(debtReserve.currentVariableBorrowRate) / RAY4;
|
|
25838
26066
|
if (ok(debtReserve)) {
|
|
25839
|
-
const virtual =
|
|
26067
|
+
const virtual = big5(debtReserve.virtualUnderlyingBalance);
|
|
25840
26068
|
if (virtual !== void 0 && virtual > 0n) externalBorrowLiquidity = virtual;
|
|
25841
26069
|
else if (typeof debtReserve.aTokenAddress === "string")
|
|
25842
26070
|
debtAToken = debtReserve.aTokenAddress;
|
|
25843
26071
|
}
|
|
25844
26072
|
} else if (eulerIdx >= 0) {
|
|
25845
26073
|
const e = eulerIdx * 7;
|
|
25846
|
-
externalLiqLtv =
|
|
25847
|
-
const spy =
|
|
26074
|
+
externalLiqLtv = big5(eulerReads[e]);
|
|
26075
|
+
const spy = big5(eulerReads[e + 1]);
|
|
25848
26076
|
if (spy !== void 0) externalBorrowRate = Number(spy) / RAY4 * 31536e3;
|
|
25849
|
-
externalBorrowLiquidity =
|
|
25850
|
-
const collSpy =
|
|
25851
|
-
const collAssets =
|
|
25852
|
-
const collBorrows =
|
|
25853
|
-
const collFeeBps =
|
|
26077
|
+
externalBorrowLiquidity = big5(eulerReads[e + 2]);
|
|
26078
|
+
const collSpy = big5(eulerReads[e + 3]);
|
|
26079
|
+
const collAssets = big5(eulerReads[e + 4]);
|
|
26080
|
+
const collBorrows = big5(eulerReads[e + 5]);
|
|
26081
|
+
const collFeeBps = big5(eulerReads[e + 6]) ?? 0n;
|
|
25854
26082
|
if (collSpy !== void 0 && collAssets && collAssets > 0n) {
|
|
25855
26083
|
const util = Number(collBorrows ?? 0n) / Number(collAssets);
|
|
25856
26084
|
externalSupplyRate = Number(collSpy) / RAY4 * 31536e3 * util * (1 - Number(collFeeBps) / 1e4);
|
|
@@ -25858,7 +26086,7 @@ async function fetchTwyneMarkets(lender, chainId) {
|
|
|
25858
26086
|
}
|
|
25859
26087
|
const s = i * 3;
|
|
25860
26088
|
if (externalBorrowLiquidity === void 0 && !debtAToken) {
|
|
25861
|
-
externalBorrowLiquidity =
|
|
26089
|
+
externalBorrowLiquidity = big5(scaleReads[s + 2]);
|
|
25862
26090
|
}
|
|
25863
26091
|
if (debtAToken) pendingDebtBalances.push({ index: out.length, token: m.targetAsset, holder: debtAToken });
|
|
25864
26092
|
out.push({
|
|
@@ -25867,19 +26095,19 @@ async function fetchTwyneMarkets(lender, chainId) {
|
|
|
25867
26095
|
creditTotalBorrows: creditTotalBorrows ?? 0n,
|
|
25868
26096
|
creditCash,
|
|
25869
26097
|
creditRateSpy,
|
|
25870
|
-
creditDepositCapacity:
|
|
26098
|
+
creditDepositCapacity: big5(creditReads[c + 7]),
|
|
25871
26099
|
creditDecimals: Number(creditReads[c + 4] ?? 18),
|
|
25872
26100
|
creditSymbol: typeof creditReads[c + 5] === "string" ? creditReads[c + 5] : void 0,
|
|
25873
26101
|
creditIrm: typeof creditReads[c + 6] === "string" ? creditReads[c + 6].toLowerCase() : m.creditIrm,
|
|
25874
26102
|
externalLiqLtv,
|
|
25875
|
-
maxTwyneLiqLtv:
|
|
25876
|
-
externalLiqBuffer:
|
|
26103
|
+
maxTwyneLiqLtv: big5(bounds[i * 2]) ?? (m.maxTwyneLiqLTV !== void 0 ? BigInt(m.maxTwyneLiqLTV) : void 0),
|
|
26104
|
+
externalLiqBuffer: big5(bounds[i * 2 + 1]) ?? (m.externalLiqBuffer !== void 0 ? BigInt(m.externalLiqBuffer) : void 0),
|
|
25877
26105
|
externalSupplyRate,
|
|
25878
26106
|
externalBorrowRate,
|
|
25879
26107
|
externalBorrowLiquidity,
|
|
25880
26108
|
collateralDecimals: Number(scaleReads[s] ?? 18),
|
|
25881
26109
|
targetDecimals: Number(scaleReads[s + 1] ?? 18),
|
|
25882
|
-
collateralToUnderlying:
|
|
26110
|
+
collateralToUnderlying: big5(wrapperReads[i]),
|
|
25883
26111
|
// Computed HERE, never read from the roster: a stored flag goes stale,
|
|
25884
26112
|
// and two of the three live PT markets have already matured.
|
|
25885
26113
|
collateralMatured: !!m.collateralMaturity && m.collateralMaturity <= nowSec9,
|
|
@@ -25898,7 +26126,7 @@ async function fetchTwyneMarkets(lender, chainId) {
|
|
|
25898
26126
|
allowFailure: true
|
|
25899
26127
|
});
|
|
25900
26128
|
pendingDebtBalances.forEach((p, i) => {
|
|
25901
|
-
const v =
|
|
26129
|
+
const v = big5(balances[i]);
|
|
25902
26130
|
if (v !== void 0 && out[p.index]) out[p.index].externalBorrowLiquidity = v;
|
|
25903
26131
|
});
|
|
25904
26132
|
}
|
|
@@ -25906,7 +26134,7 @@ async function fetchTwyneMarkets(lender, chainId) {
|
|
|
25906
26134
|
return { lender, chainId, config, markets: out };
|
|
25907
26135
|
}
|
|
25908
26136
|
var PAIR_READS = 15;
|
|
25909
|
-
var
|
|
26137
|
+
var big6 = (v) => {
|
|
25910
26138
|
if (typeof v === "bigint") return v;
|
|
25911
26139
|
if (typeof v === "number") return BigInt(v);
|
|
25912
26140
|
if (typeof v === "string" && v !== "0x") {
|
|
@@ -26013,41 +26241,41 @@ async function fetchFraxlendPairs(lender, chainId) {
|
|
|
26013
26241
|
decimals: dec(decimals),
|
|
26014
26242
|
asset: asset.toLowerCase(),
|
|
26015
26243
|
collateral: collateral.toLowerCase(),
|
|
26016
|
-
maxLtv:
|
|
26017
|
-
ltvPrecision:
|
|
26018
|
-
exchangePrecision:
|
|
26019
|
-
liqPrecision:
|
|
26244
|
+
maxLtv: big6(maxLtv),
|
|
26245
|
+
ltvPrecision: big6(ltvPrec) || 100000n,
|
|
26246
|
+
exchangePrecision: big6(exPrec) || 10n ** 18n,
|
|
26247
|
+
liqPrecision: big6(liqPrec) || 100000n,
|
|
26020
26248
|
cleanLiquidationFee: 0n,
|
|
26021
26249
|
dirtyLiquidationFee: 0n,
|
|
26022
26250
|
protocolLiquidationFee: 0n,
|
|
26023
|
-
depositLimit:
|
|
26024
|
-
borrowLimit:
|
|
26025
|
-
totalAssetAmount:
|
|
26251
|
+
depositLimit: big6(depositLimit),
|
|
26252
|
+
borrowLimit: big6(borrowLimit),
|
|
26253
|
+
totalAssetAmount: big6(
|
|
26026
26254
|
totalAsset.amount ?? totalAsset[0]
|
|
26027
26255
|
),
|
|
26028
|
-
totalAssetShares:
|
|
26256
|
+
totalAssetShares: big6(
|
|
26029
26257
|
totalAsset.shares ?? totalAsset[1]
|
|
26030
26258
|
),
|
|
26031
|
-
totalBorrowAmount:
|
|
26259
|
+
totalBorrowAmount: big6(
|
|
26032
26260
|
totalBorrow.amount ?? totalBorrow[0]
|
|
26033
26261
|
),
|
|
26034
|
-
totalBorrowShares:
|
|
26262
|
+
totalBorrowShares: big6(
|
|
26035
26263
|
totalBorrow.shares ?? totalBorrow[1]
|
|
26036
26264
|
),
|
|
26037
|
-
totalCollateral:
|
|
26265
|
+
totalCollateral: big6(totalCollateral),
|
|
26038
26266
|
oracle: str2(xrInfo[0], "").toLowerCase(),
|
|
26039
26267
|
maxOracleDeviation: Number(xrInfo[1] ?? 0),
|
|
26040
|
-
exchangeRateLastTimestamp:
|
|
26041
|
-
lowExchangeRate:
|
|
26042
|
-
highExchangeRate:
|
|
26043
|
-
ratePerSec:
|
|
26044
|
-
fullUtilizationRate:
|
|
26268
|
+
exchangeRateLastTimestamp: big6(xrInfo[2]),
|
|
26269
|
+
lowExchangeRate: big6(xrInfo[3]),
|
|
26270
|
+
highExchangeRate: big6(xrInfo[4]),
|
|
26271
|
+
ratePerSec: big6(rateInfo.ratePerSec ?? rateInfo[3]),
|
|
26272
|
+
fullUtilizationRate: big6(
|
|
26045
26273
|
rateInfo.fullUtilizationRate ?? rateInfo[4]
|
|
26046
26274
|
),
|
|
26047
26275
|
feeToProtocolRate: Number(
|
|
26048
26276
|
rateInfo.feeToProtocolRate ?? rateInfo[1] ?? 0
|
|
26049
26277
|
),
|
|
26050
|
-
rateLastTimestamp:
|
|
26278
|
+
rateLastTimestamp: big6(
|
|
26051
26279
|
rateInfo.lastTimestamp ?? rateInfo[2]
|
|
26052
26280
|
),
|
|
26053
26281
|
rateContract: str2(rateContract, "").toLowerCase(),
|
|
@@ -26111,7 +26339,7 @@ function inverseKeyParts(key3) {
|
|
|
26111
26339
|
if (!/^[0-9A-F]{40}$/.test(suffix)) return void 0;
|
|
26112
26340
|
return { lender: "INVERSE", market: "0x" + suffix.toLowerCase() };
|
|
26113
26341
|
}
|
|
26114
|
-
function
|
|
26342
|
+
function currencyFor9(address, decimals, symbol, tokens) {
|
|
26115
26343
|
const lower4 = address.toLowerCase();
|
|
26116
26344
|
return tokens[lower4] ?? { address: lower4, symbol, name: symbol, decimals };
|
|
26117
26345
|
}
|
|
@@ -26155,7 +26383,7 @@ function convertInverseMarketsToResponse(raw, chainId, prices = {}, _additionalY
|
|
|
26155
26383
|
name: "Collateral " + collSymbol,
|
|
26156
26384
|
poolId: market.address.toLowerCase(),
|
|
26157
26385
|
underlying: collAddr,
|
|
26158
|
-
asset:
|
|
26386
|
+
asset: currencyFor9(collAddr, collDecimals, collSymbol, tokens),
|
|
26159
26387
|
totalDeposits: collateralTotal,
|
|
26160
26388
|
totalDebtStable: 0,
|
|
26161
26389
|
totalDebt: 0,
|
|
@@ -26199,7 +26427,7 @@ function convertInverseMarketsToResponse(raw, chainId, prices = {}, _additionalY
|
|
|
26199
26427
|
name: "DOLA",
|
|
26200
26428
|
poolId: market.address.toLowerCase(),
|
|
26201
26429
|
underlying: dolaAddr,
|
|
26202
|
-
asset:
|
|
26430
|
+
asset: currencyFor9(dolaAddr, debtDecimals, "DOLA", tokens),
|
|
26203
26431
|
totalDeposits: 0,
|
|
26204
26432
|
totalDebtStable: 0,
|
|
26205
26433
|
totalDebt,
|
|
@@ -26295,7 +26523,7 @@ function convertInverseMarketsToResponse(raw, chainId, prices = {}, _additionalY
|
|
|
26295
26523
|
var WAD9 = 1e18;
|
|
26296
26524
|
var clamp01 = (v) => Math.max(0, Math.min(1, v));
|
|
26297
26525
|
var wadToNumber = (v) => v !== null ? Number(v) / WAD9 : 0;
|
|
26298
|
-
function
|
|
26526
|
+
function currencyFor10(address, decimals, symbol, tokens) {
|
|
26299
26527
|
const lower4 = address.toLowerCase();
|
|
26300
26528
|
return tokens[lower4] ?? { address: lower4, symbol, name: symbol, decimals };
|
|
26301
26529
|
}
|
|
@@ -26339,7 +26567,7 @@ function convertCoolerMarketsToResponse(raw, chainId, prices = {}, _additionalYi
|
|
|
26339
26567
|
name: "Collateral " + collSymbol,
|
|
26340
26568
|
poolId: cfg.monoCooler.toLowerCase(),
|
|
26341
26569
|
underlying: collAddr,
|
|
26342
|
-
asset:
|
|
26570
|
+
asset: currencyFor10(collAddr, collDecimals, collSymbol, tokens),
|
|
26343
26571
|
totalDeposits: totalCollateral,
|
|
26344
26572
|
totalDebtStable: 0,
|
|
26345
26573
|
totalDebt: 0,
|
|
@@ -26385,7 +26613,7 @@ function convertCoolerMarketsToResponse(raw, chainId, prices = {}, _additionalYi
|
|
|
26385
26613
|
name: debtSymbol,
|
|
26386
26614
|
poolId: cfg.monoCooler.toLowerCase(),
|
|
26387
26615
|
underlying: debtAddr,
|
|
26388
|
-
asset:
|
|
26616
|
+
asset: currencyFor10(debtAddr, debtDecimals, debtSymbol, tokens),
|
|
26389
26617
|
totalDeposits: 0,
|
|
26390
26618
|
totalDebtStable: 0,
|
|
26391
26619
|
totalDebt,
|
|
@@ -26492,7 +26720,7 @@ function llamaLendKeyParts(key3) {
|
|
|
26492
26720
|
if (!/^[0-9A-F]{40}$/.test(suffix)) return void 0;
|
|
26493
26721
|
return { lender: "LLAMALEND", controller: "0x" + suffix.toLowerCase() };
|
|
26494
26722
|
}
|
|
26495
|
-
function
|
|
26723
|
+
function currencyFor11(address, decimals, symbol, tokens) {
|
|
26496
26724
|
const lower4 = address.toLowerCase();
|
|
26497
26725
|
return tokens[lower4] ?? { address: lower4, symbol, name: symbol, decimals };
|
|
26498
26726
|
}
|
|
@@ -26555,7 +26783,7 @@ function convertLlamaLendMarketsToResponse(raw, chainId, prices = {}, additional
|
|
|
26555
26783
|
name: "Collateral " + collSymbol,
|
|
26556
26784
|
poolId: market.controller.toLowerCase(),
|
|
26557
26785
|
underlying: collAddr,
|
|
26558
|
-
asset:
|
|
26786
|
+
asset: currencyFor11(collAddr, collDecimals, collSymbol, tokens),
|
|
26559
26787
|
// Collateral lives inside the LLAMMA spread over bands; there is no
|
|
26560
26788
|
// single market-level balance worth reporting, and the number the UI
|
|
26561
26789
|
// needs is the borrowed side anyway.
|
|
@@ -26603,7 +26831,7 @@ function convertLlamaLendMarketsToResponse(raw, chainId, prices = {}, additional
|
|
|
26603
26831
|
name: loanSymbol,
|
|
26604
26832
|
poolId: market.controller.toLowerCase(),
|
|
26605
26833
|
underlying: loanAddr,
|
|
26606
|
-
asset:
|
|
26834
|
+
asset: currencyFor11(loanAddr, loanDecimals, loanSymbol, tokens),
|
|
26607
26835
|
totalDeposits,
|
|
26608
26836
|
totalDebtStable: 0,
|
|
26609
26837
|
totalDebt,
|
|
@@ -26841,7 +27069,7 @@ function resupplyKeyParts(key3) {
|
|
|
26841
27069
|
var SECONDS_PER_YEAR9 = 31536e3;
|
|
26842
27070
|
var LTV_PRECISION = 1e5;
|
|
26843
27071
|
var ONE2 = 10n ** 18n;
|
|
26844
|
-
function
|
|
27072
|
+
function currencyFor12(address, decimals, symbol, tokens) {
|
|
26845
27073
|
const lower4 = address.toLowerCase();
|
|
26846
27074
|
return tokens[lower4] ?? { address: lower4, symbol, name: symbol, decimals };
|
|
26847
27075
|
}
|
|
@@ -26952,7 +27180,7 @@ function convertResupplyMarketsToResponse(raw, chainId, prices = {}, _additional
|
|
|
26952
27180
|
name: "Collateral " + collSymbol,
|
|
26953
27181
|
poolId: id.pair.toLowerCase(),
|
|
26954
27182
|
underlying: collAddr,
|
|
26955
|
-
asset:
|
|
27183
|
+
asset: currencyFor12(collAddr, collDecimals, collSymbol, tokens),
|
|
26956
27184
|
totalDeposits: totalColl,
|
|
26957
27185
|
totalDebtStable: 0,
|
|
26958
27186
|
totalDebt: 0,
|
|
@@ -27005,7 +27233,7 @@ function convertResupplyMarketsToResponse(raw, chainId, prices = {}, _additional
|
|
|
27005
27233
|
name: debtSymbol,
|
|
27006
27234
|
poolId: id.pair.toLowerCase(),
|
|
27007
27235
|
underlying: debtAddr,
|
|
27008
|
-
asset:
|
|
27236
|
+
asset: currencyFor12(debtAddr, debtDecimals, debtSymbol, tokens),
|
|
27009
27237
|
totalDeposits: 0,
|
|
27010
27238
|
totalDebtStable: 0,
|
|
27011
27239
|
totalDebt,
|
|
@@ -27134,7 +27362,7 @@ var BPS2 = 1e4;
|
|
|
27134
27362
|
function ratePerSecToApr2(rate) {
|
|
27135
27363
|
return Number(rate) / 1e18 * SECONDS_PER_YEAR10 * 100;
|
|
27136
27364
|
}
|
|
27137
|
-
function
|
|
27365
|
+
function currencyFor13(address, decimals, symbol, name, tokens) {
|
|
27138
27366
|
const lower4 = address.toLowerCase();
|
|
27139
27367
|
return tokens[lower4] ?? { address: lower4, symbol, name, decimals };
|
|
27140
27368
|
}
|
|
@@ -27189,7 +27417,7 @@ function convertCurvanceMarketsToResponse(raw, chainId, prices = {}, _additional
|
|
|
27189
27417
|
name: t.assetSymbol,
|
|
27190
27418
|
poolId: market.marketManager.toLowerCase(),
|
|
27191
27419
|
underlying: assetAddr,
|
|
27192
|
-
asset:
|
|
27420
|
+
asset: currencyFor13(assetAddr, dec2, t.assetSymbol, t.assetName, tokens),
|
|
27193
27421
|
totalDeposits,
|
|
27194
27422
|
totalDebtStable: 0,
|
|
27195
27423
|
totalDebt,
|
|
@@ -27382,7 +27610,7 @@ var toFloat2 = (v, dec2) => v === void 0 ? 0 : Number(v) / 10 ** dec2;
|
|
|
27382
27610
|
function spyToApr(spy) {
|
|
27383
27611
|
return Number(spy) / RAY5 * SECONDS_PER_YEAR11 * 100;
|
|
27384
27612
|
}
|
|
27385
|
-
function
|
|
27613
|
+
function currencyFor14(address, decimals, symbol, tokens) {
|
|
27386
27614
|
const lower4 = address.toLowerCase();
|
|
27387
27615
|
return tokens[lower4] ?? { address: lower4, symbol, name: symbol, decimals };
|
|
27388
27616
|
}
|
|
@@ -27416,7 +27644,7 @@ function convertTwyneMarketsToResponse(raw, chainId, prices = {}, _additionalYie
|
|
|
27416
27644
|
name: m.symbol ?? collToken?.symbol ?? "collateral",
|
|
27417
27645
|
poolId: m.intermediateVault.toLowerCase(),
|
|
27418
27646
|
underlying: collAddr,
|
|
27419
|
-
asset:
|
|
27647
|
+
asset: currencyFor14(collAddr, row.collateralDecimals, m.symbol ?? "", tokens),
|
|
27420
27648
|
totalDeposits: creditTotal,
|
|
27421
27649
|
totalDebtStable: 0,
|
|
27422
27650
|
totalDebt: 0,
|
|
@@ -27500,7 +27728,7 @@ function convertTwyneMarketsToResponse(raw, chainId, prices = {}, _additionalYie
|
|
|
27500
27728
|
name: debtToken?.symbol ?? "debt",
|
|
27501
27729
|
poolId: m.intermediateVault.toLowerCase(),
|
|
27502
27730
|
underlying: debtAddr,
|
|
27503
|
-
asset:
|
|
27731
|
+
asset: currencyFor14(debtAddr, row.targetDecimals, debtToken?.symbol ?? "", tokens),
|
|
27504
27732
|
// Borrower aggregates are NOT readable without an event replay — see the
|
|
27505
27733
|
// header. Zero here means "not measured", and the descriptor says so.
|
|
27506
27734
|
totalDeposits: 0,
|
|
@@ -27639,7 +27867,7 @@ var SECONDS_PER_YEAR12 = 31536e3;
|
|
|
27639
27867
|
var ratePerSecToApr3 = (rate) => Number(rate) / 1e18 * SECONDS_PER_YEAR12 * 100;
|
|
27640
27868
|
var toFloat3 = (raw, decimals) => Number(raw) / 10 ** decimals;
|
|
27641
27869
|
var MAX_UINT = (1n << 256n) - 1n;
|
|
27642
|
-
function
|
|
27870
|
+
function currencyFor15(address, decimals, symbol, name, tokens) {
|
|
27643
27871
|
const lower4 = address.toLowerCase();
|
|
27644
27872
|
return tokens[lower4] ?? { address: lower4, symbol, name, decimals };
|
|
27645
27873
|
}
|
|
@@ -27688,7 +27916,7 @@ function convertFraxlendPairsToResponse(raw, chainId, prices = {}, _additionalYi
|
|
|
27688
27916
|
name: p.assetSymbol,
|
|
27689
27917
|
poolId: p.pair.toLowerCase(),
|
|
27690
27918
|
underlying: p.asset,
|
|
27691
|
-
asset:
|
|
27919
|
+
asset: currencyFor15(
|
|
27692
27920
|
p.asset,
|
|
27693
27921
|
p.assetDecimals,
|
|
27694
27922
|
p.assetSymbol,
|
|
@@ -27741,7 +27969,7 @@ function convertFraxlendPairsToResponse(raw, chainId, prices = {}, _additionalYi
|
|
|
27741
27969
|
name: p.collateralSymbol,
|
|
27742
27970
|
poolId: p.pair.toLowerCase(),
|
|
27743
27971
|
underlying: p.collateral,
|
|
27744
|
-
asset:
|
|
27972
|
+
asset: currencyFor15(
|
|
27745
27973
|
p.collateral,
|
|
27746
27974
|
p.collateralDecimals,
|
|
27747
27975
|
p.collateralSymbol,
|
|
@@ -27911,12 +28139,12 @@ async function fetchDssMarkets(lender, chainId) {
|
|
|
27911
28139
|
} catch {
|
|
27912
28140
|
return { lender, config, chainData, markets: [] };
|
|
27913
28141
|
}
|
|
27914
|
-
const
|
|
28142
|
+
const big23 = (v) => {
|
|
27915
28143
|
if (typeof v === "bigint") return v;
|
|
27916
28144
|
if (typeof v === "number") return BigInt(v);
|
|
27917
28145
|
return null;
|
|
27918
28146
|
};
|
|
27919
|
-
const field13 = (res, name, idx) =>
|
|
28147
|
+
const field13 = (res, name, idx) => big23(res?.[name] ?? res?.[idx]);
|
|
27920
28148
|
let cursor = 0;
|
|
27921
28149
|
const out = markets.map((market, i) => {
|
|
27922
28150
|
const base = cursor;
|
|
@@ -27933,7 +28161,7 @@ async function fetchDssMarkets(lender, chainId) {
|
|
|
27933
28161
|
dust: field13(vatIlk, "dust", 4),
|
|
27934
28162
|
duty: field13(jugIlk, "duty", 0),
|
|
27935
28163
|
mat: field13(spotIlk, "mat", 1),
|
|
27936
|
-
joinBalance: joinReadIndex[i] >= 0 ?
|
|
28164
|
+
joinBalance: joinReadIndex[i] >= 0 ? big23(results[joinReadIndex[i]]) : null
|
|
27937
28165
|
};
|
|
27938
28166
|
});
|
|
27939
28167
|
return { lender, config, chainData, markets: out };
|
|
@@ -27958,10 +28186,10 @@ var WAD11 = 1e18;
|
|
|
27958
28186
|
var RAY6 = 1e27;
|
|
27959
28187
|
var RAD = 1e45;
|
|
27960
28188
|
var YEAR_SECONDS2 = 31536e3;
|
|
27961
|
-
function
|
|
28189
|
+
function toHuman5(raw, decimals) {
|
|
27962
28190
|
return Number(raw) / 10 ** decimals;
|
|
27963
28191
|
}
|
|
27964
|
-
function
|
|
28192
|
+
function currencyFor16(address, decimals, symbol, tokens) {
|
|
27965
28193
|
const lower4 = address.toLowerCase();
|
|
27966
28194
|
return tokens[lower4] ?? { address: lower4, symbol, name: symbol, decimals };
|
|
27967
28195
|
}
|
|
@@ -27995,7 +28223,7 @@ function convertDssMarketsToResponse(raw, chainId, prices = {}, _additionalYield
|
|
|
27995
28223
|
const spotDerivedPrice = m.spot !== null && m.mat !== null ? Number(m.spot) / RAY6 * (Number(m.mat) / RAY6) : 0;
|
|
27996
28224
|
const collPrice = spotDerivedPrice || (prices[collPriceKey] ?? 0);
|
|
27997
28225
|
const totalDebt = m.Art !== null && m.rate !== null ? Number(m.Art * m.rate / BigInt(1e27)) / 10 ** debtDecimals : 0;
|
|
27998
|
-
const totalColl = m.joinBalance !== null ?
|
|
28226
|
+
const totalColl = m.joinBalance !== null ? toHuman5(m.joinBalance, collDecimals) : 0;
|
|
27999
28227
|
const mat = m.mat !== null ? Number(m.mat) / RAY6 : Number(market.mat) / RAY6 || 1.5;
|
|
28000
28228
|
const ltv = mat > 0 ? 1 / mat : 0;
|
|
28001
28229
|
const chop = market.chop ? Number(market.chop) / WAD11 : 0;
|
|
@@ -28013,7 +28241,7 @@ function convertDssMarketsToResponse(raw, chainId, prices = {}, _additionalYield
|
|
|
28013
28241
|
name: "Collateral " + collSymbol,
|
|
28014
28242
|
poolId: market.gemJoin?.toLowerCase(),
|
|
28015
28243
|
underlying: collAddr,
|
|
28016
|
-
asset:
|
|
28244
|
+
asset: currencyFor16(collAddr, collDecimals, collSymbol, tokens),
|
|
28017
28245
|
totalDeposits: totalColl,
|
|
28018
28246
|
totalDebtStable: 0,
|
|
28019
28247
|
totalDebt: 0,
|
|
@@ -28057,7 +28285,7 @@ function convertDssMarketsToResponse(raw, chainId, prices = {}, _additionalYield
|
|
|
28057
28285
|
name: debtSymbol,
|
|
28058
28286
|
poolId: cfg.vat.toLowerCase(),
|
|
28059
28287
|
underlying: debtAddr,
|
|
28060
|
-
asset:
|
|
28288
|
+
asset: currencyFor16(debtAddr, debtDecimals, debtSymbol, tokens),
|
|
28061
28289
|
totalDeposits: 0,
|
|
28062
28290
|
totalDebtStable: 0,
|
|
28063
28291
|
totalDebt,
|
|
@@ -28207,26 +28435,26 @@ async function fetchFrankencoinMarkets(lender, chainId) {
|
|
|
28207
28435
|
} catch {
|
|
28208
28436
|
return { lender, config, chainData, markets: [] };
|
|
28209
28437
|
}
|
|
28210
|
-
const
|
|
28438
|
+
const big23 = (v) => {
|
|
28211
28439
|
if (typeof v === "bigint") return v;
|
|
28212
28440
|
if (typeof v === "number") return BigInt(v);
|
|
28213
28441
|
return null;
|
|
28214
28442
|
};
|
|
28215
28443
|
const out = markets.map((market, i) => {
|
|
28216
28444
|
const base = i * READS_PER_MARKET3;
|
|
28217
|
-
const expiration =
|
|
28445
|
+
const expiration = big23(results[base + 7]);
|
|
28218
28446
|
return {
|
|
28219
28447
|
market,
|
|
28220
|
-
price:
|
|
28221
|
-
minted:
|
|
28222
|
-
availableForClones:
|
|
28223
|
-
annualInterestPPM:
|
|
28224
|
-
currentFeePPM:
|
|
28225
|
-
reserveContribution:
|
|
28226
|
-
challengedAmount:
|
|
28448
|
+
price: big23(results[base]),
|
|
28449
|
+
minted: big23(results[base + 1]),
|
|
28450
|
+
availableForClones: big23(results[base + 2]),
|
|
28451
|
+
annualInterestPPM: big23(results[base + 3]),
|
|
28452
|
+
currentFeePPM: big23(results[base + 4]),
|
|
28453
|
+
reserveContribution: big23(results[base + 5]),
|
|
28454
|
+
challengedAmount: big23(results[base + 6]),
|
|
28227
28455
|
expiration,
|
|
28228
28456
|
isClosed: typeof results[base + 8] === "boolean" ? results[base + 8] : null,
|
|
28229
|
-
collateralBalance:
|
|
28457
|
+
collateralBalance: big23(results[base + 9])
|
|
28230
28458
|
};
|
|
28231
28459
|
});
|
|
28232
28460
|
return { lender, config, chainData, markets: out };
|
|
@@ -28248,7 +28476,7 @@ function frankencoinKeyParts(key3) {
|
|
|
28248
28476
|
};
|
|
28249
28477
|
}
|
|
28250
28478
|
var PPM = 1e6;
|
|
28251
|
-
function
|
|
28479
|
+
function currencyFor17(address, decimals, symbol, tokens) {
|
|
28252
28480
|
const lower4 = address.toLowerCase();
|
|
28253
28481
|
return tokens[lower4] ?? { address: lower4, symbol, name: symbol, decimals };
|
|
28254
28482
|
}
|
|
@@ -28299,7 +28527,7 @@ function convertFrankencoinMarketsToResponse(raw, chainId, prices = {}, _additio
|
|
|
28299
28527
|
name: "Collateral " + collSymbol,
|
|
28300
28528
|
poolId: market.position.toLowerCase(),
|
|
28301
28529
|
underlying: collAddr,
|
|
28302
|
-
asset:
|
|
28530
|
+
asset: currencyFor17(collAddr, collDecimals, collSymbol, tokens),
|
|
28303
28531
|
totalDeposits: totalColl,
|
|
28304
28532
|
totalDebtStable: 0,
|
|
28305
28533
|
totalDebt: 0,
|
|
@@ -28346,7 +28574,7 @@ function convertFrankencoinMarketsToResponse(raw, chainId, prices = {}, _additio
|
|
|
28346
28574
|
name: debtSymbol,
|
|
28347
28575
|
poolId: cfg.mintingHub.toLowerCase(),
|
|
28348
28576
|
underlying: debtAddr,
|
|
28349
|
-
asset:
|
|
28577
|
+
asset: currencyFor17(debtAddr, debtDecimals, debtSymbol, tokens),
|
|
28350
28578
|
totalDeposits: 0,
|
|
28351
28579
|
totalDebtStable: 0,
|
|
28352
28580
|
totalDebt,
|
|
@@ -29065,6 +29293,7 @@ async function getLenderDataFromApi(lender, chainId, prices, additionalYields, i
|
|
|
29065
29293
|
if (isMidnight(lender)) return await fetchMidnightMarkets(chainId);
|
|
29066
29294
|
if (isTerm(lender)) return await fetchTermMarkets(chainId);
|
|
29067
29295
|
if (isExactly(lender)) return await fetchExactlyMarkets(chainId);
|
|
29296
|
+
if (isFlyingTulip(lender)) return await fetchFlyingTulipMarkets(chainId);
|
|
29068
29297
|
if (isLiquityFamily(lender)) return await fetchLiquityMarkets(lender, chainId);
|
|
29069
29298
|
if (isRiver(lender)) return await fetchRiverMarkets(lender, chainId);
|
|
29070
29299
|
if (isTeller(lender)) return await fetchTellerMarkets(chainId);
|
|
@@ -29143,6 +29372,14 @@ function convertLenderDataFromApi(lender, chainId, data, prices, additionalYield
|
|
|
29143
29372
|
additionalYields,
|
|
29144
29373
|
list
|
|
29145
29374
|
);
|
|
29375
|
+
if (isFlyingTulip(lender))
|
|
29376
|
+
return convertFlyingTulipMarketsToResponse(
|
|
29377
|
+
data,
|
|
29378
|
+
chainId,
|
|
29379
|
+
prices,
|
|
29380
|
+
additionalYields,
|
|
29381
|
+
list
|
|
29382
|
+
)[lender] ?? {};
|
|
29146
29383
|
if (isCooler(lender))
|
|
29147
29384
|
return convertCoolerMarketsToResponse(
|
|
29148
29385
|
data,
|
|
@@ -29504,6 +29741,7 @@ function lenderApiOnly(lender, chainId) {
|
|
|
29504
29741
|
if (isMidnight(lender)) return true;
|
|
29505
29742
|
if (isTerm(lender)) return true;
|
|
29506
29743
|
if (isExactly(lender)) return true;
|
|
29744
|
+
if (isFlyingTulip(lender)) return true;
|
|
29507
29745
|
if (isLiquityFamily(lender)) return true;
|
|
29508
29746
|
if (isRiver(lender)) return true;
|
|
29509
29747
|
if (isTeller(lender)) return true;
|
|
@@ -31770,7 +32008,7 @@ var getCachedDssCdps = (lender, chainId, account) => {
|
|
|
31770
32008
|
if (!hit || Date.now() - hit.at > CACHE_TTL_MS2) return void 0;
|
|
31771
32009
|
return hit;
|
|
31772
32010
|
};
|
|
31773
|
-
var
|
|
32011
|
+
var big7 = (v) => {
|
|
31774
32012
|
try {
|
|
31775
32013
|
if (typeof v === "bigint") return v;
|
|
31776
32014
|
if (typeof v === "number" || typeof v === "string") return BigInt(v);
|
|
@@ -31801,7 +32039,7 @@ var buildDssUserCall = async (chainId, lender, account) => {
|
|
|
31801
32039
|
],
|
|
31802
32040
|
allowFailure: false
|
|
31803
32041
|
});
|
|
31804
|
-
owners.push({ owner: account, count:
|
|
32042
|
+
owners.push({ owner: account, count: big7(rawCount), cursor: big7(rawFirst) });
|
|
31805
32043
|
const proxy = String(rawProxy ?? zero2);
|
|
31806
32044
|
if (proxy.toLowerCase() !== zero2) {
|
|
31807
32045
|
const [pCount, pFirst] = await multicallRetryUniversal({
|
|
@@ -31813,7 +32051,7 @@ var buildDssUserCall = async (chainId, lender, account) => {
|
|
|
31813
32051
|
],
|
|
31814
32052
|
allowFailure: false
|
|
31815
32053
|
});
|
|
31816
|
-
owners.push({ owner: proxy, count:
|
|
32054
|
+
owners.push({ owner: proxy, count: big7(pCount), cursor: big7(pFirst) });
|
|
31817
32055
|
}
|
|
31818
32056
|
} catch {
|
|
31819
32057
|
return [];
|
|
@@ -31854,7 +32092,7 @@ var buildDssUserCall = async (chainId, lender, account) => {
|
|
|
31854
32092
|
if (curated.has(ilk)) {
|
|
31855
32093
|
cdps.push({ cdpId: cursor.toString(), urn: String(urn), ilk });
|
|
31856
32094
|
}
|
|
31857
|
-
cursor =
|
|
32095
|
+
cursor = big7(field6(link, "next", 1));
|
|
31858
32096
|
}
|
|
31859
32097
|
}
|
|
31860
32098
|
} catch {
|
|
@@ -35043,7 +35281,7 @@ var getExactlyUserDataConverter = (_lender, chainId, account, meta) => {
|
|
|
35043
35281
|
expected
|
|
35044
35282
|
];
|
|
35045
35283
|
};
|
|
35046
|
-
var
|
|
35284
|
+
var big8 = (v) => {
|
|
35047
35285
|
try {
|
|
35048
35286
|
if (typeof v === "bigint") return v;
|
|
35049
35287
|
if (typeof v === "number" || typeof v === "string") return BigInt(v);
|
|
@@ -35051,7 +35289,7 @@ var big7 = (v) => {
|
|
|
35051
35289
|
}
|
|
35052
35290
|
return 0n;
|
|
35053
35291
|
};
|
|
35054
|
-
var field7 = (res, name, idx) =>
|
|
35292
|
+
var field7 = (res, name, idx) => big8(res?.[name] ?? res?.[idx]);
|
|
35055
35293
|
var getLiquityUserDataConverter = (lender, chainId, account, meta) => {
|
|
35056
35294
|
const cfg = liquityConfigFor(lender, chainId);
|
|
35057
35295
|
const branches = liquityBranchesByChain(lender, chainId);
|
|
@@ -35172,11 +35410,11 @@ var getLiquityUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
35172
35410
|
};
|
|
35173
35411
|
});
|
|
35174
35412
|
const spBase = troves.length * 2;
|
|
35175
|
-
const spDeposit =
|
|
35176
|
-
const spYield =
|
|
35177
|
-
const spCollGain =
|
|
35178
|
-
const spStashed =
|
|
35179
|
-
const collSurplus = branch.collSurplusPool ?
|
|
35413
|
+
const spDeposit = big8(slice2[spBase]);
|
|
35414
|
+
const spYield = big8(slice2[spBase + 1]);
|
|
35415
|
+
const spCollGain = big8(slice2[spBase + 2]);
|
|
35416
|
+
const spStashed = big8(slice2[spBase + 3]);
|
|
35417
|
+
const collSurplus = branch.collSurplusPool ? big8(slice2[spBase + 4]) : 0n;
|
|
35180
35418
|
const spStable = spDeposit + spYield;
|
|
35181
35419
|
const spColl = spCollGain + spStashed + collSurplus;
|
|
35182
35420
|
if (spStable > 0n || spColl > 0n) {
|
|
@@ -35255,7 +35493,7 @@ var getLiquityUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
35255
35493
|
expected
|
|
35256
35494
|
];
|
|
35257
35495
|
};
|
|
35258
|
-
var
|
|
35496
|
+
var big9 = (v) => {
|
|
35259
35497
|
try {
|
|
35260
35498
|
if (typeof v === "bigint") return v;
|
|
35261
35499
|
if (typeof v === "number" || typeof v === "string") return BigInt(v);
|
|
@@ -35263,7 +35501,7 @@ var big8 = (v) => {
|
|
|
35263
35501
|
}
|
|
35264
35502
|
return 0n;
|
|
35265
35503
|
};
|
|
35266
|
-
var field8 = (res, name, idx) =>
|
|
35504
|
+
var field8 = (res, name, idx) => big9(res?.[name] ?? res?.[idx]);
|
|
35267
35505
|
var getRiverUserDataConverter = (lender, chainId, account, meta) => {
|
|
35268
35506
|
const cfg = riverConfigFor(lender, chainId);
|
|
35269
35507
|
const markets = riverChainData(lender, chainId)?.markets ?? [];
|
|
@@ -35279,13 +35517,13 @@ var getRiverUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
35279
35517
|
const debtAddr = cfg.debtToken.toLowerCase();
|
|
35280
35518
|
const debtDecimals = cfg.debtDecimals ?? 18;
|
|
35281
35519
|
const out = {};
|
|
35282
|
-
const spDeposit =
|
|
35520
|
+
const spDeposit = big9(data[markets.length * RIVER_CALLS_PER_MARKET]);
|
|
35283
35521
|
markets.forEach((market, i) => {
|
|
35284
35522
|
const base = i * RIVER_CALLS_PER_MARKET;
|
|
35285
35523
|
const entire = data[base];
|
|
35286
35524
|
if (isFailedCall(entire) || isFailedCall(data[base + 1])) return;
|
|
35287
|
-
const status = Number(
|
|
35288
|
-
const surplus =
|
|
35525
|
+
const status = Number(big9(data[base + 1]));
|
|
35526
|
+
const surplus = big9(data[base + 2]);
|
|
35289
35527
|
const lenderKey = riverLenderKey(lender, chainId, market.index);
|
|
35290
35528
|
const metaMap = meta?.[lenderKey];
|
|
35291
35529
|
if (!metaMap) return;
|
|
@@ -35396,7 +35634,7 @@ var getRiverUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
35396
35634
|
viaLens ? 1 : expected
|
|
35397
35635
|
];
|
|
35398
35636
|
};
|
|
35399
|
-
var
|
|
35637
|
+
var big10 = (v) => {
|
|
35400
35638
|
try {
|
|
35401
35639
|
if (typeof v === "bigint") return v;
|
|
35402
35640
|
if (typeof v === "number" || typeof v === "string") return BigInt(v);
|
|
@@ -35419,24 +35657,24 @@ var getInverseUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
35419
35657
|
const dolaAddr = cfg.dola.toLowerCase();
|
|
35420
35658
|
const debtDecimals = cfg.debtDecimals ?? 18;
|
|
35421
35659
|
const tailBase = markets.length * INVERSE_CALLS_PER_MARKET;
|
|
35422
|
-
const dbrBalance =
|
|
35423
|
-
const dbrDeficit =
|
|
35660
|
+
const dbrBalance = big10(data[tailBase]);
|
|
35661
|
+
const dbrDeficit = big10(data[tailBase + 1]);
|
|
35424
35662
|
const dbrSignedRaw = data[tailBase + 2];
|
|
35425
|
-
const dbrSigned = isFailedCall(dbrSignedRaw) ? 0n :
|
|
35663
|
+
const dbrSigned = isFailedCall(dbrSignedRaw) ? 0n : big10(dbrSignedRaw);
|
|
35426
35664
|
const dbrTotalDebtRaw = data[tailBase + 3];
|
|
35427
|
-
const dbrTotalDebt = isFailedCall(dbrTotalDebtRaw) ? 0n :
|
|
35665
|
+
const dbrTotalDebt = isFailedCall(dbrTotalDebtRaw) ? 0n : big10(dbrTotalDebtRaw);
|
|
35428
35666
|
const dbrRunway = dbrTotalDebt > 0n ? dbrBalance * 31536000n / dbrTotalDebt : 0n;
|
|
35429
35667
|
const nowSec9 = BigInt(Math.floor(Date.now() / 1e3));
|
|
35430
35668
|
const out = {};
|
|
35431
35669
|
markets.forEach((market, i) => {
|
|
35432
35670
|
const base = i * INVERSE_CALLS_PER_MARKET;
|
|
35433
|
-
const escrowBal = isFailedCall(data[base]) ? 0n :
|
|
35671
|
+
const escrowBal = isFailedCall(data[base]) ? 0n : big10(data[base]);
|
|
35434
35672
|
const debtRaw = data[base + 1];
|
|
35435
35673
|
if (isFailedCall(debtRaw)) return;
|
|
35436
|
-
const debt =
|
|
35674
|
+
const debt = big10(debtRaw);
|
|
35437
35675
|
if (escrowBal === 0n && debt === 0n) return;
|
|
35438
|
-
const creditLimit = isFailedCall(data[base + 2]) ? 0n :
|
|
35439
|
-
const withdrawalLimit = isFailedCall(data[base + 3]) ? 0n :
|
|
35676
|
+
const creditLimit = isFailedCall(data[base + 2]) ? 0n : big10(data[base + 2]);
|
|
35677
|
+
const withdrawalLimit = isFailedCall(data[base + 3]) ? 0n : big10(data[base + 3]);
|
|
35440
35678
|
const lenderKey = inverseLenderKey(lender, market.address);
|
|
35441
35679
|
const metaMap = meta?.[lenderKey];
|
|
35442
35680
|
if (!metaMap) return;
|
|
@@ -35522,7 +35760,7 @@ var getInverseUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
35522
35760
|
expected
|
|
35523
35761
|
];
|
|
35524
35762
|
};
|
|
35525
|
-
var
|
|
35763
|
+
var big11 = (v) => {
|
|
35526
35764
|
try {
|
|
35527
35765
|
if (typeof v === "bigint") return v;
|
|
35528
35766
|
if (typeof v === "number" || typeof v === "string") return BigInt(v);
|
|
@@ -35549,8 +35787,8 @@ var getCoolerUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
35549
35787
|
totalDelegated: raw[6]
|
|
35550
35788
|
} : raw;
|
|
35551
35789
|
if (pos === null || typeof pos !== "object") return void 0;
|
|
35552
|
-
const collateral =
|
|
35553
|
-
const debt =
|
|
35790
|
+
const collateral = big11(pos.collateral);
|
|
35791
|
+
const debt = big11(pos.currentDebt);
|
|
35554
35792
|
if (collateral === 0n && debt === 0n) return void 0;
|
|
35555
35793
|
const collAddr = cfg.gohm.toLowerCase();
|
|
35556
35794
|
const collUid = createMarketUid(chainId, lender, collAddr);
|
|
@@ -35568,11 +35806,11 @@ var getCoolerUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
35568
35806
|
const loanOracle = loanMeta ? getOraclePrice(loanMeta) : 0;
|
|
35569
35807
|
const loanHist = loanMeta?.price?.priceUsd24h ?? loanDisplay;
|
|
35570
35808
|
const coolerInfo = {
|
|
35571
|
-
healthFactor:
|
|
35572
|
-
currentLtv:
|
|
35573
|
-
totalDelegated:
|
|
35574
|
-
maxOriginationDebtAmount:
|
|
35575
|
-
liquidationDebtAmount:
|
|
35809
|
+
healthFactor: big11(pos.healthFactor).toString(),
|
|
35810
|
+
currentLtv: big11(pos.currentLtv).toString(),
|
|
35811
|
+
totalDelegated: big11(pos.totalDelegated).toString(),
|
|
35812
|
+
maxOriginationDebtAmount: big11(pos.maxOriginationDebtAmount).toString(),
|
|
35813
|
+
liquidationDebtAmount: big11(pos.liquidationDebtAmount).toString()
|
|
35576
35814
|
};
|
|
35577
35815
|
const collStr = parseRawAmount(collateral.toString(), 18);
|
|
35578
35816
|
const collNum = Number(collStr);
|
|
@@ -35647,18 +35885,18 @@ var statesFromSlice2 = (data, marketCount) => {
|
|
|
35647
35885
|
const healthRaw = data[base + 1];
|
|
35648
35886
|
const pricesRaw = data[base + 2];
|
|
35649
35887
|
out.set(i, {
|
|
35650
|
-
collateral:
|
|
35651
|
-
bandBorrowed:
|
|
35652
|
-
debt:
|
|
35653
|
-
bandCount: Number(
|
|
35654
|
-
health: isFailedCall(healthRaw) ? 0n :
|
|
35888
|
+
collateral: big12(stateRaw[0]),
|
|
35889
|
+
bandBorrowed: big12(stateRaw[1]),
|
|
35890
|
+
debt: big12(stateRaw[2]),
|
|
35891
|
+
bandCount: Number(big12(stateRaw[3])),
|
|
35892
|
+
health: isFailedCall(healthRaw) ? 0n : big12(healthRaw),
|
|
35655
35893
|
priceUpper: arrAt(pricesRaw, 0),
|
|
35656
35894
|
priceLower: arrAt(pricesRaw, 1),
|
|
35657
|
-
bands: isFailedCall(ticksRaw) || !Array.isArray(ticksRaw) ? void 0 : [Number(
|
|
35895
|
+
bands: isFailedCall(ticksRaw) || !Array.isArray(ticksRaw) ? void 0 : [Number(big12(ticksRaw[0])), Number(big12(ticksRaw[1]))],
|
|
35658
35896
|
delegated: isFailedCall(approvalRaw) ? false : approvalRaw === true,
|
|
35659
|
-
vaultShares: isFailedCall(vaultSharesRaw) ? 0n :
|
|
35660
|
-
gaugeShares: isFailedCall(gaugeSharesRaw) ? 0n :
|
|
35661
|
-
shareToAsset: isFailedCall(shareToAssetRaw) ? 0n :
|
|
35897
|
+
vaultShares: isFailedCall(vaultSharesRaw) ? 0n : big12(vaultSharesRaw),
|
|
35898
|
+
gaugeShares: isFailedCall(gaugeSharesRaw) ? 0n : big12(gaugeSharesRaw),
|
|
35899
|
+
shareToAsset: isFailedCall(shareToAssetRaw) ? 0n : big12(shareToAssetRaw)
|
|
35662
35900
|
});
|
|
35663
35901
|
}
|
|
35664
35902
|
return out;
|
|
@@ -35687,7 +35925,7 @@ var statesFromLens = (rows) => {
|
|
|
35687
35925
|
}
|
|
35688
35926
|
return out;
|
|
35689
35927
|
};
|
|
35690
|
-
var
|
|
35928
|
+
var big12 = (v) => {
|
|
35691
35929
|
try {
|
|
35692
35930
|
if (typeof v === "bigint") return v;
|
|
35693
35931
|
if (typeof v === "number" || typeof v === "string") return BigInt(v);
|
|
@@ -35697,7 +35935,7 @@ var big11 = (v) => {
|
|
|
35697
35935
|
};
|
|
35698
35936
|
var arrAt = (v, i) => {
|
|
35699
35937
|
if (isFailedCall(v) || !Array.isArray(v)) return 0n;
|
|
35700
|
-
return
|
|
35938
|
+
return big12(v[i]);
|
|
35701
35939
|
};
|
|
35702
35940
|
var getLlamaLendUserDataConverter = (lender, chainId, account, meta) => {
|
|
35703
35941
|
const cfg = llamaLendConfigFor(lender, chainId);
|
|
@@ -35836,7 +36074,7 @@ var getLlamaLendUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
35836
36074
|
expected
|
|
35837
36075
|
];
|
|
35838
36076
|
};
|
|
35839
|
-
var
|
|
36077
|
+
var big13 = (v) => {
|
|
35840
36078
|
try {
|
|
35841
36079
|
if (typeof v === "bigint") return v;
|
|
35842
36080
|
if (typeof v === "number" || typeof v === "string") return BigInt(v);
|
|
@@ -35844,7 +36082,7 @@ var big12 = (v) => {
|
|
|
35844
36082
|
}
|
|
35845
36083
|
return 0n;
|
|
35846
36084
|
};
|
|
35847
|
-
var tupleAt = (v, i) => Array.isArray(v) ?
|
|
36085
|
+
var tupleAt = (v, i) => Array.isArray(v) ? big13(v[i]) : 0n;
|
|
35848
36086
|
var ONE4 = 10n ** 18n;
|
|
35849
36087
|
function sharesToAmount(shares, totalAmount, totalShares) {
|
|
35850
36088
|
if (totalShares === 0n || shares === 0n) return 0n;
|
|
@@ -35870,7 +36108,7 @@ var getResupplyUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
35870
36108
|
if (isFailedCall(accounting) || !Array.isArray(accounting)) return;
|
|
35871
36109
|
const totalBorrowAmount = tupleAt(accounting, 1);
|
|
35872
36110
|
const totalBorrowShares = tupleAt(accounting, 2);
|
|
35873
|
-
const sharePrice = isFailedCall(data[base + 1]) ? 0n :
|
|
36111
|
+
const sharePrice = isFailedCall(data[base + 1]) ? 0n : big13(data[base + 1]);
|
|
35874
36112
|
const lenderKey = resupplyLenderKey(lender, chainId, pair);
|
|
35875
36113
|
const metaMap = meta?.[lenderKey];
|
|
35876
36114
|
if (!metaMap) return;
|
|
@@ -35968,7 +36206,7 @@ var getResupplyUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
35968
36206
|
expected
|
|
35969
36207
|
];
|
|
35970
36208
|
};
|
|
35971
|
-
var
|
|
36209
|
+
var big14 = (v) => {
|
|
35972
36210
|
try {
|
|
35973
36211
|
if (typeof v === "bigint") return v;
|
|
35974
36212
|
if (typeof v === "number" || typeof v === "string") return BigInt(v);
|
|
@@ -36003,9 +36241,9 @@ var getFraxlendUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
36003
36241
|
const fTokenRaw = data[base + 2];
|
|
36004
36242
|
const previewRaw = data[base + 3];
|
|
36005
36243
|
if (isFailedCall(collRaw) || isFailedCall(sharesRaw)) return;
|
|
36006
|
-
const collateral =
|
|
36007
|
-
const borrowShares =
|
|
36008
|
-
const fTokenShares = isFailedCall(fTokenRaw) ? 0n :
|
|
36244
|
+
const collateral = big14(collRaw);
|
|
36245
|
+
const borrowShares = big14(sharesRaw);
|
|
36246
|
+
const fTokenShares = isFailedCall(fTokenRaw) ? 0n : big14(fTokenRaw);
|
|
36009
36247
|
if (collateral === 0n && borrowShares === 0n && fTokenShares === 0n)
|
|
36010
36248
|
return;
|
|
36011
36249
|
let totalBorrowAmount = 0n;
|
|
@@ -36015,10 +36253,10 @@ var getFraxlendUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
36015
36253
|
if (!isFailedCall(previewRaw) && previewRaw) {
|
|
36016
36254
|
const ta = previewRaw[4];
|
|
36017
36255
|
const tb = previewRaw[5];
|
|
36018
|
-
totalAssetAmount =
|
|
36019
|
-
totalAssetShares =
|
|
36020
|
-
totalBorrowAmount =
|
|
36021
|
-
totalBorrowShares =
|
|
36256
|
+
totalAssetAmount = big14(ta?.amount ?? ta?.[0]);
|
|
36257
|
+
totalAssetShares = big14(ta?.shares ?? ta?.[1]);
|
|
36258
|
+
totalBorrowAmount = big14(tb?.amount ?? tb?.[0]);
|
|
36259
|
+
totalBorrowShares = big14(tb?.shares ?? tb?.[1]);
|
|
36022
36260
|
}
|
|
36023
36261
|
const debt = fraxlendToAmount(
|
|
36024
36262
|
borrowShares,
|
|
@@ -36128,7 +36366,7 @@ var getFraxlendUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
36128
36366
|
];
|
|
36129
36367
|
};
|
|
36130
36368
|
var WAD14 = 10n ** 18n;
|
|
36131
|
-
var
|
|
36369
|
+
var big15 = (v) => {
|
|
36132
36370
|
try {
|
|
36133
36371
|
if (typeof v === "bigint") return v;
|
|
36134
36372
|
if (typeof v === "number" || typeof v === "string") return BigInt(v);
|
|
@@ -36136,7 +36374,7 @@ var big14 = (v) => {
|
|
|
36136
36374
|
}
|
|
36137
36375
|
return 0n;
|
|
36138
36376
|
};
|
|
36139
|
-
var tupleAt2 = (v, i) => Array.isArray(v) ?
|
|
36377
|
+
var tupleAt2 = (v, i) => Array.isArray(v) ? big15(v[i]) : 0n;
|
|
36140
36378
|
var HOLD_PERIOD_SECONDS = 1200n;
|
|
36141
36379
|
var getCurvanceUserDataConverter = (lender, chainId, account, meta) => {
|
|
36142
36380
|
const cfg = curvanceConfigFor(lender, chainId);
|
|
@@ -36159,7 +36397,7 @@ var getCurvanceUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
36159
36397
|
const cooldownRaw = data[base];
|
|
36160
36398
|
const status = data[base + 1];
|
|
36161
36399
|
if (isFailedCall(status) || !Array.isArray(status)) continue;
|
|
36162
|
-
const cooldownTimestamp = isFailedCall(cooldownRaw) ? 0n :
|
|
36400
|
+
const cooldownTimestamp = isFailedCall(cooldownRaw) ? 0n : big15(cooldownRaw);
|
|
36163
36401
|
const holdPeriodEndsAt = cooldownTimestamp > 0n ? cooldownTimestamp + HOLD_PERIOD_SECONDS : 0n;
|
|
36164
36402
|
const holdPeriodActive = holdPeriodEndsAt > nowSeconds;
|
|
36165
36403
|
const lenderKey = curvanceLenderKey(lender, chainId, p.marketManager);
|
|
@@ -36181,10 +36419,10 @@ var getCurvanceUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
36181
36419
|
let rows = 0;
|
|
36182
36420
|
p.activeTokens.forEach(({ cToken, asset }, i) => {
|
|
36183
36421
|
const tokenBase = base + CURVANCE_MARKET_READS + i * CURVANCE_READS_PER_TOKEN;
|
|
36184
|
-
const shares = isFailedCall(data[tokenBase]) ? 0n :
|
|
36185
|
-
const collateralShares = isFailedCall(data[tokenBase + 1]) ? 0n :
|
|
36186
|
-
const debtRaw = isFailedCall(data[tokenBase + 2]) ? 0n :
|
|
36187
|
-
const exchangeRate = isFailedCall(data[tokenBase + 3]) ? 0n :
|
|
36422
|
+
const shares = isFailedCall(data[tokenBase]) ? 0n : big15(data[tokenBase]);
|
|
36423
|
+
const collateralShares = isFailedCall(data[tokenBase + 1]) ? 0n : big15(data[tokenBase + 1]);
|
|
36424
|
+
const debtRaw = isFailedCall(data[tokenBase + 2]) ? 0n : big15(data[tokenBase + 2]);
|
|
36425
|
+
const exchangeRate = isFailedCall(data[tokenBase + 3]) ? 0n : big15(data[tokenBase + 3]);
|
|
36188
36426
|
info.tokens[cToken.toLowerCase()] = {
|
|
36189
36427
|
shares: shares.toString(),
|
|
36190
36428
|
collateralShares: collateralShares.toString(),
|
|
@@ -36244,7 +36482,7 @@ var getCurvanceUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
36244
36482
|
];
|
|
36245
36483
|
};
|
|
36246
36484
|
var WAD15 = 10n ** 18n;
|
|
36247
|
-
var
|
|
36485
|
+
var big16 = (v) => {
|
|
36248
36486
|
try {
|
|
36249
36487
|
if (typeof v === "bigint") return v;
|
|
36250
36488
|
if (typeof v === "number" || typeof v === "string") return BigInt(v);
|
|
@@ -36266,13 +36504,13 @@ var getTwyneUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
36266
36504
|
const base = i * TWYNE_READS_PER_VAULT;
|
|
36267
36505
|
const totalRaw = data[base];
|
|
36268
36506
|
if (isFailedCall(totalRaw)) return;
|
|
36269
|
-
const total =
|
|
36270
|
-
const reserved = isFailedCall(data[base + 1]) ? 0n :
|
|
36271
|
-
const debt = isFailedCall(data[base + 2]) ? 0n :
|
|
36272
|
-
const liqLtv = isFailedCall(data[base + 3]) ? 0n :
|
|
36507
|
+
const total = big16(totalRaw);
|
|
36508
|
+
const reserved = isFailedCall(data[base + 1]) ? 0n : big16(data[base + 1]);
|
|
36509
|
+
const debt = isFailedCall(data[base + 2]) ? 0n : big16(data[base + 2]);
|
|
36510
|
+
const liqLtv = isFailedCall(data[base + 3]) ? 0n : big16(data[base + 3]);
|
|
36273
36511
|
const canLiquidate = isFailedCall(data[base + 4]) ? false : Boolean(data[base + 4]);
|
|
36274
36512
|
const extLiquidated = isFailedCall(data[base + 5]) ? false : Boolean(data[base + 5]);
|
|
36275
|
-
const releasable = isFailedCall(data[base + 6]) ? 0n :
|
|
36513
|
+
const releasable = isFailedCall(data[base + 6]) ? 0n : big16(data[base + 6]);
|
|
36276
36514
|
const scale3 = ref.collateralToUnderlying ?? WAD15;
|
|
36277
36515
|
const userCollateral = total > reserved ? total - reserved : 0n;
|
|
36278
36516
|
if (userCollateral === 0n && debt === 0n) return;
|
|
@@ -36388,7 +36626,7 @@ var getTwyneUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
36388
36626
|
];
|
|
36389
36627
|
};
|
|
36390
36628
|
var RAY7 = 10n ** 27n;
|
|
36391
|
-
var
|
|
36629
|
+
var big17 = (v) => {
|
|
36392
36630
|
try {
|
|
36393
36631
|
if (typeof v === "bigint") return v;
|
|
36394
36632
|
if (typeof v === "number" || typeof v === "string") return BigInt(v);
|
|
@@ -36396,7 +36634,7 @@ var big16 = (v) => {
|
|
|
36396
36634
|
}
|
|
36397
36635
|
return 0n;
|
|
36398
36636
|
};
|
|
36399
|
-
var field9 = (res, name, idx) =>
|
|
36637
|
+
var field9 = (res, name, idx) => big17(res?.[name] ?? res?.[idx]);
|
|
36400
36638
|
var getDssUserDataConverter = (lender, chainId, account, meta) => {
|
|
36401
36639
|
const cfg = dssConfigFor(lender, chainId);
|
|
36402
36640
|
const markets = dssChainData(lender, chainId)?.markets ?? [];
|
|
@@ -36511,7 +36749,7 @@ var getDssUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
36511
36749
|
expected
|
|
36512
36750
|
];
|
|
36513
36751
|
};
|
|
36514
|
-
var
|
|
36752
|
+
var big18 = (v) => {
|
|
36515
36753
|
try {
|
|
36516
36754
|
if (typeof v === "bigint") return v;
|
|
36517
36755
|
if (typeof v === "number" || typeof v === "string") return BigInt(v);
|
|
@@ -36541,11 +36779,11 @@ var getFrankencoinUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
36541
36779
|
const ownerRes = data[base];
|
|
36542
36780
|
if (isFailedCall(ownerRes)) return;
|
|
36543
36781
|
if (String(ownerRes).toLowerCase() !== lowerAccount) return;
|
|
36544
|
-
const minted =
|
|
36545
|
-
const price2 =
|
|
36546
|
-
const expiration =
|
|
36547
|
-
const challenged =
|
|
36548
|
-
const coll =
|
|
36782
|
+
const minted = big18(data[base + 1]);
|
|
36783
|
+
const price2 = big18(data[base + 2]);
|
|
36784
|
+
const expiration = big18(data[base + 3]);
|
|
36785
|
+
const challenged = big18(data[base + 4]);
|
|
36786
|
+
const coll = big18(data[base + 5]);
|
|
36549
36787
|
if (minted === 0n && coll === 0n) return;
|
|
36550
36788
|
const market = marketByOriginal.get(p.original);
|
|
36551
36789
|
if (!market) return;
|
|
@@ -36646,7 +36884,7 @@ var getFrankencoinUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
36646
36884
|
|
|
36647
36885
|
// src/lending/user-data/teller/userCallParse.ts
|
|
36648
36886
|
var nowSec7 = () => Math.floor(Date.now() / 1e3);
|
|
36649
|
-
var
|
|
36887
|
+
var big19 = (v) => {
|
|
36650
36888
|
try {
|
|
36651
36889
|
if (typeof v === "bigint") return v;
|
|
36652
36890
|
if (typeof v === "number" || typeof v === "string") return BigInt(v);
|
|
@@ -36668,7 +36906,7 @@ var getTellerUserDataConverter = (_lender, chainId, account, meta) => {
|
|
|
36668
36906
|
const base = i * TELLER_CALLS_PER_BID;
|
|
36669
36907
|
const bidRes = data[base];
|
|
36670
36908
|
const owed = data[base + 1];
|
|
36671
|
-
const collAmount =
|
|
36909
|
+
const collAmount = big19(data[base + 2]);
|
|
36672
36910
|
const defaulted = !!data[base + 3];
|
|
36673
36911
|
if (isFailedCall(bidRes) || isFailedCall(owed) || !bidRes) return;
|
|
36674
36912
|
const pool = b.pool;
|
|
@@ -36689,17 +36927,17 @@ var getTellerUserDataConverter = (_lender, chainId, account, meta) => {
|
|
|
36689
36927
|
const collDisplay = collMeta ? getDisplayPrice(collMeta) : 0;
|
|
36690
36928
|
const collOracle = collMeta ? getOraclePrice(collMeta) : 0;
|
|
36691
36929
|
const collHist = collMeta?.price?.priceUsd24h ?? collDisplay;
|
|
36692
|
-
const owedPrincipal =
|
|
36693
|
-
const owedInterest =
|
|
36930
|
+
const owedPrincipal = big19(field10(owed, "principal", 0));
|
|
36931
|
+
const owedInterest = big19(field10(owed, "interest", 1));
|
|
36694
36932
|
const owedTotal = owedPrincipal + owedInterest;
|
|
36695
36933
|
if (owedTotal === 0n && collAmount === 0n) return;
|
|
36696
36934
|
const loanDetails = field10(bidRes, "loanDetails", 5);
|
|
36697
36935
|
const terms = field10(bidRes, "terms", 6);
|
|
36698
36936
|
const acceptedTs = Number(
|
|
36699
|
-
|
|
36937
|
+
big19(field10(loanDetails, "acceptedTimestamp", 4))
|
|
36700
36938
|
);
|
|
36701
|
-
const loanDuration = Number(
|
|
36702
|
-
const aprBps = Number(
|
|
36939
|
+
const loanDuration = Number(big19(field10(loanDetails, "loanDuration", 6)));
|
|
36940
|
+
const aprBps = Number(big19(field10(terms, "APR", 2)));
|
|
36703
36941
|
const maturity = acceptedTs > 0 ? acceptedTs + loanDuration : void 0;
|
|
36704
36942
|
const isMatured2 = defaulted || maturity !== void 0 && maturity < now;
|
|
36705
36943
|
const collStr = parseRawAmount(collAmount.toString(), collDecimals);
|
|
@@ -41898,7 +42136,7 @@ function unflattenLenderData(pools) {
|
|
|
41898
42136
|
}
|
|
41899
42137
|
return result;
|
|
41900
42138
|
}
|
|
41901
|
-
var getLenderUserDataResult = async (chainId, queriesRaw,
|
|
42139
|
+
var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient20, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, retries = 3, logs = false, concurrency = 1, permanentFailures, onEndpointFailure) => {
|
|
41902
42140
|
const queries = organizeUserQueries(queriesRaw);
|
|
41903
42141
|
const builtCalls = await Promise.all(
|
|
41904
42142
|
queries.map(async (query3) => {
|
|
@@ -41908,7 +42146,7 @@ var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient19, allowF
|
|
|
41908
42146
|
query3.lender,
|
|
41909
42147
|
query3.account,
|
|
41910
42148
|
query3.params,
|
|
41911
|
-
|
|
42149
|
+
getEvmClient20
|
|
41912
42150
|
);
|
|
41913
42151
|
return callData.map((call) => ({ call, abi: call.abi ?? abi }));
|
|
41914
42152
|
})
|
|
@@ -41918,7 +42156,7 @@ var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient19, allowF
|
|
|
41918
42156
|
chainId,
|
|
41919
42157
|
calls.map((call) => call.abi),
|
|
41920
42158
|
calls.map((call) => call.call),
|
|
41921
|
-
|
|
42159
|
+
getEvmClient20,
|
|
41922
42160
|
concurrency,
|
|
41923
42161
|
retries,
|
|
41924
42162
|
allowFailure,
|
|
@@ -45376,8 +45614,14 @@ var LST_REGISTRY = {
|
|
|
45376
45614
|
yieldKey: "Restaked Swell ETH::RSWETH"
|
|
45377
45615
|
},
|
|
45378
45616
|
{
|
|
45617
|
+
// Puffer pufETH. The underlying is **WETH**, not wstETH: `asset()`
|
|
45618
|
+
// returns `0xC02aaA39…` and the vault holds ZERO wstETH (verified
|
|
45619
|
+
// on-chain 2026-08-25). It was wstETH-denominated at launch and the
|
|
45620
|
+
// registry never followed the migration, so the row valued 24,108 ETH
|
|
45621
|
+
// of assets at the wstETH price — a ~20 % TVL overstatement, and a
|
|
45622
|
+
// `convertToAssets` of 1.082 labelled in the wrong unit.
|
|
45379
45623
|
address: "0xd9a442856c234a39a81a089c06451ebaa4306a72",
|
|
45380
|
-
underlying: "
|
|
45624
|
+
underlying: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
|
|
45381
45625
|
symbol: "pufETH",
|
|
45382
45626
|
brand: "Puffer",
|
|
45383
45627
|
decimals: 18,
|
|
@@ -45387,7 +45631,8 @@ var LST_REGISTRY = {
|
|
|
45387
45631
|
isMintable: true,
|
|
45388
45632
|
isNativeUnderlying: true,
|
|
45389
45633
|
mintContract: "0xd9a442856c234a39a81a089c06451ebaa4306a72",
|
|
45390
|
-
|
|
45634
|
+
// The builder's only path is the native `depositETH(receiver)` zap.
|
|
45635
|
+
mintInputAsset: "native",
|
|
45391
45636
|
withdrawalMode: "fee-or-queued",
|
|
45392
45637
|
yieldFetcher: pufethFetcher,
|
|
45393
45638
|
yieldKey: "PUFETH"
|
|
@@ -47672,13 +47917,107 @@ var strataFetcher = {
|
|
|
47672
47917
|
return out;
|
|
47673
47918
|
}
|
|
47674
47919
|
};
|
|
47920
|
+
var CHAIN_ID12 = "1";
|
|
47921
|
+
var SCRVUSD = "0x0655977feb2f289a4ab78af67bab0d17aab84367";
|
|
47922
|
+
var ONE_E1811 = 10n ** 18n;
|
|
47923
|
+
var WINDOW_SECONDS7 = 30 * 24 * 60 * 60;
|
|
47924
|
+
var BLOCK_TIME_SECONDS6 = 12;
|
|
47925
|
+
var WINDOW_BLOCKS6 = BigInt(Math.floor(WINDOW_SECONDS7 / BLOCK_TIME_SECONDS6));
|
|
47926
|
+
var SERIES_SPAN_SECONDS = 45 * 24 * 60 * 60;
|
|
47927
|
+
var MAX_RPC_TRIES6 = 2;
|
|
47928
|
+
var ONCHAIN_DEADLINE_MS2 = 12e3;
|
|
47929
|
+
var CURVE_SAVINGS_YIELD_URL = "https://prices.curve.finance/v1/crvusd/savings/yield";
|
|
47930
|
+
var SCRVUSD_KEY = "SCRVUSD";
|
|
47931
|
+
var SCRVUSD_GROUP_KEY = "Savings crvUSD::SCRVUSD";
|
|
47932
|
+
var SCRVUSD_GROUP_KEY_CASE = "Savings crvUSD::scrvUSD";
|
|
47933
|
+
var SCRVUSD_GROUP_KEY_BASE = "Superbridge Bridged scrvUSD::SCRVUSD";
|
|
47934
|
+
var CONVERT_TO_ASSETS_ABI4 = [
|
|
47935
|
+
{
|
|
47936
|
+
name: "convertToAssets",
|
|
47937
|
+
type: "function",
|
|
47938
|
+
stateMutability: "view",
|
|
47939
|
+
inputs: [{ type: "uint256" }],
|
|
47940
|
+
outputs: [{ type: "uint256" }]
|
|
47941
|
+
}
|
|
47942
|
+
];
|
|
47943
|
+
var fetchCurveSeriesAprPercent = async (nowSeconds) => {
|
|
47944
|
+
const end = Math.floor(nowSeconds);
|
|
47945
|
+
const start = end - SERIES_SPAN_SECONDS;
|
|
47946
|
+
const res = await fetch(
|
|
47947
|
+
`${CURVE_SAVINGS_YIELD_URL}?agg_number=1&agg_units=day&start=${start}&end=${end}`,
|
|
47948
|
+
{
|
|
47949
|
+
headers: { accept: "application/json" },
|
|
47950
|
+
signal: AbortSignal.timeout(8e3)
|
|
47951
|
+
}
|
|
47952
|
+
);
|
|
47953
|
+
if (!res.ok) throw new Error(`Curve savings HTTP ${res.status}`);
|
|
47954
|
+
const json = await res.json();
|
|
47955
|
+
const points = (json?.data ?? []).filter(
|
|
47956
|
+
(p) => typeof p?.timestamp === "number" && typeof p?.price === "number" && p.price >= 1
|
|
47957
|
+
).sort((a, b) => a.timestamp - b.timestamp);
|
|
47958
|
+
if (points.length < 2) throw new Error("scrvUSD: series too short");
|
|
47959
|
+
const last = points[points.length - 1];
|
|
47960
|
+
const base = [...points].reverse().find((p) => p.timestamp <= last.timestamp - WINDOW_SECONDS7);
|
|
47961
|
+
if (!base) throw new Error("scrvUSD: series does not span the window");
|
|
47962
|
+
const elapsed = last.timestamp - base.timestamp;
|
|
47963
|
+
if (elapsed <= 0) throw new Error("scrvUSD: non-positive window");
|
|
47964
|
+
return annualizeRateDeltaPercent(last.price, base.price, elapsed);
|
|
47965
|
+
};
|
|
47966
|
+
var readRateAt5 = (client, blockNumber) => client.readContract({
|
|
47967
|
+
address: SCRVUSD,
|
|
47968
|
+
abi: CONVERT_TO_ASSETS_ABI4,
|
|
47969
|
+
functionName: "convertToAssets",
|
|
47970
|
+
args: [ONE_E1811],
|
|
47971
|
+
...blockNumber !== void 0 ? { blockNumber } : {}
|
|
47972
|
+
});
|
|
47973
|
+
var computeAprOnChain2 = async () => {
|
|
47974
|
+
let lastErr;
|
|
47975
|
+
const deadline = Date.now() + ONCHAIN_DEADLINE_MS2;
|
|
47976
|
+
for (let rpcId = 0; rpcId < MAX_RPC_TRIES6; rpcId++) {
|
|
47977
|
+
if (Date.now() > deadline) break;
|
|
47978
|
+
try {
|
|
47979
|
+
const client = getEvmClient(CHAIN_ID12, rpcId);
|
|
47980
|
+
const head = await client.getBlockNumber();
|
|
47981
|
+
const pastBlock = head > WINDOW_BLOCKS6 ? head - WINDOW_BLOCKS6 : 0n;
|
|
47982
|
+
const [rateNow, rateThen, headBlock, thenBlock] = await Promise.all([
|
|
47983
|
+
readRateAt5(client),
|
|
47984
|
+
readRateAt5(client, pastBlock),
|
|
47985
|
+
client.getBlock({ blockNumber: head }),
|
|
47986
|
+
client.getBlock({ blockNumber: pastBlock })
|
|
47987
|
+
]);
|
|
47988
|
+
if (rateNow < ONE_E1811 || rateThen < ONE_E1811) {
|
|
47989
|
+
throw new Error("scrvUSD: share price below par \u2014 pruned or bad read");
|
|
47990
|
+
}
|
|
47991
|
+
const elapsed = Number(headBlock.timestamp - thenBlock.timestamp);
|
|
47992
|
+
if (elapsed <= 0) throw new Error("scrvUSD: non-positive window");
|
|
47993
|
+
return annualizeRateDeltaPercent(rateNow, rateThen, elapsed);
|
|
47994
|
+
} catch (e) {
|
|
47995
|
+
lastErr = e;
|
|
47996
|
+
}
|
|
47997
|
+
}
|
|
47998
|
+
throw lastErr ?? new Error("scrvUSD: no RPC served archive state");
|
|
47999
|
+
};
|
|
48000
|
+
var scrvusdFetcher = {
|
|
48001
|
+
label: "SCRVUSD",
|
|
48002
|
+
fetch: async () => {
|
|
48003
|
+
const apr = await fetchCurveSeriesAprPercent(Date.now() / 1e3).catch(() => computeAprOnChain2()).catch(() => 0);
|
|
48004
|
+
return {
|
|
48005
|
+
[SCRVUSD_KEY]: apr,
|
|
48006
|
+
[SCRVUSD_GROUP_KEY]: apr,
|
|
48007
|
+
[SCRVUSD_GROUP_KEY_CASE]: apr,
|
|
48008
|
+
[SCRVUSD_GROUP_KEY_BASE]: apr
|
|
48009
|
+
};
|
|
48010
|
+
}
|
|
48011
|
+
};
|
|
47675
48012
|
var thBill = "Theo Short Duration US Treasury Fund::THBILL";
|
|
48013
|
+
var thBillBare = "thBILL::thBILL";
|
|
47676
48014
|
var THBILL_DEFILLAMA_POOL = "e17dab50-85b1-45e8-b4a5-b8ae7898c4a3";
|
|
47677
48015
|
var thbillFetcher = {
|
|
47678
48016
|
label: "THBILL",
|
|
47679
48017
|
fetch: async () => {
|
|
47680
48018
|
const apy = await fetchDefiLlamaApy(THBILL_DEFILLAMA_POOL);
|
|
47681
|
-
|
|
48019
|
+
const apr = apyToAprPercent(apy);
|
|
48020
|
+
return { [thBill]: apr, [thBillBare]: apr };
|
|
47682
48021
|
}
|
|
47683
48022
|
};
|
|
47684
48023
|
var STHUSD_VAULT = "0xa808bc9775cb41c52c7842f8b50427fe7a770326";
|
|
@@ -47693,7 +48032,7 @@ var STHUSD_DEADLINE_MS = 12e3;
|
|
|
47693
48032
|
var STHUSD_KEY = "STHUSD";
|
|
47694
48033
|
var STHUSD_GROUP_KEY = "Staked thUSD::STHUSD";
|
|
47695
48034
|
var STHUSD_GROUP_KEY_OFT = "sthUSD::sthUSD";
|
|
47696
|
-
var
|
|
48035
|
+
var CONVERT_TO_ASSETS_ABI5 = [
|
|
47697
48036
|
{
|
|
47698
48037
|
name: "convertToAssets",
|
|
47699
48038
|
type: "function",
|
|
@@ -47704,7 +48043,7 @@ var CONVERT_TO_ASSETS_ABI4 = [
|
|
|
47704
48043
|
];
|
|
47705
48044
|
var readSthUsdRateAt = (client, blockNumber) => client.readContract({
|
|
47706
48045
|
address: STHUSD_VAULT,
|
|
47707
|
-
abi:
|
|
48046
|
+
abi: CONVERT_TO_ASSETS_ABI5,
|
|
47708
48047
|
functionName: "convertToAssets",
|
|
47709
48048
|
args: [STHUSD_UNIT],
|
|
47710
48049
|
...blockNumber !== void 0 ? { blockNumber } : {}
|
|
@@ -50744,6 +51083,55 @@ var SINGLE_CHAIN_ENTRIES = {
|
|
|
50744
51083
|
yieldFetcher: frankencoinSavingsFetcher,
|
|
50745
51084
|
yieldKey: zchfSavingsKey(Chain.ETHEREUM_MAINNET)
|
|
50746
51085
|
},
|
|
51086
|
+
{
|
|
51087
|
+
// Curve **scrvUSD** (Savings crvUSD) — an ERC-4626 over crvUSD, and
|
|
51088
|
+
// structurally a **Yearn V3 vault that Curve operates**: the share
|
|
51089
|
+
// token is an EIP-1167 proxy onto `YearnV3Vault.vy` v3.0.4
|
|
51090
|
+
// (`0xd8063123…`, Sourcify-verified), "Multi Strategy". Curve routes
|
|
51091
|
+
// crvUSD borrow revenue in and Yearn's profit-unlocking rail releases
|
|
51092
|
+
// it over `profitMaxUnlockTime` (7 days) per report.
|
|
51093
|
+
//
|
|
51094
|
+
// $17.07M held / 15.43M shares, price 1.10649 (2026-08-26). Ethereum is
|
|
51095
|
+
// the ONLY vault: the Arbitrum (`0xefb6601d…`), Base (`0x646a737b…`)
|
|
51096
|
+
// and XDC (`0x3d8eadb7…`) tokens are bare bridged ERC-20s whose
|
|
51097
|
+
// `asset()` and `totalAssets()` revert, and together they hold ~188k
|
|
51098
|
+
// shares — 1.2 % of supply. Not registered: there is no vault there.
|
|
51099
|
+
//
|
|
51100
|
+
// Instant and free, verified on-chain 2026-08-26: `maxDeposit` is
|
|
51101
|
+
// `uint256.max`, `maxRedeem(holder)` equals the holder's balance to
|
|
51102
|
+
// the wei (Yearn rounding aside), and `totalDebt` is **0** — every
|
|
51103
|
+
// asset sits idle in the vault, so nothing has to be unwound to pay an
|
|
51104
|
+
// exit.
|
|
51105
|
+
//
|
|
51106
|
+
// **Do not take the rate from Curve's `proj_apy`.** It is a projection
|
|
51107
|
+
// off `profitUnlockingRate`, which Yearn V3 does not zero when
|
|
51108
|
+
// `fullProfitUnlockDate` passes: on 2026-08-26 the vault had been
|
|
51109
|
+
// exactly flat for a full day (`convertToAssets` byte-identical,
|
|
51110
|
+
// `balanceOf(vault) == 0`) while the field — and Curve's whole API
|
|
51111
|
+
// record, `price` and `assets` included — still read 1.301 %.
|
|
51112
|
+
// `scrvusdFetcher` measures a 30-day REALIZED delta instead; see its
|
|
51113
|
+
// docstring.
|
|
51114
|
+
//
|
|
51115
|
+
// No `solvency`. Today the shares are backed 1:1 by crvUSD held in the
|
|
51116
|
+
// contract (`totalDebt` 0), which would make `overcollateralized`
|
|
51117
|
+
// literally true — but this is a Multi-Strategy vault and the
|
|
51118
|
+
// allocation is a role-holder dial, not a property of the design. An
|
|
51119
|
+
// asserted answer here would be a snapshot of a setting. Absent lets
|
|
51120
|
+
// the builder mark `coverage.pending.counterparty` instead, which is
|
|
51121
|
+
// the honest statement.
|
|
51122
|
+
address: "0x0655977feb2f289a4ab78af67bab0d17aab84367",
|
|
51123
|
+
underlying: "0xf939e0a03fb07f59a73314e73794be0e57ac1b4e",
|
|
51124
|
+
// crvUSD
|
|
51125
|
+
symbol: "scrvUSD",
|
|
51126
|
+
brand: "Curve",
|
|
51127
|
+
description: "crvUSD is Curve\u2019s overcollateralised stablecoin, minted against collateral in its own soft-liquidating CDP markets. scrvUSD is the savings wrapper: Curve routes crvUSD borrow-fee revenue into the vault and it is released into the share price over the week after each deposit, so the price steps up between reports and sits flat in the gaps. Deposits and withdrawals are instant, permissionless, uncapped and free.",
|
|
51128
|
+
decimals: 18,
|
|
51129
|
+
isRebasing: false,
|
|
51130
|
+
isMintable: true,
|
|
51131
|
+
withdrawalMode: "instant",
|
|
51132
|
+
yieldFetcher: scrvusdFetcher,
|
|
51133
|
+
yieldKey: SCRVUSD_KEY
|
|
51134
|
+
},
|
|
50747
51135
|
{
|
|
50748
51136
|
// Theo **sthUSD** — the ERC-4626 staked wrapper over `thUSD`, Theo's
|
|
50749
51137
|
// gold-yield stablecoin. Source Sourcify-verified on chain 1
|
|
@@ -51965,7 +52353,10 @@ var LENDING_ONLY_FETCHERS = [
|
|
|
51965
52353
|
ethZeroFetcher,
|
|
51966
52354
|
jitoSolFetcher,
|
|
51967
52355
|
thbillFetcher,
|
|
51968
|
-
sthusdFetcher
|
|
52356
|
+
// sthusdFetcher / scrvusdFetcher are NOT here: both are vault-wired by
|
|
52357
|
+
// their savings rows, so they reach the global map through
|
|
52358
|
+
// `collectVaultFetchers` (the disjointness rule above). thbillFetcher
|
|
52359
|
+
// stays — thBILL is a lending collateral with no vault row of its own.
|
|
51969
52360
|
ssuperusdFetcher,
|
|
51970
52361
|
hlpFetcher,
|
|
51971
52362
|
hwhlpFetcher,
|
|
@@ -52899,7 +53290,7 @@ async function fetchForChain(chainId, nowSeconds) {
|
|
|
52899
53290
|
abi: GAUGE_ABI,
|
|
52900
53291
|
allowFailure: true
|
|
52901
53292
|
});
|
|
52902
|
-
const
|
|
53293
|
+
const big23 = (v) => {
|
|
52903
53294
|
try {
|
|
52904
53295
|
if (typeof v === "bigint") return v;
|
|
52905
53296
|
if (typeof v === "string" && v !== "0x") return BigInt(v);
|
|
@@ -52913,15 +53304,15 @@ async function fetchForChain(chainId, nowSeconds) {
|
|
|
52913
53304
|
const b = i * STRIDE;
|
|
52914
53305
|
return {
|
|
52915
53306
|
market: m,
|
|
52916
|
-
inflationRate:
|
|
52917
|
-
workingSupply:
|
|
52918
|
-
totalSupply:
|
|
53307
|
+
inflationRate: big23(r1[b]),
|
|
53308
|
+
workingSupply: big23(r1[b + 1]),
|
|
53309
|
+
totalSupply: big23(r1[b + 2]),
|
|
52919
53310
|
isKilled: r1[b + 3] === true,
|
|
52920
|
-
rewardCount: Number(
|
|
52921
|
-
pricePerShare:
|
|
53311
|
+
rewardCount: Number(big23(r1[b + 4])),
|
|
53312
|
+
pricePerShare: big23(r1[b + 5]),
|
|
52922
53313
|
// Off L1 the child gauge's own rate is already market-scoped, so the
|
|
52923
53314
|
// weight is the identity.
|
|
52924
|
-
relativeWeight: isL1 ?
|
|
53315
|
+
relativeWeight: isL1 ? big23(r1[b + 6]) : WAD16
|
|
52925
53316
|
};
|
|
52926
53317
|
});
|
|
52927
53318
|
const tokenCalls = state.flatMap(
|
|
@@ -53014,7 +53405,7 @@ async function fetchForChain(chainId, nowSeconds) {
|
|
|
53014
53405
|
const decoded = decodeRewardData(data);
|
|
53015
53406
|
if (!decoded) continue;
|
|
53016
53407
|
const { periodFinish, rate } = decoded;
|
|
53017
|
-
const decimals = typeof decRaw === "number" ? decRaw : Number(
|
|
53408
|
+
const decimals = typeof decRaw === "number" ? decRaw : Number(big23(decRaw) || 18n);
|
|
53018
53409
|
const rewardPrice = priceOf(prices, chainId, token);
|
|
53019
53410
|
const apr = extraRewardApr({
|
|
53020
53411
|
rate,
|
|
@@ -53798,6 +54189,49 @@ var exactlyFetcher = {
|
|
|
53798
54189
|
parse: parseExactlyResults,
|
|
53799
54190
|
getAbi: getExactlyAbi
|
|
53800
54191
|
};
|
|
54192
|
+
function getFlyingTulipCalls(chainId) {
|
|
54193
|
+
const lender = FLYING_TULIP_LENDER_KEY;
|
|
54194
|
+
const lendingLens = flyingTulipConfigFor(lender, chainId)?.lendingLens;
|
|
54195
|
+
const roster = flyingTulipAssetsFor(lender, chainId)?.assets ?? [];
|
|
54196
|
+
const priceable = roster.filter((a) => a.priceable);
|
|
54197
|
+
if (!lendingLens || priceable.length === 0) return [];
|
|
54198
|
+
const assets = priceable.map((a) => a.address.toLowerCase());
|
|
54199
|
+
const calls = assets.map((asset) => ({
|
|
54200
|
+
address: lendingLens,
|
|
54201
|
+
name: "priceAndDecimals",
|
|
54202
|
+
params: [asset]
|
|
54203
|
+
}));
|
|
54204
|
+
return [{ calls, meta: { lendingLens, assets }, lender }];
|
|
54205
|
+
}
|
|
54206
|
+
function parseFlyingTulipResults(data, meta, context) {
|
|
54207
|
+
const { chainId } = context;
|
|
54208
|
+
const entries = [];
|
|
54209
|
+
meta.assets.forEach((asset, i) => {
|
|
54210
|
+
const res = data?.[i];
|
|
54211
|
+
const pxWad = Array.isArray(res) ? res[0] : void 0;
|
|
54212
|
+
if (pxWad == null) return;
|
|
54213
|
+
const priceUSD = Number(pxWad) / 1e18;
|
|
54214
|
+
if (!(priceUSD > 0)) return;
|
|
54215
|
+
entries.push({
|
|
54216
|
+
asset,
|
|
54217
|
+
// Direct USD price — no oracle-unit denomination, so raw == USD.
|
|
54218
|
+
price: priceUSD,
|
|
54219
|
+
priceUSD,
|
|
54220
|
+
marketUid: createMarketUid(chainId, FLYING_TULIP_LENDER_KEY, asset),
|
|
54221
|
+
targetLender: FLYING_TULIP_LENDER_KEY,
|
|
54222
|
+
description: "Flying Tulip OracleRouter via LendingLens (USD)"
|
|
54223
|
+
});
|
|
54224
|
+
});
|
|
54225
|
+
return entries;
|
|
54226
|
+
}
|
|
54227
|
+
function getFlyingTulipAbi() {
|
|
54228
|
+
return FlyingTulipLendingLensAbi;
|
|
54229
|
+
}
|
|
54230
|
+
var flyingTulipFetcher = {
|
|
54231
|
+
getCalls: getFlyingTulipCalls,
|
|
54232
|
+
parse: parseFlyingTulipResults,
|
|
54233
|
+
getAbi: getFlyingTulipAbi
|
|
54234
|
+
};
|
|
53801
54235
|
function getTermCalls(chainId) {
|
|
53802
54236
|
const oracle = termConfig()?.[chainId]?.priceOracle;
|
|
53803
54237
|
const markets = termMarketsByChain(chainId);
|
|
@@ -54030,7 +54464,7 @@ function getDssCalls(chainId) {
|
|
|
54030
54464
|
return results;
|
|
54031
54465
|
}
|
|
54032
54466
|
var RAY10 = 1e27;
|
|
54033
|
-
var
|
|
54467
|
+
var big20 = (v) => {
|
|
54034
54468
|
try {
|
|
54035
54469
|
if (typeof v === "bigint") return v;
|
|
54036
54470
|
if (v == null || v === "0x") return 0n;
|
|
@@ -54042,16 +54476,16 @@ var big19 = (v) => {
|
|
|
54042
54476
|
var field12 = (res, name, idx) => {
|
|
54043
54477
|
const v = res?.[name];
|
|
54044
54478
|
if (typeof v === "bigint" || typeof v === "number" || typeof v === "string") {
|
|
54045
|
-
return
|
|
54479
|
+
return big20(v);
|
|
54046
54480
|
}
|
|
54047
|
-
return
|
|
54481
|
+
return big20(res?.[idx]);
|
|
54048
54482
|
};
|
|
54049
54483
|
function parseDssResults(data, meta, context) {
|
|
54050
54484
|
const { chainId } = context;
|
|
54051
54485
|
const key3 = dssLenderKey(meta.lender, chainId, meta.ilk);
|
|
54052
54486
|
const entries = [];
|
|
54053
54487
|
const spot = field12(data?.[0], "spot", 2);
|
|
54054
|
-
const mat =
|
|
54488
|
+
const mat = big20(meta.mat);
|
|
54055
54489
|
if (spot > 0n && mat > 0n) {
|
|
54056
54490
|
const collUSD = Number(spot) / RAY10 * (Number(mat) / RAY10);
|
|
54057
54491
|
if (collUSD > 0 && collUSD < 1e9) {
|
|
@@ -56377,6 +56811,11 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
56377
56811
|
() => exactlyFetcher.getCalls(chainId),
|
|
56378
56812
|
getCallsErrors
|
|
56379
56813
|
) : [];
|
|
56814
|
+
const flyingTulipResults = isActive("flyingTulip") ? safeGetCalls(
|
|
56815
|
+
"flyingTulip",
|
|
56816
|
+
() => flyingTulipFetcher.getCalls(chainId),
|
|
56817
|
+
getCallsErrors
|
|
56818
|
+
) : [];
|
|
56380
56819
|
const termResults = isActive("term") ? safeGetCalls(
|
|
56381
56820
|
"term",
|
|
56382
56821
|
() => termFetcher.getCalls(chainId),
|
|
@@ -56518,6 +56957,13 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
56518
56957
|
getExactlyAbi(),
|
|
56519
56958
|
"direct"
|
|
56520
56959
|
);
|
|
56960
|
+
const flyingTulipGroup = buildGroup(
|
|
56961
|
+
"flyingTulip",
|
|
56962
|
+
flyingTulipResults,
|
|
56963
|
+
flyingTulipFetcher.parse,
|
|
56964
|
+
getFlyingTulipAbi(),
|
|
56965
|
+
"direct"
|
|
56966
|
+
);
|
|
56521
56967
|
const termGroup = buildGroup(
|
|
56522
56968
|
"term",
|
|
56523
56969
|
termResults,
|
|
@@ -56636,6 +57082,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
56636
57082
|
morphoGroup,
|
|
56637
57083
|
midnightGroup,
|
|
56638
57084
|
exactlyGroup,
|
|
57085
|
+
flyingTulipGroup,
|
|
56639
57086
|
termGroup,
|
|
56640
57087
|
liquityGroup,
|
|
56641
57088
|
riverGroup,
|
|
@@ -56689,6 +57136,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
56689
57136
|
dolomiteData,
|
|
56690
57137
|
midnightData,
|
|
56691
57138
|
exactlyData,
|
|
57139
|
+
flyingTulipData,
|
|
56692
57140
|
termData,
|
|
56693
57141
|
liquityData,
|
|
56694
57142
|
riverData,
|
|
@@ -56799,6 +57247,14 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
56799
57247
|
allowFailure,
|
|
56800
57248
|
rpcOverrides
|
|
56801
57249
|
),
|
|
57250
|
+
executeGroup(
|
|
57251
|
+
flyingTulipGroup,
|
|
57252
|
+
chainId,
|
|
57253
|
+
chainBatchSize,
|
|
57254
|
+
retries,
|
|
57255
|
+
allowFailure,
|
|
57256
|
+
rpcOverrides
|
|
57257
|
+
),
|
|
56802
57258
|
executeGroup(
|
|
56803
57259
|
termGroup,
|
|
56804
57260
|
chainId,
|
|
@@ -57004,6 +57460,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
57004
57460
|
parseTrackers(gearboxV3Group, gearboxV3Data.results, false);
|
|
57005
57461
|
parseTrackers(dolomiteGroup, dolomiteData.results);
|
|
57006
57462
|
parseTrackers(exactlyGroup, exactlyData.results);
|
|
57463
|
+
parseTrackers(flyingTulipGroup, flyingTulipData.results);
|
|
57007
57464
|
parseTrackers(termGroup, termData.results);
|
|
57008
57465
|
parseTrackers(liquityGroup, liquityData.results);
|
|
57009
57466
|
parseTrackers(riverGroup, riverData.results);
|
|
@@ -60475,7 +60932,7 @@ var num4 = (v) => {
|
|
|
60475
60932
|
const n = Number(v);
|
|
60476
60933
|
return Number.isFinite(n) ? n : 0;
|
|
60477
60934
|
};
|
|
60478
|
-
var
|
|
60935
|
+
var big21 = (v) => {
|
|
60479
60936
|
try {
|
|
60480
60937
|
if (v === void 0 || v === null || v === "") return "0";
|
|
60481
60938
|
const s = String(v);
|
|
@@ -60511,12 +60968,12 @@ async function fetchTermMaxVaultsFromApi(chainId, prices = {}, tokenList = {}, f
|
|
|
60511
60968
|
const assetEntry = tokenList[underlying];
|
|
60512
60969
|
const priceKey = toOracleKey(assetEntry?.assetGroup) || toGenericPriceKey(underlying, chainId);
|
|
60513
60970
|
const priceUsd = prices[priceKey];
|
|
60514
|
-
const totalAssets =
|
|
60515
|
-
const totalSupply =
|
|
60971
|
+
const totalAssets = big21(r.totalAssets);
|
|
60972
|
+
const totalSupply = big21(r.totalSupplyAmt);
|
|
60516
60973
|
const totalAssetsFormatted = Number(totalAssets) / scale3;
|
|
60517
60974
|
const supplyRate = num4(r.apr) * 100;
|
|
60518
60975
|
const rewardsRate = num4(r?.incentiveData?.TMX_APR) * 100;
|
|
60519
|
-
const rawLiquidity = BigInt(
|
|
60976
|
+
const rawLiquidity = BigInt(big21(r.redeemableAmt ?? r.idleFunds ?? "0"));
|
|
60520
60977
|
const totalAssetsBig = BigInt(totalAssets);
|
|
60521
60978
|
const liquidity = (rawLiquidity > totalAssetsBig ? totalAssetsBig : rawLiquidity).toString();
|
|
60522
60979
|
const liquidityFormatted = Number(liquidity) / scale3;
|
|
@@ -60552,7 +61009,7 @@ async function fetchTermMaxVaultsFromApi(chainId, prices = {}, tokenList = {}, f
|
|
|
60552
61009
|
liquidityUsd: priceUsd ? liquidityFormatted * priceUsd : 0,
|
|
60553
61010
|
version: r.version,
|
|
60554
61011
|
isPaused: r.isPaused === true || void 0,
|
|
60555
|
-
supplyCap: r.capacity ?
|
|
61012
|
+
supplyCap: r.capacity ? big21(r.capacity) : void 0,
|
|
60556
61013
|
basePool: r.poolAddress ? lower3(r.poolAddress) : void 0
|
|
60557
61014
|
};
|
|
60558
61015
|
}
|
|
@@ -60608,7 +61065,7 @@ var Erc20DecimalsBalanceAbi = [
|
|
|
60608
61065
|
|
|
60609
61066
|
// src/vaults/termmax/fetchFromChain.ts
|
|
60610
61067
|
var DECIMAL_BASE2 = 100000000n;
|
|
60611
|
-
var
|
|
61068
|
+
var big22 = (v) => {
|
|
60612
61069
|
if (v === void 0 || v === null || v === "0x") return 0n;
|
|
60613
61070
|
try {
|
|
60614
61071
|
return typeof v === "bigint" ? v : BigInt(v);
|
|
@@ -60672,7 +61129,7 @@ var fetchTermMaxVaultsFromChain = async (chainId, multicallRetry, prices = {}, t
|
|
|
60672
61129
|
vaults.forEach((address, i) => {
|
|
60673
61130
|
const at = (k) => res[i * READS_PER_VAULT + VAULT_READS.indexOf(k)];
|
|
60674
61131
|
const asset = addr(at("asset"));
|
|
60675
|
-
const totalAssets =
|
|
61132
|
+
const totalAssets = big22(at("totalAssets"));
|
|
60676
61133
|
if (!asset || totalAssets === 0n) return;
|
|
60677
61134
|
rows.push({
|
|
60678
61135
|
address,
|
|
@@ -60681,11 +61138,11 @@ var fetchTermMaxVaultsFromChain = async (chainId, multicallRetry, prices = {}, t
|
|
|
60681
61138
|
decimals: num5(at("decimals")) ?? 18,
|
|
60682
61139
|
asset,
|
|
60683
61140
|
totalAssets,
|
|
60684
|
-
totalSupply:
|
|
60685
|
-
annualizedInterest:
|
|
60686
|
-
accretingPrincipal:
|
|
60687
|
-
performanceFeeRate:
|
|
60688
|
-
aprRaw: at("apr") != null ?
|
|
61141
|
+
totalSupply: big22(at("totalSupply")),
|
|
61142
|
+
annualizedInterest: big22(at("annualizedInterest")),
|
|
61143
|
+
accretingPrincipal: big22(at("accretingPrincipal")),
|
|
61144
|
+
performanceFeeRate: big22(at("performanceFeeRate")),
|
|
61145
|
+
aprRaw: at("apr") != null ? big22(at("apr")) : void 0,
|
|
60689
61146
|
curator: addr(at("curator")),
|
|
60690
61147
|
guardian: addr(at("guardian")),
|
|
60691
61148
|
timelock: num5(at("timelock")),
|
|
@@ -60706,7 +61163,7 @@ var fetchTermMaxVaultsFromChain = async (chainId, multicallRetry, prices = {}, t
|
|
|
60706
61163
|
const out = {};
|
|
60707
61164
|
rows.forEach((r, i) => {
|
|
60708
61165
|
const assetDecimals = num5(res2[i * 2]) ?? r.decimals;
|
|
60709
|
-
const idle =
|
|
61166
|
+
const idle = big22(res2[i * 2 + 1]);
|
|
60710
61167
|
const assetEntry = tokenList[r.asset];
|
|
60711
61168
|
const priceKey = toOracleKey(assetEntry?.assetGroup) || toGenericPriceKey(r.asset, chainId);
|
|
60712
61169
|
const priceUsd = prices[priceKey];
|
|
@@ -60826,7 +61283,7 @@ var Erc4626PreviewRedeemAbi = [
|
|
|
60826
61283
|
];
|
|
60827
61284
|
|
|
60828
61285
|
// src/vaults/lst/readers/shared.ts
|
|
60829
|
-
var
|
|
61286
|
+
var ONE_E1812 = 10n ** 18n;
|
|
60830
61287
|
var rescaleDecimals = (v, fromDec, toDec) => toDec >= fromDec ? v * 10n ** BigInt(toDec - fromDec) : v / 10n ** BigInt(fromDec - toDec);
|
|
60831
61288
|
var MULTICALL3_ADDRESS = "0xcA11bde05977b3631167028862bE2a173976CA11";
|
|
60832
61289
|
var Multicall3BalanceAbi = [
|
|
@@ -60869,7 +61326,7 @@ var readerBeetsStS = (entry) => ({
|
|
|
60869
61326
|
}
|
|
60870
61327
|
const liquidity = toBigInt13(pool);
|
|
60871
61328
|
return {
|
|
60872
|
-
totalAssets: totalSupply * exchangeRate /
|
|
61329
|
+
totalAssets: totalSupply * exchangeRate / ONE_E1812,
|
|
60873
61330
|
totalSupply,
|
|
60874
61331
|
exchangeRate,
|
|
60875
61332
|
liquidity
|
|
@@ -60902,7 +61359,7 @@ var readerBenqiSavax = (entry) => ({
|
|
|
60902
61359
|
{
|
|
60903
61360
|
address: entry.address,
|
|
60904
61361
|
name: "getPooledAvaxByShares",
|
|
60905
|
-
params: [
|
|
61362
|
+
params: [ONE_E1812]
|
|
60906
61363
|
},
|
|
60907
61364
|
{ address: entry.address, name: "totalPooledAvax", params: [] }
|
|
60908
61365
|
],
|
|
@@ -60913,7 +61370,7 @@ var readerBenqiSavax = (entry) => ({
|
|
|
60913
61370
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
60914
61371
|
return void 0;
|
|
60915
61372
|
}
|
|
60916
|
-
const totalAssets = toBigInt13(totalPooled) ?? totalSupply * exchangeRate /
|
|
61373
|
+
const totalAssets = toBigInt13(totalPooled) ?? totalSupply * exchangeRate / ONE_E1812;
|
|
60917
61374
|
return {
|
|
60918
61375
|
totalAssets,
|
|
60919
61376
|
totalSupply,
|
|
@@ -60932,7 +61389,7 @@ var readerBgtWrapper1to1 = (entry) => ({
|
|
|
60932
61389
|
return {
|
|
60933
61390
|
totalAssets: totalSupply,
|
|
60934
61391
|
totalSupply,
|
|
60935
|
-
exchangeRate:
|
|
61392
|
+
exchangeRate: ONE_E1812
|
|
60936
61393
|
};
|
|
60937
61394
|
}
|
|
60938
61395
|
});
|
|
@@ -60962,7 +61419,7 @@ var readerDineroBeraEth = (entry) => ({
|
|
|
60962
61419
|
return void 0;
|
|
60963
61420
|
}
|
|
60964
61421
|
return {
|
|
60965
|
-
totalAssets: totalSupply * exchangeRate /
|
|
61422
|
+
totalAssets: totalSupply * exchangeRate / ONE_E1812,
|
|
60966
61423
|
totalSupply,
|
|
60967
61424
|
exchangeRate
|
|
60968
61425
|
};
|
|
@@ -60974,7 +61431,7 @@ var readerErc4626 = (entry) => ({
|
|
|
60974
61431
|
calls: [
|
|
60975
61432
|
{ address: entry.address, name: "totalAssets", params: [] },
|
|
60976
61433
|
{ address: entry.address, name: "totalSupply", params: [] },
|
|
60977
|
-
{ address: entry.address, name: "convertToAssets", params: [
|
|
61434
|
+
{ address: entry.address, name: "convertToAssets", params: [ONE_E1812] }
|
|
60978
61435
|
],
|
|
60979
61436
|
abis: [Erc4626ReadAbi, TotalSupplyAbi, Erc4626ReadAbi],
|
|
60980
61437
|
parse: ([assets, supply, rate]) => {
|
|
@@ -60991,7 +61448,7 @@ var readerErc4626PreviewRedeem = (entry) => ({
|
|
|
60991
61448
|
calls: [
|
|
60992
61449
|
{ address: entry.address, name: "totalAssets", params: [] },
|
|
60993
61450
|
{ address: entry.address, name: "totalSupply", params: [] },
|
|
60994
|
-
{ address: entry.address, name: "previewRedeem", params: [
|
|
61451
|
+
{ address: entry.address, name: "previewRedeem", params: [ONE_E1812] }
|
|
60995
61452
|
],
|
|
60996
61453
|
abis: [Erc4626PreviewRedeemAbi, TotalSupplyAbi, Erc4626PreviewRedeemAbi],
|
|
60997
61454
|
parse: ([assets, supply, rate]) => {
|
|
@@ -61071,7 +61528,7 @@ var readerEtherFiWeEth = (entry) => {
|
|
|
61071
61528
|
}
|
|
61072
61529
|
}
|
|
61073
61530
|
return {
|
|
61074
|
-
totalAssets: totalSupply * exchangeRate /
|
|
61531
|
+
totalAssets: totalSupply * exchangeRate / ONE_E1812,
|
|
61075
61532
|
totalSupply,
|
|
61076
61533
|
exchangeRate,
|
|
61077
61534
|
liquidity
|
|
@@ -61104,7 +61561,7 @@ var readerHyperbeatBeHype = (entry) => {
|
|
|
61104
61561
|
return {
|
|
61105
61562
|
totalAssets: totalSupply,
|
|
61106
61563
|
totalSupply,
|
|
61107
|
-
exchangeRate:
|
|
61564
|
+
exchangeRate: ONE_E1812
|
|
61108
61565
|
};
|
|
61109
61566
|
}
|
|
61110
61567
|
};
|
|
@@ -61112,7 +61569,7 @@ var readerHyperbeatBeHype = (entry) => {
|
|
|
61112
61569
|
return {
|
|
61113
61570
|
calls: [
|
|
61114
61571
|
{ address: entry.address, name: "totalSupply", params: [] },
|
|
61115
|
-
{ address: stakingCore, name: "BeHYPEToHYPE", params: [
|
|
61572
|
+
{ address: stakingCore, name: "BeHYPEToHYPE", params: [ONE_E1812] }
|
|
61116
61573
|
],
|
|
61117
61574
|
abis: [TotalSupplyAbi, HyperbeatStakingCoreAbi],
|
|
61118
61575
|
parse: ([supply, rate]) => {
|
|
@@ -61122,7 +61579,7 @@ var readerHyperbeatBeHype = (entry) => {
|
|
|
61122
61579
|
return void 0;
|
|
61123
61580
|
}
|
|
61124
61581
|
return {
|
|
61125
|
-
totalAssets: totalSupply * exchangeRate /
|
|
61582
|
+
totalAssets: totalSupply * exchangeRate / ONE_E1812,
|
|
61126
61583
|
totalSupply,
|
|
61127
61584
|
exchangeRate
|
|
61128
61585
|
};
|
|
@@ -61154,7 +61611,7 @@ var readerKelpRsEth = (entry) => {
|
|
|
61154
61611
|
return {
|
|
61155
61612
|
totalAssets: totalSupply,
|
|
61156
61613
|
totalSupply,
|
|
61157
|
-
exchangeRate:
|
|
61614
|
+
exchangeRate: ONE_E1812
|
|
61158
61615
|
};
|
|
61159
61616
|
}
|
|
61160
61617
|
};
|
|
@@ -61172,7 +61629,7 @@ var readerKelpRsEth = (entry) => {
|
|
|
61172
61629
|
return void 0;
|
|
61173
61630
|
}
|
|
61174
61631
|
return {
|
|
61175
|
-
totalAssets: totalSupply * exchangeRate /
|
|
61632
|
+
totalAssets: totalSupply * exchangeRate / ONE_E1812,
|
|
61176
61633
|
totalSupply,
|
|
61177
61634
|
exchangeRate
|
|
61178
61635
|
};
|
|
@@ -61204,7 +61661,7 @@ var readerKinetiqKHype = (entry) => {
|
|
|
61204
61661
|
return {
|
|
61205
61662
|
totalAssets: totalSupply,
|
|
61206
61663
|
totalSupply,
|
|
61207
|
-
exchangeRate:
|
|
61664
|
+
exchangeRate: ONE_E1812
|
|
61208
61665
|
};
|
|
61209
61666
|
}
|
|
61210
61667
|
};
|
|
@@ -61212,7 +61669,7 @@ var readerKinetiqKHype = (entry) => {
|
|
|
61212
61669
|
return {
|
|
61213
61670
|
calls: [
|
|
61214
61671
|
{ address: entry.address, name: "totalSupply", params: [] },
|
|
61215
|
-
{ address: accountant, name: "kHYPEToHYPE", params: [
|
|
61672
|
+
{ address: accountant, name: "kHYPEToHYPE", params: [ONE_E1812] }
|
|
61216
61673
|
],
|
|
61217
61674
|
abis: [TotalSupplyAbi, KinetiqStakingAccountantAbi],
|
|
61218
61675
|
parse: ([supply, rate]) => {
|
|
@@ -61222,7 +61679,7 @@ var readerKinetiqKHype = (entry) => {
|
|
|
61222
61679
|
return void 0;
|
|
61223
61680
|
}
|
|
61224
61681
|
return {
|
|
61225
|
-
totalAssets: totalSupply * exchangeRate /
|
|
61682
|
+
totalAssets: totalSupply * exchangeRate / ONE_E1812,
|
|
61226
61683
|
totalSupply,
|
|
61227
61684
|
exchangeRate
|
|
61228
61685
|
};
|
|
@@ -61262,7 +61719,7 @@ var readerLairStKaia = (entry) => ({
|
|
|
61262
61719
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
61263
61720
|
return void 0;
|
|
61264
61721
|
}
|
|
61265
|
-
const totalAssets = toBigInt13(totalStaking) ?? totalSupply * exchangeRate /
|
|
61722
|
+
const totalAssets = toBigInt13(totalStaking) ?? totalSupply * exchangeRate / ONE_E1812;
|
|
61266
61723
|
return {
|
|
61267
61724
|
totalAssets,
|
|
61268
61725
|
totalSupply,
|
|
@@ -61296,7 +61753,7 @@ var readerLidoWstEth = (entry) => ({
|
|
|
61296
61753
|
return void 0;
|
|
61297
61754
|
}
|
|
61298
61755
|
return {
|
|
61299
|
-
totalAssets: totalSupply * exchangeRate /
|
|
61756
|
+
totalAssets: totalSupply * exchangeRate / ONE_E1812,
|
|
61300
61757
|
totalSupply,
|
|
61301
61758
|
exchangeRate
|
|
61302
61759
|
};
|
|
@@ -61334,7 +61791,7 @@ var readerListaSlisBnb = (entry) => {
|
|
|
61334
61791
|
return {
|
|
61335
61792
|
totalAssets: totalSupply,
|
|
61336
61793
|
totalSupply,
|
|
61337
|
-
exchangeRate:
|
|
61794
|
+
exchangeRate: ONE_E1812
|
|
61338
61795
|
};
|
|
61339
61796
|
}
|
|
61340
61797
|
};
|
|
@@ -61342,7 +61799,7 @@ var readerListaSlisBnb = (entry) => {
|
|
|
61342
61799
|
return {
|
|
61343
61800
|
calls: [
|
|
61344
61801
|
{ address: entry.address, name: "totalSupply", params: [] },
|
|
61345
|
-
{ address: manager, name: "convertSnBnbToBnb", params: [
|
|
61802
|
+
{ address: manager, name: "convertSnBnbToBnb", params: [ONE_E1812] },
|
|
61346
61803
|
{ address: manager, name: "getTotalPooledBnb", params: [] }
|
|
61347
61804
|
],
|
|
61348
61805
|
abis: [TotalSupplyAbi, ListaStakeManagerReadAbi, ListaStakeManagerReadAbi],
|
|
@@ -61353,7 +61810,7 @@ var readerListaSlisBnb = (entry) => {
|
|
|
61353
61810
|
return void 0;
|
|
61354
61811
|
}
|
|
61355
61812
|
const pooledBnb = toBigInt13(pooled);
|
|
61356
|
-
const totalAssets = pooledBnb ?? totalSupply * exchangeRate /
|
|
61813
|
+
const totalAssets = pooledBnb ?? totalSupply * exchangeRate / ONE_E1812;
|
|
61357
61814
|
return { totalAssets, totalSupply, exchangeRate };
|
|
61358
61815
|
}
|
|
61359
61816
|
};
|
|
@@ -61383,7 +61840,7 @@ var readerMantleMEth = (entry) => {
|
|
|
61383
61840
|
return {
|
|
61384
61841
|
totalAssets: totalSupply,
|
|
61385
61842
|
totalSupply,
|
|
61386
|
-
exchangeRate:
|
|
61843
|
+
exchangeRate: ONE_E1812
|
|
61387
61844
|
};
|
|
61388
61845
|
}
|
|
61389
61846
|
};
|
|
@@ -61391,7 +61848,7 @@ var readerMantleMEth = (entry) => {
|
|
|
61391
61848
|
return {
|
|
61392
61849
|
calls: [
|
|
61393
61850
|
{ address: entry.address, name: "totalSupply", params: [] },
|
|
61394
|
-
{ address: staking, name: "mETHToETH", params: [
|
|
61851
|
+
{ address: staking, name: "mETHToETH", params: [ONE_E1812] }
|
|
61395
61852
|
],
|
|
61396
61853
|
abis: [TotalSupplyAbi, MantleStakingAbi],
|
|
61397
61854
|
parse: ([supply, rate]) => {
|
|
@@ -61401,7 +61858,7 @@ var readerMantleMEth = (entry) => {
|
|
|
61401
61858
|
return void 0;
|
|
61402
61859
|
}
|
|
61403
61860
|
return {
|
|
61404
|
-
totalAssets: totalSupply * exchangeRate /
|
|
61861
|
+
totalAssets: totalSupply * exchangeRate / ONE_E1812,
|
|
61405
61862
|
totalSupply,
|
|
61406
61863
|
exchangeRate
|
|
61407
61864
|
};
|
|
@@ -61422,7 +61879,7 @@ var readerOffChain = (entry) => {
|
|
|
61422
61879
|
return {
|
|
61423
61880
|
totalAssets: rescaleDecimals(totalSupply, shareDec, underlyingDec),
|
|
61424
61881
|
totalSupply,
|
|
61425
|
-
exchangeRate:
|
|
61882
|
+
exchangeRate: ONE_E1812
|
|
61426
61883
|
};
|
|
61427
61884
|
}
|
|
61428
61885
|
};
|
|
@@ -61456,7 +61913,7 @@ var readerRenzoEzEth = (entry) => {
|
|
|
61456
61913
|
return {
|
|
61457
61914
|
totalAssets: totalSupply,
|
|
61458
61915
|
totalSupply,
|
|
61459
|
-
exchangeRate:
|
|
61916
|
+
exchangeRate: ONE_E1812
|
|
61460
61917
|
};
|
|
61461
61918
|
}
|
|
61462
61919
|
};
|
|
@@ -61475,7 +61932,7 @@ var readerRenzoEzEth = (entry) => {
|
|
|
61475
61932
|
return {
|
|
61476
61933
|
totalAssets: totalTvl,
|
|
61477
61934
|
totalSupply,
|
|
61478
|
-
exchangeRate: totalTvl *
|
|
61935
|
+
exchangeRate: totalTvl * ONE_E1812 / totalSupply
|
|
61479
61936
|
};
|
|
61480
61937
|
}
|
|
61481
61938
|
};
|
|
@@ -61531,7 +61988,7 @@ var readerRocketReth = (entry) => {
|
|
|
61531
61988
|
}
|
|
61532
61989
|
const liquidity = depositPool ? toBigInt13(slice2[2]) : void 0;
|
|
61533
61990
|
return {
|
|
61534
|
-
totalAssets: totalSupply * exchangeRate /
|
|
61991
|
+
totalAssets: totalSupply * exchangeRate / ONE_E1812,
|
|
61535
61992
|
totalSupply,
|
|
61536
61993
|
exchangeRate,
|
|
61537
61994
|
liquidity
|
|
@@ -61573,7 +62030,7 @@ var readerStaderEthx = (entry) => {
|
|
|
61573
62030
|
return {
|
|
61574
62031
|
totalAssets: totalSupply,
|
|
61575
62032
|
totalSupply,
|
|
61576
|
-
exchangeRate:
|
|
62033
|
+
exchangeRate: ONE_E1812
|
|
61577
62034
|
};
|
|
61578
62035
|
}
|
|
61579
62036
|
};
|
|
@@ -61591,7 +62048,7 @@ var readerStaderEthx = (entry) => {
|
|
|
61591
62048
|
return void 0;
|
|
61592
62049
|
}
|
|
61593
62050
|
return {
|
|
61594
|
-
totalAssets: totalSupply * exchangeRate /
|
|
62051
|
+
totalAssets: totalSupply * exchangeRate / ONE_E1812,
|
|
61595
62052
|
totalSupply,
|
|
61596
62053
|
exchangeRate
|
|
61597
62054
|
};
|
|
@@ -61608,7 +62065,7 @@ var readerStaderMaticX = (entry) => {
|
|
|
61608
62065
|
{
|
|
61609
62066
|
address: rateAddress,
|
|
61610
62067
|
name: "convertMaticXToMatic",
|
|
61611
|
-
params: [
|
|
62068
|
+
params: [ONE_E1812],
|
|
61612
62069
|
chainId: homeChainId
|
|
61613
62070
|
}
|
|
61614
62071
|
],
|
|
@@ -61623,7 +62080,7 @@ var readerStaderMaticX = (entry) => {
|
|
|
61623
62080
|
}
|
|
61624
62081
|
const isCrossChain = homeContract !== void 0;
|
|
61625
62082
|
return {
|
|
61626
|
-
totalAssets: isCrossChain ? totalSupply * amountInMatic /
|
|
62083
|
+
totalAssets: isCrossChain ? totalSupply * amountInMatic / ONE_E1812 : totalPooledMatic ?? totalSupply * amountInMatic / ONE_E1812,
|
|
61627
62084
|
totalSupply,
|
|
61628
62085
|
exchangeRate: amountInMatic
|
|
61629
62086
|
};
|
|
@@ -61655,7 +62112,7 @@ var readerStakeWiseOsEth = (entry) => {
|
|
|
61655
62112
|
return {
|
|
61656
62113
|
totalAssets: totalSupply,
|
|
61657
62114
|
totalSupply,
|
|
61658
|
-
exchangeRate:
|
|
62115
|
+
exchangeRate: ONE_E1812
|
|
61659
62116
|
};
|
|
61660
62117
|
}
|
|
61661
62118
|
};
|
|
@@ -61663,7 +62120,7 @@ var readerStakeWiseOsEth = (entry) => {
|
|
|
61663
62120
|
return {
|
|
61664
62121
|
calls: [
|
|
61665
62122
|
{ address: entry.address, name: "totalSupply", params: [] },
|
|
61666
|
-
{ address: controller, name: "convertToAssets", params: [
|
|
62123
|
+
{ address: controller, name: "convertToAssets", params: [ONE_E1812] }
|
|
61667
62124
|
],
|
|
61668
62125
|
abis: [TotalSupplyAbi, StakeWiseOsTokenAbi],
|
|
61669
62126
|
parse: ([supply, rate]) => {
|
|
@@ -61673,7 +62130,7 @@ var readerStakeWiseOsEth = (entry) => {
|
|
|
61673
62130
|
return void 0;
|
|
61674
62131
|
}
|
|
61675
62132
|
return {
|
|
61676
|
-
totalAssets: totalSupply * exchangeRate /
|
|
62133
|
+
totalAssets: totalSupply * exchangeRate / ONE_E1812,
|
|
61677
62134
|
totalSupply,
|
|
61678
62135
|
exchangeRate
|
|
61679
62136
|
};
|
|
@@ -61705,7 +62162,7 @@ var readerStCelo = (entry) => {
|
|
|
61705
62162
|
return {
|
|
61706
62163
|
totalAssets: totalSupply,
|
|
61707
62164
|
totalSupply,
|
|
61708
|
-
exchangeRate:
|
|
62165
|
+
exchangeRate: ONE_E1812
|
|
61709
62166
|
};
|
|
61710
62167
|
}
|
|
61711
62168
|
};
|
|
@@ -61713,7 +62170,7 @@ var readerStCelo = (entry) => {
|
|
|
61713
62170
|
return {
|
|
61714
62171
|
calls: [
|
|
61715
62172
|
{ address: entry.address, name: "totalSupply", params: [] },
|
|
61716
|
-
{ address: manager, name: "toCelo", params: [
|
|
62173
|
+
{ address: manager, name: "toCelo", params: [ONE_E1812] }
|
|
61717
62174
|
],
|
|
61718
62175
|
abis: [TotalSupplyAbi, StCeloManagerAbi],
|
|
61719
62176
|
parse: ([supply, rate]) => {
|
|
@@ -61723,7 +62180,7 @@ var readerStCelo = (entry) => {
|
|
|
61723
62180
|
return void 0;
|
|
61724
62181
|
}
|
|
61725
62182
|
return {
|
|
61726
|
-
totalAssets: totalSupply * exchangeRate /
|
|
62183
|
+
totalAssets: totalSupply * exchangeRate / ONE_E1812,
|
|
61727
62184
|
totalSupply,
|
|
61728
62185
|
exchangeRate
|
|
61729
62186
|
};
|
|
@@ -61756,7 +62213,7 @@ var readerSwellGetRate = (entry) => ({
|
|
|
61756
62213
|
return void 0;
|
|
61757
62214
|
}
|
|
61758
62215
|
return {
|
|
61759
|
-
totalAssets: totalSupply * exchangeRate /
|
|
62216
|
+
totalAssets: totalSupply * exchangeRate / ONE_E1812,
|
|
61760
62217
|
totalSupply,
|
|
61761
62218
|
exchangeRate
|
|
61762
62219
|
};
|
|
@@ -61787,7 +62244,7 @@ var readerValantisWstHype = (entry) => {
|
|
|
61787
62244
|
return {
|
|
61788
62245
|
totalAssets: totalSupply,
|
|
61789
62246
|
totalSupply,
|
|
61790
|
-
exchangeRate:
|
|
62247
|
+
exchangeRate: ONE_E1812
|
|
61791
62248
|
};
|
|
61792
62249
|
}
|
|
61793
62250
|
};
|
|
@@ -61805,7 +62262,7 @@ var readerValantisWstHype = (entry) => {
|
|
|
61805
62262
|
return void 0;
|
|
61806
62263
|
}
|
|
61807
62264
|
return {
|
|
61808
|
-
totalAssets: totalSupply * exchangeRate /
|
|
62265
|
+
totalAssets: totalSupply * exchangeRate / ONE_E1812,
|
|
61809
62266
|
totalSupply,
|
|
61810
62267
|
exchangeRate
|
|
61811
62268
|
};
|
|
@@ -61839,7 +62296,7 @@ var readerVedaAccountant = (entry) => {
|
|
|
61839
62296
|
return {
|
|
61840
62297
|
totalAssets: rescaleDecimals(totalSupply, shareDec, underlyingDec),
|
|
61841
62298
|
totalSupply,
|
|
61842
|
-
exchangeRate:
|
|
62299
|
+
exchangeRate: ONE_E1812
|
|
61843
62300
|
};
|
|
61844
62301
|
}
|
|
61845
62302
|
};
|
|
@@ -61858,7 +62315,7 @@ var readerVedaAccountant = (entry) => {
|
|
|
61858
62315
|
const exchangeRate = rawRate * scale3;
|
|
61859
62316
|
return {
|
|
61860
62317
|
totalAssets: rescaleDecimals(
|
|
61861
|
-
totalSupply * exchangeRate /
|
|
62318
|
+
totalSupply * exchangeRate / ONE_E1812,
|
|
61862
62319
|
shareDec,
|
|
61863
62320
|
underlyingDec
|
|
61864
62321
|
),
|
|
@@ -61894,9 +62351,9 @@ var readerAnkrRatio = (entry) => ({
|
|
|
61894
62351
|
return void 0;
|
|
61895
62352
|
}
|
|
61896
62353
|
return {
|
|
61897
|
-
totalAssets: totalSupply *
|
|
62354
|
+
totalAssets: totalSupply * ONE_E1812 / r,
|
|
61898
62355
|
totalSupply,
|
|
61899
|
-
exchangeRate:
|
|
62356
|
+
exchangeRate: ONE_E1812 * ONE_E1812 / r
|
|
61900
62357
|
};
|
|
61901
62358
|
}
|
|
61902
62359
|
});
|
|
@@ -61926,7 +62383,7 @@ var readerBinanceWbeth = (entry) => ({
|
|
|
61926
62383
|
return void 0;
|
|
61927
62384
|
}
|
|
61928
62385
|
return {
|
|
61929
|
-
totalAssets: totalSupply * exchangeRate /
|
|
62386
|
+
totalAssets: totalSupply * exchangeRate / ONE_E1812,
|
|
61930
62387
|
totalSupply,
|
|
61931
62388
|
exchangeRate
|
|
61932
62389
|
};
|
|
@@ -61972,7 +62429,7 @@ var readerCoreEarnRate = (entry) => {
|
|
|
61972
62429
|
return {
|
|
61973
62430
|
totalAssets: totalSupply * r / CORE_RATE_DENOM,
|
|
61974
62431
|
totalSupply,
|
|
61975
|
-
exchangeRate: r *
|
|
62432
|
+
exchangeRate: r * ONE_E1812 / CORE_RATE_DENOM
|
|
61976
62433
|
};
|
|
61977
62434
|
}
|
|
61978
62435
|
};
|
|
@@ -61994,7 +62451,7 @@ var readerCoreStakedRatio = (entry) => {
|
|
|
61994
62451
|
return {
|
|
61995
62452
|
totalAssets: totalStaked,
|
|
61996
62453
|
totalSupply,
|
|
61997
|
-
exchangeRate: totalStaked *
|
|
62454
|
+
exchangeRate: totalStaked * ONE_E1812 / totalSupply
|
|
61998
62455
|
};
|
|
61999
62456
|
}
|
|
62000
62457
|
};
|
|
@@ -62029,7 +62486,7 @@ var readerKintsuSMon = (entry) => ({
|
|
|
62029
62486
|
const totalAssets = toBigInt13(pooled);
|
|
62030
62487
|
const totalSupply = toBigInt13(shares);
|
|
62031
62488
|
if (totalAssets === void 0 || totalSupply === void 0) return void 0;
|
|
62032
|
-
const exchangeRate = totalSupply > 0n ? totalAssets *
|
|
62489
|
+
const exchangeRate = totalSupply > 0n ? totalAssets * ONE_E1812 / totalSupply : ONE_E1812;
|
|
62033
62490
|
return { totalAssets, totalSupply, exchangeRate };
|
|
62034
62491
|
}
|
|
62035
62492
|
});
|
|
@@ -62104,7 +62561,7 @@ var readerTreehouseTAsset = (entry) => {
|
|
|
62104
62561
|
calls: [
|
|
62105
62562
|
{ address: entry.address, name: "totalAssets", params: [] },
|
|
62106
62563
|
{ address: entry.address, name: "totalSupply", params: [] },
|
|
62107
|
-
{ address: entry.address, name: "convertToAssets", params: [
|
|
62564
|
+
{ address: entry.address, name: "convertToAssets", params: [ONE_E1812] },
|
|
62108
62565
|
{ address: fl, name: "getRedeemableAmount", params: [] },
|
|
62109
62566
|
{ address: fl, name: "redemptionFee", params: [] },
|
|
62110
62567
|
{ address: fl, name: "minRedeemInUnderlying", params: [] },
|
|
@@ -62718,7 +63175,7 @@ var deriveExitRoutes = (i) => {
|
|
|
62718
63175
|
};
|
|
62719
63176
|
|
|
62720
63177
|
// src/vaults/lst/fetchPublic.ts
|
|
62721
|
-
var
|
|
63178
|
+
var ONE_E1813 = 10n ** 18n;
|
|
62722
63179
|
var ERC20_BALANCE_ABI = parseAbi([
|
|
62723
63180
|
"function balanceOf(address) view returns (uint256)"
|
|
62724
63181
|
]);
|
|
@@ -62735,6 +63192,22 @@ var resolveAcceptedInputs = (chainId, shareToken, entry) => {
|
|
|
62735
63192
|
}
|
|
62736
63193
|
];
|
|
62737
63194
|
};
|
|
63195
|
+
var probeSelfOnly = (chainId, shareToken, route) => {
|
|
63196
|
+
try {
|
|
63197
|
+
const self = ignoresReceiver(buildLstWithdrawRequest, {
|
|
63198
|
+
chainId,
|
|
63199
|
+
shareToken,
|
|
63200
|
+
amount: 10n ** 18n,
|
|
63201
|
+
receiver: "0x00000000000000000000000000000000000000a1",
|
|
63202
|
+
// Neutral protocol-required inputs, so the probe measures the RECEIVER
|
|
63203
|
+
// and not a missing argument.
|
|
63204
|
+
options: { route, deadline: 9999999999n, minAssetOut: 0n, minHype: 0n }
|
|
63205
|
+
});
|
|
63206
|
+
return self ? true : void 0;
|
|
63207
|
+
} catch {
|
|
63208
|
+
return void 0;
|
|
63209
|
+
}
|
|
63210
|
+
};
|
|
62738
63211
|
var fetchLstShareTokens = async (chainId, multicallRetry, prices = {}, tokenList = {}, opts = {}) => {
|
|
62739
63212
|
const entries = getLstRegistry(chainId);
|
|
62740
63213
|
if (entries.length === 0) return {};
|
|
@@ -62833,8 +63306,8 @@ var fetchLstShareTokens = async (chainId, multicallRetry, prices = {}, tokenList
|
|
|
62833
63306
|
const underlyingUnit = 10n ** BigInt(underlyingDec);
|
|
62834
63307
|
const totalAssetsFormatted = Number(state.totalAssets) / 10 ** underlyingDec;
|
|
62835
63308
|
const totalAssetsUsd = priceUsd !== void 0 ? totalAssetsFormatted * priceUsd : 0;
|
|
62836
|
-
const convertToAssets = state.exchangeRate * underlyingUnit /
|
|
62837
|
-
const convertToShares = state.exchangeRate > 0n ?
|
|
63309
|
+
const convertToAssets = state.exchangeRate * underlyingUnit / ONE_E1813;
|
|
63310
|
+
const convertToShares = state.exchangeRate > 0n ? ONE_E1813 * shareUnit / state.exchangeRate : 0n;
|
|
62838
63311
|
let liquidityRaw;
|
|
62839
63312
|
if (state.liquidity !== void 0) {
|
|
62840
63313
|
liquidityRaw = state.liquidity;
|
|
@@ -62890,14 +63363,26 @@ var fetchLstShareTokens = async (chainId, multicallRetry, prices = {}, tokenList
|
|
|
62890
63363
|
// list itself; everything else gets the coarse derivation, which is
|
|
62891
63364
|
// still strictly better than making every consumer reassemble the two
|
|
62892
63365
|
// legs out of `withdrawalMode` + one cooldown + one liquidity number.
|
|
62893
|
-
exitRoutes: state.exitRoutes ?? deriveExitRoutes({
|
|
63366
|
+
exitRoutes: (state.exitRoutes ?? deriveExitRoutes({
|
|
62894
63367
|
withdrawalMode: entry.withdrawalMode,
|
|
62895
63368
|
withdrawFeeBps: state.withdrawFeeBps,
|
|
62896
63369
|
withdrawalCooldownSeconds: cooldownSecs,
|
|
62897
63370
|
liquidity: liquidityRaw.toString(),
|
|
62898
63371
|
liquidityFormatted,
|
|
62899
63372
|
liquidityUsd
|
|
62900
|
-
})
|
|
63373
|
+
})).map(
|
|
63374
|
+
(r) => (
|
|
63375
|
+
// A reader that already established it wins; otherwise probe.
|
|
63376
|
+
r.selfOnly !== void 0 || r.kind === "market" ? r : {
|
|
63377
|
+
...r,
|
|
63378
|
+
selfOnly: probeSelfOnly(
|
|
63379
|
+
chainId,
|
|
63380
|
+
addressLc,
|
|
63381
|
+
r.kind === "instant" ? "instant" : "queued"
|
|
63382
|
+
)
|
|
63383
|
+
}
|
|
63384
|
+
)
|
|
63385
|
+
),
|
|
62901
63386
|
asset,
|
|
62902
63387
|
priceUsd,
|
|
62903
63388
|
totalAssetsFormatted,
|
|
@@ -66459,7 +66944,7 @@ var NavOracleReadAbi = [
|
|
|
66459
66944
|
];
|
|
66460
66945
|
|
|
66461
66946
|
// src/vaults/savings/readers/shared.ts
|
|
66462
|
-
var
|
|
66947
|
+
var ONE_E1814 = 10n ** 18n;
|
|
66463
66948
|
var toBigInt15 = (v) => {
|
|
66464
66949
|
if (v === void 0 || v === null) return void 0;
|
|
66465
66950
|
if (typeof v === "bigint") return v;
|
|
@@ -66500,7 +66985,7 @@ var readerErc46262 = (entry) => {
|
|
|
66500
66985
|
return {
|
|
66501
66986
|
totalAssets,
|
|
66502
66987
|
totalSupply,
|
|
66503
|
-
exchangeRate: convertToAssetsRaw *
|
|
66988
|
+
exchangeRate: convertToAssetsRaw * ONE_E1814 / underlyingUnit
|
|
66504
66989
|
};
|
|
66505
66990
|
}
|
|
66506
66991
|
};
|
|
@@ -66531,7 +67016,7 @@ var readerErc4626Cooldown = (entry) => {
|
|
|
66531
67016
|
return {
|
|
66532
67017
|
totalAssets,
|
|
66533
67018
|
totalSupply,
|
|
66534
|
-
exchangeRate: convertToAssetsRaw *
|
|
67019
|
+
exchangeRate: convertToAssetsRaw * ONE_E1814 / underlyingUnit,
|
|
66535
67020
|
withdrawalCooldownSeconds: cooldownSecs === void 0 ? void 0 : Number(cooldownSecs)
|
|
66536
67021
|
};
|
|
66537
67022
|
}
|
|
@@ -66794,7 +67279,7 @@ var readerErc4626Idle = (entry) => {
|
|
|
66794
67279
|
return {
|
|
66795
67280
|
totalAssets,
|
|
66796
67281
|
totalSupply,
|
|
66797
|
-
exchangeRate: convertToAssetsRaw *
|
|
67282
|
+
exchangeRate: convertToAssetsRaw * ONE_E1814 / underlyingUnit,
|
|
66798
67283
|
...capacity !== void 0 ? {
|
|
66799
67284
|
instantRedeemCapacity: capacity,
|
|
66800
67285
|
instantRedeemEnabled: true,
|
|
@@ -66843,7 +67328,7 @@ var readerErc4626WithdrawLimit = (entry) => {
|
|
|
66843
67328
|
return {
|
|
66844
67329
|
totalAssets,
|
|
66845
67330
|
totalSupply,
|
|
66846
|
-
exchangeRate: convertToAssetsRaw *
|
|
67331
|
+
exchangeRate: convertToAssetsRaw * ONE_E1814 / underlyingUnit,
|
|
66847
67332
|
...capacity !== void 0 ? {
|
|
66848
67333
|
instantRedeemCapacity: capacity,
|
|
66849
67334
|
instantRedeemEnabled: true,
|
|
@@ -66873,7 +67358,7 @@ var readerBitwayVault = (entry) => {
|
|
|
66873
67358
|
{
|
|
66874
67359
|
address: vault,
|
|
66875
67360
|
name: "convertToAssets",
|
|
66876
|
-
params: [
|
|
67361
|
+
params: [ONE_E1814, underlying]
|
|
66877
67362
|
},
|
|
66878
67363
|
{ address: vault, name: "getContractBalance", params: [underlying] },
|
|
66879
67364
|
{ address: vault, name: "WAITING_TIME", params: [] }
|
|
@@ -66896,7 +67381,7 @@ var readerBitwayVault = (entry) => {
|
|
|
66896
67381
|
// totalSupply is in raw share units; convert to raw underlying.
|
|
66897
67382
|
// (Every live leg is 18/18-dec — BSC stables are 18-dec — but the
|
|
66898
67383
|
// rescale keeps a future 6-dec listing honest.)
|
|
66899
|
-
totalAssets: totalSupply * exchangeRate * underlyingUnit / (shareUnit *
|
|
67384
|
+
totalAssets: totalSupply * exchangeRate * underlyingUnit / (shareUnit * ONE_E1814),
|
|
66900
67385
|
totalSupply,
|
|
66901
67386
|
exchangeRate,
|
|
66902
67387
|
withdrawFeeBps: penaltyBps,
|
|
@@ -66931,7 +67416,7 @@ var readerFrankencoinSavings = (entry) => ({
|
|
|
66931
67416
|
// `fetchPublic` derives `convertToAssets` / `convertToShares` from
|
|
66932
67417
|
// `exchangeRate`, and 1e18 makes them the identity.
|
|
66933
67418
|
totalSupply: deposits,
|
|
66934
|
-
exchangeRate:
|
|
67419
|
+
exchangeRate: ONE_E1814
|
|
66935
67420
|
};
|
|
66936
67421
|
}
|
|
66937
67422
|
});
|
|
@@ -66978,7 +67463,7 @@ var readerHyperbeatVault = (entry) => {
|
|
|
66978
67463
|
const feeRaw = toBigInt15(fee);
|
|
66979
67464
|
return {
|
|
66980
67465
|
// totalSupply is in raw share units; convert to raw underlying.
|
|
66981
|
-
totalAssets: totalSupply * exchangeRate * underlyingUnit / (shareUnit *
|
|
67466
|
+
totalAssets: totalSupply * exchangeRate * underlyingUnit / (shareUnit * ONE_E1814),
|
|
66982
67467
|
totalSupply,
|
|
66983
67468
|
exchangeRate,
|
|
66984
67469
|
// `instantWithdrawalFee` is over a base of 10 000, so the raw
|
|
@@ -67015,9 +67500,9 @@ var readerNavOracle = (entry) => {
|
|
|
67015
67500
|
const raw = Array.isArray(round) ? round[1] : round?.answer;
|
|
67016
67501
|
const answer = toBigInt15(raw);
|
|
67017
67502
|
if (answer === void 0 || answer <= 0n) return void 0;
|
|
67018
|
-
const exchangeRate = answer *
|
|
67503
|
+
const exchangeRate = answer * ONE_E1814 / oracleScale;
|
|
67019
67504
|
return {
|
|
67020
|
-
totalAssets: totalSupply * exchangeRate * underlyingUnit / (
|
|
67505
|
+
totalAssets: totalSupply * exchangeRate * underlyingUnit / (ONE_E1814 * shareUnit),
|
|
67021
67506
|
totalSupply,
|
|
67022
67507
|
exchangeRate
|
|
67023
67508
|
};
|
|
@@ -67031,7 +67516,7 @@ var readerNativeWnlp = (entry) => {
|
|
|
67031
67516
|
return {
|
|
67032
67517
|
calls: [
|
|
67033
67518
|
{ address, name: "totalSupply", params: [] },
|
|
67034
|
-
{ address, name: "getNlpByWnlp", params: [
|
|
67519
|
+
{ address, name: "getNlpByWnlp", params: [ONE_E1814] },
|
|
67035
67520
|
{ address, name: "instantRedeemFeeBips", params: [] },
|
|
67036
67521
|
{ address, name: "instantRedeemEnabled", params: [] },
|
|
67037
67522
|
// Falls back to the vault itself when no CreditVault is pinned —
|
|
@@ -67065,7 +67550,7 @@ var readerNativeWnlp = (entry) => {
|
|
|
67065
67550
|
const windowSeconds = toBigInt15(window);
|
|
67066
67551
|
const bips = toBigInt15(feeBips);
|
|
67067
67552
|
return {
|
|
67068
|
-
totalAssets: totalSupply * exchangeRate /
|
|
67553
|
+
totalAssets: totalSupply * exchangeRate / ONE_E1814,
|
|
67069
67554
|
totalSupply,
|
|
67070
67555
|
exchangeRate,
|
|
67071
67556
|
// `instantRedeemFeeBips` on-chain is already basis points, so it
|
|
@@ -67102,7 +67587,7 @@ var readerWrenNav = (entry) => {
|
|
|
67102
67587
|
const burncost = toBigInt15(burn);
|
|
67103
67588
|
const hasBurncost = burncost !== void 0 && burncost > 0n;
|
|
67104
67589
|
const exchangeRate = hasBurncost ? burncost : navPrice;
|
|
67105
|
-
const totalAssets = totalSupply * exchangeRate * underlyingUnit / (
|
|
67590
|
+
const totalAssets = totalSupply * exchangeRate * underlyingUnit / (ONE_E1814 * shareUnit);
|
|
67106
67591
|
const burnFlag = toBigInt15(burnable);
|
|
67107
67592
|
const instantRedeemEnabled = burnFlag === void 0 ? true : burnFlag > 0n;
|
|
67108
67593
|
return {
|
|
@@ -67117,7 +67602,7 @@ var readerWrenNav = (entry) => {
|
|
|
67117
67602
|
};
|
|
67118
67603
|
|
|
67119
67604
|
// src/vaults/savings/readers/yieldBasisLt.ts
|
|
67120
|
-
var ONE_SHARE =
|
|
67605
|
+
var ONE_SHARE = ONE_E1814;
|
|
67121
67606
|
var readerYieldBasisLt = (entry) => {
|
|
67122
67607
|
const underlyingUnit = 10n ** BigInt(entry.underlyingDecimals ?? entry.decimals);
|
|
67123
67608
|
const amm = entry.capacityContract ?? entry.address;
|
|
@@ -67145,7 +67630,7 @@ var readerYieldBasisLt = (entry) => {
|
|
|
67145
67630
|
}
|
|
67146
67631
|
if (totalSupply === 0n || redeemRaw === 0n) return void 0;
|
|
67147
67632
|
const totalAssets = totalSupply * redeemRaw / ONE_SHARE;
|
|
67148
|
-
const exchangeRate = redeemRaw *
|
|
67633
|
+
const exchangeRate = redeemRaw * ONE_E1814 / underlyingUnit;
|
|
67149
67634
|
const equity = Array.isArray(valueOracle) ? toBigInt15(valueOracle[1]) : toBigInt15(valueOracle?.value);
|
|
67150
67635
|
const cap = toBigInt15(maxDebt);
|
|
67151
67636
|
let depositCapacity;
|
|
@@ -67197,7 +67682,15 @@ var buildReader2 = (entry) => {
|
|
|
67197
67682
|
var resolveYieldApr2 = async (entries) => (await resolveEntryApr(entries)).apr;
|
|
67198
67683
|
|
|
67199
67684
|
// src/vaults/savings/fetchPublic.ts
|
|
67200
|
-
var
|
|
67685
|
+
var ONE_E1815 = 10n ** 18n;
|
|
67686
|
+
var resolveSelfOnly = (chainId, vault) => {
|
|
67687
|
+
const entry = findSavingsWithdrawEntry(chainId, vault);
|
|
67688
|
+
if (!entry) return void 0;
|
|
67689
|
+
return SAVINGS_RECEIVER_CAPABILITY[entry.kind]?.exit === false ? true : void 0;
|
|
67690
|
+
};
|
|
67691
|
+
var withSelfOnly = (routes2, selfOnly) => selfOnly === void 0 ? routes2 : routes2.map(
|
|
67692
|
+
(r) => r.kind === "market" || r.selfOnly !== void 0 ? r : { ...r, selfOnly }
|
|
67693
|
+
);
|
|
67201
67694
|
var fetchSavingsVaults = async (chainId, multicallRetry, prices = {}, tokenList = {}) => {
|
|
67202
67695
|
const entries = getSavingsRegistry(chainId);
|
|
67203
67696
|
if (entries.length === 0) return {};
|
|
@@ -67246,8 +67739,8 @@ var fetchSavingsVaults = async (chainId, multicallRetry, prices = {}, tokenList
|
|
|
67246
67739
|
1,
|
|
67247
67740
|
Number(liquidityAmount * 1000000n / state.totalAssets) / 1e6
|
|
67248
67741
|
) : 1;
|
|
67249
|
-
const convertToAssets = state.exchangeRate * underlyingUnit /
|
|
67250
|
-
const convertToShares = state.exchangeRate > 0n ?
|
|
67742
|
+
const convertToAssets = state.exchangeRate * underlyingUnit / ONE_E1815;
|
|
67743
|
+
const convertToShares = state.exchangeRate > 0n ? ONE_E1815 * shareUnit / state.exchangeRate : 0n;
|
|
67251
67744
|
const depositCapacity = state.depositCapacity?.toString();
|
|
67252
67745
|
const depositCapacityFormatted = state.depositCapacity !== void 0 ? Number(state.depositCapacity) / 10 ** underlyingDec : void 0;
|
|
67253
67746
|
const depositCapacityUsd = depositCapacityFormatted !== void 0 && priceUsd !== void 0 ? depositCapacityFormatted * priceUsd : void 0;
|
|
@@ -67320,14 +67813,17 @@ var fetchSavingsVaults = async (chainId, multicallRetry, prices = {}, tokenList
|
|
|
67320
67813
|
// savings row gets it without a per-provider change; the queued leg's
|
|
67321
67814
|
// fee is left ABSENT rather than 0 because "not published" and "free"
|
|
67322
67815
|
// are different claims and only some protocols make the second.
|
|
67323
|
-
exitRoutes:
|
|
67324
|
-
|
|
67325
|
-
|
|
67326
|
-
|
|
67327
|
-
|
|
67328
|
-
|
|
67329
|
-
|
|
67330
|
-
|
|
67816
|
+
exitRoutes: withSelfOnly(
|
|
67817
|
+
deriveExitRoutes({
|
|
67818
|
+
withdrawalMode: entry.withdrawalMode,
|
|
67819
|
+
withdrawFeeBps: state.withdrawFeeBps,
|
|
67820
|
+
withdrawalCooldownSeconds: state.withdrawalCooldownSeconds ?? entry.withdrawalCooldownSeconds,
|
|
67821
|
+
liquidity: liquidityRaw,
|
|
67822
|
+
liquidityFormatted,
|
|
67823
|
+
liquidityUsd
|
|
67824
|
+
}),
|
|
67825
|
+
resolveSelfOnly(chainId, entry.address)
|
|
67826
|
+
),
|
|
67331
67827
|
depositCapacity,
|
|
67332
67828
|
depositCapacityFormatted,
|
|
67333
67829
|
depositCapacityUsd,
|
|
@@ -67650,7 +68146,7 @@ async function fetchAaveEarnApiVaults(chainId, targets) {
|
|
|
67650
68146
|
}
|
|
67651
68147
|
|
|
67652
68148
|
// src/vaults/aave-earn/registry.ts
|
|
67653
|
-
var
|
|
68149
|
+
var EMPTY2 = { curators: [], vaults: [] };
|
|
67654
68150
|
var AAVE_EARN_REGISTRY = {
|
|
67655
68151
|
// Ethereum. Owners run vaults across multiple chains (CREATE3 factory
|
|
67656
68152
|
// `0xa35995bb2fFC5F2b33379C2e95d00C20FbF71E70`), so the same owner is
|
|
@@ -67678,7 +68174,7 @@ var AAVE_EARN_REGISTRY = {
|
|
|
67678
68174
|
vaults: []
|
|
67679
68175
|
}
|
|
67680
68176
|
};
|
|
67681
|
-
var getAaveEarnRegistry = (chainId) => AAVE_EARN_REGISTRY[String(chainId)] ??
|
|
68177
|
+
var getAaveEarnRegistry = (chainId) => AAVE_EARN_REGISTRY[String(chainId)] ?? EMPTY2;
|
|
67682
68178
|
var hasAaveEarnVaults = (chainId) => {
|
|
67683
68179
|
const reg = getAaveEarnRegistry(chainId);
|
|
67684
68180
|
return reg.curators.length > 0 || reg.vaults.length > 0;
|
|
@@ -69085,23 +69581,23 @@ var priceGmMarkets = async (chainId, multicallRetry, markets, prices) => {
|
|
|
69085
69581
|
const indexMax = price(prices, m.indexToken)?.max;
|
|
69086
69582
|
if (Array.isArray(dsRes) && longMax != null && shortMax != null) {
|
|
69087
69583
|
const base = i * SLOTS;
|
|
69088
|
-
const
|
|
69584
|
+
const big23 = (j) => typeof dsRes[base + j] === "bigint" ? dsRes[base + j] : 0n;
|
|
69089
69585
|
const cap = computeDepositCapacityUsd(
|
|
69090
|
-
[info?.longTokenAmount, longMax,
|
|
69091
|
-
[info?.shortTokenAmount, shortMax,
|
|
69586
|
+
[info?.longTokenAmount, longMax, big23(0), big23(2)],
|
|
69587
|
+
[info?.shortTokenAmount, shortMax, big23(1), big23(3)]
|
|
69092
69588
|
);
|
|
69093
69589
|
if (cap != null) value.depositCapacityUsd = cap;
|
|
69094
69590
|
if (indexMax != null) {
|
|
69095
69591
|
const divisor = m.longToken.toLowerCase() === m.shortToken.toLowerCase() ? 2n : 1n;
|
|
69096
|
-
const reservedUsdLong = (
|
|
69097
|
-
const reservedUsdShort = (
|
|
69592
|
+
const reservedUsdLong = (big23(4) + big23(5)) / divisor * indexMax;
|
|
69593
|
+
const reservedUsdShort = (big23(6) + big23(7)) / divisor;
|
|
69098
69594
|
const liq = computeLiquidityUsd(
|
|
69099
69595
|
info?.longTokenUsd,
|
|
69100
69596
|
info?.shortTokenUsd,
|
|
69101
69597
|
reservedUsdLong,
|
|
69102
69598
|
reservedUsdShort,
|
|
69103
|
-
|
|
69104
|
-
|
|
69599
|
+
big23(8),
|
|
69600
|
+
big23(9)
|
|
69105
69601
|
);
|
|
69106
69602
|
if (liq != null)
|
|
69107
69603
|
value.liquidityUsd = Math.max(0, Math.min(liq, value.tvlUsd));
|
|
@@ -69300,21 +69796,21 @@ var fetchGmxExecutionFees = async (chainId, multicallRetry, gasPriceWei) => {
|
|
|
69300
69796
|
} catch {
|
|
69301
69797
|
return void 0;
|
|
69302
69798
|
}
|
|
69303
|
-
const
|
|
69304
|
-
const base =
|
|
69305
|
-
const mult =
|
|
69799
|
+
const big23 = (i) => typeof res[i] === "bigint" ? res[i] : 0n;
|
|
69800
|
+
const base = big23(0);
|
|
69801
|
+
const mult = big23(1);
|
|
69306
69802
|
if (base === 0n && mult === 0n) return void 0;
|
|
69307
69803
|
const PRECISION = 10n ** 30n;
|
|
69308
69804
|
const adjusted = (opGas) => base + opGas * mult / PRECISION;
|
|
69309
69805
|
const fee = (opGas) => (adjusted(opGas) * gasPriceWei).toString();
|
|
69310
|
-
const glvExtra =
|
|
69806
|
+
const glvExtra = big23(6) * GLV_NOMINAL_MARKET_COUNT;
|
|
69311
69807
|
return {
|
|
69312
69808
|
chainId,
|
|
69313
69809
|
gasPriceWei: gasPriceWei.toString(),
|
|
69314
|
-
deposit: fee(
|
|
69315
|
-
withdrawal: fee(
|
|
69316
|
-
glvDeposit: fee(
|
|
69317
|
-
glvWithdrawal: fee(
|
|
69810
|
+
deposit: fee(big23(2)),
|
|
69811
|
+
withdrawal: fee(big23(3)),
|
|
69812
|
+
glvDeposit: fee(big23(4) + glvExtra),
|
|
69813
|
+
glvWithdrawal: fee(big23(5) + glvExtra)
|
|
69318
69814
|
};
|
|
69319
69815
|
};
|
|
69320
69816
|
|
|
@@ -77470,6 +77966,6 @@ function earnPositionTotals(items) {
|
|
|
77470
77966
|
};
|
|
77471
77967
|
}
|
|
77472
77968
|
|
|
77473
|
-
export { ApiBookSource, DEFAULT_MIDNIGHT_API, DEFAULT_OUTLIER_GUARD, DEFAULT_PROFILE_ID, DEFAULT_STALE_REJECT_SECONDS, DEFAULT_TERMMAX_API, DEFAULT_TERM_ORDER_STORE, EARN_DESCRIPTIONS, EARN_LABELS, EMPTY_BALANCE, EXACTLY_LENDER_KEY, FRACTION_RATE_PROVIDERS, GMX_API_HOSTS, GMX_READ_CONTRACTS, GMX_SUPPORTED_CHAINS, HYPERCORE_VAULT_REGISTRY, IDLE_MARKET_ID, INTERFACE_IDS, LAGOON_API_URL, LAGOON_CHAIN_IDS, MORPHO_LENS, MULTICALL_FAILURE, MaxParamThresholds, PASSTHROUGH_RATE_EPSILON, PENDLE_ASSETS_URL, PENDLE_CHAIN_IDS, PENDLE_MARKETS_URL, SDK_FRACTION_RATE_PROVIDERS, SPECTRA_NETWORKS, SPECTRA_RATE_MAX_PERCENT, SPECTRA_RATE_MIN_PERCENT, STABLECOIN_SYMBOLS, STCELO_MANAGER_ADDRESS, TELLER_CALLS_PER_BID, DECIMAL_BASE as TERMMAX_DECIMAL_BASE, TERMMAX_LIQUIDATION_PENALTY, TERMMAX_LIQUIDATION_WINDOW_SECS, TERMMAX_LIQUIDATOR_BONUS, TERMMAX_MARKETS_PER_CALL, TERMMAX_PARTIAL_CLOSE_FACTOR, TERMMAX_PARTIAL_LIQUIDATION_THRESHOLD_USD, TERM_ADAPTERS, TERM_PROFILES, TERM_SHEET_SCHEMA_VERSION, TermMaxApiSource, TermSubgraphSource, UPSHIFT_CHAIN_IDS, UPSHIFT_VAULTS_URL, VAULT_PROVIDERS, VAULT_PROVIDER_PROFILE, VAULT_PROVIDER_TRAITS, VAULT_SHARE_PRICE_PROBE, VAULT_VENUE_PREFIX, VOLATILE_VAULT_OVERRIDES, YEARN_CHAIN_IDS, YEARN_YDAEMON_BASE, __resetResupplyUserCaches, accountDepositListKey, accountWithdrawalListKey, appendSnapshot, applyPositionDelta, attachImplications, attachPricesToFlashLiquidity, borrowDescription, borrowFindings, borrowHeadline, buildExposures2 as buildExposures, buildFluidFTokensCall, buildLendingPositionUid, buildLiquityUserCall, buildLoopResult, buildMorphoTypeCall, buildMorphoTypeUserCallWithLens, buildPortfolioTotals, buildSumerAccumulators, buildSummaries, buildTellerUserCall, buildTermMaxUserCall, buildTermSheet, buildTermSheetsForGroup, buildVaultEarnUid, buildVaultLookup, buildVaultTermSheet, calculateLeverage, calculateNetApr, calculateOverallNetApr, calculateWeightedAverage, classifyFreshness, classifyReliability, classifyVault, clearPendleMarketsCache, clearSpectraMarketsCache, collateralSymbolsByVenue, 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, convertCoolerMarketsToResponse, convertDssMarketsToResponse, convertExactlyMarketsToResponse, convertFrankencoinMarketsToResponse, convertFraxlendPairsToResponse, convertInverseMarketsToResponse, convertLenderUserDataResult, convertLiquityMarketsToResponse, convertLlamaLendMarketsToResponse, convertResupplyMarketsToResponse, convertRiverMarketsToResponse, convertTellerMarketsToResponse, convertTermMarketsToResponse, convertTermMaxMarketsToResponse, convertUsddMarketsToResponse, createMarketUid, createMidnightBookSource, createMulticallRpcCall, createRawRpcCalls, createTermBookSource, createTermMaxDataSource, decodeListaMarkets, decodeMarkets, decodePackedListaUserDataset, decodePackedMorphoUserDataset, deriveBorrowTags, deriveSupplyTags, detectInterfaceKinds, dexResolverFor, disambiguateEarnNames, dssIlkBytes32, dssKeyParts, dssLenderKey, duration, earnDescription, earnLabel, earnMarketFromPool, earnMarketFromVault, earnMarketLabel, earnPositionFromLenderEntry, earnPositionFromVaultBalance, earnPositionTotals, earnRowSubtitle, earnUidFromMarketUid, earnVaultTerms, earnVenueKind, encodeBalanceFetcherCalldata, enrichTermSheet, enrichmentIndexFromRows, exactlyPairLtv, exactlyPenaltyRateToAprPercent, exactlyWadRateToPercent, feePhrase, feedKeyOf, feedStatKey, fetchCoolerMarkets, fetchDolomiteAccountNumbers, fetchDssMarkets, fetchEulerEarnVaults, fetchEulerEarnVaultsFromSubgraph, fetchEulerSubAccountIndexes, fetchExactlyMarkets, fetchFlashLiquidityForChain, fetchFluidDexState, fetchFluidFTokens, fetchFrankencoinMarkets, fetchFraxlendPairs, fetchGeneralYields, fetchGeneralYieldsByMarketUid, fetchGmxExecutionFees, fetchGmxTickerPrices, fetchGmxVaults, fetchHypercoreVaults, fetchInverseMarkets, fetchLagoonApiVaults, fetchLagoonVaults, fetchLiquityMarkets, fetchListaVaultsFromChain, fetchLlamaLendMarkets, fetchMorphoUserBalances, fetchMorphoUserPositionMarkets, fetchMorphoVaults, fetchMorphoVaultsFromApi, fetchMorphoVaultsFromChain, fetchOraclePrices, fetchPendleApiAssets, fetchPendleApiMarkets, fetchPendlePrices, fetchPendlePtMarkets, fetchResupplyMarkets, fetchRiverMarkets, fetchSiloVaults, fetchSpectraApiMarkets, fetchSpectraPtMarkets, fetchTellerMarkets, fetchTermMarkets, fetchTermMaxMarkets, fetchTermStoreOrders, fetchTokenBalances, fetchTokenMetadata, fetchUpshiftApiVaults, fetchUpshiftVaults, fetchUsddMarkets, fetchYearnApiVaults, fetchYearnVaults, fillableRemaining, filterActiveLenders, filterLendersByProtocol, finalizeInfo, findingsFor, formatRaw, frankencoinKeyParts, frankencoinLenderKey, fraxlendAssetPerCollateral, fraxlendKeyParts, fraxlendLenderKey, fuseLenderData, generateLendingPools, getAavesForChain, getAssetConfig, getBalanceForMarketUid, getBorrowCapacity, getCachedFluidDexState, getCachedLiquityTroves, getCachedTellerBids, getCachedTermMaxDiscovery, getCachedTermMaxMarket, getCachedTermMaxMarkets, getCoreValidators, getFluidFTokensConverter, getGmxApiHost, getGmxReadContracts, getGmxUserPositions, getHealthFactor, getHypercoreUserPositions, getHypercoreVaultRegistry, getLenderAssets, getLenderPublicData, getLenderPublicDataAll, getLenderPublicDataViaApi, getLenderUserDataMulti, getLenderUserDataResult, getLendersForChain, getLstDelegation, getLstValidators, getLstWithdrawalRegistry, getLstWithdrawalRequests, getMaxAmountClose, getMaxAmountCollateralSwap, getMaxAmountDebtSwap, getMaxAmountOpen, getMergedUserData, getMorphoTypeMarketConverter, getReadFailurePolicy, getResolvedDolomiteAccountNumbers, getStCeloValidatorGroups, getSubAccountAddress, getSubAccountIndex, getTermProfile, getVaultPublicDataAll, getVaultWithdrawalRequests, hasCritical, hasEulerEarnVaultSubgraph, hasLagoonVaults, hasMorphoPositionIndex, hasMorphoUserApi, hasMorphoUserSubgraph, hasPendleMarkets, hasSpectraMarkets, hasUpshiftVaults, hasYearnVaults, ilkToKeySegment, implausibleRatePercent, inverseKeyParts, inverseLenderKey, isBoundNeed, isFailedCall, isIlliquid, isLendingPosition, isLiveMarket as isLivePendleMarket, isLiveSpectraMarket, isSecondaryMarketOnly, isStablecoinSymbol, isVaultPosition, isVaultVenue, isYearnV3, keySegmentToIlk, keysFromMaps, lenderApiOnly, lenderFamily, liquityCandidateTroveIds, liquityKeyParts, liquityLenderKey, llamaLendKeyParts, llamaLendLenderKey, meetsLiquidityFloor, mergeDeep, multicall3Abi2 as multicall3Abi, nanTo, needsLenderApproval, needsTokenApproval, noOpResult, normalizeToBytes, organizeUserQueries, parseBalanceFetcherResult, parseEarnUid, parseMergedResult, parseMulticallRpcResponses, parseExpirySeconds as parsePendleExpirySeconds, parseRawRpcBatchResponses, parseRawRpcResponses, parseCurveFee as parseSpectraCurveFee, parsePtRate as parseSpectraPtRate, parseTermMaxLtv, parseTokenBalanceResult, pct, assetKey as pendleAssetKey, pickPool as pickSpectraPool, positivePart2 as positivePart, predictInverseEscrow, prepareLenderUserDataRpcCalls, prepareMergedMulticallParams, prepareMergedRpcCalls, prepareMulticallInputs, prepareTokenBalanceRpcCalls, priceGlvVaults, priceGmMarkets, probeAaveFeedTimestamps, pruneFeedStats, rankFindings, ratePercent, readVaultSharePrices, rejectOutliers as rejectPriceOutliers, resolveAdapter, resolveDerivation, resolveEarnIdentity, resolveModeConfig, resolveStCeloDepositGroup, resolveVaultProfileId, resupplyKeyParts, resupplyLenderKey, resupplyMarketLabel, riverKeyParts, riverLenderKey, sanePercent as saneSpectraPercent, savingsAddresses, savingsBalanceKind, secondaryMarketVault, selectAssetGroupPrices, shortDate, spectraAddress, spectraNetwork, spectraPoolsUrl, splitChainScopedAddress as splitPendleChainScopedAddress, stampCapabilities, stampEarnSubtitles, stampVaultClassification, stampVaultTermSheets, stripLeadingBrand, supplyDescription, supplyFindings, supplyHeadline, swapRoutedProvidersArePriceConsistent, tellerBpsToPercent, tellerImpliedLtv, tellerLenderKey, tellerPoolFromLenderKey, termApiBaseUrl, 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, termOfferRateToAprPct, termOrderStoreBaseUrl, tickToAprNumber, tickToPrice, toDigest, toTermFillNow, toTermSheetInput, toVaultTermInput, trancheFromCounterparty, tryParseEarnUid, unflattenLenderData, updateFeedStats, usdValue, usddIlkBytes32, usddKeyParts, usddLenderKey, validateTermSheet, validateTermSheets, validateUserData, vaultSharesToAssets, vaultTermInputFromEarnMarket, vaultTermInputFromSourceRow, vaultTraits, vaultVenue, venueBrand, venueBrandKey, withMaturityLabel, withTrancheLabel };
|
|
77969
|
+
export { ApiBookSource, DEFAULT_MIDNIGHT_API, DEFAULT_OUTLIER_GUARD, DEFAULT_PROFILE_ID, DEFAULT_STALE_REJECT_SECONDS, DEFAULT_TERMMAX_API, DEFAULT_TERM_ORDER_STORE, EARN_DESCRIPTIONS, EARN_LABELS, EMPTY_BALANCE, EXACTLY_LENDER_KEY, FLYING_TULIP_LENDER_KEY, FRACTION_RATE_PROVIDERS, GMX_API_HOSTS, GMX_READ_CONTRACTS, GMX_SUPPORTED_CHAINS, HYPERCORE_VAULT_REGISTRY, IDLE_MARKET_ID, INTERFACE_IDS, LAGOON_API_URL, LAGOON_CHAIN_IDS, MORPHO_LENS, MULTICALL_FAILURE, MaxParamThresholds, PASSTHROUGH_RATE_EPSILON, PENDLE_ASSETS_URL, PENDLE_CHAIN_IDS, PENDLE_MARKETS_URL, SDK_FRACTION_RATE_PROVIDERS, SPECTRA_NETWORKS, SPECTRA_RATE_MAX_PERCENT, SPECTRA_RATE_MIN_PERCENT, STABLECOIN_SYMBOLS, STCELO_MANAGER_ADDRESS, TELLER_CALLS_PER_BID, DECIMAL_BASE as TERMMAX_DECIMAL_BASE, TERMMAX_LIQUIDATION_PENALTY, TERMMAX_LIQUIDATION_WINDOW_SECS, TERMMAX_LIQUIDATOR_BONUS, TERMMAX_MARKETS_PER_CALL, TERMMAX_PARTIAL_CLOSE_FACTOR, TERMMAX_PARTIAL_LIQUIDATION_THRESHOLD_USD, TERM_ADAPTERS, TERM_PROFILES, TERM_SHEET_SCHEMA_VERSION, TermMaxApiSource, TermSubgraphSource, UPSHIFT_CHAIN_IDS, UPSHIFT_VAULTS_URL, VAULT_PROVIDERS, VAULT_PROVIDER_PROFILE, VAULT_PROVIDER_TRAITS, VAULT_SHARE_PRICE_PROBE, VAULT_VENUE_PREFIX, VOLATILE_VAULT_OVERRIDES, YEARN_CHAIN_IDS, YEARN_YDAEMON_BASE, __resetResupplyUserCaches, accountDepositListKey, accountWithdrawalListKey, appendSnapshot, applyPositionDelta, attachImplications, attachPricesToFlashLiquidity, borrowDescription, borrowFindings, borrowHeadline, buildExposures2 as buildExposures, buildFluidFTokensCall, buildLendingPositionUid, buildLiquityUserCall, buildLoopResult, buildMorphoTypeCall, buildMorphoTypeUserCallWithLens, buildPortfolioTotals, buildSumerAccumulators, buildSummaries, buildTellerUserCall, buildTermMaxUserCall, buildTermSheet, buildTermSheetsForGroup, buildVaultEarnUid, buildVaultLookup, buildVaultTermSheet, calculateLeverage, calculateNetApr, calculateOverallNetApr, calculateWeightedAverage, classifyFreshness, classifyReliability, classifyVault, clearPendleMarketsCache, clearSpectraMarketsCache, collateralSymbolsByVenue, 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, convertCoolerMarketsToResponse, convertDssMarketsToResponse, convertExactlyMarketsToResponse, convertFlyingTulipMarketsToResponse, convertFrankencoinMarketsToResponse, convertFraxlendPairsToResponse, convertInverseMarketsToResponse, convertLenderUserDataResult, convertLiquityMarketsToResponse, convertLlamaLendMarketsToResponse, convertResupplyMarketsToResponse, convertRiverMarketsToResponse, convertTellerMarketsToResponse, convertTermMarketsToResponse, convertTermMaxMarketsToResponse, convertUsddMarketsToResponse, createMarketUid, createMidnightBookSource, createMulticallRpcCall, createRawRpcCalls, createTermBookSource, createTermMaxDataSource, decodeListaMarkets, decodeMarkets, decodePackedListaUserDataset, decodePackedMorphoUserDataset, deriveBorrowTags, deriveSupplyTags, detectInterfaceKinds, dexResolverFor, disambiguateEarnNames, dssIlkBytes32, dssKeyParts, dssLenderKey, duration, earnDescription, earnLabel, earnMarketFromPool, earnMarketFromVault, earnMarketLabel, earnPositionFromLenderEntry, earnPositionFromVaultBalance, earnPositionTotals, earnRowSubtitle, earnUidFromMarketUid, earnVaultTerms, earnVenueKind, encodeBalanceFetcherCalldata, enrichTermSheet, enrichmentIndexFromRows, exactlyPairLtv, exactlyPenaltyRateToAprPercent, exactlyWadRateToPercent, feePhrase, feedKeyOf, feedStatKey, fetchCoolerMarkets, fetchDolomiteAccountNumbers, fetchDssMarkets, fetchEulerEarnVaults, fetchEulerEarnVaultsFromSubgraph, fetchEulerSubAccountIndexes, fetchExactlyMarkets, fetchFlashLiquidityForChain, fetchFluidDexState, fetchFluidFTokens, fetchFlyingTulipMarkets, fetchFrankencoinMarkets, fetchFraxlendPairs, fetchGeneralYields, fetchGeneralYieldsByMarketUid, fetchGmxExecutionFees, fetchGmxTickerPrices, fetchGmxVaults, fetchHypercoreVaults, fetchInverseMarkets, fetchLagoonApiVaults, fetchLagoonVaults, fetchLiquityMarkets, fetchListaVaultsFromChain, fetchLlamaLendMarkets, fetchMorphoUserBalances, fetchMorphoUserPositionMarkets, fetchMorphoVaults, fetchMorphoVaultsFromApi, fetchMorphoVaultsFromChain, fetchOraclePrices, fetchPendleApiAssets, fetchPendleApiMarkets, fetchPendlePrices, fetchPendlePtMarkets, fetchResupplyMarkets, fetchRiverMarkets, fetchSiloVaults, fetchSpectraApiMarkets, fetchSpectraPtMarkets, fetchTellerMarkets, fetchTermMarkets, fetchTermMaxMarkets, fetchTermStoreOrders, fetchTokenBalances, fetchTokenMetadata, fetchUpshiftApiVaults, fetchUpshiftVaults, fetchUsddMarkets, fetchYearnApiVaults, fetchYearnVaults, fillableRemaining, filterActiveLenders, filterLendersByProtocol, finalizeInfo, findingsFor, formatRaw, frankencoinKeyParts, frankencoinLenderKey, fraxlendAssetPerCollateral, fraxlendKeyParts, fraxlendLenderKey, fuseLenderData, generateLendingPools, getAavesForChain, getAssetConfig, getBalanceForMarketUid, getBorrowCapacity, getCachedFluidDexState, getCachedLiquityTroves, getCachedTellerBids, getCachedTermMaxDiscovery, getCachedTermMaxMarket, getCachedTermMaxMarkets, getCoreValidators, getFluidFTokensConverter, getGmxApiHost, getGmxReadContracts, getGmxUserPositions, getHealthFactor, getHypercoreUserPositions, getHypercoreVaultRegistry, getLenderAssets, getLenderPublicData, getLenderPublicDataAll, getLenderPublicDataViaApi, getLenderUserDataMulti, getLenderUserDataResult, getLendersForChain, getLstDelegation, getLstValidators, getLstWithdrawalRegistry, getLstWithdrawalRequests, getMaxAmountClose, getMaxAmountCollateralSwap, getMaxAmountDebtSwap, getMaxAmountOpen, getMergedUserData, getMorphoTypeMarketConverter, getReadFailurePolicy, getResolvedDolomiteAccountNumbers, getStCeloValidatorGroups, getSubAccountAddress, getSubAccountIndex, getTermProfile, getVaultPublicDataAll, getVaultWithdrawalRequests, hasCritical, hasEulerEarnVaultSubgraph, hasLagoonVaults, hasMorphoPositionIndex, hasMorphoUserApi, hasMorphoUserSubgraph, hasPendleMarkets, hasSpectraMarkets, hasUpshiftVaults, hasYearnVaults, ilkToKeySegment, implausibleRatePercent, inverseKeyParts, inverseLenderKey, isBoundNeed, isFailedCall, isIlliquid, isLendingPosition, isLiveMarket as isLivePendleMarket, isLiveSpectraMarket, isSecondaryMarketOnly, isStablecoinSymbol, isVaultPosition, isVaultVenue, isYearnV3, keySegmentToIlk, keysFromMaps, lenderApiOnly, lenderFamily, liquityCandidateTroveIds, liquityKeyParts, liquityLenderKey, llamaLendKeyParts, llamaLendLenderKey, meetsLiquidityFloor, mergeDeep, multicall3Abi2 as multicall3Abi, nanTo, needsLenderApproval, needsTokenApproval, noOpResult, normalizeToBytes, organizeUserQueries, parseBalanceFetcherResult, parseEarnUid, parseMergedResult, parseMulticallRpcResponses, parseExpirySeconds as parsePendleExpirySeconds, parseRawRpcBatchResponses, parseRawRpcResponses, parseCurveFee as parseSpectraCurveFee, parsePtRate as parseSpectraPtRate, parseTermMaxLtv, parseTokenBalanceResult, pct, assetKey as pendleAssetKey, pickPool as pickSpectraPool, positivePart2 as positivePart, predictInverseEscrow, prepareLenderUserDataRpcCalls, prepareMergedMulticallParams, prepareMergedRpcCalls, prepareMulticallInputs, prepareTokenBalanceRpcCalls, priceGlvVaults, priceGmMarkets, probeAaveFeedTimestamps, pruneFeedStats, rankFindings, ratePercent, readVaultSharePrices, rejectOutliers as rejectPriceOutliers, resolveAdapter, resolveDerivation, resolveEarnIdentity, resolveModeConfig, resolveStCeloDepositGroup, resolveVaultProfileId, resupplyKeyParts, resupplyLenderKey, resupplyMarketLabel, riverKeyParts, riverLenderKey, sanePercent as saneSpectraPercent, savingsAddresses, savingsBalanceKind, secondaryMarketVault, selectAssetGroupPrices, shortDate, spectraAddress, spectraNetwork, spectraPoolsUrl, splitChainScopedAddress as splitPendleChainScopedAddress, stampCapabilities, stampEarnSubtitles, stampVaultClassification, stampVaultTermSheets, stripLeadingBrand, supplyDescription, supplyFindings, supplyHeadline, swapRoutedProvidersArePriceConsistent, tellerBpsToPercent, tellerImpliedLtv, tellerLenderKey, tellerPoolFromLenderKey, termApiBaseUrl, 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, termOfferRateToAprPct, termOrderStoreBaseUrl, tickToAprNumber, tickToPrice, toDigest, toTermFillNow, toTermSheetInput, toVaultTermInput, trancheFromCounterparty, tryParseEarnUid, unflattenLenderData, updateFeedStats, usdValue, usddIlkBytes32, usddKeyParts, usddLenderKey, validateTermSheet, validateTermSheets, validateUserData, vaultSharesToAssets, vaultTermInputFromEarnMarket, vaultTermInputFromSourceRow, vaultTraits, vaultVenue, venueBrand, venueBrandKey, withMaturityLabel, withTrancheLabel };
|
|
77474
77970
|
//# sourceMappingURL=index.js.map
|
|
77475
77971
|
//# sourceMappingURL=index.js.map
|