import { PoolStateHelper as PoolStateHelperTypeChain } from "@tracer-protocol/pool-state-helper/types";
import BigNumber from "bignumber.js";
import { providers as MCProvider } from '@0xsequence/multicall';
import { ethers } from "ethers";
import { IContract, TotalPoolCommitmentsBN } from "../types";
/**
 * Pool State Helper class constructor inputs
 */
export interface IPoolStateHelper extends IContract, _PoolStateHelper {
}
/**
 * PoolStateHelper constructor props
 */
export interface _PoolStateHelper {
    address: string;
    poolAddress: string;
    committerAddress: string;
}
declare type ExpectedPoolState = {
    longSupply: BigNumber;
    longBalance: BigNumber;
    pendingLongTokenBurn: BigNumber;
    shortSupply: BigNumber;
    shortBalance: BigNumber;
    pendingShortTokenBurn: BigNumber;
    oraclePrice: BigNumber;
};
/**
 * PoolStateHelper class for interacting with on chain PoolStateHelper contracts
 * The constructor is private so must be instantiated with {@linkcode PoolStateHelper.Create}
 */
export default class PoolStateHelper {
    _contract?: PoolStateHelperTypeChain;
    address: string;
    poolAddress: string;
    committerAddress: string;
    fullCommitPeriod: number;
    provider: ethers.providers.Provider | ethers.Signer | undefined;
    multicallProvider: MCProvider.MulticallProvider | ethers.Signer | undefined;
    /**
     * @private
     */
    private constructor();
    /**
     * Replacement constructor pattern to support async initialisations
     * @param tokenINfo {@link IPoolStateHelper | IPoolStateHelper interface props}
     * @returns a Promise containing an initialised PoolStateHelper class ready to be used
     */
    static Create: (config: IPoolStateHelper) => Promise<PoolStateHelper>;
    /**
     * Creates an empty PoolStateHelper that can be used as a default
     * @returns default constructed poolStateHelper
     */
    static CreateDefault: () => PoolStateHelper;
    /**
     * Private initialisation function called in {@link PoolStateHelper.Create}
     * @private
     * @param config {@link IPoolStateHelper | IPoolStateHelper interface props}
     */
    private init;
    /**
     * Replaces the provider and connects the contract instance
     * @param provider The new provider to connect to
     */
    connect: (provider: ethers.providers.Provider | ethers.Signer) => void;
    getExpectedPoolState: (args: {
        periods: number;
    }) => Promise<ExpectedPoolState>;
    getCommitQueue: (args: {
        periods: number;
    }) => Promise<TotalPoolCommitmentsBN[]>;
}
export {};
