import { Address, NumberLike } from './basicTypes';
export declare enum OperationType {
    Call = 0,
    DelegateCall = 1
}
interface GasLimitOptions {
    gas?: NumberLike;
    gasLimit?: NumberLike;
    safeTxGas?: number;
}
interface BaseTxOptions extends GasLimitOptions {
    gasPrice?: NumberLike;
}
export interface ExecOptions extends BaseTxOptions {
    nonce?: NumberLike;
}
export interface CallOptions extends BaseTxOptions {
    from?: Address;
}
export interface SendOptions extends ExecOptions {
    from: Address;
    value?: NumberLike;
}
export interface EthTx {
    to: string;
    value?: NumberLike;
    data?: string;
}
export interface EthCallTx extends EthTx, CallOptions {
}
export interface EthSendTx extends EthTx, SendOptions {
}
export interface Transaction extends EthTx {
    operation?: OperationType;
}
export interface SimpleTransactionResult {
    hash?: string;
    safeTxHash?: string;
}
export interface Web3TransactionResult extends SimpleTransactionResult {
    sendOptions?: SendOptions;
    promiEvent: Promise<any>;
}
export interface EthersTransactionResult extends SimpleTransactionResult {
    transactionResponse: Record<string, any>;
}
export interface TransactionResult extends SimpleTransactionResult {
    sendOptions?: SendOptions;
    promiEvent?: any;
    transactionResponse?: Record<string, any>;
}
export declare class TransactionError extends Error {
    revertData?: string;
    revertMessage?: string;
    constructor(message: string, revertData?: string, revertMessage?: string);
}
export interface StandardTransaction {
    operation: OperationType;
    to: Address;
    value: string;
    data: string;
}
export declare function standardizeTransaction(tx: Transaction): StandardTransaction;
export declare type NormalizeGas<T> = Pick<T, Exclude<keyof T, 'gasLimit'>>;
export declare function normalizeGasLimit<T extends GasLimitOptions>(options: T): NormalizeGas<T>;
export interface RpcCallTx {
    from?: Address;
    to: Address;
    gas?: string;
    gasPrice?: string;
    value?: string;
    data?: string;
}
export declare function formatCallTx(tx: EthCallTx): RpcCallTx;
export {};
