export interface Call {
    address: string;
    callData: string;
}
export declare function toCallKey(call: Call): string;
export declare function parseCallKey(callKey: string): Call;
export interface ListenerOptions {
    readonly blocksPerFetch?: number;
}
export interface MulticallState {
    callListeners?: {
        [chainId: number]: {
            [callKey: string]: {
                [blocksPerFetch: number]: number;
            };
        };
    };
    callResults: {
        [chainId: number]: {
            [callKey: string]: {
                data?: string | null;
                blockNumber?: number;
                fetchingBlockNumber?: number;
            };
        };
    };
}
export declare const multicallAtom: import("jotai").PrimitiveAtom<MulticallState> & {
    init: MulticallState;
};
export declare function useMulticallAtom(): {
    multicallState: MulticallState;
    addMulticallListeners: ({ calls, chainId, options: { blocksPerFetch }, }: {
        calls: any[];
        chainId: number;
        options?: ListenerOptions | undefined;
    }) => void;
    removeMulticallListeners: ({ calls, chainId, options: { blocksPerFetch }, }: {
        calls: any[];
        chainId: number;
        options?: ListenerOptions | undefined;
    }) => void;
    fetchingMulticallResults: ({ chainId, fetchingBlockNumber, calls }: {
        chainId: number;
        fetchingBlockNumber: number;
        calls: any[];
    }) => void;
    errorFetchingMulticallResults: ({ chainId, fetchingBlockNumber, calls }: {
        chainId: number;
        fetchingBlockNumber: number;
        calls: any[];
    }) => void;
    updateMulticallResults: ({ chainId, results, blockNumber, }: {
        chainId: number;
        results: {
            [callKey: string]: string | null;
        };
        blockNumber: number;
    }) => void;
};
