import type { YieldFetcher } from '../../yields/types';
import type { LstWithdrawalMode } from './types';
/** Reader kind — picks which on-chain call set the orchestrator emits
 *  for a given LST. See `readers.ts` for the per-kind implementations. */
export type LstReaderKind = 'erc4626' | 'erc4626PreviewRedeem' | 'lidoWstEth' | 'rocketReth' | 'etherfiWeEth' | 'renzoEzEth' | 'kelpRsEth' | 'swellGetRate' | 'stakewiseOsEth' | 'staderEthx' | 'staderMaticX' | 'mantleMEth' | 'beetsStS' | 'benqiSavax' | 'kinetiqKHype' | 'valantisWstHype' | 'hyperbeatBeHype' | 'stceloManager' | 'lairStKaia' | 'listaSlisBnb' | 'dineroBeraEth' | 'bgtWrapper1to1' | 'ankrRatio' | 'coreEarnRate' | 'coreStakedRatio' | 'stellaStDot' | 'vedaAccountant' | 'kintsuSMon' | 'offChain';
/**
 * Static registry entry for an LST share-token.
 *
 * Per-chain LSTs live in {@link LST_REGISTRY}. Each entry pins the
 * on-chain identity (address, decimals, brand), the reader strategy
 * (which contracts to multicall and how to compute the rate), the
 * mint/withdrawal metadata used by downstream calldata routing, and a
 * pointer to the existing intrinsic-yield fetcher whose APR is
 * surfaced as `supplyRate`.
 */
export interface LstRegistryEntry {
    /** Share-token contract address, lowercased. */
    address: string;
    /** Underlying asset address, lowercased — `zeroAddress` for native
     *  ETH, an ERC-20 address otherwise (e.g. wstETH for pufETH). This is
     *  the **pay asset** (deposit input / what the share token wraps), so it
     *  drives deposit routing — not just pricing. */
    underlying: string;
    /** Price-only reference asset, lowercased. When the `underlying` (pay
     *  asset) has no USD price of its own, this points pricing at an
     *  economically-equivalent, *priced* token — used **solely** for
     *  `priceUsd` (and the USD fields derived from it), never for deposits.
     *  e.g. the BGT wrappers pay in BGT (unpriced) but are 1:1 redeemable to
     *  BERA, so `priceUnderlying` = WBERA. Omit when `underlying` is priced. */
    priceUnderlying?: string;
    /** Share-token symbol. */
    symbol: string;
    /** Display name — `${brand} ${symbol}` is composed in the parser if
     *  this is omitted. */
    brand: string;
    /** Share decimals. */
    decimals: number;
    /** Underlying asset decimals. Defaults to `decimals` when omitted — set
     *  it only when the share token and its underlying differ, e.g. 18-dec
     *  SolvBTC over 8-dec WBTC, or 8-dec bridged pumpBTC over 18-dec
     *  SolvBTC.CORE. Load-bearing for share→asset conversion
     *  (`convertToAssets`/`convertToShares`, `totalAssets` scaling, and the
     *  cross-provider `sharePrice`). Mirrors `SavingsRegistryEntry.underlyingDecimals`. */
    underlyingDecimals?: number;
    /** Reader strategy — drives the multicall payload. */
    reader: LstReaderKind;
    /** Whether this is a real ERC-4626 (informational; the reader still
     *  decides the call shape). */
    isErc4626: boolean;
    /** Whether the share token rebases. */
    isRebasing: boolean;
    /** Whether the LST can be minted permissionlessly on-chain. */
    isMintable: boolean;
    /** Whether the mint entry accepts native ETH. */
    isNativeUnderlying: boolean;
    /** Mint entry contract — used by calldata-sdk when wiring deposits. */
    mintContract?: string;
    /** Mint input asset. */
    mintInputAsset?: 'native' | string;
    /** Withdrawal mechanism. */
    withdrawalMode: LstWithdrawalMode;
    /** Fixed cooldown in seconds (only for `fixed-cooldown` mode). */
    withdrawalCooldownSeconds?: number;
    /** Existing intrinsic-yield fetcher whose APR is surfaced as
     *  `supplyRate`. Undefined when no yield source exists yet (e.g.
     *  ynLSDe). */
    yieldFetcher?: YieldFetcher;
    /** Key inside the yield fetcher's `YieldResult` to read. Yield
     *  fetchers return maps keyed by symbol or by a free-text label;
     *  this is the exact key. */
    yieldKey?: string;
    /** Extra contracts the reader needs (oracle, deposit pool, …).
     *  Shape is reader-specific. */
    readerExtras?: {
        /** Renzo `RestakeManager` (chainId 1: 0x74a09653a083691711cf8215a6ab074bb4e99ef5). */
        restakeManager?: string;
        /** Kelp `LRTOracle` (chainId 1: 0x349a73444b1a310bae67ef67973022020d70020d). */
        lrtOracle?: string;
        /** StakeWise `OsTokenVaultController` (chainId 1:
         *  0x2a261e60fb14586b474c208b1b7ac6d0f5000306). */
        osTokenController?: string;
        /** Stader `StaderStakePoolsManager` (chainId 1:
         *  0xcf5ea1b38380f6af39068375516daf40ed70d299). */
        staderStakePoolsManager?: string;
        /** Mantle `Staking` (chainId 1: 0xe3cbd06d7dadb3f4e6557bab7edd924cd1489e8f). */
        mantleStaking?: string;
        /** Rocket Pool `RocketDepositPool` (current address — resolve via
         *  `RocketStorage` at deploy time; this is a snapshot). */
        rocketDepositPool?: string;
        /** EtherFi `LiquidityPool` — exposes the pooled-ETH buffer. */
        etherFiLiquidityPool?: string;
        /** Kinetiq `StakingAccountant` (chainId 999:
         *  0x9209648Ec9D448EF57116B73A2f081835643dc7A) — exposes
         *  `kHYPEToHYPE(uint256)`. */
        kinetiqAccountant?: string;
        /** Valantis `stHYPE` (chainId 999:
         *  0xffaa4a3d97fe9107cef8a3f48c069f577ff76cc1) — exposes
         *  `balancePerShare()` (1e18-scaled HYPE-per-share). */
        valantisStHype?: string;
        /** Hyperbeat `StakingCore` (chainId 999:
         *  0xcEAD893b162D38e714D82d06a7fe0b0dc3c38E0b) — exposes
         *  `BeHYPEToHYPE(uint256)`. */
        hyperbeatStakingCore?: string;
        /** StakedCelo `Manager` (Celo mainnet 42220:
         *  0x0239b96D10a434a56CC9E09383077A0490cF9398) — exposes
         *  `toCelo(uint256)` (1e18-scaled CELO-per-stCELO). */
        stceloManager?: string;
        /** Stader MaticX **home** contract address, used by the
         *  cross-chain Polygon entry. The Polygon bridge child has no
         *  rate getter — the rate is read from the Ethereum home
         *  contract (`0xf03a…b645`) via cross-chain dispatch. */
        staderMaticXHomeContract?: string;
        /** Chain to dispatch the rate-getter call to. Pairs with
         *  `staderMaticXHomeContract`. */
        staderMaticXHomeChainId?: string;
        /** Lista `ListaStakeManager` (BNB chain 56:
         *  0x1adb950d8bb3da4be104211d5ab038628e477fe6) — exposes
         *  `convertSnBnbToBnb(uint256)` (1e18-scaled BNB-per-slisBNB) and
         *  `getTotalPooledBnb()`. The slisBNB token itself carries no rate. */
        listaStakeManager?: string;
        /** Veda BoringVault `AccountantWithRateProviders` (eBTC on chain 1:
         *  0x1b293DC39F94157fA0D1D36d7e0090C8B8B8c13F) — exposes
         *  `getRate()` (assets-per-share, base-asset decimals). The eBTC
         *  vault token carries no ERC-4626 rate surface. */
        vedaAccountant?: string;
        /** stCORE `Earn` contract (Core chain 1116:
         *  0xf5fA1728bABc3f8D2a617397faC2696c958C3409 = `stCORE.earn()`) —
         *  exposes `getCurrentExchangeRate()` (1e6-scaled CORE-per-stCORE).
         *  The stCORE token itself carries no rate getter. */
        coreEarn?: string;
        /** Core staking contract holding `totalStaked()` when it is not the
         *  share token itself — dualCORE's b14g `coreVault`
         *  (0xee21ab613d30330823D35Cf91A84cE964808B83F = `dualCORE.coreVault()`).
         *  SCORE omits this (it is its own staking contract). */
        coreStakeContract?: string;
    };
}
/**
 * Per-chain LST allowlist. Keyed by chainId (string to match the rest
 * of the codebase). Add new chains by appending an entry; the LST
 * vault provider returns `{}` for chains with no entry.
 *
 * Coverage: Ethereum mainnet only in this drop — see VAULT_CANDIDATES.md
 * for the broader roadmap (HyperEVM LSTs, ezETH on L2s, etc.).
 */
export declare const LST_REGISTRY: {
    [chainId: string]: LstRegistryEntry[];
};
/** Returns the registry entries for a chain, or `[]` when unsupported. */
export declare const getLstRegistry: (chainId: string) => LstRegistryEntry[];
//# sourceMappingURL=registry.d.ts.map