import { Address } from '@solana/kit';
import type { ProgramDeps } from '../../../types.js';
import * as programClient from '@nosana/stake-program';
import { ConvertTypesForDb } from '../../../utils/index.js';
import type { ProgramConfig } from '../../../config/types.js';
import * as Instructions from './instructions/index.js';
export type Stake = ConvertTypesForDb<programClient.StakeAccountArgs> & {
    address: Address;
};
/**
 * Stake program interface
 * @group @nosana/kit
 */
export interface StakeProgram {
    /**
     * Create a stake instruction for creating/initializing a stake account
     */
    stake: Instructions.CreateStake;
    /**
     * Derive the stake account PDA address for a given owner (defaults to wallet address)
     */
    getAddress(owner?: Address): Promise<Address>;
    /**
     * Fetch a stake account by address
     */
    get(addr: Address): Promise<Stake>;
    /**
     * Fetch a stake account by owner address (defaults to wallet address)
     */
    getByOwner(owner?: Address): Promise<Stake>;
    /**
     * Fetch multiple stake accounts by address
     */
    multiple(addresses: Address[]): Promise<Stake[]>;
    /**
     * Fetch all stake accounts
     */
    all(): Promise<Stake[]>;
}
/**
 * Creates a new StakeProgram instance.
 *
 * @param deps - Program dependencies (config, logger, solana service, wallet getter)
 * @returns A StakeProgram instance with methods to interact with the stake program
 *
 * @example
 * ```ts
 * import { createStakeProgram } from '@nosana/kit';
 *
 * const stakeProgram = createStakeProgram({
 *   config,
 *   logger,
 *   solana,
 *   getWallet,
 * });
 *
 * const stake = await stakeProgram.get('stake-address');
 * ```
 */
export declare function createStakeProgram(deps: ProgramDeps, config: ProgramConfig): StakeProgram;
//# sourceMappingURL=StakeProgram.d.ts.map