import { iMulticall3Abi } from '../contracts/abis/viemAbis'; import { Abi, AbiFunction, AbiStateMutability, Address, BlockNumber, BlockTag, ContractFunctionArgs, ContractFunctionName, ContractFunctionReturnType, GetContractReturnType, PublicClient } from 'viem'; import { Contract, ExtractAbiFunction } from '../common/types'; export declare const DEFAULT_CALL_LIMIT = 256; export type BlockTagMulticall = BlockTag | BlockNumber; export type MulticallOptions = { blockTag?: BlockTag; blockNumber?: BlockNumber; disableMulticall?: boolean; account?: Address; }; export type OverrideMulticallFunction = ContractFunctionName, abiFunction extends AbiFunction = ExtractAbiFunction, mutability extends AbiStateMutability = abiFunction['stateMutability'], args = ContractFunctionArgs> = args extends readonly [] ? (multicallOptions?: MulticallOptions) => Promise> : args extends readonly any[] ? (...args: [...args, MulticallOptions | undefined]) => Promise> : (...args: [args, MulticallOptions | undefined]) => Promise>; export type MulticallSimulate = Contract> = T extends { simulate: object; } ? { [K in keyof T['simulate']]: K extends ContractFunctionName ? OverrideMulticallFunction : T['simulate'][K]; } : {}; export type MulticallRead = Contract> = T extends { read: object; } ? { [K in keyof T['read']]: K extends ContractFunctionName ? OverrideMulticallFunction : T['read'][K]; } : {}; export type MulticallFuncs = { read: MulticallRead; simulate: MulticallSimulate; }; export declare class MulticallRPCError extends Error { constructor(error: any, opts?: { nCall?: number; block?: string; }); static getViemErrorMessage(error: any): string; } export declare class ContractCall { abi: Abi; functionName: string; address: Address; params: unknown[]; constructor({ abi, address, functionName, params, }: { abi: Abi; address: Address; functionName: string; params: unknown[]; }); } type Multicall3 = GetContractReturnType; export declare class Multicall { static isMulticallOptions(options?: any): options is MulticallOptions | undefined; multicallContract: Multicall3; readonly batchMap: Map; readonly callLimit: number; private multicallCache; private disableMulticall; constructor({ address, client, callLimit, }: { address: Address; client: PublicClient; callLimit?: number; }); private monitor; doAggregateCalls(calls: readonly ContractCall[], blockTagMulticall: BlockTagMulticall): Promise; wrapFunctions = Contract>(contract: T, functionType: 'read' | 'simulate'): Record | undefined; wrap = Contract>(contract: T): MulticallFuncs; } declare class MulticallBatch { private readonly multicallInstance; readonly blockTagMulticall: BlockTagMulticall; readonly pendingContractCalls: ContractCall[]; readonly promise: Promise; constructor(multicallInstance: Multicall, blockTagMulticall?: BlockTagMulticall); } export {};