export interface PreparedCall {
    address: string;
    functionName: string;
    params: any[];
    abi: any[];
}
export interface RawRpcCall {
    jsonrpc: '2.0';
    id: number;
    method: 'eth_call';
    params: [
        {
            to: string;
            data: string;
        },
        string
    ];
}
export interface RawRpcBatch {
    batchIndex: number;
    calls: RawRpcCall[];
    callMetadata: PreparedCall[];
}
export declare const multicall3Abi: readonly [{
    readonly type: "function";
    readonly name: "aggregate3";
    readonly stateMutability: "payable";
    readonly inputs: readonly [{
        readonly name: "calls";
        readonly type: "tuple[]";
        readonly components: readonly [{
            readonly name: "target";
            readonly type: "address";
        }, {
            readonly name: "allowFailure";
            readonly type: "bool";
        }, {
            readonly name: "callData";
            readonly type: "bytes";
        }];
    }];
    readonly outputs: readonly [{
        readonly name: "returnData";
        readonly type: "tuple[]";
        readonly components: readonly [{
            readonly name: "success";
            readonly type: "bool";
        }, {
            readonly name: "returnData";
            readonly type: "bytes";
        }];
    }];
}];
export interface MulticallRpcBatch {
    batchIndex: number;
    call: RawRpcCall;
    callMetadata: PreparedCall[];
}
export declare function createRawRpcCalls(preparedCalls: PreparedCall[], batchSize?: number, blockTag?: string): RawRpcBatch[];
/**
 * Creates a single multicall3 aggregate3 RPC call that batches all prepared calls
 * This reduces multiple RPC calls to a single call, avoiding rate limiting
 */
export declare function createMulticallRpcCall(preparedCalls: PreparedCall[], multicallAddress: string, batchSize?: number, blockTag?: string, allowFailure?: boolean): MulticallRpcBatch[];
//# sourceMappingURL=rpcCall.d.ts.map