import type { BaseContract, BigNumber, BigNumberish, BytesLike, CallOverrides, ContractTransaction, Overrides, 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 } from './common';
export interface NereusFinanceStakedTokenIncentivesControllerInterface extends utils.Interface {
    functions: {
        'DISTRIBUTION_END()': FunctionFragment;
        'EMISSION_MANAGER()': FunctionFragment;
        'PRECISION()': FunctionFragment;
        'REVISION()': FunctionFragment;
        'REWARD_TOKEN()': FunctionFragment;
        'STAKE_TOKEN()': FunctionFragment;
        'assets(address)': FunctionFragment;
        'claimRewards(address[],uint256,address)': FunctionFragment;
        'claimRewardsOnBehalf(address[],uint256,address,address)': FunctionFragment;
        'configureAssets(address[],uint256[])': FunctionFragment;
        'getAssetData(address)': FunctionFragment;
        'getClaimer(address)': FunctionFragment;
        'getDistributionEnd()': FunctionFragment;
        'getRewardsBalance(address[],address)': FunctionFragment;
        'getUserAssetData(address,address)': FunctionFragment;
        'getUserUnclaimedRewards(address)': FunctionFragment;
        'handleAction(address,uint256,uint256)': FunctionFragment;
        'initialize(address)': FunctionFragment;
        'setClaimer(address,address)': FunctionFragment;
        'setDistributionEnd(uint256)': FunctionFragment;
    };
    getFunction(nameOrSignatureOrTopic: 'DISTRIBUTION_END' | 'EMISSION_MANAGER' | 'PRECISION' | 'REVISION' | 'REWARD_TOKEN' | 'STAKE_TOKEN' | 'assets' | 'claimRewards' | 'claimRewardsOnBehalf' | 'configureAssets' | 'getAssetData' | 'getClaimer' | 'getDistributionEnd' | 'getRewardsBalance' | 'getUserAssetData' | 'getUserUnclaimedRewards' | 'handleAction' | 'initialize' | 'setClaimer' | 'setDistributionEnd'): FunctionFragment;
    encodeFunctionData(functionFragment: 'DISTRIBUTION_END', values?: undefined): string;
    encodeFunctionData(functionFragment: 'EMISSION_MANAGER', values?: undefined): string;
    encodeFunctionData(functionFragment: 'PRECISION', values?: undefined): string;
    encodeFunctionData(functionFragment: 'REVISION', values?: undefined): string;
    encodeFunctionData(functionFragment: 'REWARD_TOKEN', values?: undefined): string;
    encodeFunctionData(functionFragment: 'STAKE_TOKEN', values?: undefined): string;
    encodeFunctionData(functionFragment: 'assets', values: [string]): string;
    encodeFunctionData(functionFragment: 'claimRewards', values: [string[], BigNumberish, string]): string;
    encodeFunctionData(functionFragment: 'claimRewardsOnBehalf', values: [string[], BigNumberish, string, string]): string;
    encodeFunctionData(functionFragment: 'configureAssets', values: [string[], BigNumberish[]]): string;
    encodeFunctionData(functionFragment: 'getAssetData', values: [string]): string;
    encodeFunctionData(functionFragment: 'getClaimer', values: [string]): string;
    encodeFunctionData(functionFragment: 'getDistributionEnd', values?: undefined): string;
    encodeFunctionData(functionFragment: 'getRewardsBalance', values: [string[], string]): string;
    encodeFunctionData(functionFragment: 'getUserAssetData', values: [string, string]): string;
    encodeFunctionData(functionFragment: 'getUserUnclaimedRewards', values: [string]): string;
    encodeFunctionData(functionFragment: 'handleAction', values: [string, BigNumberish, BigNumberish]): string;
    encodeFunctionData(functionFragment: 'initialize', values: [string]): string;
    encodeFunctionData(functionFragment: 'setClaimer', values: [string, string]): string;
    encodeFunctionData(functionFragment: 'setDistributionEnd', values: [BigNumberish]): string;
    decodeFunctionResult(functionFragment: 'DISTRIBUTION_END', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'EMISSION_MANAGER', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'PRECISION', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'REVISION', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'REWARD_TOKEN', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'STAKE_TOKEN', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'assets', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'claimRewards', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'claimRewardsOnBehalf', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'configureAssets', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'getAssetData', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'getClaimer', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'getDistributionEnd', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'getRewardsBalance', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'getUserAssetData', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'getUserUnclaimedRewards', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'handleAction', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'initialize', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'setClaimer', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'setDistributionEnd', data: BytesLike): Result;
    events: {
        'AssetConfigUpdated(address,uint256)': EventFragment;
        'AssetIndexUpdated(address,uint256)': EventFragment;
        'ClaimerSet(address,address)': EventFragment;
        'DistributionEndUpdated(uint256)': EventFragment;
        'RewardsAccrued(address,uint256)': EventFragment;
        'RewardsClaimed(address,address,address,uint256)': EventFragment;
        'UserIndexUpdated(address,address,uint256)': EventFragment;
    };
    getEvent(nameOrSignatureOrTopic: 'AssetConfigUpdated'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'AssetIndexUpdated'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'ClaimerSet'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'DistributionEndUpdated'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'RewardsAccrued'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'RewardsClaimed'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'UserIndexUpdated'): EventFragment;
}
export interface AssetConfigUpdatedEventObject {
    asset: string;
    emission: BigNumber;
}
export declare type AssetConfigUpdatedEvent = TypedEvent<[string, BigNumber], AssetConfigUpdatedEventObject>;
export declare type AssetConfigUpdatedEventFilter = TypedEventFilter<AssetConfigUpdatedEvent>;
export interface AssetIndexUpdatedEventObject {
    asset: string;
    index: BigNumber;
}
export declare type AssetIndexUpdatedEvent = TypedEvent<[string, BigNumber], AssetIndexUpdatedEventObject>;
export declare type AssetIndexUpdatedEventFilter = TypedEventFilter<AssetIndexUpdatedEvent>;
export interface ClaimerSetEventObject {
    user: string;
    claimer: string;
}
export declare type ClaimerSetEvent = TypedEvent<[string, string], ClaimerSetEventObject>;
export declare type ClaimerSetEventFilter = TypedEventFilter<ClaimerSetEvent>;
export interface DistributionEndUpdatedEventObject {
    newDistributionEnd: BigNumber;
}
export declare type DistributionEndUpdatedEvent = TypedEvent<[BigNumber], DistributionEndUpdatedEventObject>;
export declare type DistributionEndUpdatedEventFilter = TypedEventFilter<DistributionEndUpdatedEvent>;
export interface RewardsAccruedEventObject {
    user: string;
    amount: BigNumber;
}
export declare type RewardsAccruedEvent = TypedEvent<[string, BigNumber], RewardsAccruedEventObject>;
export declare type RewardsAccruedEventFilter = TypedEventFilter<RewardsAccruedEvent>;
export interface RewardsClaimedEventObject {
    user: string;
    to: string;
    claimer: string;
    amount: BigNumber;
}
export declare type RewardsClaimedEvent = TypedEvent<[string, string, string, BigNumber], RewardsClaimedEventObject>;
export declare type RewardsClaimedEventFilter = TypedEventFilter<RewardsClaimedEvent>;
export interface UserIndexUpdatedEventObject {
    user: string;
    asset: string;
    index: BigNumber;
}
export declare type UserIndexUpdatedEvent = TypedEvent<[string, string, BigNumber], UserIndexUpdatedEventObject>;
export declare type UserIndexUpdatedEventFilter = TypedEventFilter<UserIndexUpdatedEvent>;
export interface NereusFinanceStakedTokenIncentivesController extends BaseContract {
    connect(signerOrProvider: Signer | Provider | string): this;
    attach(addressOrName: string): this;
    deployed(): Promise<this>;
    interface: NereusFinanceStakedTokenIncentivesControllerInterface;
    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: {
        DISTRIBUTION_END(overrides?: CallOverrides): Promise<[BigNumber]>;
        EMISSION_MANAGER(overrides?: CallOverrides): Promise<[string]>;
        PRECISION(overrides?: CallOverrides): Promise<[number]>;
        REVISION(overrides?: CallOverrides): Promise<[BigNumber]>;
        REWARD_TOKEN(overrides?: CallOverrides): Promise<[string]>;
        STAKE_TOKEN(overrides?: CallOverrides): Promise<[string]>;
        assets(arg0: string, overrides?: CallOverrides): Promise<[
            BigNumber,
            BigNumber,
            number
        ] & {
            emissionPerSecond: BigNumber;
            index: BigNumber;
            lastUpdateTimestamp: number;
        }>;
        claimRewards(assets: string[], amount: BigNumberish, to: string, overrides?: Overrides & {
            from?: string | Promise<string>;
        }): Promise<ContractTransaction>;
        claimRewardsOnBehalf(assets: string[], amount: BigNumberish, user: string, to: string, overrides?: Overrides & {
            from?: string | Promise<string>;
        }): Promise<ContractTransaction>;
        configureAssets(assets: string[], emissionsPerSecond: BigNumberish[], overrides?: Overrides & {
            from?: string | Promise<string>;
        }): Promise<ContractTransaction>;
        getAssetData(asset: string, overrides?: CallOverrides): Promise<[BigNumber, BigNumber, BigNumber]>;
        getClaimer(user: string, overrides?: CallOverrides): Promise<[string]>;
        getDistributionEnd(overrides?: CallOverrides): Promise<[BigNumber]>;
        getRewardsBalance(assets: string[], user: string, overrides?: CallOverrides): Promise<[BigNumber]>;
        getUserAssetData(user: string, asset: string, overrides?: CallOverrides): Promise<[BigNumber]>;
        getUserUnclaimedRewards(_user: string, overrides?: CallOverrides): Promise<[BigNumber]>;
        handleAction(user: string, totalSupply: BigNumberish, userBalance: BigNumberish, overrides?: Overrides & {
            from?: string | Promise<string>;
        }): Promise<ContractTransaction>;
        initialize(addressesProvider: string, overrides?: Overrides & {
            from?: string | Promise<string>;
        }): Promise<ContractTransaction>;
        setClaimer(user: string, caller: string, overrides?: Overrides & {
            from?: string | Promise<string>;
        }): Promise<ContractTransaction>;
        setDistributionEnd(distributionEnd: BigNumberish, overrides?: Overrides & {
            from?: string | Promise<string>;
        }): Promise<ContractTransaction>;
    };
    DISTRIBUTION_END(overrides?: CallOverrides): Promise<BigNumber>;
    EMISSION_MANAGER(overrides?: CallOverrides): Promise<string>;
    PRECISION(overrides?: CallOverrides): Promise<number>;
    REVISION(overrides?: CallOverrides): Promise<BigNumber>;
    REWARD_TOKEN(overrides?: CallOverrides): Promise<string>;
    STAKE_TOKEN(overrides?: CallOverrides): Promise<string>;
    assets(arg0: string, overrides?: CallOverrides): Promise<[
        BigNumber,
        BigNumber,
        number
    ] & {
        emissionPerSecond: BigNumber;
        index: BigNumber;
        lastUpdateTimestamp: number;
    }>;
    claimRewards(assets: string[], amount: BigNumberish, to: string, overrides?: Overrides & {
        from?: string | Promise<string>;
    }): Promise<ContractTransaction>;
    claimRewardsOnBehalf(assets: string[], amount: BigNumberish, user: string, to: string, overrides?: Overrides & {
        from?: string | Promise<string>;
    }): Promise<ContractTransaction>;
    configureAssets(assets: string[], emissionsPerSecond: BigNumberish[], overrides?: Overrides & {
        from?: string | Promise<string>;
    }): Promise<ContractTransaction>;
    getAssetData(asset: string, overrides?: CallOverrides): Promise<[BigNumber, BigNumber, BigNumber]>;
    getClaimer(user: string, overrides?: CallOverrides): Promise<string>;
    getDistributionEnd(overrides?: CallOverrides): Promise<BigNumber>;
    getRewardsBalance(assets: string[], user: string, overrides?: CallOverrides): Promise<BigNumber>;
    getUserAssetData(user: string, asset: string, overrides?: CallOverrides): Promise<BigNumber>;
    getUserUnclaimedRewards(_user: string, overrides?: CallOverrides): Promise<BigNumber>;
    handleAction(user: string, totalSupply: BigNumberish, userBalance: BigNumberish, overrides?: Overrides & {
        from?: string | Promise<string>;
    }): Promise<ContractTransaction>;
    initialize(addressesProvider: string, overrides?: Overrides & {
        from?: string | Promise<string>;
    }): Promise<ContractTransaction>;
    setClaimer(user: string, caller: string, overrides?: Overrides & {
        from?: string | Promise<string>;
    }): Promise<ContractTransaction>;
    setDistributionEnd(distributionEnd: BigNumberish, overrides?: Overrides & {
        from?: string | Promise<string>;
    }): Promise<ContractTransaction>;
    callStatic: {
        DISTRIBUTION_END(overrides?: CallOverrides): Promise<BigNumber>;
        EMISSION_MANAGER(overrides?: CallOverrides): Promise<string>;
        PRECISION(overrides?: CallOverrides): Promise<number>;
        REVISION(overrides?: CallOverrides): Promise<BigNumber>;
        REWARD_TOKEN(overrides?: CallOverrides): Promise<string>;
        STAKE_TOKEN(overrides?: CallOverrides): Promise<string>;
        assets(arg0: string, overrides?: CallOverrides): Promise<[
            BigNumber,
            BigNumber,
            number
        ] & {
            emissionPerSecond: BigNumber;
            index: BigNumber;
            lastUpdateTimestamp: number;
        }>;
        claimRewards(assets: string[], amount: BigNumberish, to: string, overrides?: CallOverrides): Promise<BigNumber>;
        claimRewardsOnBehalf(assets: string[], amount: BigNumberish, user: string, to: string, overrides?: CallOverrides): Promise<BigNumber>;
        configureAssets(assets: string[], emissionsPerSecond: BigNumberish[], overrides?: CallOverrides): Promise<void>;
        getAssetData(asset: string, overrides?: CallOverrides): Promise<[BigNumber, BigNumber, BigNumber]>;
        getClaimer(user: string, overrides?: CallOverrides): Promise<string>;
        getDistributionEnd(overrides?: CallOverrides): Promise<BigNumber>;
        getRewardsBalance(assets: string[], user: string, overrides?: CallOverrides): Promise<BigNumber>;
        getUserAssetData(user: string, asset: string, overrides?: CallOverrides): Promise<BigNumber>;
        getUserUnclaimedRewards(_user: string, overrides?: CallOverrides): Promise<BigNumber>;
        handleAction(user: string, totalSupply: BigNumberish, userBalance: BigNumberish, overrides?: CallOverrides): Promise<void>;
        initialize(addressesProvider: string, overrides?: CallOverrides): Promise<void>;
        setClaimer(user: string, caller: string, overrides?: CallOverrides): Promise<void>;
        setDistributionEnd(distributionEnd: BigNumberish, overrides?: CallOverrides): Promise<void>;
    };
    filters: {
        'AssetConfigUpdated(address,uint256)'(asset?: string | null, emission?: null): AssetConfigUpdatedEventFilter;
        AssetConfigUpdated(asset?: string | null, emission?: null): AssetConfigUpdatedEventFilter;
        'AssetIndexUpdated(address,uint256)'(asset?: string | null, index?: null): AssetIndexUpdatedEventFilter;
        AssetIndexUpdated(asset?: string | null, index?: null): AssetIndexUpdatedEventFilter;
        'ClaimerSet(address,address)'(user?: string | null, claimer?: string | null): ClaimerSetEventFilter;
        ClaimerSet(user?: string | null, claimer?: string | null): ClaimerSetEventFilter;
        'DistributionEndUpdated(uint256)'(newDistributionEnd?: null): DistributionEndUpdatedEventFilter;
        DistributionEndUpdated(newDistributionEnd?: null): DistributionEndUpdatedEventFilter;
        'RewardsAccrued(address,uint256)'(user?: string | null, amount?: null): RewardsAccruedEventFilter;
        RewardsAccrued(user?: string | null, amount?: null): RewardsAccruedEventFilter;
        'RewardsClaimed(address,address,address,uint256)'(user?: string | null, to?: string | null, claimer?: string | null, amount?: null): RewardsClaimedEventFilter;
        RewardsClaimed(user?: string | null, to?: string | null, claimer?: string | null, amount?: null): RewardsClaimedEventFilter;
        'UserIndexUpdated(address,address,uint256)'(user?: string | null, asset?: string | null, index?: null): UserIndexUpdatedEventFilter;
        UserIndexUpdated(user?: string | null, asset?: string | null, index?: null): UserIndexUpdatedEventFilter;
    };
    estimateGas: {
        DISTRIBUTION_END(overrides?: CallOverrides): Promise<BigNumber>;
        EMISSION_MANAGER(overrides?: CallOverrides): Promise<BigNumber>;
        PRECISION(overrides?: CallOverrides): Promise<BigNumber>;
        REVISION(overrides?: CallOverrides): Promise<BigNumber>;
        REWARD_TOKEN(overrides?: CallOverrides): Promise<BigNumber>;
        STAKE_TOKEN(overrides?: CallOverrides): Promise<BigNumber>;
        assets(arg0: string, overrides?: CallOverrides): Promise<BigNumber>;
        claimRewards(assets: string[], amount: BigNumberish, to: string, overrides?: Overrides & {
            from?: string | Promise<string>;
        }): Promise<BigNumber>;
        claimRewardsOnBehalf(assets: string[], amount: BigNumberish, user: string, to: string, overrides?: Overrides & {
            from?: string | Promise<string>;
        }): Promise<BigNumber>;
        configureAssets(assets: string[], emissionsPerSecond: BigNumberish[], overrides?: Overrides & {
            from?: string | Promise<string>;
        }): Promise<BigNumber>;
        getAssetData(asset: string, overrides?: CallOverrides): Promise<BigNumber>;
        getClaimer(user: string, overrides?: CallOverrides): Promise<BigNumber>;
        getDistributionEnd(overrides?: CallOverrides): Promise<BigNumber>;
        getRewardsBalance(assets: string[], user: string, overrides?: CallOverrides): Promise<BigNumber>;
        getUserAssetData(user: string, asset: string, overrides?: CallOverrides): Promise<BigNumber>;
        getUserUnclaimedRewards(_user: string, overrides?: CallOverrides): Promise<BigNumber>;
        handleAction(user: string, totalSupply: BigNumberish, userBalance: BigNumberish, overrides?: Overrides & {
            from?: string | Promise<string>;
        }): Promise<BigNumber>;
        initialize(addressesProvider: string, overrides?: Overrides & {
            from?: string | Promise<string>;
        }): Promise<BigNumber>;
        setClaimer(user: string, caller: string, overrides?: Overrides & {
            from?: string | Promise<string>;
        }): Promise<BigNumber>;
        setDistributionEnd(distributionEnd: BigNumberish, overrides?: Overrides & {
            from?: string | Promise<string>;
        }): Promise<BigNumber>;
    };
    populateTransaction: {
        DISTRIBUTION_END(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        EMISSION_MANAGER(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        PRECISION(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        REVISION(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        REWARD_TOKEN(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        STAKE_TOKEN(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        assets(arg0: string, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        claimRewards(assets: string[], amount: BigNumberish, to: string, overrides?: Overrides & {
            from?: string | Promise<string>;
        }): Promise<PopulatedTransaction>;
        claimRewardsOnBehalf(assets: string[], amount: BigNumberish, user: string, to: string, overrides?: Overrides & {
            from?: string | Promise<string>;
        }): Promise<PopulatedTransaction>;
        configureAssets(assets: string[], emissionsPerSecond: BigNumberish[], overrides?: Overrides & {
            from?: string | Promise<string>;
        }): Promise<PopulatedTransaction>;
        getAssetData(asset: string, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        getClaimer(user: string, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        getDistributionEnd(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        getRewardsBalance(assets: string[], user: string, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        getUserAssetData(user: string, asset: string, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        getUserUnclaimedRewards(_user: string, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        handleAction(user: string, totalSupply: BigNumberish, userBalance: BigNumberish, overrides?: Overrides & {
            from?: string | Promise<string>;
        }): Promise<PopulatedTransaction>;
        initialize(addressesProvider: string, overrides?: Overrides & {
            from?: string | Promise<string>;
        }): Promise<PopulatedTransaction>;
        setClaimer(user: string, caller: string, overrides?: Overrides & {
            from?: string | Promise<string>;
        }): Promise<PopulatedTransaction>;
        setDistributionEnd(distributionEnd: BigNumberish, overrides?: Overrides & {
            from?: string | Promise<string>;
        }): Promise<PopulatedTransaction>;
    };
}
