@1delta/margin-fetcher 5.0.11 → 5.0.12
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 +71 -6
- package/dist/index.js +372 -3
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/dist/index.d.ts
CHANGED
|
@@ -4800,6 +4800,64 @@ type ListaMarketOverrides = {
|
|
|
4800
4800
|
[chainId: string]: ListaMarketOverride[];
|
|
4801
4801
|
};
|
|
4802
4802
|
|
|
4803
|
+
/**
|
|
4804
|
+
* Curve LlamaLend oracle fetcher — DERIVED (Pass 2).
|
|
4805
|
+
*
|
|
4806
|
+
* Each market's price feed is `price_oracle()` on its own LLAMMA. Three
|
|
4807
|
+
* properties of that read drive every decision in this file:
|
|
4808
|
+
*
|
|
4809
|
+
* 1. **It is always WAD**, regardless of either token's decimals. Verified
|
|
4810
|
+
* on-chain across the decimal spread: the 8-decimal WBTC / crvUSD market
|
|
4811
|
+
* returns `65042815002675129318680` (= 65,042.82) and the 18-decimal
|
|
4812
|
+
* sfrxUSD market returns `1205489834170667241` (= 1.2055). So this fetcher
|
|
4813
|
+
* divides by 1e18 and NEVER consults token decimals — unlike Morpho, whose
|
|
4814
|
+
* oracles scale by `10^(36 + loanDec - collDec)`.
|
|
4815
|
+
* 2. **It is denominated in the BORROWED token**, not USD. Hence Pass 2 with
|
|
4816
|
+
* `updatePrices=false`: `collateralUSD = ratio × borrowedUSD`, where the
|
|
4817
|
+
* borrowed token's direct USD price came from Pass 1. This is the
|
|
4818
|
+
* Morpho/Midnight/Teller shape, so the derivation class is `'derived'`.
|
|
4819
|
+
* It matters for real markets, not just in theory — 8 of ~99 markets
|
|
4820
|
+
* borrow something other than crvUSD (CRV, WETH, tBTC, ynETH, USDC,
|
|
4821
|
+
* wstETH), where treating the ratio as USD would be badly wrong.
|
|
4822
|
+
* 3. **It lives on the AMM, and only on the AMM.** A Curve
|
|
4823
|
+
* `price_oracle_contract` is a different contract exposing `price()`, and
|
|
4824
|
+
* the LLAMMA does NOT implement `price()`. That distinction is the whole
|
|
4825
|
+
* reason this fetcher exists: LlamaLend markets used to fall through a
|
|
4826
|
+
* catch-all `else` into the MORPHO override bucket, which called `price()`
|
|
4827
|
+
* on the LLAMMA — reverting, mapping to '0x', and dropping every market
|
|
4828
|
+
* silently. Had the address been a `price_oracle_contract` instead, the
|
|
4829
|
+
* call would have SUCCEEDED and been rescaled by 1e36, i.e. ~1e18 off.
|
|
4830
|
+
*
|
|
4831
|
+
* Markets are sourced exclusively from overrides (the database), like Morpho
|
|
4832
|
+
* and Lista. There is no on-chain market enumeration to fall back on.
|
|
4833
|
+
*/
|
|
4834
|
+
/**
|
|
4835
|
+
* One LlamaLend market, as supplied by the caller's database.
|
|
4836
|
+
*/
|
|
4837
|
+
interface LlamaLendMarketOverride {
|
|
4838
|
+
/**
|
|
4839
|
+
* The market's LLAMMA. `price_oracle()` is read from here — NOT from the
|
|
4840
|
+
* generic `oracle` column, which is written as the AMM but would silently
|
|
4841
|
+
* become unreadable if a `price_oracle_contract` were ever stored there.
|
|
4842
|
+
*/
|
|
4843
|
+
amm: string;
|
|
4844
|
+
/** Borrowed token — the oracle's unit of account. */
|
|
4845
|
+
loanAsset: string;
|
|
4846
|
+
collateralAsset: string;
|
|
4847
|
+
/** Present for symmetry with the other override types; NOT used for scaling. */
|
|
4848
|
+
loanAssetDecimals?: number;
|
|
4849
|
+
/** Present for symmetry with the other override types; NOT used for scaling. */
|
|
4850
|
+
collateralAssetDecimals?: number;
|
|
4851
|
+
/**
|
|
4852
|
+
* Controller address, 0x-stripped and uppercased — the suffix of the
|
|
4853
|
+
* per-market lender key the lending converter emits.
|
|
4854
|
+
*/
|
|
4855
|
+
marketId: string;
|
|
4856
|
+
}
|
|
4857
|
+
type LlamaLendMarketOverrides = {
|
|
4858
|
+
[chainId: string]: LlamaLendMarketOverride[];
|
|
4859
|
+
};
|
|
4860
|
+
|
|
4803
4861
|
/**
|
|
4804
4862
|
* Token list type expected by this function
|
|
4805
4863
|
* Token decimals are read from list[chainId].list[address].decimals
|
|
@@ -4851,9 +4909,9 @@ interface FetchOraclePricesOptions {
|
|
|
4851
4909
|
probeFeedStaleness?: boolean;
|
|
4852
4910
|
/**
|
|
4853
4911
|
* Only run these fetcher groups. Useful for debugging individual protocols.
|
|
4854
|
-
* Values: 'aave', 'compoundV2', 'compoundV3', 'lista', '
|
|
4855
|
-
* '
|
|
4856
|
-
* 'siloV2', 'siloV3', 'fluid'.
|
|
4912
|
+
* Values: 'aave', 'compoundV2', 'compoundV3', 'lista', 'llamalend',
|
|
4913
|
+
* 'eulerV2', 'aaveV4', 'morpho', 'midnight', 'exactly', 'term', 'liquity',
|
|
4914
|
+
* 'river', 'teller', 'siloV2', 'siloV3', 'fluid'.
|
|
4857
4915
|
* If omitted, all fetchers run.
|
|
4858
4916
|
*/
|
|
4859
4917
|
onlyFetchers?: string[];
|
|
@@ -4873,7 +4931,14 @@ declare function fetchOraclePrices(chainIds: string[], rpcOverrides?: {
|
|
|
4873
4931
|
[chainId: string]: string[];
|
|
4874
4932
|
}, lists?: TokenListInput, retries?: number, batchSize?: {
|
|
4875
4933
|
[chainId: string]: number;
|
|
4876
|
-
} | undefined, allowFailure?: boolean, basePrices?: USDPriceMap, morphoMarketOverrides?: MorphoMarketOverrides, listaMarketOverrides?: ListaMarketOverrides, stalenessThresholdSeconds?: number, onlyFetchers?: string[], probeFeedStaleness?: boolean
|
|
4934
|
+
} | undefined, allowFailure?: boolean, basePrices?: USDPriceMap, morphoMarketOverrides?: MorphoMarketOverrides, listaMarketOverrides?: ListaMarketOverrides, stalenessThresholdSeconds?: number, onlyFetchers?: string[], probeFeedStaleness?: boolean,
|
|
4935
|
+
/**
|
|
4936
|
+
* Curve LlamaLend markets. Appended LAST rather than slotted next to the
|
|
4937
|
+
* other two override params on purpose — ~50 call sites already pass all 12
|
|
4938
|
+
* positional arguments, and inserting here would silently shift
|
|
4939
|
+
* `onlyFetchers` / `probeFeedStaleness` in every one of them.
|
|
4940
|
+
*/
|
|
4941
|
+
llamaLendMarketOverrides?: LlamaLendMarketOverrides): Promise<OraclePricesResult>;
|
|
4877
4942
|
|
|
4878
4943
|
/**
|
|
4879
4944
|
* Self-calibrating per-feed quality stats.
|
|
@@ -6103,7 +6168,7 @@ type LstWithdrawalStatus =
|
|
|
6103
6168
|
| 'expired';
|
|
6104
6169
|
/** Withdrawal-reader implementation kind — drives which enumeration
|
|
6105
6170
|
* function the user is queried against. */
|
|
6106
|
-
type LstWithdrawalReaderKind = 'lidoQueue' | 'etherfiNft' | 'yieldNestNft' | 'staderEthxQueue' | 'staderMaticXQueue' | 'renzoQueue' | 'kelpQueue' | 'benqiSavaxQueue' | 'beetsStSQueue' | 'hyperbeatBeHype7540' | 'erc7540' | 'ethenaCooldown' | 'susd3Cooldown' | 'strataCooldown' | 'swellNft' | 'stakeWiseSubgraph' | 'mantleCallerSuppliedIds' | 'pufferCallerSuppliedIds' | 'trufinCallerSuppliedIds' | 'lairCallerSuppliedIds' | 'stceloAccountQueue' | 'kinetiqQueue' | 'beHypeQueue' | 'valantisBurnQueue' | 'listaQueue' | 'iberaQueue' | 'primeStakingQueue' | 'berapawRedeemQueue' | 'eventsOnly' | 'noQueue' | 'unverified';
|
|
6171
|
+
type LstWithdrawalReaderKind = 'lidoQueue' | 'etherfiNft' | 'yieldNestNft' | 'staderEthxQueue' | 'staderMaticXQueue' | 'renzoQueue' | 'kelpQueue' | 'benqiSavaxQueue' | 'beetsStSQueue' | 'hyperbeatBeHype7540' | 'erc7540' | 'binanceWbethQueue' | 'ethenaCooldown' | 'susd3Cooldown' | 'strataCooldown' | 'swellNft' | 'stakeWiseSubgraph' | 'mantleCallerSuppliedIds' | 'pufferCallerSuppliedIds' | 'trufinCallerSuppliedIds' | 'lairCallerSuppliedIds' | 'stceloAccountQueue' | 'kinetiqQueue' | 'beHypeQueue' | 'valantisBurnQueue' | 'listaQueue' | 'iberaQueue' | 'primeStakingQueue' | 'berapawRedeemQueue' | 'eventsOnly' | 'noQueue' | 'unverified';
|
|
6107
6172
|
/** Map keyed by lowercased LST share-token address. The orchestrator
|
|
6108
6173
|
* fetches all LSTs on a chain in parallel and returns this map
|
|
6109
6174
|
* (possibly with empty arrays for LSTs the user has no requests
|
|
@@ -9838,4 +9903,4 @@ interface TermAdapter {
|
|
|
9838
9903
|
declare const TERM_ADAPTERS: TermAdapter[];
|
|
9839
9904
|
declare function resolveAdapter(lender: string): TermAdapter | undefined;
|
|
9840
9905
|
|
|
9841
|
-
export { type AaveMetadata, type AaveV2Public, type AaveV2UserReserveResponse, type AaveV3Public, type AaveV3UserReserveResponse, type AdditionalYields, type AdminKind, ApiBookSource, type AprData, type AprPercent, type AssetQuality, type AssetRiskIndex, type AuctionWindow, type AvailabilityTerms, type BalanceData, type BaseLendingPosition, type BasicReserveResponse, type BorrowExitTerms, type BorrowTermSheet, type BuildTermSheetOptions, type ChainDiagnostic, type ChainLinkResponse, type ChainQuery, type ChainSummary, type CompoundV2Metadata, type CompoundV3Public, type CompoundV3UserReserveResponse, type ConfigEntry, type ConvertLenderUserDataOptions, type CoreValidators, type CounterpartyTerms, type CoverageInfo, DEFAULT_MIDNIGHT_API, DEFAULT_OUTLIER_GUARD, DEFAULT_PROFILE_ID, DEFAULT_STALE_REJECT_SECONDS, DEFAULT_TERMMAX_API, type DeepPartial, type Denomination, type DepthMap, EMPTY_BALANCE, type EModeAssets, type EModeData, type EModeResult, EXACTLY_LENDER_KEY, type EndpointFailure, type EnrichmentIndex, type EulerEarnVault, type EulerEarnVaults, type EulerV2Metadata, type ExactlyFixedPool, type ExactlyFixedPosition, type ExactlyMarketAccount, type ExactlyMarketsRaw, type ExactlyUserFixedPosition, type ExposureEntry, type ExposureTerms, type ExtraValidationCall, type FeeTerm, type FeeWhen, type FeedObservation, type FeedStat, type FeedStatsMap, type FeedTimestampMap, type FetchListaVaultsFromChainOptions, type FetchMorphoVaultsFromChainOptions, type FetchOraclePricesOptions, type FetchTokenBalancesOptions, type FlattenPriorityConfig, type FluidFToken, type FluidFTokens, type FrankencoinMarketRaw, type FrankencoinMarketsRaw, type FrankencoinPositionInfo, type FullLenderRewardsMap, GMX_API_HOSTS, GMX_READ_CONTRACTS, GMX_SUPPORTED_CHAINS, type GenericCurrency, type GenericTokenList, type GetVaultPublicDataAllOptions, type GmxExecutionFees, type GmxPendingDeposit, type GmxPendingWithdrawal, type GmxReadContracts, type GmxUserBalance, type GmxUserPositions, type GmxUserPositionsOptions, type GmxVault, type GmxVaultKind, type GmxVaults, type GmxVaultsFetchOptions, type GovernancePower, type GovernanceRow, type GovernanceTerms, type GroupAccumulator, HYPERCORE_VAULT_REGISTRY, type HypercoreLockStatus, type HypercoreUserPositionsOptions, type HypercoreVault, type HypercoreVaultPosition, type HypercoreVaultRegistryEntry, type HypercoreVaults, type HypercoreVaultsFetchOptions, IDLE_MARKET_ID, INTERFACE_IDS, type IncompleteLenderRead, type IncompleteReason, type InitMetadata, type InitPublic, type InitUserReserveResponse, type InterfaceKind, type InvariantViolation, type InverseMarketRaw, type InverseMarketsRaw, type InversePositionInfo, LAGOON_API_URL, LAGOON_CHAIN_IDS, type LagoonApiVault, type LagoonSyncMode, type LagoonVault, type LagoonVaults, type LenderConfigData, type LenderConfigMap, type LenderCrossPoolMeta, type LenderData, type LenderDataEntry, type LenderInfo, type LenderInfoMap, type LenderPublicBase, type LenderRewardsMap, type LenderSummary, type LenderToLenderCrossPoolMeta, type LenderTotalAmounts, type LenderUserQuery, type LenderUserResponse, type LenderYieldComplete, type LenderYields$1 as LenderYields, LendingMode, type LiquidationPenaltyTerm, type LiquidationTerms, type LiquityBranchRaw, type LiquityDiscoveredTrove, type LiquityDiscovery, type LiquityMarketsRaw, type LiquitySpInfo, type LiquityTroveInfo, type ListaMarketOverrides, type LlamaLendMarketRaw, type LlamaLendMarketsRaw, type LlamaLendPositionInfo, type LoopPostTradeMetrics, type LstDelegation, type LstDelegationKind, type LstValidator, type LstWithdrawalFetchOptions, type LstWithdrawalRegistryEntry, type LstWithdrawalRequest, type LstWithdrawalRequestsByLst, type LstWithdrawalStatus, MORPHO_LENS, MULTICALL_FAILURE, type MaturityTerms, MaxParamThresholds, type MergedUserData, type MidnightBook, type MidnightBookLevel, type MidnightBookSource, type ModeBase, type ModeVariant, type MorphoMarketOverrides, type MorphoSubgraphProxyConfig, type MorphoUserMarketBalance, type MorphoUserReserveResponse, type MorphoVault, type MorphoVaults, type MulticallEndpointOptions, type MulticallRpcBatch, type NumberMap, type Open, type OracleBand, type OracleDiagnostics, type OraclePriceEntry, type OraclePricesResult, type OracleRiskRow, type OracleTerms, type OutlierGuardConfig, type ParsedBalanceData, type ParsedResponse, type ParsedUserBalance, type PermissionKind, type PermissionParams, type PoolData, type PoolWithMeta, type PortfolioSummary, type PortfolioTotals, type PositionConstraints, type PostTradeMetrics, type PreparedCall, type PreparedMergedMulticallParams, type PreparedMergedRpcCalls, type PreparedTokenBalanceRpcCalls, type PreparedUserDataRpcCalls, type PriceDerivation, type PriceSelection, type ProtocolParams, type ProviderOptions, type RateKind, type RateMenuEntry, type RateTerms, type RawRpcBatch, type RawRpcCall, type RawRpcResponse, type ReadFailurePolicy, type RedemptionTerms, type ResupplyMarketsRaw, type ResupplyPairIdentity, type ResupplyPairRaw, type ResupplyPositionInfo, type ResupplyWrappedMarket, type RewardTerm, type RiverMarketRaw, type RiverMarketsRaw, type RiverPositionInfo, STABLECOIN_SYMBOLS, STCELO_MANAGER_ADDRESS, type SelectPricesOptions, type Severity, type SeverityFinding, type SiloVault, type SiloVaults, type StCeloValidatorGroup, type StaleFeedEntry, type StampOptions, type StructuredOraclePrices, type SubAccountSummary, type SumerPositionInput, type SummaryAprData, type SummaryBalanceData, type SupplyExitMode, type SupplyExitTerms, type SupplyTermSheet, TELLER_CALLS_PER_BID, TERMMAX_CALLS_PER_ACCOUNT, DECIMAL_BASE as TERMMAX_DECIMAL_BASE, TERMMAX_LIQUIDATION_PENALTY, TERMMAX_LIQUIDATION_WINDOW_SECS, TERMMAX_LIQUIDATOR_BONUS, TERMMAX_PARTIAL_CLOSE_FACTOR, TERMMAX_PARTIAL_LIQUIDATION_THRESHOLD_USD, TERM_ADAPTERS, TERM_PROFILES, TERM_SHEET_SCHEMA_VERSION, type TellerDiscoveredBid, type TellerDiscovery, type TellerMarketsRaw, type TellerPoolRaw, type TermAdapter, type TermAssetRef, type TermAuctionOrder, type TermAuctionOrders, type TermBookSource, type TermBookTop, type TermInfo, type TermListing, type TermMarketRaw, TermMaxApiSource, type TermMaxBookTop, type TermMaxCurveSegment, type TermMaxDataSource, type TermMaxDiscovery, type TermMaxFeeConfig, type TermMaxMarketConfig, type TermMaxMarketRaw, type TermMaxOrderState, type TermProfile, type TermSheet, type TermSheetDigest, type TermSheetInput, type TermSheetViolation, TermSubgraphSource, type TermTag, type TokenApprovalMeta, type TokenApprovalParams, type TokenBalanceEntry, type TokenBalanceQuery, type TokenBalanceResult, type TokenEntry, type TokenList, type TokenListInput, type TrackerDiagnostic, UPSHIFT_CHAIN_IDS, UPSHIFT_VAULTS_URL, type USDPriceMap, type UpshiftApiAsset, type UpshiftApiVault, type UpshiftVault, type UpshiftVaults, type UsddMarketRaw, type UsddMarketsRaw, type UsddPositionInfo, type UserApr, type UserConfig, type UserData, type UserDataResult, type UserLendingPosition, type UtilizationTerms, VAULT_SHARE_PRICE_PROBE, VOLATILE_VAULT_OVERRIDES, type ValidationResult, type VaultAprResult, type VaultClassification, type VaultClassificationFields, type VaultLookupEntry, type VaultMarketExposure, type VaultProvider, type VaultPublicDataAll, type VaultPublicDataResult, type VaultYieldSeries, type VaultYieldSnapshot, type YDaemonVault, YEARN_CHAIN_IDS, YEARN_YDAEMON_BASE, type YearnVault, type YearnVaultKind, type YearnVaults, type YieldProfile, __resetResupplyUserCaches, accountDepositListKey, accountWithdrawalListKey, appendSnapshot, applyPositionDelta, attachImplications, attachPricesToFlashLiquidity, borrowDescription, borrowFindings, borrowHeadline, buildExposures, buildFluidFTokensCall, buildLiquityUserCall, buildLoopResult, buildMorphoTypeCall, buildMorphoTypeUserCallWithLens, buildPortfolioTotals, buildSumerAccumulators, buildSummaries, buildTellerUserCall, buildTermMaxUserCall, buildTermSheet, buildTermSheetsForGroup, buildVaultLookup, calculateLeverage, calculateNetApr, calculateOverallNetApr, calculateWeightedAverage, classifyFreshness, classifyReliability, classifyVault, collectFeedObservations, computeBorrowDelta, computeCloseTradeDeltas, computeCollateralSwapDeltas, computeDebtSwapDeltas, computeDepositDelta, computeEModeAnalysis, computeOpenTradeDeltas, computePostTradeMetrics, computeRepayDelta, computeSumerBorrowDelta, computeSumerDepositDelta, computeSumerRepayDelta, computeSumerWaterfall, computeSumerWithdrawDelta, computeVaultApr, computeWithdrawDelta, computeZapTradeDeltas, consensusReference, convertExactlyMarketsToResponse, convertFrankencoinMarketsToResponse, convertInverseMarketsToResponse, convertLenderUserDataResult, convertLiquityMarketsToResponse, convertLlamaLendMarketsToResponse, convertResupplyMarketsToResponse, convertRiverMarketsToResponse, convertTellerMarketsToResponse, convertTermMarketsToResponse, convertTermMaxMarketsToResponse, convertUsddMarketsToResponse, createMarketUid, createMidnightBookSource, createMulticallRpcCall, createRawRpcCalls, createTermBookSource, createTermMaxDataSource, decodeListaMarkets, decodeMarkets, decodePackedListaUserDataset, decodePackedMorphoUserDataset, deriveBorrowTags, deriveSupplyTags, detectInterfaceKinds, duration, encodeBalanceFetcherCalldata, enrichTermSheet, enrichmentIndexFromRows, exactlyPairLtv, exactlyPenaltyRateToAprPercent, exactlyWadRateToPercent, feePhrase, feedKeyOf, feedStatKey, fetchDolomiteAccountNumbers, fetchEulerEarnVaults, fetchEulerEarnVaultsFromSubgraph, fetchEulerSubAccountIndexes, fetchExactlyMarkets, fetchFlashLiquidityForChain, fetchFluidFTokens, fetchFrankencoinMarkets, fetchGeneralYields, fetchGeneralYieldsByMarketUid, fetchGmxExecutionFees, fetchGmxTickerPrices, fetchGmxVaults, fetchHypercoreVaults, fetchInverseMarkets, fetchLagoonApiVaults, fetchLagoonVaults, fetchLiquityMarkets, fetchListaVaultsFromChain, fetchLlamaLendMarkets, fetchMorphoUserBalances, fetchMorphoUserPositionMarkets, fetchMorphoVaults, fetchMorphoVaultsFromApi, fetchMorphoVaultsFromChain, fetchOraclePrices, fetchPendlePrices, fetchResupplyMarkets, fetchRiverMarkets, fetchSiloVaults, fetchTellerMarkets, fetchTermMarkets, fetchTermMaxMarkets, fetchTokenBalances, fetchTokenMetadata, fetchUpshiftApiVaults, fetchUpshiftVaults, fetchUsddMarkets, fetchYearnApiVaults, fetchYearnVaults, filterActiveLenders, filterLendersByProtocol, finalizeInfo, findingsFor, frankencoinKeyParts, frankencoinLenderKey, fuseLenderData, generateLendingPools, getAavesForChain, getAssetConfig, getBalanceForMarketUid, getBorrowCapacity, getCachedLiquityTroves, getCachedTellerBids, getCachedTermMaxDiscovery, getCachedTermMaxMarket, getCachedTermMaxMarkets, getCoreValidators, getFluidFTokensConverter, getGmxApiHost, getGmxReadContracts, getGmxUserPositions, getHealthFactor, getHypercoreUserPositions, getHypercoreVaultRegistry, getLenderAssets, getLenderPublicData, getLenderPublicDataAll, getLenderPublicDataViaApi, getLenderUserDataMulti, getLenderUserDataResult, getLendersForChain, getLstDelegation, getLstValidators, getLstWithdrawalRegistry, getLstWithdrawalRequests, getMaxAmountClose, getMaxAmountCollateralSwap, getMaxAmountDebtSwap, getMaxAmountOpen, getMergedUserData, getMorphoTypeMarketConverter, getReadFailurePolicy, getResolvedDolomiteAccountNumbers, getStCeloValidatorGroups, getSubAccountAddress, getSubAccountIndex, getTermProfile, getVaultPublicDataAll, getVaultWithdrawalRequests, hasCritical, hasEulerEarnVaultSubgraph, hasLagoonVaults, hasMorphoPositionIndex, hasMorphoUserApi, hasMorphoUserSubgraph, hasUpshiftVaults, hasYearnVaults, inverseKeyParts, inverseLenderKey, isFailedCall, isStablecoinSymbol, isYearnV3, keysFromMaps, lenderApiOnly, lenderFamily, liquityCandidateTroveIds, liquityKeyParts, liquityLenderKey, llamaLendKeyParts, llamaLendLenderKey, mergeDeep, multicall3Abi, nanTo, needsLenderApproval, needsTokenApproval, noOpResult, normalizeToBytes, parseBalanceFetcherResult, parseMergedResult, parseMulticallRpcResponses, parseRawRpcBatchResponses, parseRawRpcResponses, parseTermMaxLtv, parseTokenBalanceResult, pct, positivePart, predictInverseEscrow, prepareLenderUserDataRpcCalls, prepareMergedMulticallParams, prepareMergedRpcCalls, prepareMulticallInputs, prepareTokenBalanceRpcCalls, priceGlvVaults, priceGmMarkets, probeAaveFeedTimestamps, pruneFeedStats, rankFindings, readVaultSharePrices, rejectOutliers as rejectPriceOutliers, resolveAdapter, resolveDerivation, resolveStCeloDepositGroup, resupplyKeyParts, resupplyLenderKey, resupplyMarketLabel, riverKeyParts, riverLenderKey, selectAssetGroupPrices, shortDate, stampVaultClassification, supplyDescription, supplyFindings, supplyHeadline, tellerBpsToPercent, tellerImpliedLtv, tellerLenderKey, tellerPoolFromLenderKey, termLenderKey, termMaxApiBase, borrowNif as termMaxBorrowNif, curveApr as termMaxCurveApr, curveAprNumber as termMaxCurveAprNumber, daysToMaturity as termMaxDaysToMaturity, lendNif as termMaxLendNif, mintGtFeeRatio as termMaxMintGtFeeRatio, ratioToNumber as termMaxRatioToNumber, ratioToPercent as termMaxRatioToPercent, tickToAprNumber, tickToPrice, toDigest, toTermSheetInput, unflattenLenderData, updateFeedStats, usddIlkBytes32, usddKeyParts, usddLenderKey, validateTermSheet, validateTermSheets, validateUserData };
|
|
9906
|
+
export { type AaveMetadata, type AaveV2Public, type AaveV2UserReserveResponse, type AaveV3Public, type AaveV3UserReserveResponse, type AdditionalYields, type AdminKind, ApiBookSource, type AprData, type AprPercent, type AssetQuality, type AssetRiskIndex, type AuctionWindow, type AvailabilityTerms, type BalanceData, type BaseLendingPosition, type BasicReserveResponse, type BorrowExitTerms, type BorrowTermSheet, type BuildTermSheetOptions, type ChainDiagnostic, type ChainLinkResponse, type ChainQuery, type ChainSummary, type CompoundV2Metadata, type CompoundV3Public, type CompoundV3UserReserveResponse, type ConfigEntry, type ConvertLenderUserDataOptions, type CoreValidators, type CounterpartyTerms, type CoverageInfo, DEFAULT_MIDNIGHT_API, DEFAULT_OUTLIER_GUARD, DEFAULT_PROFILE_ID, DEFAULT_STALE_REJECT_SECONDS, DEFAULT_TERMMAX_API, type DeepPartial, type Denomination, type DepthMap, EMPTY_BALANCE, type EModeAssets, type EModeData, type EModeResult, EXACTLY_LENDER_KEY, type EndpointFailure, type EnrichmentIndex, type EulerEarnVault, type EulerEarnVaults, type EulerV2Metadata, type ExactlyFixedPool, type ExactlyFixedPosition, type ExactlyMarketAccount, type ExactlyMarketsRaw, type ExactlyUserFixedPosition, type ExposureEntry, type ExposureTerms, type ExtraValidationCall, type FeeTerm, type FeeWhen, type FeedObservation, type FeedStat, type FeedStatsMap, type FeedTimestampMap, type FetchListaVaultsFromChainOptions, type FetchMorphoVaultsFromChainOptions, type FetchOraclePricesOptions, type FetchTokenBalancesOptions, type FlattenPriorityConfig, type FluidFToken, type FluidFTokens, type FrankencoinMarketRaw, type FrankencoinMarketsRaw, type FrankencoinPositionInfo, type FullLenderRewardsMap, GMX_API_HOSTS, GMX_READ_CONTRACTS, GMX_SUPPORTED_CHAINS, type GenericCurrency, type GenericTokenList, type GetVaultPublicDataAllOptions, type GmxExecutionFees, type GmxPendingDeposit, type GmxPendingWithdrawal, type GmxReadContracts, type GmxUserBalance, type GmxUserPositions, type GmxUserPositionsOptions, type GmxVault, type GmxVaultKind, type GmxVaults, type GmxVaultsFetchOptions, type GovernancePower, type GovernanceRow, type GovernanceTerms, type GroupAccumulator, HYPERCORE_VAULT_REGISTRY, type HypercoreLockStatus, type HypercoreUserPositionsOptions, type HypercoreVault, type HypercoreVaultPosition, type HypercoreVaultRegistryEntry, type HypercoreVaults, type HypercoreVaultsFetchOptions, IDLE_MARKET_ID, INTERFACE_IDS, type IncompleteLenderRead, type IncompleteReason, type InitMetadata, type InitPublic, type InitUserReserveResponse, type InterfaceKind, type InvariantViolation, type InverseMarketRaw, type InverseMarketsRaw, type InversePositionInfo, LAGOON_API_URL, LAGOON_CHAIN_IDS, type LagoonApiVault, type LagoonSyncMode, type LagoonVault, type LagoonVaults, type LenderConfigData, type LenderConfigMap, type LenderCrossPoolMeta, type LenderData, type LenderDataEntry, type LenderInfo, type LenderInfoMap, type LenderPublicBase, type LenderRewardsMap, type LenderSummary, type LenderToLenderCrossPoolMeta, type LenderTotalAmounts, type LenderUserQuery, type LenderUserResponse, type LenderYieldComplete, type LenderYields$1 as LenderYields, LendingMode, type LiquidationPenaltyTerm, type LiquidationTerms, type LiquityBranchRaw, type LiquityDiscoveredTrove, type LiquityDiscovery, type LiquityMarketsRaw, type LiquitySpInfo, type LiquityTroveInfo, type ListaMarketOverrides, type LlamaLendMarketOverride, type LlamaLendMarketOverrides, type LlamaLendMarketRaw, type LlamaLendMarketsRaw, type LlamaLendPositionInfo, type LoopPostTradeMetrics, type LstDelegation, type LstDelegationKind, type LstValidator, type LstWithdrawalFetchOptions, type LstWithdrawalRegistryEntry, type LstWithdrawalRequest, type LstWithdrawalRequestsByLst, type LstWithdrawalStatus, MORPHO_LENS, MULTICALL_FAILURE, type MaturityTerms, MaxParamThresholds, type MergedUserData, type MidnightBook, type MidnightBookLevel, type MidnightBookSource, type ModeBase, type ModeVariant, type MorphoMarketOverrides, type MorphoSubgraphProxyConfig, type MorphoUserMarketBalance, type MorphoUserReserveResponse, type MorphoVault, type MorphoVaults, type MulticallEndpointOptions, type MulticallRpcBatch, type NumberMap, type Open, type OracleBand, type OracleDiagnostics, type OraclePriceEntry, type OraclePricesResult, type OracleRiskRow, type OracleTerms, type OutlierGuardConfig, type ParsedBalanceData, type ParsedResponse, type ParsedUserBalance, type PermissionKind, type PermissionParams, type PoolData, type PoolWithMeta, type PortfolioSummary, type PortfolioTotals, type PositionConstraints, type PostTradeMetrics, type PreparedCall, type PreparedMergedMulticallParams, type PreparedMergedRpcCalls, type PreparedTokenBalanceRpcCalls, type PreparedUserDataRpcCalls, type PriceDerivation, type PriceSelection, type ProtocolParams, type ProviderOptions, type RateKind, type RateMenuEntry, type RateTerms, type RawRpcBatch, type RawRpcCall, type RawRpcResponse, type ReadFailurePolicy, type RedemptionTerms, type ResupplyMarketsRaw, type ResupplyPairIdentity, type ResupplyPairRaw, type ResupplyPositionInfo, type ResupplyWrappedMarket, type RewardTerm, type RiverMarketRaw, type RiverMarketsRaw, type RiverPositionInfo, STABLECOIN_SYMBOLS, STCELO_MANAGER_ADDRESS, type SelectPricesOptions, type Severity, type SeverityFinding, type SiloVault, type SiloVaults, type StCeloValidatorGroup, type StaleFeedEntry, type StampOptions, type StructuredOraclePrices, type SubAccountSummary, type SumerPositionInput, type SummaryAprData, type SummaryBalanceData, type SupplyExitMode, type SupplyExitTerms, type SupplyTermSheet, TELLER_CALLS_PER_BID, TERMMAX_CALLS_PER_ACCOUNT, DECIMAL_BASE as TERMMAX_DECIMAL_BASE, TERMMAX_LIQUIDATION_PENALTY, TERMMAX_LIQUIDATION_WINDOW_SECS, TERMMAX_LIQUIDATOR_BONUS, TERMMAX_PARTIAL_CLOSE_FACTOR, TERMMAX_PARTIAL_LIQUIDATION_THRESHOLD_USD, TERM_ADAPTERS, TERM_PROFILES, TERM_SHEET_SCHEMA_VERSION, type TellerDiscoveredBid, type TellerDiscovery, type TellerMarketsRaw, type TellerPoolRaw, type TermAdapter, type TermAssetRef, type TermAuctionOrder, type TermAuctionOrders, type TermBookSource, type TermBookTop, type TermInfo, type TermListing, type TermMarketRaw, TermMaxApiSource, type TermMaxBookTop, type TermMaxCurveSegment, type TermMaxDataSource, type TermMaxDiscovery, type TermMaxFeeConfig, type TermMaxMarketConfig, type TermMaxMarketRaw, type TermMaxOrderState, type TermProfile, type TermSheet, type TermSheetDigest, type TermSheetInput, type TermSheetViolation, TermSubgraphSource, type TermTag, type TokenApprovalMeta, type TokenApprovalParams, type TokenBalanceEntry, type TokenBalanceQuery, type TokenBalanceResult, type TokenEntry, type TokenList, type TokenListInput, type TrackerDiagnostic, UPSHIFT_CHAIN_IDS, UPSHIFT_VAULTS_URL, type USDPriceMap, type UpshiftApiAsset, type UpshiftApiVault, type UpshiftVault, type UpshiftVaults, type UsddMarketRaw, type UsddMarketsRaw, type UsddPositionInfo, type UserApr, type UserConfig, type UserData, type UserDataResult, type UserLendingPosition, type UtilizationTerms, VAULT_SHARE_PRICE_PROBE, VOLATILE_VAULT_OVERRIDES, type ValidationResult, type VaultAprResult, type VaultClassification, type VaultClassificationFields, type VaultLookupEntry, type VaultMarketExposure, type VaultProvider, type VaultPublicDataAll, type VaultPublicDataResult, type VaultYieldSeries, type VaultYieldSnapshot, type YDaemonVault, YEARN_CHAIN_IDS, YEARN_YDAEMON_BASE, type YearnVault, type YearnVaultKind, type YearnVaults, type YieldProfile, __resetResupplyUserCaches, accountDepositListKey, accountWithdrawalListKey, appendSnapshot, applyPositionDelta, attachImplications, attachPricesToFlashLiquidity, borrowDescription, borrowFindings, borrowHeadline, buildExposures, buildFluidFTokensCall, buildLiquityUserCall, buildLoopResult, buildMorphoTypeCall, buildMorphoTypeUserCallWithLens, buildPortfolioTotals, buildSumerAccumulators, buildSummaries, buildTellerUserCall, buildTermMaxUserCall, buildTermSheet, buildTermSheetsForGroup, buildVaultLookup, calculateLeverage, calculateNetApr, calculateOverallNetApr, calculateWeightedAverage, classifyFreshness, classifyReliability, classifyVault, collectFeedObservations, computeBorrowDelta, computeCloseTradeDeltas, computeCollateralSwapDeltas, computeDebtSwapDeltas, computeDepositDelta, computeEModeAnalysis, computeOpenTradeDeltas, computePostTradeMetrics, computeRepayDelta, computeSumerBorrowDelta, computeSumerDepositDelta, computeSumerRepayDelta, computeSumerWaterfall, computeSumerWithdrawDelta, computeVaultApr, computeWithdrawDelta, computeZapTradeDeltas, consensusReference, convertExactlyMarketsToResponse, convertFrankencoinMarketsToResponse, convertInverseMarketsToResponse, convertLenderUserDataResult, convertLiquityMarketsToResponse, convertLlamaLendMarketsToResponse, convertResupplyMarketsToResponse, convertRiverMarketsToResponse, convertTellerMarketsToResponse, convertTermMarketsToResponse, convertTermMaxMarketsToResponse, convertUsddMarketsToResponse, createMarketUid, createMidnightBookSource, createMulticallRpcCall, createRawRpcCalls, createTermBookSource, createTermMaxDataSource, decodeListaMarkets, decodeMarkets, decodePackedListaUserDataset, decodePackedMorphoUserDataset, deriveBorrowTags, deriveSupplyTags, detectInterfaceKinds, duration, encodeBalanceFetcherCalldata, enrichTermSheet, enrichmentIndexFromRows, exactlyPairLtv, exactlyPenaltyRateToAprPercent, exactlyWadRateToPercent, feePhrase, feedKeyOf, feedStatKey, fetchDolomiteAccountNumbers, fetchEulerEarnVaults, fetchEulerEarnVaultsFromSubgraph, fetchEulerSubAccountIndexes, fetchExactlyMarkets, fetchFlashLiquidityForChain, fetchFluidFTokens, fetchFrankencoinMarkets, fetchGeneralYields, fetchGeneralYieldsByMarketUid, fetchGmxExecutionFees, fetchGmxTickerPrices, fetchGmxVaults, fetchHypercoreVaults, fetchInverseMarkets, fetchLagoonApiVaults, fetchLagoonVaults, fetchLiquityMarkets, fetchListaVaultsFromChain, fetchLlamaLendMarkets, fetchMorphoUserBalances, fetchMorphoUserPositionMarkets, fetchMorphoVaults, fetchMorphoVaultsFromApi, fetchMorphoVaultsFromChain, fetchOraclePrices, fetchPendlePrices, fetchResupplyMarkets, fetchRiverMarkets, fetchSiloVaults, fetchTellerMarkets, fetchTermMarkets, fetchTermMaxMarkets, fetchTokenBalances, fetchTokenMetadata, fetchUpshiftApiVaults, fetchUpshiftVaults, fetchUsddMarkets, fetchYearnApiVaults, fetchYearnVaults, filterActiveLenders, filterLendersByProtocol, finalizeInfo, findingsFor, frankencoinKeyParts, frankencoinLenderKey, fuseLenderData, generateLendingPools, getAavesForChain, getAssetConfig, getBalanceForMarketUid, getBorrowCapacity, getCachedLiquityTroves, getCachedTellerBids, getCachedTermMaxDiscovery, getCachedTermMaxMarket, getCachedTermMaxMarkets, getCoreValidators, getFluidFTokensConverter, getGmxApiHost, getGmxReadContracts, getGmxUserPositions, getHealthFactor, getHypercoreUserPositions, getHypercoreVaultRegistry, getLenderAssets, getLenderPublicData, getLenderPublicDataAll, getLenderPublicDataViaApi, getLenderUserDataMulti, getLenderUserDataResult, getLendersForChain, getLstDelegation, getLstValidators, getLstWithdrawalRegistry, getLstWithdrawalRequests, getMaxAmountClose, getMaxAmountCollateralSwap, getMaxAmountDebtSwap, getMaxAmountOpen, getMergedUserData, getMorphoTypeMarketConverter, getReadFailurePolicy, getResolvedDolomiteAccountNumbers, getStCeloValidatorGroups, getSubAccountAddress, getSubAccountIndex, getTermProfile, getVaultPublicDataAll, getVaultWithdrawalRequests, hasCritical, hasEulerEarnVaultSubgraph, hasLagoonVaults, hasMorphoPositionIndex, hasMorphoUserApi, hasMorphoUserSubgraph, hasUpshiftVaults, hasYearnVaults, inverseKeyParts, inverseLenderKey, isFailedCall, isStablecoinSymbol, isYearnV3, keysFromMaps, lenderApiOnly, lenderFamily, liquityCandidateTroveIds, liquityKeyParts, liquityLenderKey, llamaLendKeyParts, llamaLendLenderKey, mergeDeep, multicall3Abi, nanTo, needsLenderApproval, needsTokenApproval, noOpResult, normalizeToBytes, parseBalanceFetcherResult, parseMergedResult, parseMulticallRpcResponses, parseRawRpcBatchResponses, parseRawRpcResponses, parseTermMaxLtv, parseTokenBalanceResult, pct, positivePart, predictInverseEscrow, prepareLenderUserDataRpcCalls, prepareMergedMulticallParams, prepareMergedRpcCalls, prepareMulticallInputs, prepareTokenBalanceRpcCalls, priceGlvVaults, priceGmMarkets, probeAaveFeedTimestamps, pruneFeedStats, rankFindings, readVaultSharePrices, rejectOutliers as rejectPriceOutliers, resolveAdapter, resolveDerivation, resolveStCeloDepositGroup, resupplyKeyParts, resupplyLenderKey, resupplyMarketLabel, riverKeyParts, riverLenderKey, selectAssetGroupPrices, shortDate, stampVaultClassification, supplyDescription, supplyFindings, supplyHeadline, tellerBpsToPercent, tellerImpliedLtv, tellerLenderKey, tellerPoolFromLenderKey, termLenderKey, termMaxApiBase, borrowNif as termMaxBorrowNif, curveApr as termMaxCurveApr, curveAprNumber as termMaxCurveAprNumber, daysToMaturity as termMaxDaysToMaturity, lendNif as termMaxLendNif, mintGtFeeRatio as termMaxMintGtFeeRatio, ratioToNumber as termMaxRatioToNumber, ratioToPercent as termMaxRatioToPercent, tickToAprNumber, tickToPrice, toDigest, toTermSheetInput, unflattenLenderData, updateFeedStats, usddIlkBytes32, usddKeyParts, usddLenderKey, validateTermSheet, validateTermSheets, validateUserData };
|
package/dist/index.js
CHANGED
|
@@ -24326,7 +24326,19 @@ function convertLlamaLendMarketsToResponse(raw, chainId, prices = {}, additional
|
|
|
24326
24326
|
// this as a number gets NaN and can branch, where "0" would silently
|
|
24327
24327
|
// become a zero LTV. The real curve is in `llamalend.bandLtv`.
|
|
24328
24328
|
lltv: ltv !== null ? String(ltv) : "",
|
|
24329
|
-
|
|
24329
|
+
/**
|
|
24330
|
+
* The AMM, deliberately — LlamaLend's price feed is `price_oracle()` on
|
|
24331
|
+
* the LLAMMA itself, so that is the only address a reader can call.
|
|
24332
|
+
*
|
|
24333
|
+
* This used to read `market.priceOracle ?? market.amm`, but
|
|
24334
|
+
* `priceOracle` was never assigned anywhere in this pipeline (the name
|
|
24335
|
+
* is used elsewhere for the price VALUE, not the contract), so the
|
|
24336
|
+
* fallback was doing all the work. Naming it directly removes the trap:
|
|
24337
|
+
* a Curve `price_oracle_contract` exposes `price()` and NOT
|
|
24338
|
+
* `price_oracle()`, so populating that field would have silently
|
|
24339
|
+
* pointed every oracle reader at an interface it cannot call.
|
|
24340
|
+
*/
|
|
24341
|
+
oracle: market.amm,
|
|
24330
24342
|
irm: market.monetaryPolicy ?? zeroAddress,
|
|
24331
24343
|
collateralAddress: collAddr,
|
|
24332
24344
|
loanAddress: loanAddr,
|
|
@@ -24382,7 +24394,6 @@ function convertLlamaLendMarketsToResponse(raw, chainId, prices = {}, additional
|
|
|
24382
24394
|
*/
|
|
24383
24395
|
amm: market.amm,
|
|
24384
24396
|
monetaryPolicy: market.monetaryPolicy,
|
|
24385
|
-
priceOracle: market.priceOracle,
|
|
24386
24397
|
/**
|
|
24387
24398
|
* Curve's deployed v1 leverage zaps and the aggregator routers
|
|
24388
24399
|
* they are hard-wired to. We route leverage through these rather
|
|
@@ -40699,6 +40710,40 @@ var fraxSavingsFetcher = {
|
|
|
40699
40710
|
}
|
|
40700
40711
|
};
|
|
40701
40712
|
|
|
40713
|
+
// src/yields/intrinsic/fetchers/binance.ts
|
|
40714
|
+
var HISTORY_URL2 = "https://www.binance.com/bapi/earn/v1/public/pos/cftoken/project/exchange-rate/history";
|
|
40715
|
+
var WBETH = "Wrapped Binance Beacon ETH::wBETH";
|
|
40716
|
+
var LLAMA_POOL = "80b8bf92-b953-4c20-98ea-c9653ef2bb98";
|
|
40717
|
+
var DAY_MS = 864e5;
|
|
40718
|
+
var LOOKBACK_MS = 14 * DAY_MS;
|
|
40719
|
+
var TIMEOUT_MS2 = 8e3;
|
|
40720
|
+
var wbethFetcher = {
|
|
40721
|
+
label: "WBETH",
|
|
40722
|
+
fetch: async () => {
|
|
40723
|
+
const now = Date.now();
|
|
40724
|
+
const url = `${HISTORY_URL2}?startTime=${now - LOOKBACK_MS}&endTime=${now}`;
|
|
40725
|
+
try {
|
|
40726
|
+
const res = await fetch(url, {
|
|
40727
|
+
method: "GET",
|
|
40728
|
+
headers: { Accept: "application/json" },
|
|
40729
|
+
signal: AbortSignal.timeout(TIMEOUT_MS2)
|
|
40730
|
+
}).then((r) => r.json());
|
|
40731
|
+
const points = res.data ?? [];
|
|
40732
|
+
if (points.length > 0) {
|
|
40733
|
+
const latest = points.reduce(
|
|
40734
|
+
(a, b) => Number(b.calcDate) > Number(a.calcDate) ? b : a
|
|
40735
|
+
);
|
|
40736
|
+
const apr = Number(latest.apr) * 100;
|
|
40737
|
+
if (Number.isFinite(apr) && apr > 0) return { [WBETH]: apr };
|
|
40738
|
+
}
|
|
40739
|
+
} catch (e) {
|
|
40740
|
+
console.log("WBETH history failed, falling back to DefiLlama", e);
|
|
40741
|
+
}
|
|
40742
|
+
const apy = await fetchDefiLlamaApy(LLAMA_POOL);
|
|
40743
|
+
return { [WBETH]: apyToAprPercent(apy) };
|
|
40744
|
+
}
|
|
40745
|
+
};
|
|
40746
|
+
|
|
40702
40747
|
// src/vaults/lst/registry.ts
|
|
40703
40748
|
var LST_REGISTRY = {
|
|
40704
40749
|
// Monad (143) — native-MON LSTs. shMON / aprMON are ERC-4626 over native
|
|
@@ -41101,6 +41146,46 @@ var LST_REGISTRY = {
|
|
|
41101
41146
|
yieldFetcher: cbethFetcher,
|
|
41102
41147
|
yieldKey: "CBETH"
|
|
41103
41148
|
},
|
|
41149
|
+
{
|
|
41150
|
+
// Binance wBETH — the *other* exchange LST, and unlike cbETH above
|
|
41151
|
+
// it is genuinely permissionless on-chain in both directions:
|
|
41152
|
+
// mint `deposit(address referral)` payable, no allowlist
|
|
41153
|
+
// redeem `requestWithdrawEth(uint256)` → the UnwrapTokenV1ETH
|
|
41154
|
+
// queue at 0x79973d557CD9dd87eb61E250cc2572c990e20196
|
|
41155
|
+
// (both simulated against mainnet — `deposit` succeeds from an
|
|
41156
|
+
// arbitrary EOA, `requestWithdrawEth` reverts only on balance).
|
|
41157
|
+
//
|
|
41158
|
+
// A FiatTokenProxy (Circle's USDC codebase) + Binance's
|
|
41159
|
+
// StakedTokenV3 mixin, so it inherits USDC-style `blacklist(address)`
|
|
41160
|
+
// and `pause()` on BOTH the token and the unwrap queue — Binance can
|
|
41161
|
+
// freeze any holder. Same trust class as USDC; that is the live risk
|
|
41162
|
+
// for anything treating wBETH as collateral.
|
|
41163
|
+
//
|
|
41164
|
+
// The `queued` exit has two teeth that a plain cooldown does not:
|
|
41165
|
+
// * the ETH owed is FROZEN at request time (`ethAmount` is stored,
|
|
41166
|
+
// not recomputed), so the position stops earning for the whole
|
|
41167
|
+
// `lockTime()` — currently 864000s / 10 days, admin-settable down
|
|
41168
|
+
// to MIN_LOCK_TIME = 172800s / 2 days. Read it live.
|
|
41169
|
+
// * a request is only auto-allocated while
|
|
41170
|
+
// `availableAllocateAmount` covers it (~3 ETH on Ethereum today);
|
|
41171
|
+
// anything larger waits for Binance's operator to `allocate()`,
|
|
41172
|
+
// with no SLA.
|
|
41173
|
+
address: "0xa2e3356610840701bdf5611a53974510ae27e2e1",
|
|
41174
|
+
underlying: "0x0000000000000000000000000000000000000000",
|
|
41175
|
+
symbol: "wBETH",
|
|
41176
|
+
brand: "Binance",
|
|
41177
|
+
decimals: 18,
|
|
41178
|
+
reader: "binanceWbeth",
|
|
41179
|
+
isErc4626: false,
|
|
41180
|
+
isRebasing: false,
|
|
41181
|
+
isMintable: true,
|
|
41182
|
+
isNativeUnderlying: true,
|
|
41183
|
+
mintContract: "0xa2e3356610840701bdf5611a53974510ae27e2e1",
|
|
41184
|
+
mintInputAsset: "native",
|
|
41185
|
+
withdrawalMode: "queued",
|
|
41186
|
+
yieldFetcher: wbethFetcher,
|
|
41187
|
+
yieldKey: "Wrapped Binance Beacon ETH::wBETH"
|
|
41188
|
+
},
|
|
41104
41189
|
{
|
|
41105
41190
|
address: "0xa43a7c62d56df036c187e1966c03e2799d8987ed",
|
|
41106
41191
|
// TruFin TruStake MATIC Vault uses the MATIC ERC-20 (not POL).
|
|
@@ -41667,6 +41752,37 @@ var LST_REGISTRY = {
|
|
|
41667
41752
|
listaStakeManager: "0x1adb950d8bb3da4be104211d5ab038628e477fe6"
|
|
41668
41753
|
}
|
|
41669
41754
|
},
|
|
41755
|
+
{
|
|
41756
|
+
// Binance wBETH on BNB — SAME token address as Ethereum, but a
|
|
41757
|
+
// different implementation behind the proxy (`WrapTokenV2BSC` vs
|
|
41758
|
+
// `WrapTokenV3ETH`), so the mint leg is NOT portable:
|
|
41759
|
+
// Ethereum `deposit(address referral)` payable, native ETH
|
|
41760
|
+
// BNB `deposit(uint256 amount, address referral)` nonpayable,
|
|
41761
|
+
// pulls the Binance-pegged ETH ERC-20 below → needs approve
|
|
41762
|
+
// The read surface and the pushed rate ARE identical (one oracle
|
|
41763
|
+
// 0x81720695… writes both chains, and `exchangeRate()` returns the
|
|
41764
|
+
// same value), hence the shared reader and the shared `yieldKey`.
|
|
41765
|
+
//
|
|
41766
|
+
// Exit is the same UnwrapTokenV1 queue at the same address, with the
|
|
41767
|
+
// same frozen-amount / 10-day-lock / operator-allocation caveats as
|
|
41768
|
+
// the Ethereum entry — see there.
|
|
41769
|
+
address: "0xa2e3356610840701bdf5611a53974510ae27e2e1",
|
|
41770
|
+
// Binance-pegged ETH on BSC — the deposit input, not native BNB.
|
|
41771
|
+
underlying: "0x2170ed0880ac9a755fd29b2688956bd959f933f8",
|
|
41772
|
+
symbol: "wBETH",
|
|
41773
|
+
brand: "Binance",
|
|
41774
|
+
decimals: 18,
|
|
41775
|
+
reader: "binanceWbeth",
|
|
41776
|
+
isErc4626: false,
|
|
41777
|
+
isRebasing: false,
|
|
41778
|
+
isMintable: true,
|
|
41779
|
+
isNativeUnderlying: false,
|
|
41780
|
+
mintContract: "0xa2e3356610840701bdf5611a53974510ae27e2e1",
|
|
41781
|
+
mintInputAsset: "0x2170ed0880ac9a755fd29b2688956bd959f933f8",
|
|
41782
|
+
withdrawalMode: "queued",
|
|
41783
|
+
yieldFetcher: wbethFetcher,
|
|
41784
|
+
yieldKey: "Wrapped Binance Beacon ETH::wBETH"
|
|
41785
|
+
},
|
|
41670
41786
|
{
|
|
41671
41787
|
// YieldNest ynBNB — ERC-4626 vault over slisBNB (Lista), restaked
|
|
41672
41788
|
// via Kernel. Redeems to slisBNB synchronously; the BNB unstake
|
|
@@ -48220,6 +48336,79 @@ var listaFetcher = {
|
|
|
48220
48336
|
parse: parseListaResults,
|
|
48221
48337
|
getAbi: getListaAbi
|
|
48222
48338
|
};
|
|
48339
|
+
function generateLlamaLendLenderKey(marketId) {
|
|
48340
|
+
return `${Lender.LLAMALEND}_${marketId.replace(/^0x/i, "").toUpperCase()}`;
|
|
48341
|
+
}
|
|
48342
|
+
function getLlamaLendMarketsForChain(chainId, marketOverrides) {
|
|
48343
|
+
return marketOverrides?.[chainId] ?? [];
|
|
48344
|
+
}
|
|
48345
|
+
function getLlamaLendCalls(chainId, context) {
|
|
48346
|
+
const markets = getLlamaLendMarketsForChain(chainId, context?.marketOverrides);
|
|
48347
|
+
if (markets.length === 0) return [];
|
|
48348
|
+
return markets.map((market) => {
|
|
48349
|
+
const call = {
|
|
48350
|
+
address: market.amm,
|
|
48351
|
+
name: "price_oracle",
|
|
48352
|
+
params: []
|
|
48353
|
+
};
|
|
48354
|
+
return {
|
|
48355
|
+
calls: [call],
|
|
48356
|
+
meta: { markets: [market] },
|
|
48357
|
+
lender: generateLlamaLendLenderKey(market.marketId)
|
|
48358
|
+
};
|
|
48359
|
+
});
|
|
48360
|
+
}
|
|
48361
|
+
function parseLlamaLendResults(data, meta, context) {
|
|
48362
|
+
const { chainId, usdPrices, tokenList } = context;
|
|
48363
|
+
const entries = [];
|
|
48364
|
+
const rawPrice = data[0];
|
|
48365
|
+
if (rawPrice === void 0 || rawPrice === null || rawPrice === "0x") {
|
|
48366
|
+
return entries;
|
|
48367
|
+
}
|
|
48368
|
+
for (const market of meta.markets) {
|
|
48369
|
+
const loanAsset = market.loanAsset.toLowerCase();
|
|
48370
|
+
const collateralAsset = market.collateralAsset.toLowerCase();
|
|
48371
|
+
let collateralInLoan;
|
|
48372
|
+
try {
|
|
48373
|
+
collateralInLoan = Number(formatUnits(BigInt(rawPrice.toString()), 18));
|
|
48374
|
+
} catch {
|
|
48375
|
+
continue;
|
|
48376
|
+
}
|
|
48377
|
+
if (!Number.isFinite(collateralInLoan) || collateralInLoan === 0) continue;
|
|
48378
|
+
const loanOracleKey = tokenList?.[loanAsset]?.assetGroup ?? `${chainId}-${loanAsset}`;
|
|
48379
|
+
const loanAssetUSD = usdPrices[loanOracleKey] ?? usdPrices[loanAsset];
|
|
48380
|
+
if (!loanAssetUSD) continue;
|
|
48381
|
+
const lenderKey = generateLlamaLendLenderKey(market.marketId);
|
|
48382
|
+
entries.push({
|
|
48383
|
+
asset: loanAsset,
|
|
48384
|
+
price: 1,
|
|
48385
|
+
priceUSD: loanAssetUSD,
|
|
48386
|
+
marketUid: createMarketUid(chainId, lenderKey, loanAsset),
|
|
48387
|
+
targetLender: lenderKey,
|
|
48388
|
+
description: "LlamaLend borrowed asset",
|
|
48389
|
+
staticBase: true,
|
|
48390
|
+
baseAsset: loanAsset
|
|
48391
|
+
});
|
|
48392
|
+
entries.push({
|
|
48393
|
+
asset: collateralAsset,
|
|
48394
|
+
price: collateralInLoan,
|
|
48395
|
+
priceUSD: collateralInLoan * loanAssetUSD,
|
|
48396
|
+
marketUid: createMarketUid(chainId, lenderKey, collateralAsset),
|
|
48397
|
+
targetLender: lenderKey,
|
|
48398
|
+
description: "LlamaLend collateral (AMM EMA oracle)",
|
|
48399
|
+
baseAsset: loanAsset
|
|
48400
|
+
});
|
|
48401
|
+
}
|
|
48402
|
+
return entries;
|
|
48403
|
+
}
|
|
48404
|
+
function getLlamaLendAbi() {
|
|
48405
|
+
return LlamaLendAmmAbi;
|
|
48406
|
+
}
|
|
48407
|
+
var llamaLendFetcher = {
|
|
48408
|
+
getCalls: getLlamaLendCalls,
|
|
48409
|
+
parse: parseLlamaLendResults,
|
|
48410
|
+
getAbi: getLlamaLendAbi
|
|
48411
|
+
};
|
|
48223
48412
|
|
|
48224
48413
|
// src/abis/euler/priceLens.ts
|
|
48225
48414
|
var priceLensAbi = [
|
|
@@ -49580,7 +49769,7 @@ async function executeGroup(group, chainId, chainBatchSize, retries, allowFailur
|
|
|
49580
49769
|
};
|
|
49581
49770
|
}
|
|
49582
49771
|
}
|
|
49583
|
-
async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3, batchSize = void 0, allowFailure = true, basePrices = {}, morphoMarketOverrides, listaMarketOverrides, stalenessThresholdSeconds = 3600, onlyFetchers, probeFeedStaleness = true) {
|
|
49772
|
+
async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3, batchSize = void 0, allowFailure = true, basePrices = {}, morphoMarketOverrides, listaMarketOverrides, stalenessThresholdSeconds = 3600, onlyFetchers, probeFeedStaleness = true, llamaLendMarketOverrides) {
|
|
49584
49773
|
const totalStart = Date.now();
|
|
49585
49774
|
const result = {};
|
|
49586
49775
|
const chainPromises = chainIds.map(async (chainId) => {
|
|
@@ -49625,6 +49814,13 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
49625
49814
|
}),
|
|
49626
49815
|
getCallsErrors
|
|
49627
49816
|
) : [];
|
|
49817
|
+
const llamaLendResults = isActive("llamalend") ? safeGetCalls(
|
|
49818
|
+
"llamaLend",
|
|
49819
|
+
() => llamaLendFetcher.getCalls(chainId, {
|
|
49820
|
+
marketOverrides: llamaLendMarketOverrides
|
|
49821
|
+
}),
|
|
49822
|
+
getCallsErrors
|
|
49823
|
+
) : [];
|
|
49628
49824
|
const eulerResults = isActive("eulerv2") ? safeGetCalls(
|
|
49629
49825
|
"eulerV2",
|
|
49630
49826
|
() => eulerV2Fetcher.getCalls(chainId),
|
|
@@ -49745,6 +49941,13 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
49745
49941
|
ProxyOracleAbi,
|
|
49746
49942
|
"direct"
|
|
49747
49943
|
);
|
|
49944
|
+
const llamaLendGroup = buildGroup(
|
|
49945
|
+
"llamaLend",
|
|
49946
|
+
llamaLendResults,
|
|
49947
|
+
llamaLendFetcher.parse,
|
|
49948
|
+
getLlamaLendAbi(),
|
|
49949
|
+
"derived"
|
|
49950
|
+
);
|
|
49748
49951
|
const eulerGroup = buildGroup(
|
|
49749
49952
|
"eulerV2",
|
|
49750
49953
|
eulerResults,
|
|
@@ -49871,6 +50074,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
49871
50074
|
compoundV2Group,
|
|
49872
50075
|
compoundV3Group,
|
|
49873
50076
|
listaGroup,
|
|
50077
|
+
llamaLendGroup,
|
|
49874
50078
|
eulerGroup,
|
|
49875
50079
|
aaveV4Group,
|
|
49876
50080
|
morphoGroup,
|
|
@@ -49918,6 +50122,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
49918
50122
|
compoundV2Data,
|
|
49919
50123
|
compoundV3Data,
|
|
49920
50124
|
listaData,
|
|
50125
|
+
llamaLendData,
|
|
49921
50126
|
eulerData,
|
|
49922
50127
|
aaveV4Data,
|
|
49923
50128
|
fluidData,
|
|
@@ -49968,6 +50173,14 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
49968
50173
|
allowFailure,
|
|
49969
50174
|
rpcOverrides
|
|
49970
50175
|
),
|
|
50176
|
+
executeGroup(
|
|
50177
|
+
llamaLendGroup,
|
|
50178
|
+
chainId,
|
|
50179
|
+
chainBatchSize,
|
|
50180
|
+
retries,
|
|
50181
|
+
allowFailure,
|
|
50182
|
+
rpcOverrides
|
|
50183
|
+
),
|
|
49971
50184
|
executeGroup(
|
|
49972
50185
|
eulerGroup,
|
|
49973
50186
|
chainId,
|
|
@@ -50125,6 +50338,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
50125
50338
|
{ group: compoundV2Group, data: compoundV2Data },
|
|
50126
50339
|
{ group: compoundV3Group, data: compoundV3Data },
|
|
50127
50340
|
{ group: listaGroup, data: listaData },
|
|
50341
|
+
{ group: llamaLendGroup, data: llamaLendData },
|
|
50128
50342
|
{ group: eulerGroup, data: eulerData },
|
|
50129
50343
|
{ group: aaveV4Group, data: aaveV4Data },
|
|
50130
50344
|
{ group: fluidGroup, data: fluidData },
|
|
@@ -50317,6 +50531,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
50317
50531
|
}
|
|
50318
50532
|
parseTrackers(midnightGroup, midnightData.results, false);
|
|
50319
50533
|
parseTrackers(tellerGroup, tellerData.results, false);
|
|
50534
|
+
parseTrackers(llamaLendGroup, llamaLendData.results, false);
|
|
50320
50535
|
if (stalenessThresholdSeconds > 0) {
|
|
50321
50536
|
const feedTimestamps = await feedTimestampsPromise;
|
|
50322
50537
|
for (const [lender, assetMap] of Object.entries(feedTimestamps)) {
|
|
@@ -54808,6 +55023,38 @@ var readerAnkrRatio = (entry) => ({
|
|
|
54808
55023
|
}
|
|
54809
55024
|
});
|
|
54810
55025
|
|
|
55026
|
+
// src/vaults/lst/abis/binance.ts
|
|
55027
|
+
var WbethExchangeRateAbi = [
|
|
55028
|
+
{
|
|
55029
|
+
name: "exchangeRate",
|
|
55030
|
+
type: "function",
|
|
55031
|
+
stateMutability: "view",
|
|
55032
|
+
inputs: [],
|
|
55033
|
+
outputs: [{ type: "uint256" }]
|
|
55034
|
+
}
|
|
55035
|
+
];
|
|
55036
|
+
|
|
55037
|
+
// src/vaults/lst/readers/binance.ts
|
|
55038
|
+
var readerBinanceWbeth = (entry) => ({
|
|
55039
|
+
calls: [
|
|
55040
|
+
{ address: entry.address, name: "totalSupply", params: [] },
|
|
55041
|
+
{ address: entry.address, name: "exchangeRate", params: [] }
|
|
55042
|
+
],
|
|
55043
|
+
abis: [TotalSupplyAbi, WbethExchangeRateAbi],
|
|
55044
|
+
parse: ([supply, rate]) => {
|
|
55045
|
+
const totalSupply = toBigInt13(supply);
|
|
55046
|
+
const exchangeRate = toBigInt13(rate);
|
|
55047
|
+
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
55048
|
+
return void 0;
|
|
55049
|
+
}
|
|
55050
|
+
return {
|
|
55051
|
+
totalAssets: totalSupply * exchangeRate / ONE_E189,
|
|
55052
|
+
totalSupply,
|
|
55053
|
+
exchangeRate
|
|
55054
|
+
};
|
|
55055
|
+
}
|
|
55056
|
+
});
|
|
55057
|
+
|
|
54811
55058
|
// src/vaults/lst/abis/core.ts
|
|
54812
55059
|
var CoreEarnRateAbi = [
|
|
54813
55060
|
{
|
|
@@ -54930,6 +55177,8 @@ var buildReader = (entry) => {
|
|
|
54930
55177
|
return readerKelpRsEth(entry);
|
|
54931
55178
|
case "swellGetRate":
|
|
54932
55179
|
return readerSwellGetRate(entry);
|
|
55180
|
+
case "binanceWbeth":
|
|
55181
|
+
return readerBinanceWbeth(entry);
|
|
54933
55182
|
case "stakewiseOsEth":
|
|
54934
55183
|
return readerStakeWiseOsEth(entry);
|
|
54935
55184
|
case "staderEthx":
|
|
@@ -55827,6 +56076,96 @@ var readerBenqi = {
|
|
|
55827
56076
|
}
|
|
55828
56077
|
};
|
|
55829
56078
|
|
|
56079
|
+
// src/vaults/lst/withdrawals/abis/binance.ts
|
|
56080
|
+
var BinanceUnwrapQueueAbi = [
|
|
56081
|
+
{
|
|
56082
|
+
name: "getUserWithdrawRequests",
|
|
56083
|
+
type: "function",
|
|
56084
|
+
stateMutability: "view",
|
|
56085
|
+
inputs: [{ type: "address", name: "recipient" }],
|
|
56086
|
+
outputs: [
|
|
56087
|
+
{
|
|
56088
|
+
type: "tuple[]",
|
|
56089
|
+
components: [
|
|
56090
|
+
{ type: "address", name: "recipient" },
|
|
56091
|
+
{ type: "uint256", name: "wbethAmount" },
|
|
56092
|
+
{ type: "uint256", name: "ethAmount" },
|
|
56093
|
+
{ type: "uint256", name: "triggerTime" },
|
|
56094
|
+
{ type: "uint256", name: "claimTime" },
|
|
56095
|
+
{ type: "bool", name: "allocated" }
|
|
56096
|
+
]
|
|
56097
|
+
}
|
|
56098
|
+
]
|
|
56099
|
+
},
|
|
56100
|
+
{
|
|
56101
|
+
// Currently 864000 (10 days). Admin-settable down to
|
|
56102
|
+
// `MIN_LOCK_TIME` = 172800 (2 days) — always read it, never hardcode.
|
|
56103
|
+
name: "lockTime",
|
|
56104
|
+
type: "function",
|
|
56105
|
+
stateMutability: "view",
|
|
56106
|
+
inputs: [],
|
|
56107
|
+
outputs: [{ type: "uint256" }]
|
|
56108
|
+
},
|
|
56109
|
+
{
|
|
56110
|
+
name: "claimWithdraw",
|
|
56111
|
+
type: "function",
|
|
56112
|
+
stateMutability: "nonpayable",
|
|
56113
|
+
inputs: [{ type: "uint256", name: "index" }],
|
|
56114
|
+
outputs: [{ type: "uint256" }]
|
|
56115
|
+
}
|
|
56116
|
+
];
|
|
56117
|
+
|
|
56118
|
+
// src/vaults/lst/withdrawals/readers/binance.ts
|
|
56119
|
+
var readerBinanceWbeth2 = {
|
|
56120
|
+
fetch: async (user, multicallRetry, chainId, entry) => {
|
|
56121
|
+
if (!entry.withdrawalContract) return [];
|
|
56122
|
+
const res = await multicallRetry({
|
|
56123
|
+
chain: chainId,
|
|
56124
|
+
calls: [
|
|
56125
|
+
{
|
|
56126
|
+
address: entry.withdrawalContract,
|
|
56127
|
+
name: "getUserWithdrawRequests",
|
|
56128
|
+
params: [user]
|
|
56129
|
+
},
|
|
56130
|
+
{
|
|
56131
|
+
address: entry.withdrawalContract,
|
|
56132
|
+
name: "lockTime",
|
|
56133
|
+
params: []
|
|
56134
|
+
}
|
|
56135
|
+
],
|
|
56136
|
+
abi: [BinanceUnwrapQueueAbi, BinanceUnwrapQueueAbi]
|
|
56137
|
+
});
|
|
56138
|
+
const reqs = res[0];
|
|
56139
|
+
const lockTime = toNumber(res[1]);
|
|
56140
|
+
if (!Array.isArray(reqs) || lockTime === void 0) return [];
|
|
56141
|
+
const out = [];
|
|
56142
|
+
for (let i = 0; i < reqs.length; i++) {
|
|
56143
|
+
const r = reqs[i];
|
|
56144
|
+
const triggerTime = toNumber(r.triggerTime);
|
|
56145
|
+
const ethAmount = toBigInt14(r.ethAmount);
|
|
56146
|
+
const wbethAmount = toBigInt14(r.wbethAmount);
|
|
56147
|
+
if (triggerTime === void 0 || ethAmount === void 0) continue;
|
|
56148
|
+
const readyAt = triggerTime + lockTime;
|
|
56149
|
+
const claimed = (toNumber(r.claimTime) ?? 0) > 0;
|
|
56150
|
+
const allocated = r.allocated === true;
|
|
56151
|
+
out.push({
|
|
56152
|
+
lst: entry.lst,
|
|
56153
|
+
brand: entry.brand,
|
|
56154
|
+
symbol: entry.symbol,
|
|
56155
|
+
// Positional — see note 1 above.
|
|
56156
|
+
requestId: String(i),
|
|
56157
|
+
amountUnderlying: ethAmount.toString(),
|
|
56158
|
+
shares: wbethAmount?.toString(),
|
|
56159
|
+
// Claimed requests are popped from the array, so this branch is
|
|
56160
|
+
// defensive only.
|
|
56161
|
+
status: claimed ? "claimed" : allocated ? computeStatus(readyAt) : "pending",
|
|
56162
|
+
readyAt
|
|
56163
|
+
});
|
|
56164
|
+
}
|
|
56165
|
+
return out;
|
|
56166
|
+
}
|
|
56167
|
+
};
|
|
56168
|
+
|
|
55830
56169
|
// src/vaults/lst/withdrawals/abis/berapaw.ts
|
|
55831
56170
|
var BeraPawForgeWithdrawalAbi = [
|
|
55832
56171
|
{
|
|
@@ -57968,6 +58307,8 @@ var readerYieldNest = {
|
|
|
57968
58307
|
// src/vaults/lst/withdrawals/readers/index.ts
|
|
57969
58308
|
var buildWithdrawalReader = (entry) => {
|
|
57970
58309
|
switch (entry.reader) {
|
|
58310
|
+
case "binanceWbethQueue":
|
|
58311
|
+
return readerBinanceWbeth2;
|
|
57971
58312
|
case "lidoQueue":
|
|
57972
58313
|
return readerLido;
|
|
57973
58314
|
case "etherfiNft":
|
|
@@ -58033,6 +58374,20 @@ var buildWithdrawalReader = (entry) => {
|
|
|
58033
58374
|
// src/vaults/lst/withdrawals/registry.ts
|
|
58034
58375
|
var LST_WITHDRAWAL_REGISTRY = {
|
|
58035
58376
|
"1": [
|
|
58377
|
+
{
|
|
58378
|
+
// wBETH — Binance's UnwrapTokenV1 queue, the SAME contract address
|
|
58379
|
+
// on Ethereum and BNB. Entered via `wBETH.requestWithdrawEth`;
|
|
58380
|
+
// `getUserWithdrawRequests(user)` enumerates open requests, and
|
|
58381
|
+
// `claimWithdraw(index)` takes the user's ARRAY POSITION (swap-and-pop,
|
|
58382
|
+
// so ids shift on every claim — never cache them). `lockTime()` is
|
|
58383
|
+
// 10 days today but is admin-settable down to 2, and the ETH owed is
|
|
58384
|
+
// frozen at request time, so the position stops earning meanwhile.
|
|
58385
|
+
lst: "0xa2e3356610840701bdf5611a53974510ae27e2e1",
|
|
58386
|
+
brand: "Binance",
|
|
58387
|
+
symbol: "wBETH",
|
|
58388
|
+
reader: "binanceWbethQueue",
|
|
58389
|
+
withdrawalContract: "0x79973d557cd9dd87eb61e250cc2572c990e20196"
|
|
58390
|
+
},
|
|
58036
58391
|
// Ankr ankrETH — Ankr unstake queue; reader not yet implemented.
|
|
58037
58392
|
{
|
|
58038
58393
|
lst: "0xe95a203b1a91a908f9b9ce46459d101078c2c3cb",
|
|
@@ -58405,6 +58760,20 @@ var LST_WITHDRAWAL_REGISTRY = {
|
|
|
58405
58760
|
}
|
|
58406
58761
|
],
|
|
58407
58762
|
"56": [
|
|
58763
|
+
{
|
|
58764
|
+
// wBETH — Binance's UnwrapTokenV1 queue, the SAME contract address
|
|
58765
|
+
// on Ethereum and BNB. Entered via `wBETH.requestWithdrawEth`;
|
|
58766
|
+
// `getUserWithdrawRequests(user)` enumerates open requests, and
|
|
58767
|
+
// `claimWithdraw(index)` takes the user's ARRAY POSITION (swap-and-pop,
|
|
58768
|
+
// so ids shift on every claim — never cache them). `lockTime()` is
|
|
58769
|
+
// 10 days today but is admin-settable down to 2, and the ETH owed is
|
|
58770
|
+
// frozen at request time, so the position stops earning meanwhile.
|
|
58771
|
+
lst: "0xa2e3356610840701bdf5611a53974510ae27e2e1",
|
|
58772
|
+
brand: "Binance",
|
|
58773
|
+
symbol: "wBETH",
|
|
58774
|
+
reader: "binanceWbethQueue",
|
|
58775
|
+
withdrawalContract: "0x79973d557cd9dd87eb61e250cc2572c990e20196"
|
|
58776
|
+
},
|
|
58408
58777
|
// Ankr ankrBNB — Ankr unstake queue; reader not yet implemented.
|
|
58409
58778
|
{
|
|
58410
58779
|
lst: "0x52f24a5e03aee338da5fd9df68d2b6fae1178827",
|