import type { BigNumber, Contract, ContractReceipt, ContractTransaction, Signer } from 'ethers';
import { UseMutationResult } from 'react-query';
import { TransactionError } from '../../base/TransactionError';
import { TransactionStatus } from '../../base/TransactionStatus';
import type { ContractMethodArgs, ContractMethodName } from '../../types';
export interface UseSmartContractTransactionOptions<TContract extends Contract, TMethodName extends ContractMethodName<TContract>> {
    blockConfirmations?: number;
    /**
     * Sets the gas limit on the transaction, overriding anything that was
     * provided when the `mutate` function is called. Useful if you need to buffer
     * the default gas estimate by some amount.
     */
    setGasLimit?: (gasEstimate: BigNumber) => BigNumber;
    onTransactionSubmitted?: (transaction: ContractTransaction, callArgs: ContractMethodArgs<TContract, TMethodName>) => void | Promise<void>;
    onTransactionMined?: (transactionReceipt: ContractReceipt, callArgs: ContractMethodArgs<TContract, TMethodName>, transactionStatus: TransactionStatus) => void | Promise<void>;
    onError?: (error: TransactionError) => void | Promise<void>;
}
declare type UseSmartContractTransactionResult<TContract extends Contract, TMethodName extends ContractMethodName<TContract>> = UseMutationResult<ContractReceipt | undefined, unknown, ContractMethodArgs<TContract, TMethodName>>;
export declare function useSmartContractTransaction<TContract extends Contract, TMethodName extends ContractMethodName<TContract>>(contract: TContract | undefined, methodName: TMethodName, signer: Signer | undefined, options?: UseSmartContractTransactionOptions<TContract, TMethodName>): UseSmartContractTransactionResult<TContract, TMethodName>;
export {};
//# sourceMappingURL=useSmartContractTransaction.d.ts.map