import { GenericCurrency } from '../../types/general';
import type { VaultClassificationFields } from '../classification';
/**
 * Parsed Euler Earn vault entry.
 *
 * Euler Earn is the curated-allocator side of Euler V2: standalone ERC-4626
 * vaults that route deposits into one or more Euler V2 EVaults via a
 * curator-defined strategy. They are NOT a lending market — no collateral,
 * no borrow, no liquidation — just a deposit → earn shape, modeled
 * separately from the borrow side in `src/lending/public-data/euler/`.
 *
 * Multiple earn vaults typically exist per underlying (different curators /
 * risk profiles), so the top-level map is keyed by vault address rather
 * than underlying — same convention as `MorphoVaults` and `SiloVaults`.
 */
export interface EulerEarnVault extends VaultClassificationFields {
    /** Earn vault (share-token) contract address, lowercased. */
    address: string;
    /** Lowercased underlying ERC-20 address. */
    underlying: string;
    /** Vault share-token symbol, e.g. `eUSDC-1`. */
    symbol: string;
    /** Vault share-token name. */
    name: string;
    /** Share-token decimals. Euler Earn meta-vaults can apply a decimals
     *  offset (e.g. 18-dec shares over 6-dec USDC), so this is NOT always
     *  equal to `assetDecimals`. */
    decimals: number;
    /** Underlying asset decimals — frequently differs from `decimals` when
     *  the earn vault uses a decimals offset. Load-bearing for share→asset
     *  formatting (carried through to `VaultLookupEntry`). */
    assetDecimals: number;
    /** Total underlying assets held by the vault, raw integer as string. */
    totalAssets: string;
    /** Total shares minted, raw integer as string. */
    totalSupply: string;
    /** Raw `convertToAssets(10**shareDecimals)` — 1 share → X underlying,
     *  asset-scaled. Derived from `totalAssets / totalSupply`. */
    convertToAssets: string;
    /** Supply APR in percent, net of performance fee. */
    supplyRate: number;
    /** Extra rewards APR in percent, on top of `supplyRate`.
     *  Goldsky doesn't surface rewards directly — defaults to 0. */
    rewardsRate: number;
    /** Sum of `supplyRate + rewardsRate` — what a depositor actually earns. */
    depositRate: number;
    /** Performance fee in percent (e.g. `5.0` = 5 %). */
    fee: number;
    /** Governance timelock in seconds — the delay before owner/curator config
     *  changes take effect (Euler Earn `governance.timelock`). Governance-only,
     *  NOT a per-deposit withdrawal lock. Mirrors `MorphoVault.timelock`. */
    timelock?: number;
    /** Owner address, lowercased — may be absent if not set. */
    owner?: string;
    /** Curator / fee-recipient address, lowercased. */
    curator?: string;
    /** Human-readable curator label for UI, derived best-effort from the
     *  (curator-branded) vault name — the subgraph exposes only the address.
     *  Mirrors `MorphoVault.curatorName` so consumers can write generic UI. */
    curatorName?: string;
    /** Guardian address, lowercased — may be absent. */
    guardian?: string;
    /** Fee recipient, lowercased — may be absent. */
    feeRecipient?: string;
    /** Hydrated asset metadata from the provided token list, if any. */
    asset?: GenericCurrency;
    /** USD price of one underlying unit, if prices were supplied. */
    priceUsd?: number;
    /** Human-formatted total assets (`totalAssets / 10^assetDecimals`). */
    totalAssetsFormatted: number;
    /** Human-formatted total assets in USD. */
    totalAssetsUsd: number;
    /** Currently withdrawable underlying, raw integer as string. Computed
     *  as `idle_cash + Σ min(allocated_i, evk_cash_i)` across the Earn
     *  vault's strategies — accounts for per-EVK utilization caps. Falls
     *  back to `totalAssets` (optimistic ceiling) when the EVK index is
     *  unavailable. Never exceeds `totalAssets`. */
    liquidity: string;
    /** Human-formatted immediate withdrawable liquidity. */
    liquidityFormatted: number;
    /** Human-formatted immediate withdrawable liquidity in USD. */
    liquidityUsd: number;
}
/** Full parsed payload: per-vault-address map. */
export type EulerEarnVaults = {
    /** Keyed by lowercased vault address. */
    [vaultAddress: string]: EulerEarnVault;
};
//# sourceMappingURL=types.d.ts.map