import { AcrossConfigStore } from "../../src/utils/abi/typechain";
import chai, { expect } from "chai";
import { ethers, Contract, providers, Signer } from "ethers";
import sinon from "sinon";
import winston from "winston";
import type { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers";
import { AcrossConfigStoreClient as ConfigStoreClient } from "../../src/clients";
import { Deposit, DepositWithBlock, FillWithBlock, RelayData, SlowFillRequestWithBlock } from "../../src/interfaces";
import { Address, BigNumber, BigNumberish, toBN, toBNWei, toWei, utf8ToHex } from "../../src/utils";
import { randomAddress, zeroAddress } from "../constants";
import { SpokePoolDeploymentResult, SpyLoggerResult } from "../types";
declare const chaiAssert: Chai.AssertStatic;
export { ethers };
export type { SignerWithAddress };
export { getDepositParams, getUpdatedV3DepositSignature, modifyRelayHelper, getRelayHash, getV3RelayHash, getLegacyV3RelayHash, getFillRelayParams, getFillRelayUpdatedFeeParams, getExecuteSlowRelayParams, deployMockSpokePoolCaller, } from "../fixtures/SpokePool.Fixture";
export type { ContractRelayData, V3RelayData, V3RelayExecutionParams, SlowFill, V3SlowFill, UpdatedRelayerFeeData, } from "../fixtures/SpokePool.Fixture";
export { FillType, FillStatus } from "../fixtures/SpokePool.Fixture";
export { randomAddress, zeroAddress };
export { buildPoolRebalanceLeafTree, buildPoolRebalanceLeaves, buildRelayerRefundTree, buildRelayerRefundLeaves, buildSlowRelayTree, buildV3SlowRelayTree, getParamType, constructSingleRelayerRefundTree, constructSingleChainTree, } from "./MerkleLib.utils";
import { getContractFactory } from "./getContractFactory";
export { getContractFactory };
import { hubPoolFixture, deployHubPool } from "../fixtures/HubPool.Fixture";
import { spokePoolFixture, deploySpokePool } from "../fixtures/SpokePool.Fixture";
export { hubPoolFixture, deployHubPool, spokePoolFixture, deploySpokePool };
export { merkleLibFixture } from "../fixtures/MerkleLib.Fixture";
export { BigNumber, Contract, chai, chaiAssert, expect, sinon, toBN, toBNWei, toWei, utf8ToHex, winston };
declare const defaultAbiCoder: ethers.utils.AbiCoder, keccak256: typeof ethers.utils.keccak256;
export { defaultAbiCoder, keccak256, Signer };
export declare const toWeiWithDecimals: (num: string | number | BigNumber, decimals: number) => BigNumber;
export declare const toBNWeiWithDecimals: (num: string | number | BigNumber, decimals: number) => BigNumber;
export declare const fromWei: (num: string | number | BigNumber) => string;
export declare const hexToUtf8: (input: string) => string;
export declare const hexZeroPad: (input: string, length: number) => string;
export declare const addressToBytes: (input: string) => string;
export declare const bytes32ToAddress: (input: string) => string;
export declare const isBytes32: (input: string) => boolean;
export declare function randomBigNumber(bytes?: number, signed?: boolean): BigNumber;
export declare function randomBytes32(): string;
export declare function seedWallet(walletToFund: Signer, tokens: Contract[], weth: Contract | undefined, amountToSeedWith: number | BigNumber): Promise<void>;
export declare function seedContract(contract: Contract, walletToFund: Signer, tokens: Contract[], weth: Contract | undefined, amountToSeedWith: number | BigNumber): Promise<void>;
export declare function trimSolanaAddress(bytes32Address: string): string;
export declare function hashNonEmptyMessage(message: string): string;
export declare const createRandomBytes32: () => string;
export declare function deepEqualsWithBigNumber(x: unknown, y: unknown, omitKeys?: string[]): boolean;
export declare function assertPromiseError<T>(promise: Promise<T>, errMessage?: string): Promise<void>;
export declare function assertPromisePasses<T>(promise: Promise<T>): Promise<void>;
export declare function setupTokensForWallet(contractToApprove: Contract, wallet: SignerWithAddress, tokens: Contract[], weth?: Contract, seedMultiplier?: number): Promise<void>;
export declare function createSpyLogger(): SpyLoggerResult;
export declare function deploySpokePoolWithToken(fromChainId?: number): Promise<SpokePoolDeploymentResult>;
export declare function deployConfigStore(signer: SignerWithAddress, tokensToAdd: Contract[], maxL1TokensPerPoolRebalanceLeaf?: number, maxRefundPerRelayerRefundLeaf?: number, rateModel?: unknown, additionalChainIdIndices?: number[]): Promise<{
    configStore: AcrossConfigStore;
    deploymentBlock: number;
}>;
export declare function deployAndConfigureHubPool(signer: SignerWithAddress, spokePools: {
    l2ChainId: number;
    spokePool: Contract;
}[], finderAddress?: string, timerAddress?: string): Promise<{
    hubPool: Contract;
    mockAdapter: Contract;
    l1Token_1: Contract;
    l1Token_2: Contract;
    hubPoolDeploymentBlock: number;
}>;
export declare function enableRoutesOnHubPool(hubPool: Contract, rebalanceRouteTokens: {
    destinationChainId: number;
    l1Token: Contract;
    destinationToken: Contract;
}[]): Promise<void>;
export declare function appendMessageToResult<T>(body: T): T & {
    message: string;
};
export declare function getLastBlockTime(provider: providers.Provider): Promise<number>;
export declare function addLiquidity(signer: SignerWithAddress, hubPool: Contract, l1Token: Contract, amount: BigNumber): Promise<void>;
export declare function deposit(spokePool: Contract, destinationChainId: number, signer: SignerWithAddress, inputToken: Address, inputAmount: BigNumber, outputToken: Address, outputAmount: BigNumber, opts?: {
    destinationChainId?: number;
    recipient?: Address;
    quoteTimestamp?: number;
    message?: string;
    fillDeadline?: number;
    exclusivityDeadline?: number;
    exclusiveRelayer?: Address;
}): Promise<DepositWithBlock>;
export declare function depositV3(spokePool: Contract, destinationChainId: number, signer: SignerWithAddress, inputToken: Address, inputAmount: BigNumber, outputToken: Address, outputAmount: BigNumber, opts?: {
    destinationChainId?: number;
    recipient?: Address;
    quoteTimestamp?: number;
    message?: string;
    fillDeadline?: number;
    exclusivityDeadline?: number;
    exclusiveRelayer?: Address;
}): Promise<DepositWithBlock>;
export declare function requestV3SlowFill(spokePool: Contract, relayData: RelayData, signer: SignerWithAddress): Promise<SlowFillRequestWithBlock>;
export declare function fillRelay(spokePool: Contract, _deposit: Omit<Deposit, "destinationChainId">, signer: SignerWithAddress, repayment?: {
    repaymentChainId: number;
    repaymentAddress: Address;
}): Promise<FillWithBlock>;
export declare function getLastBlockNumber(): Promise<number>;
export declare function convertMockedConfigClient(_client: unknown): _client is ConfigStoreClient;
export declare function bigNumberFormatter(logEntry: winston.Logform.TransformableInfo): winston.Logform.TransformableInfo;
export declare function buildDepositForRelayerFeeTest(amount: BigNumberish, tokenSymbol: string, originChainId: number, toChainId: number): Deposit;
