import { PublicKey, Transaction, TransactionConfirmationStatus, TransactionInstruction } from '@solana/web3.js';
import { Address, ProtocolType } from '@hyperlane-xyz/utils';
import type { MultiProviderAdapter } from '../../providers/MultiProviderAdapter.js';
import { SendTransactionOptions } from '../../providers/MultiProvider.js';
import { SolanaWeb3Transaction } from '../../providers/ProviderType.js';
import { ChainName } from '../../types.js';
import { IMultiProtocolSigner } from '../types.js';
/**
 * Interface for SVM transaction signers
 */
export interface SvmTransactionSigner {
    readonly publicKey: PublicKey;
    signTransaction(transaction: Transaction): Promise<Transaction>;
}
export interface SvmSignerConfig {
    /** Max polling attempts before timeout (default: 30) */
    maxConfirmationAttempts?: number;
    /** Delay between polling attempts in ms (default: 1000) */
    pollingDelayMs?: number;
    /** Commitment level for confirmation (default: 'confirmed') */
    commitment?: TransactionConfirmationStatus;
    /** Whether to automatically resubmit on blockhash expiry (default: true) */
    enableBlockhashResubmit?: boolean;
    /** Whether to retry on RPC errors during polling (default: true) */
    retryOnRpcErrors?: boolean;
}
export interface TransactionBuildOptions {
    /** Optional priority fee override (microLamports) */
    priorityFee?: number;
    /** Whether to include priority fee instruction (default: true) */
    includePriorityFee?: boolean;
}
/**
 * Keypair-based SVM transaction signer
 */
export declare class KeypairSvmTransactionSigner implements SvmTransactionSigner {
    readonly publicKey: PublicKey;
    private readonly keypair;
    constructor(privateKey: Uint8Array);
    signTransaction(transaction: Transaction): Promise<Transaction>;
}
export declare class SvmMultiProtocolSignerAdapter implements IMultiProtocolSigner<ProtocolType.Sealevel> {
    private readonly chainName;
    private readonly signer;
    private readonly svmProvider;
    private readonly config;
    private readonly logger;
    constructor(chainName: ChainName, signer: SvmTransactionSigner, multiProtocolProvider: MultiProviderAdapter, config?: SvmSignerConfig);
    publicKey(): PublicKey;
    address(): Promise<Address>;
    /**
     * Build and send a transaction from raw instructions
     */
    buildAndSendTransaction(instructions: TransactionInstruction[], options?: TransactionBuildOptions): Promise<string>;
    /**
     * Send and confirm a pre-built transaction (IMultiProtocolSigner interface)
     */
    sendAndConfirmTransaction(tx: SolanaWeb3Transaction, _options?: SendTransactionOptions): Promise<string>;
    /**
     * Build transaction from instructions with optional priority fees
     */
    private buildTransaction;
    /**
     * Sign and confirm transaction with blockhash resubmit on expiry
     */
    private signAndConfirm;
    /**
     * Poll for transaction confirmation with blockhash expiry handling
     */
    private pollForConfirmation;
    /**
     * Check if blockhash expired and resubmit transaction if needed
     * Returns new signature and lastValidBlockHeight if resubmitted, null otherwise
     */
    private checkAndResubmitIfExpired;
    /**
     * Check if transaction is confirmed
     * Returns true if confirmed, false if pending
     * Throws if transaction failed
     */
    private checkTransactionConfirmation;
    /**
     * Send signed transaction to network
     */
    private sendRawTransaction;
}
//# sourceMappingURL=solana-web3js.d.ts.map