import { EthereumTransport } from './transport';
import { JsonRpcRequest, JsonRpcResponse } from './jsonrpc';
interface Record {
    req: Omit<Omit<JsonRpcRequest, 'id'>, 'jsonrpc'>;
    res: Omit<Omit<JsonRpcResponse, 'id'>, 'jsonrpc'> | null;
}
export declare class RecorderEthTransport implements EthereumTransport {
    private delegate;
    private records;
    constructor(delegate: EthereumTransport);
    get source(): string;
    private record;
    send(request: JsonRpcRequest): Promise<JsonRpcResponse>;
    sendBatch(requests: JsonRpcRequest[]): Promise<JsonRpcResponse[]>;
    save(name: string, dir: string): Promise<void>;
}
export declare class ReplayEthTransport implements EthereumTransport {
    private records;
    source: string;
    constructor(records: Record[], source: string);
    send(request: JsonRpcRequest): Promise<JsonRpcResponse>;
    sendBatch(requests: JsonRpcRequest[]): Promise<JsonRpcResponse[]>;
}
export declare function withRecorder(delegate: EthereumTransport, options: {
    replay?: boolean;
    name: string;
    storageDir: string;
}, task: (transport: EthereumTransport) => Promise<void>): Promise<void>;
export {};
