import { Contract, ContractInterface } from "ethers";
import { IonicBaseConstructor } from "..";
import { AuthoritiesRegistry } from "../../typechain/AuthoritiesRegistry";
import { CompoundMarketERC4626 } from "../../typechain/CompoundMarketERC4626";
import { FlywheelStaticRewards } from "../../typechain/FlywheelStaticRewards";
import { ICErc20 } from "../../typechain/ICErc20";
import { ICErc20PluginRewards } from "../../typechain/ICErc20PluginRewards";
import { ILeveredPositionFactory } from "../../typechain/ILeveredPositionFactory";
import { ILiquidatorsRegistry } from "../../typechain/ILiquidatorsRegistry";
import { IonicComptroller } from "../../typechain/IonicComptroller";
import { IonicFlywheel } from "../../typechain/IonicFlywheel";
import { IonicFlywheelLensRouter } from "../../typechain/IonicFlywheelLensRouter";
import { JumpRateModel } from "../../typechain/JumpRateModel";
import { LeveredPosition } from "../../typechain/LeveredPosition";
import { LeveredPositionsLens } from "../../typechain/LeveredPositionsLens";
import { MasterPriceOracle } from "../../typechain/MasterPriceOracle";
import { OptimizedAPRVaultFirstExtension } from "../../typechain/OptimizedAPRVaultFirstExtension";
import { OptimizedAPRVaultSecondExtension } from "../../typechain/OptimizedAPRVaultSecondExtension";
import { OptimizedVaultsRegistry } from "../../typechain/OptimizedVaultsRegistry";
import { PoolLensSecondary } from "../../typechain/PoolLensSecondary";
import { PoolRolesAuthority } from "../../typechain/PoolRolesAuthority";
import { Unitroller } from "../../typechain/Unitroller";
import { SignerOrProvider } from "../IonicSdk";
type OptimizedAPRVaultWithExtensions = OptimizedAPRVaultFirstExtension & OptimizedAPRVaultSecondExtension;
export declare function withCreateContracts<TBase extends IonicBaseConstructor>(Base: TBase): {
    new (...args: any[]): {
        createContractInstance<T extends Contract>(abi: ContractInterface): (address: string, signerOrProvider?: SignerOrProvider) => T;
        createUnitroller: (address: string, signerOrProvider?: SignerOrProvider) => Unitroller;
        createIonicFlywheel: (address: string, signerOrProvider?: SignerOrProvider) => IonicFlywheel;
        createFlywheelStaticRewards: (address: string, signerOrProvider?: SignerOrProvider) => FlywheelStaticRewards;
        createJumpRateModel: (address: string, signerOrProvider?: SignerOrProvider) => JumpRateModel;
        createComptroller(comptrollerAddress: string, signerOrProvider?: SignerOrProvider): IonicComptroller;
        createICErc20(address: string, signerOrProvider?: SignerOrProvider): ICErc20;
        createICErc20PluginRewards(cTokenAddress: string, signerOrProvider?: SignerOrProvider): ICErc20PluginRewards;
        createMasterPriceOracle(signerOrProvider?: SignerOrProvider): MasterPriceOracle;
        createCompoundMarketERC4626(address: string, signerOrProvider?: SignerOrProvider): CompoundMarketERC4626;
        createOptimizedAPRVault(address: string, signerOrProvider?: SignerOrProvider): OptimizedAPRVaultWithExtensions;
        createOptimizedVaultsRegistry(signerOrProvider?: SignerOrProvider): OptimizedVaultsRegistry;
        createIonicFlywheelLensRouter(signerOrProvider?: SignerOrProvider): IonicFlywheelLensRouter;
        createLeveredPositionFactory(signerOrProvider?: SignerOrProvider): ILeveredPositionFactory;
        createLeveredPosition(address: string, signerOrProvider?: SignerOrProvider): LeveredPosition;
        createLeveredPositionLens(signerOrProvider?: SignerOrProvider): LeveredPositionsLens;
        createPoolLensSecondary(signerOrProvider?: SignerOrProvider): PoolLensSecondary;
        createILiquidatorsRegistry(signerOrProvider?: SignerOrProvider): ILiquidatorsRegistry;
        createAuthoritiesRegistry(signerOrProvider?: SignerOrProvider): AuthoritiesRegistry;
        createPoolRolesAuthority(poolAuthAddress: string, signerOrProvider?: SignerOrProvider): 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: import("ethers").Signer): any;
        removeSigner(provider: import("../IonicSdk").SupportedProvider): any;
        deployPool(poolName: string, enforceWhitelist: boolean, closeFactor: import("ethers").BigNumber, liquidationIncentive: import("ethers").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?: SignerOrProvider): import("../../typechain/EIP20Interface").EIP20Interface;
        getUnitrollerInstance(address: string, signerOrProvider?: SignerOrProvider): Unitroller;
        getPoolDirectoryInstance(signerOrProvider?: SignerOrProvider): Contract;
        getErc4626PluginInstance(address: string, signerOrProvider?: SignerOrProvider): import("../../typechain/IonicERC4626").IonicERC4626;
    };
} & TBase;
export type CreateContractsModule = ReturnType<typeof withCreateContracts<IonicBaseConstructor>>;
export {};
