import { providers, BigNumber, BytesLike, PopulatedTransaction } from 'ethers';
export declare type tSmartBCHAddress = string;
export declare type tStringCurrencyUnits = string;
export declare type tStringDecimalUnits = string;
export declare type ENS = string;
/** InterestRate options */
export declare enum InterestRate {
    None = "None",
    Stable = "Stable",
    Variable = "Variable"
}
export declare enum Market {
    Proto = "proto",
    AMM = "amm"
}
export declare enum Network {
    mainnet = "mainnet",
    amber = "amber"
}
export declare enum ChainId {
    mainnet = 10000,
    amber = 10001
}
export declare type ConstantAddressesByNetwork = {
    [network: string]: {
        SYNTHETIX_PROXY_ADDRESS?: tSmartBCHAddress;
    };
};
export declare type GovernanceConfig = {
    BANDZ_GOVERNANCE_V2: tSmartBCHAddress;
    BANDZ_GOVERNANCE_V2_EXECUTOR_SHORT: tSmartBCHAddress;
    BANDZ_GOVERNANCE_V2_EXECUTOR_LONG: tSmartBCHAddress;
    BANDZ_GOVERNANCE_V2_HELPER: tSmartBCHAddress;
};
export declare type IncentivesConfig = {
    INCENTIVES_CONTROLLER: tSmartBCHAddress;
    INCENTIVES_CONTROLLER_REWARD_TOKEN: tSmartBCHAddress;
};
export declare type MigratorConfig = {
    LEND_TO_AAVE_MIGRATOR: tSmartBCHAddress;
};
export declare type LendingPoolMarketConfig = {
    LENDING_POOL: tSmartBCHAddress;
    WBCH_GATEWAY?: tSmartBCHAddress;
    FLASH_LIQUIDATION_ADAPTER?: tSmartBCHAddress;
    REPAY_WITH_COLLATERAL_ADAPTER?: tSmartBCHAddress;
    SWAP_COLLATERAL_ADAPTER?: tSmartBCHAddress;
    FAUCET?: tSmartBCHAddress;
};
export declare type LendingPoolConfig = {
    [network: string]: {
        [market: string]: LendingPoolMarketConfig;
    };
};
export declare type StakingNetworkConfig = {
    TOKEN_STAKING: tSmartBCHAddress;
    STAKING_REWARD_TOKEN: tSmartBCHAddress;
    STAKING_HELPER?: tSmartBCHAddress;
};
export declare type StakingConfig = {
    [network: string]: {
        [stake: string]: StakingNetworkConfig;
    };
};
export declare type TxBuilderConfig = {
    governance?: {
        [network: string]: GovernanceConfig;
    };
    incentives?: {
        [network: string]: IncentivesConfig;
    };
    migrator?: {
        [network: string]: MigratorConfig;
    };
    lendingPool?: LendingPoolConfig;
    staking?: StakingConfig;
};
export declare enum eSmartBCHTxType {
    ERC20_APPROVAL = "ERC20_APPROVAL",
    DLP_ACTION = "DLP_ACTION",
    GOVERNANCE_ACTION = "GOVERNANCE_ACTION",
    GOV_DELEGATION_ACTION = "GOV_DELEGATION_ACTION",
    STAKE_ACTION = "STAKE_ACTION",
    MIGRATION_LEND_AAVE = "MIGRATION_LEND_AAVE",
    FAUCET_MINT = "FAUCET_MINT",
    REWARD_ACTION = "REWARD_ACTION"
}
export declare enum ProtocolAction {
    default = "default",
    withdraw = "withdraw",
    deposit = "deposit",
    liquidationCall = "liquidationCall",
    liquidationFlash = "liquidationFlash",
    repay = "repay",
    swapCollateral = "swapCollateral",
    repayCollateral = "repayCollateral",
    withdrawBCH = "withdrawBCH",
    borrowBCH = "borrowBCH"
}
export declare enum GovernanceVote {
    Abstain = 0,
    Yes = 1,
    No = 2
}
export declare enum Stake {
    bandz = "bandz",
    bpt = "bpt"
}
export declare type GasRecommendationType = {
    [action: string]: {
        limit: string;
        recommended: string;
    };
};
export declare type GeneratedTx = {
    tx: transactionType;
    gas: {
        price: string;
        limit: string;
    };
};
export declare type transactionType = {
    value?: string;
    from?: string;
    to?: string;
    nonce?: number;
    gasLimit?: BigNumber;
    gasPrice?: BigNumber;
    data?: string;
    chainId?: number;
};
export declare type AddressModel = {
    ADDRESS_PROVIDER_ADDRESS: tSmartBCHAddress;
    LENDINGPOOL_ADDRESS: tSmartBCHAddress;
    LENDINGPOOL_CORE_ADDRESS: tSmartBCHAddress;
    SYNTHETIX_PROXY_ADDRESS: tSmartBCHAddress;
    GOVERNANCE_PROTO_CONTRACT: tSmartBCHAddress;
    LEND_TO_AAVE_MIGRATOR: tSmartBCHAddress;
    WBCH_GATEWAY: tSmartBCHAddress;
    FAUCET: tSmartBCHAddress;
    SWAP_COLLATERAL_ADAPTER: tSmartBCHAddress;
    REPAY_WITH_COLLATERAL_ADAPTER: tSmartBCHAddress;
    BANDZ_GOVERNANCE_V2: tSmartBCHAddress;
    BANDZ_GOVERNANCE_V2_EXECUTOR_SHORT: tSmartBCHAddress;
    BANDZ_GOVERNANCE_V2_EXECUTOR_LONG: tSmartBCHAddress;
    BANDZ_GOVERNANCE_V2_HELPER: tSmartBCHAddress;
    FLASHLIQUIDATION: tSmartBCHAddress;
    INCENTIVES_CONTROLLER: tSmartBCHAddress;
    INCENTIVES_CONTROLLER_REWARD_TOKEN: tSmartBCHAddress;
};
export declare type tCommonContractAddressBetweenMarkets = Pick<AddressModel, 'SYNTHETIX_PROXY_ADDRESS' | 'GOVERNANCE_PROTO_CONTRACT' | 'LEND_TO_AAVE_MIGRATOR' | 'WBCH_GATEWAY' | 'FAUCET' | 'SWAP_COLLATERAL_ADAPTER' | 'REPAY_WITH_COLLATERAL_ADAPTER' | 'FLASHLIQUIDATION' | 'INCENTIVES_CONTROLLER' | 'INCENTIVES_CONTROLLER_REWARD_TOKEN'>;
export declare type tDistinctContractAddressBetweenMarkets = Pick<AddressModel, 'ADDRESS_PROVIDER_ADDRESS' | 'LENDINGPOOL_ADDRESS' | 'LENDINGPOOL_CORE_ADDRESS'>;
export declare type tDistinctContractAddressBetweenMarketsV2 = Pick<AddressModel, 'LENDINGPOOL_ADDRESS'>;
export declare type tDistinctGovernanceV2Addresses = Pick<AddressModel, 'BANDZ_GOVERNANCE_V2' | 'BANDZ_GOVERNANCE_V2_EXECUTOR_SHORT' | 'BANDZ_GOVERNANCE_V2_EXECUTOR_LONG' | 'BANDZ_GOVERNANCE_V2_HELPER'>;
export declare type tdistinctStakingAddressesBetweenTokens = {
    TOKEN_STAKING_ADDRESS: tSmartBCHAddress;
    STAKING_REWARD_TOKEN_ADDRESS: tSmartBCHAddress;
    STAKING_HELPER_ADDRESS: tSmartBCHAddress;
    canUsePermit: boolean;
};
export declare type ContractAddresses = {
    [contractName: string]: tSmartBCHAddress;
};
export declare type Configuration = {
    network: Network;
    provider: providers.Provider;
};
export declare type SmartBCHTransactionTypeExtended = {
    txType: eSmartBCHTxType;
    tx: () => Promise<transactionType>;
    gas: GasResponse;
};
export declare type TransactionGenerationMethod = {
    rawTxMethod: () => Promise<PopulatedTransaction>;
    from: tSmartBCHAddress;
    value?: string;
    gasSurplus?: number;
    action?: ProtocolAction;
};
export declare type TransactionGasGenerationMethod = {
    txCallback: () => Promise<transactionType>;
    action?: ProtocolAction;
};
export declare type GasType = {
    gasLimit: string | undefined;
    gasPrice: string;
};
export declare type GasResponse = (force?: boolean) => Promise<GasType | null>;
export declare type TokenMetadataType = {
    name: string;
    symbol: string;
    decimals: number;
    address: string;
};
export declare type DefaultProviderKeys = {
    etherscan?: string;
    infura?: string;
    alchemy?: string;
};
export declare type GovernanceConfigType = {
    [network: string]: tDistinctGovernanceV2Addresses;
};
export declare type StakingConfigType = {
    [sToken: string]: {
        [network: string]: tdistinctStakingAddressesBetweenTokens;
    };
};
export declare type CommonConfigType = {
    [network: string]: tCommonContractAddressBetweenMarkets;
};
export declare type LendingPoolConfigType = {
    [pool: string]: {
        [network: string]: tDistinctContractAddressBetweenMarketsV2;
    };
};
export declare type EnabledNetworksType = {
    staking: {
        [sToken: string]: Network[];
    };
    lendingPool: {
        [market: string]: Network[];
    };
    governance: Network[];
    WBCHGateway: Network[];
    faucet: Network[];
    liquiditySwapAdapter: Network[];
    repayWithCollateralAdapter: Network[];
    bandzGovernanceV2: Network[];
    ltaMigrator: Network[];
    incentivesController: Network[];
};
export declare type PermitSignature = {
    amount: tStringCurrencyUnits;
    deadline: string;
    v: number;
    r: BytesLike;
    s: BytesLike;
};
export declare type FlashLoanParams = {
    assetToSwapToList: tSmartBCHAddress[];
    minAmountsToReceive: string[];
    swapAllBalance: boolean[];
    permitAmount: string[];
    deadline: string[];
    v: number[];
    r: BytesLike[];
    s: BytesLike[];
};
