import { Contract, providers, Signer, utils as ethersUtils } from "ethers";
import { Multicall3 } from "./abi/typechain";
type Provider = providers.Provider;
type BlockTag = providers.BlockTag;
type Result = ethersUtils.Result;
export type Call3 = {
    contract: Contract;
    method: string;
    args?: any[];
};
export declare function getMulticallAddress(chainId: number): string | undefined;
export declare function getMulticall3(chainId: number, signerOrProvider: Signer | Provider): Multicall3 | undefined;
export declare function aggregate(multicall3: Contract, calls: Call3[], blockTag?: BlockTag): Promise<Result[]>;
export declare function blockAndAggregate(multicall3: Contract, calls: Call3[], blockTag?: BlockTag): Promise<{
    blockNumber: number;
    returnData: Result[];
}>;
export declare function deploy(signer: Signer): Promise<boolean>;
export {};
