import { PublicKey } from '@solana/web3.js';
import { BaseSolanaProgram } from '../BaseSolanaProgram';
import { type GetOrCreateUserBankRequest, type DeriveUserBankRequest, type CreateTransferRequest, type CreateSecpRequest, ClaimableTokensConfig } from './types';
/**
 * Connected client to the ClaimableTokens Solana program.
 *
 * The ClaimableTokens program is responsible for creation of program-owned
 * associated token accounts that are permissioned to users by their Ethereum
 * hedgehog wallet private keys.
 */
export declare class ClaimableTokensClient extends BaseSolanaProgram {
    /** The program ID of the ClaimableTokensProgram instance. */
    private readonly programId;
    /** Map from token mint name to public key address. */
    private readonly mints;
    /** Map from token mint name to derived user bank authority. */
    private readonly authorities;
    constructor(config: ClaimableTokensConfig);
    /**
     * Creates a user bank or returns the existing user bank for a user.
     */
    getOrCreateUserBank(params: GetOrCreateUserBankRequest): Promise<{
        userBank: PublicKey;
        didExist: boolean;
    }>;
    /**
     * Creates a claimable tokens program transfer instruction using configured
     * program ID, mint addresses, derived nonce, and derived authorities.
     *
     * Must be paired with a matching Secp256k1 instruction.
     * @see {@link createTransferSecpInstruction}
     */
    createTransferInstruction(params: CreateTransferRequest): Promise<import("@solana/web3.js").TransactionInstruction>;
    /**
     * Creates a signed Secp256k1 instruction for a claimable tokens transfer
     * using configured program ID, derived nonce, and derived authorities.
     *
     * @see {@link createTransferInstruction}
     */
    createTransferSecpInstruction(params: CreateSecpRequest): Promise<import("@solana/web3.js").TransactionInstruction>;
    /**
     * Derives the user bank of a user from their Ethereum wallet and the token mint.
     *
     * Use {@link getOrCreateUserBank} instead if you want to ensure the userBank exists.
     */
    deriveUserBank(params: DeriveUserBankRequest): Promise<PublicKey>;
}
