import { providers } from 'ethers';
import { Address } from '@hyperlane-xyz/utils';
import { MultiProvider } from '../providers/MultiProvider.js';
import { ChainName } from '../types.js';
export declare enum ANVIL_RPC_METHODS {
    RESET = "anvil_reset",
    IMPERSONATE_ACCOUNT = "anvil_impersonateAccount",
    STOP_IMPERSONATING_ACCOUNT = "anvil_stopImpersonatingAccount",
    NODE_INFO = "anvil_nodeInfo",
    SET_BALANCE = "anvil_setBalance",
    SET_STORAGE_AT = "anvil_setStorageAt",
    MINE = "anvil_mine",
    SNAPSHOT = "evm_snapshot",
    REVERT = "evm_revert",
    INCREASE_TIME = "evm_increaseTime"
}
/**
 * Resets the local node to it's original state (anvil [31337] at block zero).
 */
export declare const resetFork: (anvilIPAddr?: string, anvilPort?: number) => Promise<void>;
/**
 * Forks a chain onto the local node at the latest block of the forked network.
 * @param multiProvider the multiProvider with which to fork the network
 * @param chain the network to fork
 */
export declare const setFork: (multiProvider: MultiProvider, chain: ChainName | number, anvilIPAddr?: string, anvilPort?: number) => Promise<void>;
/**
 * Impersonates an EOA for a provided address.
 * @param address the address to impersonate
 * @returns the impersonated signer
 */
export declare const impersonateAccount: (address: Address, anvilEndPoint?: string) => Promise<providers.JsonRpcSigner>;
/**
 * Stops account impersonation.
 * @param address the address to stop impersonating
 */
export declare const stopImpersonatingAccount: (address: Address, anvilEndPoint?: string) => Promise<void>;
/**
 * Retrieves a local provider. Defaults to DEFAULT_ANVIL_ENDPOINT.
 * @param urlOverride custom URL to overried the default endpoint
 * @returns a local JSON-RPC provider
 */
export declare const getLocalProvider: ({ anvilIPAddr, anvilPort, urlOverride, }?: {
    anvilIPAddr?: string;
    anvilPort?: number;
    urlOverride?: string;
}) => providers.JsonRpcProvider;
export declare function setBalance(provider: providers.JsonRpcProvider, address: Address, balanceWei: string): Promise<void>;
export declare function setStorageAt(provider: providers.JsonRpcProvider, contractAddress: Address, slot: string, value: string): Promise<void>;
export declare function mine(provider: providers.JsonRpcProvider, blocks?: number): Promise<void>;
export declare function increaseTime(provider: providers.JsonRpcProvider, seconds: number): Promise<void>;
export declare function snapshot(provider: providers.JsonRpcProvider): Promise<string>;
export declare function revertToSnapshot(provider: providers.JsonRpcProvider, snapshotId: string): Promise<boolean>;
export declare function impersonateAccounts(provider: providers.JsonRpcProvider, accounts: string[]): Promise<void>;
//# sourceMappingURL=fork.d.ts.map