import { ContractInfo } from './abi/contract';
import { DecodedFunctionCall } from './abi/decode';
import { TransactionLog } from './abi/repo';
import { Config, DeepPartial } from './config';
import { EthereumClient } from './eth/client';
import { RawBlock, RawBlockResponse, RawBlockSlim, RawLogResponse, RawParityLogResponse, RawParityTransactionReceipt, RawTransaction, RawTransactionReceipt, RawTransactionResponse } from './eth/responses';
import { FormattedBlock, FormattedLogEvent, FormattedPendingTransaction, FormattedTransaction } from './msgs';
import { Classification } from './utils/classification';
export interface RawFullBlock {
    block: RawBlockSlim;
    transactions: RawFullTransaction[];
}
export interface RawFullTransaction {
    transaction: RawTransaction;
    receipt: RawTransactionReceipt;
}
export interface FullBlockResponse {
    block: FormattedBlock;
    transactions: FormattedTransactionResponse[];
}
export interface FormattedTransactionResponse {
    transaction: FormattedTransaction;
    logEvents: FormattedLogEvent[];
}
export declare class EvmDecoder {
    private config;
    private abortHandle;
    private abiRepo;
    private contractInfoCache;
    private resources;
    private waitAfterFailure;
    classification: Classification;
    ethClient: EthereumClient;
    private contractResources;
    constructor(config: DeepPartial<Config>);
    initialize(): Promise<void>;
    private _decodeFunctionCall;
    decodeFunctionCall({ input, address }: {
        input: string;
        address?: string;
    }): Promise<DecodedFunctionCall | undefined>;
    decodeFunctionCallV2({ input, address }: {
        input: string;
        address?: string;
    }): Promise<{
        decoded: DecodedFunctionCall | undefined;
        contractInfo: ContractInfo | undefined;
    }>;
    contractInfo({ address }: {
        address: string;
    }): Promise<ContractInfo | undefined>;
    getBlock(blockNumber: number, decode?: boolean): Promise<RawBlock | FullBlockResponse>;
    getFullBlock(blockNumber: number, decode?: boolean): Promise<RawFullBlock | FullBlockResponse>;
    private processRawFullBlock;
    getBlocks(blockNumbers: number[], decode?: boolean): Promise<FullBlockResponse[] | RawBlock[]>;
    getFullBlocks(blockNumbers: number[], decode?: boolean): Promise<FullBlockResponse[] | RawFullBlock[]>;
    getPendingTransaction(hash: string, decode?: boolean): Promise<RawTransactionResponse | FormattedPendingTransaction | undefined>;
    getTransaction(hash: string, decode?: boolean): Promise<RawTransaction | FormattedTransactionResponse>;
    getTransactionReceipt(hash: string, decode?: boolean): Promise<RawTransactionReceipt | FormattedLogEvent[]>;
    private processRawBlock;
    processRawFullTransaction(txn: RawFullTransaction): Promise<FormattedTransactionResponse>;
    private processRawBlockWithTransactions;
    processBlock(rawBlock: RawBlockResponse | RawFullBlock): Promise<FullBlockResponse>;
    processTransaction(rawTx: RawTransactionResponse | RawTransaction | string, fetchReceipts: boolean, rawReceipt?: RawParityTransactionReceipt | RawTransactionReceipt | undefined): Promise<FormattedTransactionResponse>;
    private getLogs;
    processPendingTransaction(rawTx: RawTransactionResponse | string): Promise<FormattedPendingTransaction>;
    decodeLogEvent(evt: TransactionLog): Promise<{
        eventContractInfo: ContractInfo | undefined;
        decodedEventData: DecodedFunctionCall | undefined;
    }>;
    processTransactionLog(evt: RawLogResponse | RawParityLogResponse | FormattedLogEvent): Promise<FormattedLogEvent>;
    getLatestBlockNumber(): Promise<number>;
    private addResource;
}
