import { GenericCurrency } from '../../types/general';
import type { VaultClassificationFields } from '../classification';
import type { VaultMarketExposure } from '../exposure';
export type { VaultMarketExposure } from '../exposure';
/**
 * Parsed Silo vault entry.
 *
 * Silo vaults ("soToken" / curated vaults) are standalone ERC-4626 yield
 * vaults that allocate deposits across one or more Silo v2/v3 lending
 * silos. They are NOT a lending market — no collateral, no borrow, no
 * liquidation — just a deposit → earn shape, modeled separately from the
 * per-silo borrow side in `src/lending/public-data/silo-v{2,3}/`.
 *
 * The same `api-v3.silo.finance` endpoint serves vaults for both protocol
 * versions; `protocolVersion` distinguishes them. Multiple vaults may
 * share an underlying (different curators / strategies), so the map is
 * keyed by vault address like `MorphoVaults`.
 */
export interface SiloVault extends VaultClassificationFields {
    /** Vault (share-token) contract address, lowercased. */
    address: string;
    /** Lowercased underlying ERC20 address. */
    underlying: string;
    /** Vault share-token symbol, e.g. `soUSDC`, `soETH`. */
    symbol: string;
    /** Vault share-token name as returned by `name()`. Raw — use
     *  `displayName` for UI. */
    name: string;
    /** Cross-provider UI label — `${curatorName ?? 'Silo'} ${asset.symbol}`
     *  (e.g. `Silo USDC`). `curatorName` is currently always undefined for
     *  Silo, so this resolves to `Silo <symbol>` until the indexer adds
     *  curator-name support. Always non-empty. */
    displayName: string;
    /** Share and underlying decimals (ERC-4626 keeps them aligned). */
    decimals: number;
    /** Silo protocol version this vault allocates into. */
    protocolVersion: 'v2' | 'v3' | string;
    /** Parent `lendingProtocol.id` from the Silo indexer, lowercased. */
    protocolId: string;
    /** Total underlying assets held by the vault, raw integer as string.
     *  The Silo indexer returns decimal-formatted values; we re-encode to
     *  raw wei for parity with `MorphoVault` / `FluidFToken` / `GearboxV3Pool`. */
    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 (mirrors Silo's `userApr`).
     *  Includes any rewards rolled into the indexer-reported user yield. */
    supplyRate: number;
    /** Gross pre-fee APR in percent (mirrors Silo's `apr`). Present for
     *  vaults with a non-zero performance fee where `supplyRate < grossRate`. */
    grossRate: number;
    /** Extra rewards APR in percent — not separately surfaced by the Silo
     *  indexer, so always 0. Kept for cross-vault API parity. */
    rewardsRate: number;
    /** Sum of `supplyRate + rewardsRate` — what a depositor actually earns. */
    depositRate: number;
    /** Performance fee in percent (e.g. `15.0` = 15 %). */
    fee: number;
    /** Timelock for vault config changes, in seconds. */
    timelock: number;
    /** Owner address, lowercased. */
    owner?: string;
    /** Curator address, lowercased — may be absent if not set. */
    curator?: string;
    /** Guardian address, lowercased — may be absent if not set. */
    guardian?: string;
    /** Fee recipient, lowercased — may be absent. */
    feeRecipient?: string;
    /** Human-readable curator label for UI. Always undefined today: the
     *  Silo indexer (`api-v3.silo.finance`) only exposes `curatorId` (the
     *  on-chain address). Field is kept for cross-provider parity with
     *  `MorphoVault.curatorName` so consumers can write generic UI code. */
    curatorName?: string;
    /** Hydrated asset metadata from the provided token list, if any. */
    asset?: GenericCurrency;
    /** USD price of one underlying unit, if prices were supplied / returned. */
    priceUsd?: number;
    /** Human-formatted total assets (`totalAssets / 10^decimals`). */
    totalAssetsFormatted: number;
    /** Human-formatted total assets in USD (authoritative value from the
     *  indexer when present). */
    totalAssetsUsd: number;
    /** Currently withdrawable underlying, raw integer as string. Silo's
     *  indexer doesn't expose an immediate-withdraw figure, so this is a
     *  `totalAssets` fallback — optimistic ceiling, not a hard withdraw
     *  cap. Kept for cross-vault field parity. */
    liquidity: string;
    /** Human-formatted immediate withdrawable liquidity. */
    liquidityFormatted: number;
    /** Human-formatted immediate withdrawable liquidity in USD. */
    liquidityUsd: number;
    /** Per-silo allocation breakdown — which Silo markets the vault lends
     *  into and how much, ordered by weight descending. Collateral is the
     *  market's paired (`otherMarket`) input token. Undefined when the
     *  indexer returns no allocation rows. */
    exposures?: VaultMarketExposure[];
}
/** Full parsed payload: per-vault-address map. */
export type SiloVaults = {
    /** Keyed by lowercased vault address. */
    [vaultAddress: string]: SiloVault;
};
//# sourceMappingURL=types.d.ts.map