import { NewPosition, OpenPosition, PositionInfo, SupportedChains } from "@ionicprotocol/types";
import { BigNumber, ContractTransaction } from "ethers";
import { CreateContractsModule } from "./CreateContracts";
export declare function withLeverage<TBase extends CreateContractsModule = CreateContractsModule>(Base: TBase): {
    new (...args: any[]): {
        getAllLeveredPositions(account: string): Promise<{
            openPositions: OpenPosition[];
            newPositions: NewPosition[];
        }>;
        getPositionsByAccount(account: string): Promise<{
            collateralMarket: string;
            borrowMarket: string;
            position: string;
            isClosed: boolean;
        }[]>;
        getPositionSupplyApy(cTokenAddress: string, amount: BigNumber): Promise<any>;
        getPositionBorrowApr(collateralMarket: string, borrowMarket: string, leverageRatio: BigNumber, amount: BigNumber): Promise<BigNumber>;
        leveredFactoryApprove(collateralUnderlying: string): Promise<any>;
        leveredPositionApprove(positionAddress: string, collateralUnderlying: string): Promise<any>;
        createAndFundPosition(collateralMarket: string, borrowMarket: string, fundingAsset: string, fundingAmount: BigNumber): Promise<ContractTransaction>;
        createAndFundPositionAtRatio(collateralMarket: string, borrowMarket: string, fundingAsset: string, fundingAmount: BigNumber, leverageRatio: BigNumber): Promise<ContractTransaction>;
        getRangeOfLeverageRatio(address: string): Promise<[BigNumber, BigNumber]>;
        isPositionClosed(address: string): Promise<boolean>;
        closeLeveredPosition(address: string, withdrawTo?: string): Promise<ContractTransaction | null>;
        adjustLeverageRatio(address: string, ratio: number): Promise<ContractTransaction>;
        fundPosition(positionAddress: string, underlyingToken: string, amount: BigNumber): Promise<ContractTransaction>;
        getNetAPY(supplyApy: BigNumber, supplyAmount: BigNumber, collateralMarket: string, borrowableMarket: string, leverageRatio: BigNumber): Promise<BigNumber>;
        getCurrentLeverageRatio(positionAddress: string): Promise<BigNumber>;
        getEquityAmount(positionAddress: string): Promise<BigNumber>;
        removeClosedPosition(positionAddress: string): Promise<ContractTransaction>;
        getPositionInfo(positionAddress: string, supplyApy: BigNumber): Promise<PositionInfo>;
        getNetApyForPositionAfterFunding(positionAddress: string, supplyApy: BigNumber, newFunding: BigNumber): Promise<BigNumber>;
        getLeverageRatioAfterFunding(positionAddress: string, newFunding: BigNumber): Promise<BigNumber>;
        createContractInstance<T extends import("ethers").Contract>(abi: import("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: 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: 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): import("ethers").Contract;
        getErc4626PluginInstance(address: string, signerOrProvider?: import("../IonicSdk").SignerOrProvider): import("../../typechain/IonicERC4626").IonicERC4626;
    };
} & TBase;
