import { BigNumberish, Contract } from 'ethers';
import { IAppToolkit } from '../../app-toolkit/app-toolkit.interface';
import { GetDataPropsParams, GetTokenBalancesParams, GetTokenDefinitionsParams } from './contract-position.template.types';
import { GetMasterChefDataPropsParams, GetMasterChefTokenBalancesParams, MasterChefContractPositionDataProps, MasterChefContractPositionDefinition, MasterChefTemplateContractPositionFetcher } from './master-chef.template.contract-position-fetcher';
export declare type MasterChefV2ContractPositionDataProps = MasterChefContractPositionDataProps & {
    extraRewarderAddress: string;
};
export declare type GetMasterChefV2ExtraRewardTokenRewardRates<T extends Contract, V extends Contract> = GetMasterChefDataPropsParams<T> & {
    rewarderContract: V;
};
export declare type GetMasterChefV2ExtraRewardTokenBalancesParams<T extends Contract, V extends Contract> = GetMasterChefTokenBalancesParams<T> & {
    rewarderContract: V;
};
export declare abstract class MasterChefV2TemplateContractPositionFetcher<T extends Contract, V extends Contract> extends MasterChefTemplateContractPositionFetcher<T, MasterChefV2ContractPositionDataProps> {
    protected readonly appToolkit: IAppToolkit;
    constructor(appToolkit: IAppToolkit);
    abstract getExtraRewarder(contract: T, poolIndex: number): Promise<string>;
    abstract getExtraRewarderContract(address: string): V;
    abstract getExtraRewardTokenAddresses(contract: V, poolIndex: number): Promise<string[]>;
    abstract getExtraRewardTokenRewardRates(params: GetMasterChefV2ExtraRewardTokenRewardRates<T, V>): Promise<BigNumberish | BigNumberish[]>;
    abstract getExtraRewardTokenBalances(params: GetMasterChefV2ExtraRewardTokenBalancesParams<T, V>): Promise<BigNumberish | BigNumberish[]>;
    getTokenDefinitions(params: GetTokenDefinitionsParams<T, MasterChefContractPositionDefinition>): Promise<import("./contract-position.template.types").UnderlyingTokenDefinition[] | null>;
    getRewardRates(params: GetDataPropsParams<T, MasterChefV2ContractPositionDataProps, MasterChefContractPositionDefinition>): Promise<BigNumberish[]>;
    getDataProps(params: GetDataPropsParams<T, MasterChefV2ContractPositionDataProps, MasterChefContractPositionDefinition>): Promise<MasterChefV2ContractPositionDataProps>;
    getTokenBalancesPerPosition(params: GetTokenBalancesParams<T, MasterChefV2ContractPositionDataProps>): Promise<BigNumberish[]>;
}
