import "@nomiclabs/hardhat-ethers";
import "@openzeppelin/hardhat-upgrades";
import hre from "hardhat";
import type { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers";
import { Contract } from "ethers";
import { EthersTestLibrary } from "../types";
import { winston, sinon } from "../utils";
import * as clients from "../../src/clients";
import { MockConfigStoreClient } from "../mocks";
export declare function setupHubPool(ethers: EthersTestLibrary, maxRefundPerRelayerRefundLeaf: number, maxL1TokensPerPoolRebalanceLeaf: number, destinationChainId?: number, originChainId?: number, lookbackForAllChains?: number): Promise<{
    hubPool: Contract;
    spokePool_1: Contract;
    erc20_1: Contract;
    spokePool_2: Contract;
    erc20_2: Contract;
    l1Token_1: Contract;
    l1Token_2: Contract;
    configStore: Contract;
    timer: Contract;
    spokePoolClient_1: clients.SpokePoolClient;
    spokePoolClient_2: clients.SpokePoolClient;
    spokePoolClient_3: clients.SpokePoolClient;
    spokePoolClient_4: clients.SpokePoolClient;
    spokePoolClients: {
        [chainId: number]: clients.SpokePoolClient;
    };
    mockedConfigStoreClient: MockConfigStoreClient;
    configStoreClient: clients.AcrossConfigStoreClient;
    hubPoolClient: clients.HubPoolClient;
    spyLogger: winston.Logger;
    spy: sinon.SinonSpy;
    owner: SignerWithAddress;
    depositor: SignerWithAddress;
    relayer: SignerWithAddress;
    dataworker: SignerWithAddress;
    updateAllClients: () => Promise<void>;
}>;
/**
 * Deploys a complete HubPool environment for testing.
 * This is a local implementation that uses our local getContractFactory
 * instead of the one from @across-protocol/contracts.
 */
export declare function deployHubPool(ethers: typeof hre.ethers, spokePoolName?: string): Promise<{
    timer: Contract;
    finder: Contract;
    collateralWhitelist: Contract;
    identifierWhitelist: Contract;
    store: Contract;
    optimisticOracle: Contract;
    mockOracle: Contract;
    hubPool: Contract;
    mockAdapter: Contract;
    mockSpoke: Contract;
    crossChainAdmin: SignerWithAddress;
    l2Weth: string;
    l2Dai: string;
    l2Usdc: string;
    l2Usdt: string;
    l2UsdtContract: Contract;
    weth: Contract;
    usdc: Contract;
    dai: Contract;
    usdt: Contract;
}>;
export declare const hubPoolFixture: () => Promise<{
    timer: Contract;
    finder: Contract;
    collateralWhitelist: Contract;
    identifierWhitelist: Contract;
    store: Contract;
    optimisticOracle: Contract;
    mockOracle: Contract;
    hubPool: Contract;
    mockAdapter: Contract;
    mockSpoke: Contract;
    crossChainAdmin: SignerWithAddress;
    l2Weth: string;
    l2Dai: string;
    l2Usdc: string;
    l2Usdt: string;
    l2UsdtContract: Contract;
    weth: Contract;
    usdc: Contract;
    dai: Contract;
    usdt: Contract;
}>;
/**
 * Enables tokens for liquidity provision on the hub pool.
 */
export declare function enableTokensForLP(owner: SignerWithAddress, hubPool: Contract, _weth: Contract, tokens: Contract[]): Promise<Contract[]>;
