import type { BaseContract, BigNumber, BigNumberish, BytesLike, CallOverrides, PopulatedTransaction, Signer, utils } from 'ethers';
import type { FunctionFragment, Result } from '@ethersproject/abi';
import type { Listener, Provider } from '@ethersproject/providers';
import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue } from './common';
export declare namespace IStats {
    type PoolStruct = {
        vault: PromiseOrValue<string>;
        balance: PromiseOrValue<BigNumberish>;
        deposits: PromiseOrValue<BigNumberish>;
        price: PromiseOrValue<BigNumberish>;
        allocPoint: PromiseOrValue<BigNumberish>;
    };
    type PoolStructOutput = [string, BigNumber, BigNumber, BigNumber, BigNumber] & {
        vault: string;
        balance: BigNumber;
        deposits: BigNumber;
        price: BigNumber;
        allocPoint: BigNumber;
    };
    type VaultStruct = {
        vault: PromiseOrValue<string>;
        token: PromiseOrValue<string>;
        apr: PromiseOrValue<BigNumberish>;
        balance: PromiseOrValue<BigNumberish>;
        totalDeposits: PromiseOrValue<BigNumberish>;
        accountDeposits: PromiseOrValue<BigNumberish>;
        totalRewards: PromiseOrValue<BigNumberish>;
        accountRewards: PromiseOrValue<BigNumberish>;
        depositTokenPrice: PromiseOrValue<BigNumberish>;
        rewardTokenPrice: PromiseOrValue<BigNumberish>;
        withdrawInterval: PromiseOrValue<BigNumberish>;
        withdrawFee: PromiseOrValue<BigNumberish>;
        accountWeights: PromiseOrValue<BigNumberish>;
        totalWeights: PromiseOrValue<BigNumberish>;
        lastDepositedTime: PromiseOrValue<BigNumberish>;
        lastDepositedAmount: PromiseOrValue<BigNumberish>;
        allocPoint: PromiseOrValue<BigNumberish>;
        rewards: PromiseOrValue<BigNumberish>;
    };
    type VaultStructOutput = [
        string,
        string,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber
    ] & {
        vault: string;
        token: string;
        apr: BigNumber;
        balance: BigNumber;
        totalDeposits: BigNumber;
        accountDeposits: BigNumber;
        totalRewards: BigNumber;
        accountRewards: BigNumber;
        depositTokenPrice: BigNumber;
        rewardTokenPrice: BigNumber;
        withdrawInterval: BigNumber;
        withdrawFee: BigNumber;
        accountWeights: BigNumber;
        totalWeights: BigNumber;
        lastDepositedTime: BigNumber;
        lastDepositedAmount: BigNumber;
        allocPoint: BigNumber;
        rewards: BigNumber;
    };
    type StakeStruct = {
        token: PromiseOrValue<string>;
        unlockTime: PromiseOrValue<BigNumberish>;
        accountLocked: PromiseOrValue<BigNumberish>;
        totalLocked: PromiseOrValue<BigNumberish>;
        totalSupply: PromiseOrValue<BigNumberish>;
        veBalance: PromiseOrValue<BigNumberish>;
        veTotalSupply: PromiseOrValue<BigNumberish>;
        tokenPrice: PromiseOrValue<BigNumberish>;
    };
    type StakeStructOutput = [
        string,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber
    ] & {
        token: string;
        unlockTime: BigNumber;
        accountLocked: BigNumber;
        totalLocked: BigNumber;
        totalSupply: BigNumber;
        veBalance: BigNumber;
        veTotalSupply: BigNumber;
        tokenPrice: BigNumber;
    };
    type RebateStruct = {
        totalLocked: PromiseOrValue<BigNumberish>;
        weekToken0Amount: PromiseOrValue<BigNumberish>;
        weekToken1Amount: PromiseOrValue<BigNumberish>;
        lastToken0Amount: PromiseOrValue<BigNumberish>;
        lastToken1Amount: PromiseOrValue<BigNumberish>;
        claimableToken0Amount: PromiseOrValue<BigNumberish>;
        claimableToken1Amount: PromiseOrValue<BigNumberish>;
        claimableRate: PromiseOrValue<BigNumberish>;
        tokenPrice: PromiseOrValue<BigNumberish>;
        token0Price: PromiseOrValue<BigNumberish>;
        token1Price: PromiseOrValue<BigNumberish>;
        token0Name: PromiseOrValue<string>;
        token1Name: PromiseOrValue<string>;
    };
    type RebateStructOutput = [
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        string,
        string
    ] & {
        totalLocked: BigNumber;
        weekToken0Amount: BigNumber;
        weekToken1Amount: BigNumber;
        lastToken0Amount: BigNumber;
        lastToken1Amount: BigNumber;
        claimableToken0Amount: BigNumber;
        claimableToken1Amount: BigNumber;
        claimableRate: BigNumber;
        tokenPrice: BigNumber;
        token0Price: BigNumber;
        token1Price: BigNumber;
        token0Name: string;
        token1Name: string;
    };
}
export interface StatsInterface extends utils.Interface {
    functions: {
        'pools(address)': FunctionFragment;
        'vaults(address)': FunctionFragment;
        'summary(address)': FunctionFragment;
        'balanceOf(address)': FunctionFragment;
        'pendingRewards(address)': FunctionFragment;
        'getBoostFactor(uint256,uint256,uint256)': FunctionFragment;
        'stakeInfo(address)': FunctionFragment;
        'rebateInfo(address)': FunctionFragment;
        'performanceFees()': FunctionFragment;
        'getTotalBalance(address[])': FunctionFragment;
    };
    getFunction(nameOrSignatureOrTopic: 'pools' | 'vaults' | 'summary' | 'balanceOf' | 'pendingRewards' | 'getBoostFactor' | 'stakeInfo' | 'rebateInfo' | 'performanceFees' | 'getTotalBalance'): FunctionFragment;
    encodeFunctionData(functionFragment: 'pools', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'vaults', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'summary', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'balanceOf', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'pendingRewards', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'getBoostFactor', values: [PromiseOrValue<BigNumberish>, PromiseOrValue<BigNumberish>, PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'stakeInfo', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'rebateInfo', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'performanceFees', values?: undefined): string;
    encodeFunctionData(functionFragment: 'getTotalBalance', values: [PromiseOrValue<string>[]]): string;
    decodeFunctionResult(functionFragment: 'pools', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'vaults', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'summary', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'balanceOf', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'pendingRewards', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'getBoostFactor', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'stakeInfo', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'rebateInfo', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'performanceFees', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'getTotalBalance', data: BytesLike): Result;
    events: {};
}
export interface Stats extends BaseContract {
    connect(signerOrProvider: Signer | Provider | string): this;
    attach(addressOrName: string): this;
    deployed(): Promise<this>;
    interface: StatsInterface;
    queryFilter<TEvent extends TypedEvent>(event: TypedEventFilter<TEvent>, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise<Array<TEvent>>;
    listeners<TEvent extends TypedEvent>(eventFilter?: TypedEventFilter<TEvent>): Array<TypedListener<TEvent>>;
    listeners(eventName?: string): Array<Listener>;
    removeAllListeners<TEvent extends TypedEvent>(eventFilter: TypedEventFilter<TEvent>): this;
    removeAllListeners(eventName?: string): this;
    off: OnEvent<this>;
    on: OnEvent<this>;
    once: OnEvent<this>;
    removeListener: OnEvent<this>;
    functions: {
        pools(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[IStats.PoolStructOutput[]]>;
        vaults(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[IStats.VaultStructOutput[]]>;
        summary(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[BigNumber, BigNumber] & {
            tvl: BigNumber;
            deposites: BigNumber;
        }>;
        balanceOf(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[BigNumber, BigNumber] & {
            bbtBalance: BigNumber;
            veBalance: BigNumber;
        }>;
        pendingRewards(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[BigNumber, BigNumber] & {
            amount: BigNumber;
            price: BigNumber;
        }>;
        getBoostFactor(pid: PromiseOrValue<BigNumberish>, bbt: PromiseOrValue<BigNumberish>, ve: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[BigNumber, BigNumber] & {
            boost: BigNumber;
            toMaxBoost: BigNumber;
        }>;
        stakeInfo(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[IStats.StakeStructOutput]>;
        rebateInfo(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[IStats.RebateStructOutput]>;
        performanceFees(overrides?: CallOverrides): Promise<[
            BigNumber,
            BigNumber,
            BigNumber
        ] & {
            controllerFee: BigNumber;
            treasuryFee: BigNumber;
            rebateFee: BigNumber;
        }>;
        getTotalBalance(arg0: PromiseOrValue<string>[], overrides?: CallOverrides): Promise<[BigNumber]>;
    };
    pools(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<IStats.PoolStructOutput[]>;
    vaults(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<IStats.VaultStructOutput[]>;
    summary(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[BigNumber, BigNumber] & {
        tvl: BigNumber;
        deposites: BigNumber;
    }>;
    balanceOf(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[BigNumber, BigNumber] & {
        bbtBalance: BigNumber;
        veBalance: BigNumber;
    }>;
    pendingRewards(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[BigNumber, BigNumber] & {
        amount: BigNumber;
        price: BigNumber;
    }>;
    getBoostFactor(pid: PromiseOrValue<BigNumberish>, bbt: PromiseOrValue<BigNumberish>, ve: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[BigNumber, BigNumber] & {
        boost: BigNumber;
        toMaxBoost: BigNumber;
    }>;
    stakeInfo(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<IStats.StakeStructOutput>;
    rebateInfo(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<IStats.RebateStructOutput>;
    performanceFees(overrides?: CallOverrides): Promise<[
        BigNumber,
        BigNumber,
        BigNumber
    ] & {
        controllerFee: BigNumber;
        treasuryFee: BigNumber;
        rebateFee: BigNumber;
    }>;
    getTotalBalance(arg0: PromiseOrValue<string>[], overrides?: CallOverrides): Promise<BigNumber>;
    callStatic: {
        pools(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<IStats.PoolStructOutput[]>;
        vaults(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<IStats.VaultStructOutput[]>;
        summary(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[BigNumber, BigNumber] & {
            tvl: BigNumber;
            deposites: BigNumber;
        }>;
        balanceOf(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[BigNumber, BigNumber] & {
            bbtBalance: BigNumber;
            veBalance: BigNumber;
        }>;
        pendingRewards(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[BigNumber, BigNumber] & {
            amount: BigNumber;
            price: BigNumber;
        }>;
        getBoostFactor(pid: PromiseOrValue<BigNumberish>, bbt: PromiseOrValue<BigNumberish>, ve: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[BigNumber, BigNumber] & {
            boost: BigNumber;
            toMaxBoost: BigNumber;
        }>;
        stakeInfo(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<IStats.StakeStructOutput>;
        rebateInfo(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<IStats.RebateStructOutput>;
        performanceFees(overrides?: CallOverrides): Promise<[
            BigNumber,
            BigNumber,
            BigNumber
        ] & {
            controllerFee: BigNumber;
            treasuryFee: BigNumber;
            rebateFee: BigNumber;
        }>;
        getTotalBalance(arg0: PromiseOrValue<string>[], overrides?: CallOverrides): Promise<BigNumber>;
    };
    filters: {};
    estimateGas: {
        pools(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        vaults(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        summary(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        balanceOf(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        pendingRewards(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        getBoostFactor(pid: PromiseOrValue<BigNumberish>, bbt: PromiseOrValue<BigNumberish>, ve: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        stakeInfo(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        rebateInfo(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        performanceFees(overrides?: CallOverrides): Promise<BigNumber>;
        getTotalBalance(arg0: PromiseOrValue<string>[], overrides?: CallOverrides): Promise<BigNumber>;
    };
    populateTransaction: {
        pools(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        vaults(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        summary(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        balanceOf(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        pendingRewards(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        getBoostFactor(pid: PromiseOrValue<BigNumberish>, bbt: PromiseOrValue<BigNumberish>, ve: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        stakeInfo(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        rebateInfo(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        performanceFees(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        getTotalBalance(arg0: PromiseOrValue<string>[], overrides?: CallOverrides): Promise<PopulatedTransaction>;
    };
}
