import type { VaultProvider, VaultPublicDataAll } from './fetchVaultsAll';
import type { GenericCurrency, GenericTokenList } from '../types/general';
/**
 * Two orthogonal axes for separating savings-like vaults from volatile ones.
 *
 * - `yieldProfile` — NAV behaviour / mechanism. `yield-bearing` = the
 *   share/asset ratio accrues monotonically (LST, staking, savings, lending
 *   supply). `volatile` = a trading / perp / leveraged strategy whose NAV
 *   fluctuates and can draw down (Hyperliquid HLP & friends; any leveraged
 *   strategy vault we explicitly flag).
 * - `denomination` — is the underlying a stablecoin. Independent of
 *   `yieldProfile`: sUSDe is `yield-bearing` + `stable`, wstETH is
 *   `yield-bearing` + `volatile`, an HLP-USDC vault is `volatile` + `stable`.
 */
export type YieldProfile = 'yield-bearing' | 'volatile';
export type Denomination = 'stable' | 'volatile';
export interface VaultClassification {
    yieldProfile: YieldProfile;
    denomination: Denomination;
}
/**
 * Optional cross-provider fields mixed into every per-provider vault type
 * (and `VaultLookupEntry`) and stamped by `stampVaultClassification`; absent
 * until then.
 *
 * Uniform **share price** — the provider's `convertToAssets`
 * (fluid/savings/lst/morpho/lista/silo/gearbox/euler-earn) or `pricePerShare`
 * (lagoon/yearn), so consumers read one set of fields instead of
 * `convertToAssets ?? pricePerShare`:
 *  - `sharePriceRaw` — raw `convertToAssets(10^shareDecimals)` (asset-scaled
 *    integer string). `'0'` for an empty vault.
 *  - `sharePrice` — that value formatted to underlying units (1 share → X
 *    underlying, a JS number).
 *  - `sharePriceUSD` — `sharePrice * priceUsd` (USD value of 1 share); absent
 *    when no underlying price was supplied/resolved.
 * All absent on hypercore/gmx (no share/asset ratio).
 */
export interface VaultClassificationFields {
    yieldProfile?: YieldProfile;
    denomination?: Denomination;
    sharePriceRaw?: string;
    sharePrice?: number;
    sharePriceUSD?: number;
    /**
     * The **share token's own** token-list entry (hydrated from the provided
     * `tokenList` by `stampVaultClassification`). Unlike `asset` — which is the
     * *underlying* — this is what the vault/LST *actually is* (e.g. pumpBTC, with
     * its branded `logoURI` + `assetGroup`), so a UI can show the right icon.
     * Absent when the caller passed no token list, or the share token isn't in
     * it.
     */
    shareAsset?: GenericCurrency;
    /**
     * Resolved branded icon URL for the vault — the single field a UI should
     * read to render an icon, so consumers don't re-derive the fallback. Set by
     * `stampVaultClassification` to the first of: the share token's own logo
     * (`shareAsset.logoURI`, branded — e.g. pumpBTC), the underlying asset's logo
     * (`asset.logoURI`), or — for GMX GM/GLV tokens that have no `asset` entry —
     * the long-leg token's logo. Absent when none of those resolve (e.g. no
     * token list passed, or a HyperCore vault whose underlying isn't hydrated).
     */
    logoURI?: string;
    /**
     * Redemption model — whether a depositor can withdraw underlying cash
     * synchronously (standard ERC-4626 up to available liquidity) or must go
     * through a delay/queue/cooldown.
     *  - `sync` — morpho/lista/euler-earn/fluid/gearbox/silo/yearn and `instant`
     *    savings: instant withdraw up to the vault's cash. For these, ~zero
     *    withdrawable liquidity against non-trivial TVL is a genuine red flag
     *    (stuck capital — e.g. an allocator parked in an exploited market).
     *  - `async` — LSTs (unbonding/cooldown/off-chain), cooldown savings (sUSDe),
     *    and epoch/request vaults (lagoon/upshift). Zero *instant* liquidity is
     *    expected by design and must NOT be read as a risk.
     * Absent on hypercore/gmx (USD-denominated, no share redemption model).
     */
    redemptionType?: 'sync' | 'async';
}
/**
 * Per-vault overrides for strategy vaults that are volatile despite living
 * inside a yield provider (e.g. a leveraged Morpho vault, a Lagoon trading
 * strategy). Keyed by `${chainId}-${lowercasedAddress}`.
 *
 * Seeded from the TradingStrategy dataset
 * (`vault-metadata.json`): vaults flagged `perp_dex_trading_vault` /
 * `proprietary_trading`. As of the May 2026 snapshot, ALL such vaults belong to
 * perp-DEX protocols (Hyperliquid, Lighter, GRVT, …) — none fall inside the
 * EVM providers we index — so this set is intentionally empty today. It is the
 * extension point: add `${chainId}-${address}` rows here when a leveraged /
 * trading strategy vault surfaces inside morpho/euler/silo/lagoon/etc.
 */
export declare const VOLATILE_VAULT_OVERRIDES: Set<string>;
/**
 * Curated stablecoin symbol set (normalised uppercase), compiled from the
 * dataset's `stablecoinish`-flagged denominations. Symbol-first so it is
 * chain-agnostic. Combined with a `contains 'USD'` fallback (virtually every
 * USD-substring token is a USD stablecoin) this covers the long tail without
 * per-chain address tables.
 */
export declare const STABLECOIN_SYMBOLS: Set<string>;
/** True when a token symbol denotes a (fiat-pegged) stablecoin. */
export declare const isStablecoinSymbol: (symbol: string | undefined) => boolean;
export interface ClassifyVaultInput {
    provider: VaultProvider | 'hypercore' | 'gmx';
    chainId: string | number;
    address: string;
    /** Underlying token symbol, when known (drives `denomination`). */
    underlyingSymbol?: string;
}
/**
 * Classify a vault on both axes. Pure — no I/O. `yieldProfile` is
 * provider-default with a per-vault override; `denomination` is
 * positive-ID by underlying symbol (defaults to `volatile` when unknown).
 */
export declare const classifyVault: (input: ClassifyVaultInput) => VaultClassification;
/**
 * Mutate every vault in a `VaultPublicDataAll` payload, setting
 * `yieldProfile` + `denomination` via {@link classifyVault}. Called once in
 * `getVaultPublicDataAll` after the providers resolve and before the lookup
 * is built, so both the per-provider objects and the lookup carry the fields.
 *
 * `denomination` reads the underlying token symbol (`asset.symbol`), falling
 * back to the share symbol when asset metadata wasn't hydrated — most stable
 * vaults embed the stablecoin in their share symbol (`steakUSDC`), and
 * volatile shares rarely contain a stable token name.
 */
export declare const stampVaultClassification: (data: VaultPublicDataAll, chainId: string | number, tokenList?: GenericTokenList) => void;
//# sourceMappingURL=classification.d.ts.map