import { TransactionReceipt } from "@ethersproject/abstract-provider";
import { FundOperationMode, MarketConfig, NativePricedIonicAsset } from "@ionicprotocol/types";
import { BigNumber, ethers } from "ethers";
import { withCreateContracts } from "./CreateContracts";
import { withFlywheel } from "./Flywheel";
type IonicBaseConstructorWithModules = ReturnType<typeof withCreateContracts> & ReturnType<typeof withFlywheel>;
export declare function withAsset<TBase extends IonicBaseConstructorWithModules>(Base: TBase): {
    new (...args: any[]): {
        COMPTROLLER_ERROR_CODES: Array<string>;
        deployAsset(config: MarketConfig): Promise<[string, string, TransactionReceipt]>;
        validateConfiguration(config: MarketConfig): Promise<void>;
        deployMarket(config: MarketConfig): Promise<[string, string, TransactionReceipt]>;
        getUpdatedAssets(mode: FundOperationMode, index: number, assets: NativePricedIonicAsset[], amount: BigNumber): Promise<NativePricedIonicAsset[]>;
        createContractInstance<T extends ethers.Contract>(abi: ethers.ContractInterface): (address: string, signerOrProvider?: import("../IonicSdk").SignerOrProvider) => T;
        createUnitroller: (address: string, signerOrProvider?: import("../IonicSdk").SignerOrProvider) => import("../../typechain/Unitroller").Unitroller;
        createIonicFlywheel: (address: string, signerOrProvider?: import("../IonicSdk").SignerOrProvider) => import("../../typechain/IonicFlywheel").IonicFlywheel;
        createFlywheelStaticRewards: (address: string, signerOrProvider?: import("../IonicSdk").SignerOrProvider) => import("../../typechain/FlywheelStaticRewards").FlywheelStaticRewards;
        createJumpRateModel: (address: string, signerOrProvider?: import("../IonicSdk").SignerOrProvider) => import("../../typechain/JumpRateModel").JumpRateModel;
        createComptroller(comptrollerAddress: string, signerOrProvider?: import("../IonicSdk").SignerOrProvider): import("../../typechain/IonicComptroller").IonicComptroller;
        createICErc20(address: string, signerOrProvider?: import("../IonicSdk").SignerOrProvider): import("../../typechain/ICErc20").ICErc20;
        createICErc20PluginRewards(cTokenAddress: string, signerOrProvider?: import("../IonicSdk").SignerOrProvider): import("../../typechain/ICErc20PluginRewards").ICErc20PluginRewards;
        createMasterPriceOracle(signerOrProvider?: import("../IonicSdk").SignerOrProvider): import("../../typechain/MasterPriceOracle").MasterPriceOracle;
        createCompoundMarketERC4626(address: string, signerOrProvider?: import("../IonicSdk").SignerOrProvider): import("../../typechain/CompoundMarketERC4626").CompoundMarketERC4626;
        createOptimizedAPRVault(address: string, signerOrProvider?: import("../IonicSdk").SignerOrProvider): import("../../typechain/OptimizedAPRVaultFirstExtension").OptimizedAPRVaultFirstExtension & import("../../typechain/OptimizedAPRVaultSecondExtension").OptimizedAPRVaultSecondExtension;
        createOptimizedVaultsRegistry(signerOrProvider?: import("../IonicSdk").SignerOrProvider): import("../../typechain/OptimizedVaultsRegistry").OptimizedVaultsRegistry;
        createIonicFlywheelLensRouter(signerOrProvider?: import("../IonicSdk").SignerOrProvider): import("../../typechain/IonicFlywheelLensRouter").IonicFlywheelLensRouter;
        createLeveredPositionFactory(signerOrProvider?: import("../IonicSdk").SignerOrProvider): import("../../typechain/ILeveredPositionFactory").ILeveredPositionFactory;
        createLeveredPosition(address: string, signerOrProvider?: import("../IonicSdk").SignerOrProvider): import("../../typechain/LeveredPosition").LeveredPosition;
        createLeveredPositionLens(signerOrProvider?: import("../IonicSdk").SignerOrProvider): import("../../typechain/LeveredPositionsLens").LeveredPositionsLens;
        createPoolLensSecondary(signerOrProvider?: import("../IonicSdk").SignerOrProvider): import("../../typechain/PoolLensSecondary").PoolLensSecondary;
        createILiquidatorsRegistry(signerOrProvider?: import("../IonicSdk").SignerOrProvider): import("../../typechain/ILiquidatorsRegistry").ILiquidatorsRegistry;
        createAuthoritiesRegistry(signerOrProvider?: import("../IonicSdk").SignerOrProvider): import("../../typechain/AuthoritiesRegistry").AuthoritiesRegistry;
        createPoolRolesAuthority(poolAuthAddress: string, signerOrProvider?: import("../IonicSdk").SignerOrProvider): import("../../typechain/PoolRolesAuthority").PoolRolesAuthority;
        _provider: import("../IonicSdk").SupportedProvider;
        _signer: import("../IonicSdk").SupportedSigners | null;
        _contracts: import("../IonicSdk").StaticContracts | undefined;
        chainConfig: import("@ionicprotocol/types").ChainConfig;
        availableOracles: string[];
        chainId: import("@ionicprotocol/types").SupportedChains;
        chainDeployment: import("@ionicprotocol/types").ChainDeployment;
        chainSpecificAddresses: import("@ionicprotocol/types").ChainAddresses;
        chainSpecificParams: import("@ionicprotocol/types").ChainParams;
        deployedPlugins: import("@ionicprotocol/types").DeployedPlugins;
        marketToPlugin: Record<string, string>;
        liquidationConfig: import("..").ChainLiquidationConfig;
        supportedAssets: import("@ionicprotocol/types").SupportedAsset[];
        redemptionStrategies: import("@ionicprotocol/types").RedemptionStrategy[];
        fundingStrategies: import("@ionicprotocol/types").FundingStrategy[];
        logger: import("../IonicSdk").Logger;
        readonly provider: import("../IonicSdk").SupportedProvider;
        readonly signer: import("../IonicSdk").SupportedSigners;
        contracts: import("../IonicSdk").StaticContracts;
        setSigner(signer: ethers.Signer): any;
        removeSigner(provider: import("../IonicSdk").SupportedProvider): any;
        deployPool(poolName: string, enforceWhitelist: boolean, closeFactor: BigNumber, liquidationIncentive: BigNumber, priceOracle: string, whitelist: string[]): Promise<[string, string, string, (number | undefined)?]>;
        identifyInterestRateModel(interestRateModelAddress: string): Promise<import("@ionicprotocol/types").InterestRateModel>;
        getInterestRateModel(assetAddress: string): Promise<import("@ionicprotocol/types").InterestRateModel>;
        getPriceOracle(oracleAddress: string): string;
        getEIP20TokenInstance(address: string, signerOrProvider?: import("../IonicSdk").SignerOrProvider): import("../../typechain/EIP20Interface").EIP20Interface;
        getUnitrollerInstance(address: string, signerOrProvider?: import("../IonicSdk").SignerOrProvider): import("../../typechain/Unitroller").Unitroller;
        getPoolDirectoryInstance(signerOrProvider?: import("../IonicSdk").SignerOrProvider): ethers.Contract;
        getErc4626PluginInstance(address: string, signerOrProvider?: import("../IonicSdk").SignerOrProvider): import("../../typechain/IonicERC4626").IonicERC4626;
        getFlywheelMarketRewardsByPools(pools: string[]): Promise<import("./Flywheel").FlywheelMarketRewardsInfo[][]>;
        getFlywheelMarketRewardsByPool(pool: string): Promise<import("./Flywheel").FlywheelMarketRewardsInfo[]>;
        getFlywheelsByPool(poolAddress: string): Promise<import("../../typechain/IonicFlywheel").IonicFlywheel[]>;
        getFlywheelRewardsInfos(flywheelAddress: string): Promise<Record<string, any>>;
        getFlywheelMarketRewardsByPoolWithAPR(pool: string): Promise<import("./Flywheel").FlywheelMarketRewardsInfo[]>;
        getFlywheelRewardsInfoForMarket(flywheelAddress: string, marketAddress: string): Promise<{
            0: BigNumber;
            1: number;
            length: 2;
            toString: (() => string) & (() => string);
            toLocaleString: (() => string) & (() => string);
            pop(): number | BigNumber | undefined;
            push(...items: (number | BigNumber)[]): number;
            concat(...items: ConcatArray<number | BigNumber>[]): (number | BigNumber)[];
            concat(...items: (number | BigNumber | ConcatArray<number | BigNumber>)[]): (number | BigNumber)[];
            join(separator?: string | undefined): string;
            reverse(): (number | BigNumber)[];
            shift(): number | BigNumber | undefined;
            slice(start?: number | undefined, end?: number | undefined): (number | BigNumber)[];
            sort(compareFn?: ((a: number | BigNumber, b: number | BigNumber) => number) | undefined): [BigNumber, number] & {
                rewardsPerSecond: BigNumber;
                rewardsEndTimestamp: number;
            };
            splice(start: number, deleteCount?: number | undefined): (number | BigNumber)[];
            splice(start: number, deleteCount: number, ...items: (number | BigNumber)[]): (number | BigNumber)[];
            unshift(...items: (number | BigNumber)[]): number;
            indexOf(searchElement: number | BigNumber, fromIndex?: number | undefined): number;
            lastIndexOf(searchElement: number | BigNumber, fromIndex?: number | undefined): number;
            every<S extends number | BigNumber>(predicate: (value: number | BigNumber, index: number, array: (number | BigNumber)[]) => value is S, thisArg?: any): this is S[];
            every(predicate: (value: number | BigNumber, index: number, array: (number | BigNumber)[]) => unknown, thisArg?: any): boolean;
            some(predicate: (value: number | BigNumber, index: number, array: (number | BigNumber)[]) => unknown, thisArg?: any): boolean;
            forEach(callbackfn: (value: number | BigNumber, index: number, array: (number | BigNumber)[]) => void, thisArg?: any): void;
            map<U>(callbackfn: (value: number | BigNumber, index: number, array: (number | BigNumber)[]) => U, thisArg?: any): U[];
            filter<S_1 extends number | BigNumber>(predicate: (value: number | BigNumber, index: number, array: (number | BigNumber)[]) => value is S_1, thisArg?: any): S_1[];
            filter(predicate: (value: number | BigNumber, index: number, array: (number | BigNumber)[]) => unknown, thisArg?: any): (number | BigNumber)[];
            reduce(callbackfn: (previousValue: number | BigNumber, currentValue: number | BigNumber, currentIndex: number, array: (number | BigNumber)[]) => number | BigNumber): number | BigNumber;
            reduce(callbackfn: (previousValue: number | BigNumber, currentValue: number | BigNumber, currentIndex: number, array: (number | BigNumber)[]) => number | BigNumber, initialValue: number | BigNumber): number | BigNumber;
            reduce<U_1>(callbackfn: (previousValue: U_1, currentValue: number | BigNumber, currentIndex: number, array: (number | BigNumber)[]) => U_1, initialValue: U_1): U_1;
            reduceRight(callbackfn: (previousValue: number | BigNumber, currentValue: number | BigNumber, currentIndex: number, array: (number | BigNumber)[]) => number | BigNumber): number | BigNumber;
            reduceRight(callbackfn: (previousValue: number | BigNumber, currentValue: number | BigNumber, currentIndex: number, array: (number | BigNumber)[]) => number | BigNumber, initialValue: number | BigNumber): number | BigNumber;
            reduceRight<U_2>(callbackfn: (previousValue: U_2, currentValue: number | BigNumber, currentIndex: number, array: (number | BigNumber)[]) => U_2, initialValue: U_2): U_2;
            find<S_2 extends number | BigNumber>(predicate: (value: number | BigNumber, index: number, obj: (number | BigNumber)[]) => value is S_2, thisArg?: any): S_2 | undefined;
            find(predicate: (value: number | BigNumber, index: number, obj: (number | BigNumber)[]) => unknown, thisArg?: any): number | BigNumber | undefined;
            findIndex(predicate: (value: number | BigNumber, index: number, obj: (number | BigNumber)[]) => unknown, thisArg?: any): number;
            fill(value: number | BigNumber, start?: number | undefined, end?: number | undefined): [BigNumber, number] & {
                rewardsPerSecond: BigNumber;
                rewardsEndTimestamp: number;
            };
            copyWithin(target: number, start?: number | undefined, end?: number | undefined): [BigNumber, number] & {
                rewardsPerSecond: BigNumber;
                rewardsEndTimestamp: number;
            };
            entries(): IterableIterator<[number, number | BigNumber]>;
            keys(): IterableIterator<number>;
            values(): IterableIterator<number | BigNumber>;
            includes(searchElement: number | BigNumber, fromIndex?: number | undefined): boolean;
            flatMap<U_3, This = undefined>(callback: (this: This, value: number | BigNumber, index: number, array: (number | BigNumber)[]) => U_3 | readonly U_3[], thisArg?: This | undefined): U_3[];
            flat<A, D extends number = 1>(this: A, depth?: D | undefined): FlatArray<A, D>[];
            [Symbol.iterator](): IterableIterator<number | BigNumber>;
            [Symbol.unscopables]: {
                [x: number]: boolean | undefined;
                length?: boolean | undefined;
                toString?: boolean | undefined;
                toLocaleString?: boolean | undefined;
                pop?: boolean | undefined;
                push?: boolean | undefined;
                concat?: boolean | undefined;
                join?: boolean | undefined;
                reverse?: boolean | undefined;
                shift?: boolean | undefined;
                slice?: boolean | undefined;
                sort?: boolean | undefined;
                splice?: boolean | undefined;
                unshift?: boolean | undefined;
                indexOf?: boolean | undefined;
                lastIndexOf?: boolean | undefined;
                every?: boolean | undefined;
                some?: boolean | undefined;
                forEach?: boolean | undefined;
                map?: boolean | undefined;
                filter?: boolean | undefined;
                reduce?: boolean | undefined;
                reduceRight?: boolean | undefined;
                find?: boolean | undefined;
                findIndex?: boolean | undefined;
                fill?: boolean | undefined;
                copyWithin?: boolean | undefined;
                entries?: boolean | undefined;
                keys?: boolean | undefined;
                values?: boolean | undefined;
                includes?: boolean | undefined;
                flatMap?: boolean | undefined;
                flat?: boolean | undefined;
                [Symbol.iterator]?: boolean | undefined;
                readonly [Symbol.unscopables]?: boolean | undefined;
                at?: boolean | undefined;
            };
            at(index: number): number | BigNumber | undefined;
            rewardsPerSecond: BigNumber;
            rewardsEndTimestamp: number;
            enabled: boolean;
        }>;
        getFlywheelClaimableRewardsForMarket(poolAddress: string, market: string, account: string): Promise<import("./Flywheel").FlywheelClaimableRewards[]>;
        getFlywheelClaimableRewardsByMarkets(poolAddress: string, markets: string[], account: string): Promise<import("./Flywheel").FlywheelClaimableRewards[]>;
        getFlywheelClaimableRewardsForPool(poolAddress: string, account: string): Promise<{
            flywheel: string;
            rewardToken: string;
            amount: BigNumber;
        }[]>;
        getAllFlywheelClaimableRewards(account: string): Promise<{
            rewardToken: string;
            amount: BigNumber;
        }[]>;
        getFlywheelEnabledMarkets(flywheelAddress: string): Promise<string[]>;
        setStaticRewardInfo(staticRewardsAddress: string, marketAddress: string, rewardInfo: import("../../typechain/FlywheelStaticRewards").FlywheelStaticRewards.RewardsInfoStruct): Promise<ethers.ContractTransaction>;
        setFlywheelRewards(flywheelAddress: string, rewardsAddress: string): Promise<ethers.ContractTransaction>;
        addMarketForRewardsToFlywheelCore(flywheelCoreAddress: string, marketAddress: string): Promise<ethers.ContractTransaction>;
        addStrategyForRewardsToFlywheelCore(flywheelCoreAddress: string, marketAddress: string): Promise<ethers.ContractTransaction>;
        addFlywheelCoreToComptroller(flywheelCoreAddress: string, comptrollerAddress: string): Promise<ethers.ContractTransaction>;
        claimRewardsForMarket(market: string, flywheels: string[]): Promise<ethers.ContractTransaction>;
        claimRewardsForMarkets(markets: string[], flywheels: string[]): Promise<ethers.ContractTransaction>;
        claimRewardsForPool(poolAddress: string): Promise<ethers.ContractTransaction>;
        claimRewardsForRewardToken(rewardToken: string): Promise<ethers.ContractTransaction>;
        claimAllRewards(): Promise<ethers.ContractTransaction>;
    };
} & TBase;
export {};
