import type { YieldFetcher } from '../../yields/types';
import type { SavingsWithdrawalMode } from './types';
/**
 * Static registry entry for a savings vault.
 *
 * Per-chain entries live in {@link SAVINGS_REGISTRY}. Each pins the
 * on-chain identity (address, decimals), brand metadata, the
 * withdrawal mechanism (drives UX), and a pointer to the existing
 * intrinsic-yield fetcher whose APR is surfaced as `supplyRate`.
 *
 * No `reader` discriminant — every savings entry uses the same
 * generic ERC-4626 reader. If a future entry diverges (e.g.
 * rebasing-via-wrapper for srUSD), add a kind here and extend
 * [`readers/`](./readers/).
 */
export interface SavingsRegistryEntry {
    /** Share-token contract address, lowercased. */
    address: string;
    /** Underlying ERC-20 address, lowercased. */
    underlying: string;
    /** Share-token symbol — usually the on-chain `symbol()`. */
    symbol: string;
    /** Brand label (`Ethena`, `Sky`, `Maker`, …). */
    brand: string;
    /** Share decimals. Most are 18; Maple syrup* are 6. */
    decimals: number;
    /** Underlying ERC-20 decimals. Defaults to `decimals` when absent
     *  — every ERC-4626 vault except a handful keep share/underlying
     *  decimals aligned. yUSD breaks this (18-decimal shares over
     *  6-decimal USDC) so it must set this explicitly. */
    underlyingDecimals?: number;
    /** True if the share token rebases. False for nearly every
     *  savings vault — the rebase lives on the underlying. */
    isRebasing: boolean;
    /** Whether deposits are permissionless. */
    isMintable: boolean;
    /** Mint entry — undefined ⇒ share token itself (ERC-4626
     *  `deposit/mint`). */
    mintContract?: string;
    /** Withdrawal mechanism. */
    withdrawalMode: SavingsWithdrawalMode;
    /** Fixed cooldown in seconds for `fixed-cooldown` mode. Pinned
     *  here; read on-chain if the precise governance-current value is
     *  needed. */
    withdrawalCooldownSeconds?: number;
    /** Existing intrinsic-yield fetcher whose APR is surfaced as
     *  `supplyRate`. Optional — `sDAI` for example has no dedicated
     *  fetcher today; entry still works, `supplyRate` defaults to 0. */
    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;
}
/**
 * Per-chain savings-vault allowlist. Assembled at module load from
 * single-chain entries plus the expanded `MULTI_CHAIN_GROUPS`.
 *
 * See [TIMELOCKS_AND_CHAINS.md](./TIMELOCKS_AND_CHAINS.md) for the
 * verification notes and
 * [../lst/EXPANSION_PLAN.md](../lst/EXPANSION_PLAN.md) for the
 * rollout order.
 */
export declare const SAVINGS_REGISTRY: {
    [chainId: string]: SavingsRegistryEntry[];
};
/** Returns the registry entries for a chain, or `[]` when unsupported. */
export declare const getSavingsRegistry: (chainId: string) => SavingsRegistryEntry[];
//# sourceMappingURL=registry.d.ts.map