import type { VaultProvider, VaultPublicDataAll } from './fetchVaultsAll';
import type { InterfaceKind } from './interfaceKind';
import type { Denomination, YieldProfile } from './classification';
/**
 * The cross-provider subset of static vault metadata + share-price
 * inputs that every supported provider populates. Lifted out of the
 * per-provider types so consumers (e.g. a user-balance endpoint that
 * only needs to know decimals + share/asset ratio) don't have to
 * branch on provider key.
 *
 * Load-bearing fields here MUST be present in every provider's value
 * type — the structural constraint in `buildVaultLookup`'s
 * `addEntries<T extends {...}>` enforces this at compile time. If a
 * future provider drops one, the TS build fails.
 */
export interface VaultLookupEntry {
    /** Provider key — `fluid | gearbox | morpho | silo | euler-earn` */
    provider: VaultProvider;
    /** Share token (vault) address, lowercased. */
    address: string;
    /** Underlying ERC-20 address, lowercased. */
    underlying: string;
    /** Share-token symbol (e.g. `fUSDC`, `dWETHV3`). */
    symbol: string;
    /** Share-token name. */
    name: string;
    /** Share decimals. By ERC-4626 convention equals underlying decimals. */
    decimals: number;
    /** Underlying asset decimals. For plain ERC-4626 providers this equals
     *  `decimals`; for providers where the share token and underlying have
     *  different decimals (e.g. Lagoon: 18-decimal shares over USDC/WBTC),
     *  this is the underlying's own decimals. Absent ⇒ assume it equals
     *  `decimals`. Load-bearing for share→asset formatting. */
    assetDecimals?: number;
    /** Total underlying held by the vault, raw integer string. */
    totalAssets: string;
    /** Total shares minted, raw integer string. */
    totalSupply: string;
    /** Vault interface family, when detected via ERC-165
     *  (`detectInterfaceKinds`). Absent ⇒ not probed; consumers should
     *  treat absent as `erc4626`. Drives deposit/withdraw + withdrawal-
     *  queue routing. */
    interfaceKind?: InterfaceKind;
    /** NAV behaviour — `yield-bearing` (monotonic accrual: LST, savings,
     *  lending supply) vs `volatile` (trading/perp/leveraged strategy).
     *  Set by `stampVaultClassification`; absent ⇒ not classified. */
    yieldProfile?: YieldProfile;
    /** Underlying denomination — `stable` (stablecoin underlying) vs
     *  `volatile`. Orthogonal to `yieldProfile`. */
    denomination?: Denomination;
    /** Uniform share price, folded from the provider's `convertToAssets`/
     *  `pricePerShare` by `stampVaultClassification`. `sharePriceRaw` is the
     *  asset-scaled raw integer (`'0'` for empty); `sharePrice` is it formatted
     *  to underlying units; `sharePriceUSD` is `sharePrice * priceUsd`. Absent on
     *  hypercore/gmx. */
    sharePriceRaw?: string;
    sharePrice?: number;
    sharePriceUSD?: number;
    /** Resolved branded icon URL — share-token logo, else underlying-asset logo.
     *  Carried from `stampVaultClassification`; absent ⇒ none resolved. */
    logoURI?: string;
}
/**
 * Flattens the per-provider maps from `VaultPublicDataAll` into a
 * single `vaultAddress → VaultLookupEntry` map.
 *
 * The per-provider maps key inconsistently — Fluid + Gearbox by
 * underlying, Morpho/Silo/Euler-Earn by vault address. We iterate
 * values and use each entry's `.address` field as the canonical key
 * so the resulting lookup is uniform regardless of provider keying.
 *
 * Pure transform — no I/O, no env. Cache wrappers live in callers
 * (e.g. worker-api's `vaultsShared.ts`).
 */
export declare function buildVaultLookup(data: VaultPublicDataAll): Map<string, VaultLookupEntry>;
//# sourceMappingURL=lookup.d.ts.map