import type { BaseContract, BigNumber, BigNumberish, BytesLike, CallOverrides, ContractTransaction, Overrides, PayableOverrides, PopulatedTransaction, Signer, utils } from 'ethers';
import type { FunctionFragment, Result, EventFragment } from '@ethersproject/abi';
import type { Listener, Provider } from '@ethersproject/providers';
import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue } from './common';
export declare namespace StakePool {
    type ClaimRequestStruct = {
        weiToReturn: PromiseOrValue<BigNumberish>;
        createdAt: PromiseOrValue<BigNumberish>;
    };
    type ClaimRequestStructOutput = [BigNumber, BigNumber] & {
        weiToReturn: BigNumber;
        createdAt: BigNumber;
    };
}
export declare namespace FeeDistribution {
    type DataStruct = {
        reward: PromiseOrValue<BigNumberish>;
        deposit: PromiseOrValue<BigNumberish>;
        withdraw: PromiseOrValue<BigNumberish>;
    };
    type DataStructOutput = [BigNumber, BigNumber, BigNumber] & {
        reward: BigNumber;
        deposit: BigNumber;
        withdraw: BigNumber;
    };
}
export declare namespace Config {
    type DataStruct = {
        bcStakingWallet: PromiseOrValue<string>;
        minCrossChainTransfer: PromiseOrValue<BigNumberish>;
        transferOutTimeout: PromiseOrValue<BigNumberish>;
        minBNBDeposit: PromiseOrValue<BigNumberish>;
        minTokenWithdrawal: PromiseOrValue<BigNumberish>;
        cooldownPeriod: PromiseOrValue<BigNumberish>;
        fee: FeeDistribution.DataStruct;
    };
    type DataStructOutput = [
        string,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        FeeDistribution.DataStructOutput
    ] & {
        bcStakingWallet: string;
        minCrossChainTransfer: BigNumber;
        transferOutTimeout: BigNumber;
        minBNBDeposit: BigNumber;
        minTokenWithdrawal: BigNumber;
        cooldownPeriod: BigNumber;
        fee: FeeDistribution.DataStructOutput;
    };
}
export interface PStakePoolInterface extends utils.Interface {
    functions: {
        'BOT_ROLE()': FunctionFragment;
        'DEFAULT_ADMIN_ROLE()': FunctionFragment;
        'addressStore()': FunctionFragment;
        'bnbToUnbond()': FunctionFragment;
        'bnbUnbonding()': FunctionFragment;
        'claim(uint256)': FunctionFragment;
        'claimAll()': FunctionFragment;
        'claimReqs(address,uint256)': FunctionFragment;
        'claimReserve()': FunctionFragment;
        'config()': FunctionFragment;
        'deposit()': FunctionFragment;
        'epochUpdate(uint256)': FunctionFragment;
        'exchangeRate()': FunctionFragment;
        'getClaimRequestCount(address)': FunctionFragment;
        'getPaginatedClaimRequests(address,uint256,uint256)': FunctionFragment;
        'getRoleAdmin(bytes32)': FunctionFragment;
        'getRoleMember(bytes32,uint256)': FunctionFragment;
        'getRoleMemberCount(bytes32)': FunctionFragment;
        'grantRole(bytes32,address)': FunctionFragment;
        'hasRole(bytes32,address)': FunctionFragment;
        'initialize(address,(address,uint256,uint256,uint256,uint256,uint256,(uint256,uint256,uint256)))': FunctionFragment;
        'initiateDelegation()': FunctionFragment;
        'pause()': FunctionFragment;
        'paused()': FunctionFragment;
        'renounceRole(bytes32,address)': FunctionFragment;
        'revokeRole(bytes32,address)': FunctionFragment;
        'supportsInterface(bytes4)': FunctionFragment;
        'tokensReceived(address,address,address,uint256,bytes,bytes)': FunctionFragment;
        'unbondingFinished()': FunctionFragment;
        'unbondingInitiated(uint256)': FunctionFragment;
        'unpause()': FunctionFragment;
        'updateConfig((address,uint256,uint256,uint256,uint256,uint256,(uint256,uint256,uint256)))': FunctionFragment;
    };
    getFunction(nameOrSignatureOrTopic: 'BOT_ROLE' | 'DEFAULT_ADMIN_ROLE' | 'addressStore' | 'bnbToUnbond' | 'bnbUnbonding' | 'claim' | 'claimAll' | 'claimReqs' | 'claimReserve' | 'config' | 'deposit' | 'epochUpdate' | 'exchangeRate' | 'getClaimRequestCount' | 'getPaginatedClaimRequests' | 'getRoleAdmin' | 'getRoleMember' | 'getRoleMemberCount' | 'grantRole' | 'hasRole' | 'initialize' | 'initiateDelegation' | 'pause' | 'paused' | 'renounceRole' | 'revokeRole' | 'supportsInterface' | 'tokensReceived' | 'unbondingFinished' | 'unbondingInitiated' | 'unpause' | 'updateConfig'): FunctionFragment;
    encodeFunctionData(functionFragment: 'BOT_ROLE', values?: undefined): string;
    encodeFunctionData(functionFragment: 'DEFAULT_ADMIN_ROLE', values?: undefined): string;
    encodeFunctionData(functionFragment: 'addressStore', values?: undefined): string;
    encodeFunctionData(functionFragment: 'bnbToUnbond', values?: undefined): string;
    encodeFunctionData(functionFragment: 'bnbUnbonding', values?: undefined): string;
    encodeFunctionData(functionFragment: 'claim', values: [PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'claimAll', values?: undefined): string;
    encodeFunctionData(functionFragment: 'claimReqs', values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'claimReserve', values?: undefined): string;
    encodeFunctionData(functionFragment: 'config', values?: undefined): string;
    encodeFunctionData(functionFragment: 'deposit', values?: undefined): string;
    encodeFunctionData(functionFragment: 'epochUpdate', values: [PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'exchangeRate', values?: undefined): string;
    encodeFunctionData(functionFragment: 'getClaimRequestCount', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'getPaginatedClaimRequests', values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>, PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'getRoleAdmin', values: [PromiseOrValue<BytesLike>]): string;
    encodeFunctionData(functionFragment: 'getRoleMember', values: [PromiseOrValue<BytesLike>, PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'getRoleMemberCount', values: [PromiseOrValue<BytesLike>]): string;
    encodeFunctionData(functionFragment: 'grantRole', values: [PromiseOrValue<BytesLike>, PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'hasRole', values: [PromiseOrValue<BytesLike>, PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'initialize', values: [PromiseOrValue<string>, Config.DataStruct]): string;
    encodeFunctionData(functionFragment: 'initiateDelegation', values?: undefined): string;
    encodeFunctionData(functionFragment: 'pause', values?: undefined): string;
    encodeFunctionData(functionFragment: 'paused', values?: undefined): string;
    encodeFunctionData(functionFragment: 'renounceRole', values: [PromiseOrValue<BytesLike>, PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'revokeRole', values: [PromiseOrValue<BytesLike>, PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'supportsInterface', values: [PromiseOrValue<BytesLike>]): string;
    encodeFunctionData(functionFragment: 'tokensReceived', values: [
        PromiseOrValue<string>,
        PromiseOrValue<string>,
        PromiseOrValue<string>,
        PromiseOrValue<BigNumberish>,
        PromiseOrValue<BytesLike>,
        PromiseOrValue<BytesLike>
    ]): string;
    encodeFunctionData(functionFragment: 'unbondingFinished', values?: undefined): string;
    encodeFunctionData(functionFragment: 'unbondingInitiated', values: [PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'unpause', values?: undefined): string;
    encodeFunctionData(functionFragment: 'updateConfig', values: [Config.DataStruct]): string;
    decodeFunctionResult(functionFragment: 'BOT_ROLE', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'DEFAULT_ADMIN_ROLE', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'addressStore', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'bnbToUnbond', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'bnbUnbonding', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'claim', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'claimAll', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'claimReqs', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'claimReserve', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'config', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'deposit', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'epochUpdate', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'exchangeRate', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'getClaimRequestCount', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'getPaginatedClaimRequests', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'getRoleAdmin', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'getRoleMember', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'getRoleMemberCount', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'grantRole', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'hasRole', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'initialize', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'initiateDelegation', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'pause', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'paused', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'renounceRole', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'revokeRole', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'supportsInterface', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'tokensReceived', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'unbondingFinished', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'unbondingInitiated', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'unpause', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'updateConfig', data: BytesLike): Result;
    events: {
        'Claim(address,tuple,uint256)': EventFragment;
        'ConfigUpdated()': EventFragment;
        'Deposit(address,uint256,uint256,uint256)': EventFragment;
        'EpochUpdate(uint256,uint256)': EventFragment;
        'Initialized(uint8)': EventFragment;
        'InitiateDelegation_ShortCircuit(uint256)': EventFragment;
        'InitiateDelegation_Success()': EventFragment;
        'InitiateDelegation_TransferOut(uint256)': EventFragment;
        'Paused(address)': EventFragment;
        'RoleAdminChanged(bytes32,bytes32,bytes32)': EventFragment;
        'RoleGranted(bytes32,address,address)': EventFragment;
        'RoleRevoked(bytes32,address,address)': EventFragment;
        'UnbondingFinished(uint256)': EventFragment;
        'UnbondingInitiated(uint256)': EventFragment;
        'Unpaused(address)': EventFragment;
        'Withdraw(address,uint256,uint256,uint256)': EventFragment;
    };
    getEvent(nameOrSignatureOrTopic: 'Claim'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'ConfigUpdated'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'Deposit'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'EpochUpdate'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'Initialized'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'InitiateDelegation_ShortCircuit'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'InitiateDelegation_Success'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'InitiateDelegation_TransferOut'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'Paused'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'RoleAdminChanged'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'RoleGranted'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'RoleRevoked'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'UnbondingFinished'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'UnbondingInitiated'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'Unpaused'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'Withdraw'): EventFragment;
}
export interface ClaimEventObject {
    user: string;
    req: StakePool.ClaimRequestStructOutput;
    timestamp: BigNumber;
}
export declare type ClaimEvent = TypedEvent<[string, StakePool.ClaimRequestStructOutput, BigNumber], ClaimEventObject>;
export declare type ClaimEventFilter = TypedEventFilter<ClaimEvent>;
export interface ConfigUpdatedEventObject {
}
export declare type ConfigUpdatedEvent = TypedEvent<[], ConfigUpdatedEventObject>;
export declare type ConfigUpdatedEventFilter = TypedEventFilter<ConfigUpdatedEvent>;
export interface DepositEventObject {
    user: string;
    bnbAmount: BigNumber;
    poolTokenAmount: BigNumber;
    timestamp: BigNumber;
}
export declare type DepositEvent = TypedEvent<[string, BigNumber, BigNumber, BigNumber], DepositEventObject>;
export declare type DepositEventFilter = TypedEventFilter<DepositEvent>;
export interface EpochUpdateEventObject {
    bnbRewards: BigNumber;
    feeTokens: BigNumber;
}
export declare type EpochUpdateEvent = TypedEvent<[BigNumber, BigNumber], EpochUpdateEventObject>;
export declare type EpochUpdateEventFilter = TypedEventFilter<EpochUpdateEvent>;
export interface InitializedEventObject {
    version: number;
}
export declare type InitializedEvent = TypedEvent<[number], InitializedEventObject>;
export declare type InitializedEventFilter = TypedEventFilter<InitializedEvent>;
export interface InitiateDelegation_ShortCircuitEventObject {
    shortCircuitAmount: BigNumber;
}
export declare type InitiateDelegation_ShortCircuitEvent = TypedEvent<[BigNumber], InitiateDelegation_ShortCircuitEventObject>;
export declare type InitiateDelegation_ShortCircuitEventFilter = TypedEventFilter<InitiateDelegation_ShortCircuitEvent>;
export interface InitiateDelegation_SuccessEventObject {
}
export declare type InitiateDelegation_SuccessEvent = TypedEvent<[], InitiateDelegation_SuccessEventObject>;
export declare type InitiateDelegation_SuccessEventFilter = TypedEventFilter<InitiateDelegation_SuccessEvent>;
export interface InitiateDelegation_TransferOutEventObject {
    transferOutAmount: BigNumber;
}
export declare type InitiateDelegation_TransferOutEvent = TypedEvent<[BigNumber], InitiateDelegation_TransferOutEventObject>;
export declare type InitiateDelegation_TransferOutEventFilter = TypedEventFilter<InitiateDelegation_TransferOutEvent>;
export interface PausedEventObject {
    account: string;
}
export declare type PausedEvent = TypedEvent<[string], PausedEventObject>;
export declare type PausedEventFilter = TypedEventFilter<PausedEvent>;
export interface RoleAdminChangedEventObject {
    role: string;
    previousAdminRole: string;
    newAdminRole: string;
}
export declare type RoleAdminChangedEvent = TypedEvent<[string, string, string], RoleAdminChangedEventObject>;
export declare type RoleAdminChangedEventFilter = TypedEventFilter<RoleAdminChangedEvent>;
export interface RoleGrantedEventObject {
    role: string;
    account: string;
    sender: string;
}
export declare type RoleGrantedEvent = TypedEvent<[string, string, string], RoleGrantedEventObject>;
export declare type RoleGrantedEventFilter = TypedEventFilter<RoleGrantedEvent>;
export interface RoleRevokedEventObject {
    role: string;
    account: string;
    sender: string;
}
export declare type RoleRevokedEvent = TypedEvent<[string, string, string], RoleRevokedEventObject>;
export declare type RoleRevokedEventFilter = TypedEventFilter<RoleRevokedEvent>;
export interface UnbondingFinishedEventObject {
    unbondedAmount: BigNumber;
}
export declare type UnbondingFinishedEvent = TypedEvent<[BigNumber], UnbondingFinishedEventObject>;
export declare type UnbondingFinishedEventFilter = TypedEventFilter<UnbondingFinishedEvent>;
export interface UnbondingInitiatedEventObject {
    bnbUnbonding: BigNumber;
}
export declare type UnbondingInitiatedEvent = TypedEvent<[BigNumber], UnbondingInitiatedEventObject>;
export declare type UnbondingInitiatedEventFilter = TypedEventFilter<UnbondingInitiatedEvent>;
export interface UnpausedEventObject {
    account: string;
}
export declare type UnpausedEvent = TypedEvent<[string], UnpausedEventObject>;
export declare type UnpausedEventFilter = TypedEventFilter<UnpausedEvent>;
export interface WithdrawEventObject {
    user: string;
    poolTokenAmount: BigNumber;
    bnbAmount: BigNumber;
    timestamp: BigNumber;
}
export declare type WithdrawEvent = TypedEvent<[string, BigNumber, BigNumber, BigNumber], WithdrawEventObject>;
export declare type WithdrawEventFilter = TypedEventFilter<WithdrawEvent>;
export interface PStakePool extends BaseContract {
    connect(signerOrProvider: Signer | Provider | string): this;
    attach(addressOrName: string): this;
    deployed(): Promise<this>;
    interface: PStakePoolInterface;
    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: {
        BOT_ROLE(overrides?: CallOverrides): Promise<[string]>;
        DEFAULT_ADMIN_ROLE(overrides?: CallOverrides): Promise<[string]>;
        addressStore(overrides?: CallOverrides): Promise<[string]>;
        bnbToUnbond(overrides?: CallOverrides): Promise<[BigNumber]>;
        bnbUnbonding(overrides?: CallOverrides): Promise<[BigNumber]>;
        claim(index: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        claimAll(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        claimReqs(arg0: PromiseOrValue<string>, arg1: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[BigNumber, BigNumber] & {
            weiToReturn: BigNumber;
            createdAt: BigNumber;
        }>;
        claimReserve(overrides?: CallOverrides): Promise<[BigNumber]>;
        config(overrides?: CallOverrides): Promise<[
            string,
            BigNumber,
            BigNumber,
            BigNumber,
            BigNumber,
            BigNumber,
            FeeDistribution.DataStructOutput
        ] & {
            bcStakingWallet: string;
            minCrossChainTransfer: BigNumber;
            transferOutTimeout: BigNumber;
            minBNBDeposit: BigNumber;
            minTokenWithdrawal: BigNumber;
            cooldownPeriod: BigNumber;
            fee: FeeDistribution.DataStructOutput;
        }>;
        deposit(overrides?: PayableOverrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        epochUpdate(bnbRewards: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        exchangeRate(overrides?: CallOverrides): Promise<[
            BigNumber,
            BigNumber
        ] & {
            totalWei: BigNumber;
            poolTokenSupply: BigNumber;
        }>;
        getClaimRequestCount(user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[BigNumber]>;
        getPaginatedClaimRequests(user: PromiseOrValue<string>, from: PromiseOrValue<BigNumberish>, to: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[StakePool.ClaimRequestStructOutput[]]>;
        getRoleAdmin(role: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<[string]>;
        getRoleMember(role: PromiseOrValue<BytesLike>, index: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[string]>;
        getRoleMemberCount(role: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<[BigNumber]>;
        grantRole(role: PromiseOrValue<BytesLike>, account: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        hasRole(role: PromiseOrValue<BytesLike>, account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[boolean]>;
        initialize(addressStore_: PromiseOrValue<string>, config_: Config.DataStruct, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        initiateDelegation(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        pause(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        paused(overrides?: CallOverrides): Promise<[boolean]>;
        renounceRole(role: PromiseOrValue<BytesLike>, account: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        revokeRole(role: PromiseOrValue<BytesLike>, account: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        supportsInterface(interfaceId: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<[boolean]>;
        tokensReceived(arg0: PromiseOrValue<string>, from: PromiseOrValue<string>, to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, arg4: PromiseOrValue<BytesLike>, arg5: PromiseOrValue<BytesLike>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        unbondingFinished(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        unbondingInitiated(bnbUnbonding_: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        unpause(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        updateConfig(config_: Config.DataStruct, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
    };
    BOT_ROLE(overrides?: CallOverrides): Promise<string>;
    DEFAULT_ADMIN_ROLE(overrides?: CallOverrides): Promise<string>;
    addressStore(overrides?: CallOverrides): Promise<string>;
    bnbToUnbond(overrides?: CallOverrides): Promise<BigNumber>;
    bnbUnbonding(overrides?: CallOverrides): Promise<BigNumber>;
    claim(index: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    claimAll(overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    claimReqs(arg0: PromiseOrValue<string>, arg1: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[BigNumber, BigNumber] & {
        weiToReturn: BigNumber;
        createdAt: BigNumber;
    }>;
    claimReserve(overrides?: CallOverrides): Promise<BigNumber>;
    config(overrides?: CallOverrides): Promise<[
        string,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        FeeDistribution.DataStructOutput
    ] & {
        bcStakingWallet: string;
        minCrossChainTransfer: BigNumber;
        transferOutTimeout: BigNumber;
        minBNBDeposit: BigNumber;
        minTokenWithdrawal: BigNumber;
        cooldownPeriod: BigNumber;
        fee: FeeDistribution.DataStructOutput;
    }>;
    deposit(overrides?: PayableOverrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    epochUpdate(bnbRewards: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    exchangeRate(overrides?: CallOverrides): Promise<[BigNumber, BigNumber] & {
        totalWei: BigNumber;
        poolTokenSupply: BigNumber;
    }>;
    getClaimRequestCount(user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
    getPaginatedClaimRequests(user: PromiseOrValue<string>, from: PromiseOrValue<BigNumberish>, to: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<StakePool.ClaimRequestStructOutput[]>;
    getRoleAdmin(role: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<string>;
    getRoleMember(role: PromiseOrValue<BytesLike>, index: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<string>;
    getRoleMemberCount(role: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<BigNumber>;
    grantRole(role: PromiseOrValue<BytesLike>, account: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    hasRole(role: PromiseOrValue<BytesLike>, account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<boolean>;
    initialize(addressStore_: PromiseOrValue<string>, config_: Config.DataStruct, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    initiateDelegation(overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    pause(overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    paused(overrides?: CallOverrides): Promise<boolean>;
    renounceRole(role: PromiseOrValue<BytesLike>, account: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    revokeRole(role: PromiseOrValue<BytesLike>, account: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    supportsInterface(interfaceId: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<boolean>;
    tokensReceived(arg0: PromiseOrValue<string>, from: PromiseOrValue<string>, to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, arg4: PromiseOrValue<BytesLike>, arg5: PromiseOrValue<BytesLike>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    unbondingFinished(overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    unbondingInitiated(bnbUnbonding_: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    unpause(overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    updateConfig(config_: Config.DataStruct, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    callStatic: {
        BOT_ROLE(overrides?: CallOverrides): Promise<string>;
        DEFAULT_ADMIN_ROLE(overrides?: CallOverrides): Promise<string>;
        addressStore(overrides?: CallOverrides): Promise<string>;
        bnbToUnbond(overrides?: CallOverrides): Promise<BigNumber>;
        bnbUnbonding(overrides?: CallOverrides): Promise<BigNumber>;
        claim(index: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<void>;
        claimAll(overrides?: CallOverrides): Promise<void>;
        claimReqs(arg0: PromiseOrValue<string>, arg1: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[BigNumber, BigNumber] & {
            weiToReturn: BigNumber;
            createdAt: BigNumber;
        }>;
        claimReserve(overrides?: CallOverrides): Promise<BigNumber>;
        config(overrides?: CallOverrides): Promise<[
            string,
            BigNumber,
            BigNumber,
            BigNumber,
            BigNumber,
            BigNumber,
            FeeDistribution.DataStructOutput
        ] & {
            bcStakingWallet: string;
            minCrossChainTransfer: BigNumber;
            transferOutTimeout: BigNumber;
            minBNBDeposit: BigNumber;
            minTokenWithdrawal: BigNumber;
            cooldownPeriod: BigNumber;
            fee: FeeDistribution.DataStructOutput;
        }>;
        deposit(overrides?: CallOverrides): Promise<void>;
        epochUpdate(bnbRewards: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<void>;
        exchangeRate(overrides?: CallOverrides): Promise<[
            BigNumber,
            BigNumber
        ] & {
            totalWei: BigNumber;
            poolTokenSupply: BigNumber;
        }>;
        getClaimRequestCount(user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        getPaginatedClaimRequests(user: PromiseOrValue<string>, from: PromiseOrValue<BigNumberish>, to: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<StakePool.ClaimRequestStructOutput[]>;
        getRoleAdmin(role: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<string>;
        getRoleMember(role: PromiseOrValue<BytesLike>, index: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<string>;
        getRoleMemberCount(role: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<BigNumber>;
        grantRole(role: PromiseOrValue<BytesLike>, account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        hasRole(role: PromiseOrValue<BytesLike>, account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<boolean>;
        initialize(addressStore_: PromiseOrValue<string>, config_: Config.DataStruct, overrides?: CallOverrides): Promise<void>;
        initiateDelegation(overrides?: CallOverrides): Promise<void>;
        pause(overrides?: CallOverrides): Promise<void>;
        paused(overrides?: CallOverrides): Promise<boolean>;
        renounceRole(role: PromiseOrValue<BytesLike>, account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        revokeRole(role: PromiseOrValue<BytesLike>, account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        supportsInterface(interfaceId: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<boolean>;
        tokensReceived(arg0: PromiseOrValue<string>, from: PromiseOrValue<string>, to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, arg4: PromiseOrValue<BytesLike>, arg5: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<void>;
        unbondingFinished(overrides?: CallOverrides): Promise<void>;
        unbondingInitiated(bnbUnbonding_: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<void>;
        unpause(overrides?: CallOverrides): Promise<void>;
        updateConfig(config_: Config.DataStruct, overrides?: CallOverrides): Promise<void>;
    };
    filters: {
        'Claim(address,tuple,uint256)'(user?: PromiseOrValue<string> | null, req?: null, timestamp?: null): ClaimEventFilter;
        Claim(user?: PromiseOrValue<string> | null, req?: null, timestamp?: null): ClaimEventFilter;
        'ConfigUpdated()'(): ConfigUpdatedEventFilter;
        ConfigUpdated(): ConfigUpdatedEventFilter;
        'Deposit(address,uint256,uint256,uint256)'(user?: PromiseOrValue<string> | null, bnbAmount?: null, poolTokenAmount?: null, timestamp?: null): DepositEventFilter;
        Deposit(user?: PromiseOrValue<string> | null, bnbAmount?: null, poolTokenAmount?: null, timestamp?: null): DepositEventFilter;
        'EpochUpdate(uint256,uint256)'(bnbRewards?: null, feeTokens?: null): EpochUpdateEventFilter;
        EpochUpdate(bnbRewards?: null, feeTokens?: null): EpochUpdateEventFilter;
        'Initialized(uint8)'(version?: null): InitializedEventFilter;
        Initialized(version?: null): InitializedEventFilter;
        'InitiateDelegation_ShortCircuit(uint256)'(shortCircuitAmount?: null): InitiateDelegation_ShortCircuitEventFilter;
        InitiateDelegation_ShortCircuit(shortCircuitAmount?: null): InitiateDelegation_ShortCircuitEventFilter;
        'InitiateDelegation_Success()'(): InitiateDelegation_SuccessEventFilter;
        InitiateDelegation_Success(): InitiateDelegation_SuccessEventFilter;
        'InitiateDelegation_TransferOut(uint256)'(transferOutAmount?: null): InitiateDelegation_TransferOutEventFilter;
        InitiateDelegation_TransferOut(transferOutAmount?: null): InitiateDelegation_TransferOutEventFilter;
        'Paused(address)'(account?: null): PausedEventFilter;
        Paused(account?: null): PausedEventFilter;
        'RoleAdminChanged(bytes32,bytes32,bytes32)'(role?: PromiseOrValue<BytesLike> | null, previousAdminRole?: PromiseOrValue<BytesLike> | null, newAdminRole?: PromiseOrValue<BytesLike> | null): RoleAdminChangedEventFilter;
        RoleAdminChanged(role?: PromiseOrValue<BytesLike> | null, previousAdminRole?: PromiseOrValue<BytesLike> | null, newAdminRole?: PromiseOrValue<BytesLike> | null): RoleAdminChangedEventFilter;
        'RoleGranted(bytes32,address,address)'(role?: PromiseOrValue<BytesLike> | null, account?: PromiseOrValue<string> | null, sender?: PromiseOrValue<string> | null): RoleGrantedEventFilter;
        RoleGranted(role?: PromiseOrValue<BytesLike> | null, account?: PromiseOrValue<string> | null, sender?: PromiseOrValue<string> | null): RoleGrantedEventFilter;
        'RoleRevoked(bytes32,address,address)'(role?: PromiseOrValue<BytesLike> | null, account?: PromiseOrValue<string> | null, sender?: PromiseOrValue<string> | null): RoleRevokedEventFilter;
        RoleRevoked(role?: PromiseOrValue<BytesLike> | null, account?: PromiseOrValue<string> | null, sender?: PromiseOrValue<string> | null): RoleRevokedEventFilter;
        'UnbondingFinished(uint256)'(unbondedAmount?: null): UnbondingFinishedEventFilter;
        UnbondingFinished(unbondedAmount?: null): UnbondingFinishedEventFilter;
        'UnbondingInitiated(uint256)'(bnbUnbonding?: null): UnbondingInitiatedEventFilter;
        UnbondingInitiated(bnbUnbonding?: null): UnbondingInitiatedEventFilter;
        'Unpaused(address)'(account?: null): UnpausedEventFilter;
        Unpaused(account?: null): UnpausedEventFilter;
        'Withdraw(address,uint256,uint256,uint256)'(user?: PromiseOrValue<string> | null, poolTokenAmount?: null, bnbAmount?: null, timestamp?: null): WithdrawEventFilter;
        Withdraw(user?: PromiseOrValue<string> | null, poolTokenAmount?: null, bnbAmount?: null, timestamp?: null): WithdrawEventFilter;
    };
    estimateGas: {
        BOT_ROLE(overrides?: CallOverrides): Promise<BigNumber>;
        DEFAULT_ADMIN_ROLE(overrides?: CallOverrides): Promise<BigNumber>;
        addressStore(overrides?: CallOverrides): Promise<BigNumber>;
        bnbToUnbond(overrides?: CallOverrides): Promise<BigNumber>;
        bnbUnbonding(overrides?: CallOverrides): Promise<BigNumber>;
        claim(index: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        claimAll(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        claimReqs(arg0: PromiseOrValue<string>, arg1: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        claimReserve(overrides?: CallOverrides): Promise<BigNumber>;
        config(overrides?: CallOverrides): Promise<BigNumber>;
        deposit(overrides?: PayableOverrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        epochUpdate(bnbRewards: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        exchangeRate(overrides?: CallOverrides): Promise<BigNumber>;
        getClaimRequestCount(user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        getPaginatedClaimRequests(user: PromiseOrValue<string>, from: PromiseOrValue<BigNumberish>, to: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        getRoleAdmin(role: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<BigNumber>;
        getRoleMember(role: PromiseOrValue<BytesLike>, index: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        getRoleMemberCount(role: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<BigNumber>;
        grantRole(role: PromiseOrValue<BytesLike>, account: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        hasRole(role: PromiseOrValue<BytesLike>, account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        initialize(addressStore_: PromiseOrValue<string>, config_: Config.DataStruct, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        initiateDelegation(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        pause(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        paused(overrides?: CallOverrides): Promise<BigNumber>;
        renounceRole(role: PromiseOrValue<BytesLike>, account: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        revokeRole(role: PromiseOrValue<BytesLike>, account: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        supportsInterface(interfaceId: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<BigNumber>;
        tokensReceived(arg0: PromiseOrValue<string>, from: PromiseOrValue<string>, to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, arg4: PromiseOrValue<BytesLike>, arg5: PromiseOrValue<BytesLike>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        unbondingFinished(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        unbondingInitiated(bnbUnbonding_: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        unpause(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        updateConfig(config_: Config.DataStruct, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
    };
    populateTransaction: {
        BOT_ROLE(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        DEFAULT_ADMIN_ROLE(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        addressStore(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        bnbToUnbond(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        bnbUnbonding(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        claim(index: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        claimAll(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        claimReqs(arg0: PromiseOrValue<string>, arg1: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        claimReserve(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        config(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        deposit(overrides?: PayableOverrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        epochUpdate(bnbRewards: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        exchangeRate(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        getClaimRequestCount(user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        getPaginatedClaimRequests(user: PromiseOrValue<string>, from: PromiseOrValue<BigNumberish>, to: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        getRoleAdmin(role: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        getRoleMember(role: PromiseOrValue<BytesLike>, index: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        getRoleMemberCount(role: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        grantRole(role: PromiseOrValue<BytesLike>, account: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        hasRole(role: PromiseOrValue<BytesLike>, account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        initialize(addressStore_: PromiseOrValue<string>, config_: Config.DataStruct, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        initiateDelegation(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        pause(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        paused(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        renounceRole(role: PromiseOrValue<BytesLike>, account: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        revokeRole(role: PromiseOrValue<BytesLike>, account: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        supportsInterface(interfaceId: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        tokensReceived(arg0: PromiseOrValue<string>, from: PromiseOrValue<string>, to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, arg4: PromiseOrValue<BytesLike>, arg5: PromiseOrValue<BytesLike>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        unbondingFinished(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        unbondingInitiated(bnbUnbonding_: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        unpause(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        updateConfig(config_: Config.DataStruct, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
    };
}
