import { DerivativeService } from './Derivative';
import { FutureMVPService } from './partials/futures/FutureMVP';
import { IOlympusIndexService } from '../interfaces/IOlympusIndex';
import { IOlympusFundService } from '../interfaces/IOlympusFund';
import { IOlympusFutureService } from '../interfaces';
export declare class DerivativeFactory {
    private static instance;
    private constructor();
    static get(web3Url?: string, walletAddress?: string, privateKey?: string): DerivativeFactory;
    /**
     * getOlympusIndex
     * after refactor, make it easy to override methods.
     * Object.assign will check type less then 4 items.
     * @param address
     */
    getOlympusIndex(address: string): Promise<IOlympusIndexService>;
    /**
     * getOlympusIndex
     * after refactor, make it easy to override methods.
     * @param address
     */
    getOlympusFund(address: string): Promise<IOlympusFundService>;
    /**
     * getOlympusIndex
     * after refactor, make it easy to override methods.
     * @param address
     */
    getOlympusFuture(address: string): Promise<IOlympusFutureService>;
    futureMVP(address: string): Promise<DerivativeService & FutureMVPService>;
    getOrExtendCustomDerivative<T>(customBuildingBlocks: T[]): Promise<T & {}>;
}
