/**
 * Validator / delegation dataset for LST deposits.
 *
 * A few LSTs require (or allow) the depositor to pick the validator,
 * validator-group, node, or pool the staked asset is delegated to — unlike
 * the pooled majority (Lido, Rocket Pool, EtherFi, …) where the protocol
 * decides. This module is the single source of truth for:
 *
 *  1. **the descriptor** ({@link LstDelegation}) — *whether* a selection is
 *     needed, the deposit option key to send the choice back as, whether a
 *     safe default exists, and where the list comes from; and
 *  2. **the live set** ({@link LstValidator}) — the selectable validators with
 *     status + capacity, normalised across protocols.
 *
 * The descriptor mirrors `acceptedInputs` (the pay-asset accept-set): a
 * machine-readable answer to "do I have to pick a validator, and from where".
 * Both are attached to each LST by the vault fetcher (`fetchLstShareTokens`).
 */
export type LstDelegationKind = 'validator' | 'validatorGroup' | 'node' | 'pool' | 'vault';
/** Descriptor of an LST's validator-selection requirement. */
export interface LstDelegation {
    /** The integrator MUST supply a choice — no safe auto/default. (Core,
     *  Solv.) When `false`, omitting the choice still produces a working tx
     *  via `default` or server-side auto-resolution (Celo, Lair, TruFin). */
    required: boolean;
    /** What kind of target is being chosen. */
    kind: LstDelegationKind;
    /** The deposit option query param to send the chosen `id` back as
     *  (e.g. `validator`, `validatorGroup`, `node`, `poolId`, `vault`). */
    optionKey: string;
    /** A working default `id` when `required` is false; `'auto'` when the
     *  server resolves one (Celo); `null` when the protocol picks internally
     *  or a value is mandatory. */
    default?: string | null;
    /** `endpoint` ⇒ the live set is on-chain and returned in `validators`;
     *  `offchain` ⇒ the value comes from the protocol's docs/API (Solv
     *  poolId), so `validators` is empty. */
    source: 'endpoint' | 'offchain';
}
/** A normalised, selectable delegation target. `id` is the opaque value to
 *  pass back as the deposit option named by {@link LstDelegation.optionKey}. */
export interface LstValidator {
    /** Value to pass back to the deposit endpoint (validator / group / node
     *  address, or pool id). */
    id: string;
    /** Operational status. Only `active` targets are `selectable`. */
    status: 'active' | 'inactive' | 'jailed' | 'full';
    /** Passes the protocol's eligibility (healthy + not blocked + has room). */
    selectable: boolean;
    /** Our default pick (best capacity / health) — lets a UI preselect. */
    recommended: boolean;
    /** Human label, when the target has one (e.g. the Solv pool's pay currency
     *  `"WBTC"`). Absent for bare validator addresses. */
    name?: string;
    /** For `kind:'pool'` (Solv): the pay-currency address this pool subscribes
     *  with — the deposit's `payAsset` must match it. */
    currency?: string;
    /** Remaining stake the target can absorb, raw underlying as string.
     *  Populated where the protocol exposes it (Celo `getReceivableVotesForGroup`). */
    receivableVotes?: string;
}
/** The delegation descriptor for an LST, or `undefined` when it is pooled
 *  (no validator selection — the vast majority). */
export declare const getLstDelegation: (chainId: string, shareToken: string) => LstDelegation | undefined;
/**
 * Fetch the live, selectable validator set for an LST, normalised across
 * protocols. Returns `[]` for pooled LSTs, off-chain selections (Solv), or
 * when the on-chain read fails (best-effort, never throws).
 */
export declare const getLstValidators: (chainId: string, shareToken: string) => Promise<LstValidator[]>;
//# sourceMappingURL=validators.d.ts.map