import type { TransactionResponse } from 'fireblocks-sdk';
import { FireblocksSDK } from 'fireblocks-sdk';
import type { Signature, SignerData, AddressDerivationFn } from '@chorus-one/signer';
import type { Logger } from '@chorus-one/utils';
import type { FireblocksSignerConfig } from './types';
import type { Hex } from 'viem';
/**
 * The FireblocksSigner in the Chorus One SDK is a specialized implementation of the Signer interface that integrates
 * with the Fireblocks platform.
 *
 * Fireblocks is known for its advanced security features, including multi-party computation (MPC) and secure wallet
 * infrastructure, making it an ideal choice for enterprises requiring robust security and compliance.
 */
interface FireblocksTxStatus {
    status: 'success' | 'failure' | 'pending' | 'unknown';
    reason?: string;
    receipt: TransactionResponse | null;
}
export declare class FireblocksSigner {
    private readonly config;
    private fireblocksClient?;
    private vault?;
    private addressDerivationFn;
    private accounts;
    private logger;
    /**
     * Constructs a new FireblocksSigner.
     *
     * @param params - The parameters required to initialize the FireblocksSigner
     * @param params.apiSecretKey - Fireblocks API Secret key
     * @param params.apiKey - Fireblocks API Key
     * @param params.vaultName - The name of the Fireblocks vault where the assets are stored
     * @param params.assetId - The identifier for the asset you intend to manage
     * @param params.addressDerivationFn - A function that derives the address from the public key
     * @param params.timeout - (Optional) The maximum time (in ms) to wait for the Fireblocks API sign request to complete
     * @param params.pollInterval - (Optional) The interval (in ms) at which the signer polls the Fireblocks API to check if the sign request has completed
     * @param params.apiUrl - (Optional) The URL of the Fireblocks API, defaults to `https://api.fireblocks.io`
     * @param params.logger - (Optional) A logger to use for logging messages, i.e `console`
     *
     * @returns A new instance of FireblocksSigner.
     */
    constructor(params: {
        apiSecretKey: string;
        apiKey: string;
        vaultName: string;
        assetId: string;
        addressDerivationFn: AddressDerivationFn;
        timeout?: number;
        pollInterval?: number;
        apiUrl?: string;
        logger?: Logger;
    });
    /**
     * Initializes the signer, performing any necessary setup or configuration.
     * @returns A promise that resolves once the initialization is complete.
     */
    init(): Promise<void>;
    /**
     * Signs the provided data using the private key associated with the signer's address.
     *
     * @param signerAddress - The address of the signer
     * @param signerData - The data to be signed, which can be a raw message or custom data
     * @param options - Additional options
     * @param options.note - An optional note to include with the transaction
     *
     * @returns A promise that resolves to an object containing the signature and public key.
     */
    sign(signerAddress: string, signerData: SignerData, options?: {
        note?: string;
    }): Promise<{
        sig: Signature;
        pk: Uint8Array;
    }>;
    /**
     * Signs an Ethereum contract call transaction using Fireblocks.
     *
     * @param params - Parameters for the contract call
     * @param params.to - The destination contract address
     * @param params.value - The amount to send in wei (optional)
     * @param params.data - The contract call data
     * @param params.gasLimit - Gas limit for the transaction (optional)
     * @param params.maxFeePerGas - Maximum fee per gas in wei (optional)
     * @param params.maxPriorityFeePerGas - Maximum priority fee per gas in wei (optional)
     * @param params.note - Optional note for the transaction
     *
     * @returns A promise that resolves to the transaction response from Fireblocks.
     */
    contractCall(params: {
        to: Hex;
        value?: bigint;
        data: Hex;
        gas: bigint;
        maxFeePerGas: bigint;
        maxPriorityFeePerGas: bigint;
        gasPrice: bigint;
        note?: string;
    }): Promise<FireblocksTxStatus>;
    /**
     * Retrieves the public key associated with the signer's address.
     *
     * @param address - The address of the signer
     *
     * @returns A promise that resolves to a Uint8Array representing the public key.
     */
    getPublicKey(address: string): Promise<Uint8Array>;
    private getPublicKeyInfoForVaultAccount;
}
export declare function newFireblocksSignerBackend(config: FireblocksSignerConfig): Promise<FireblocksSDK>;
export {};
