import { ExchangeRate, Bitcoin, BitcoinUnit, Currency, MonetaryAmount } from "@interlay/monetary-js";
import { Big } from "big.js";
import { ApiPromise } from "@polkadot/api";
import { NominationAPI, OracleAPI, RedeemAPI } from "../parachain";
import { BitcoinCoreClient } from "./bitcoin-core-client";
import { KeyringPair } from "@polkadot/keyring/types";
import { InterbtcPrimitivesVaultId } from "@polkadot/types/lookup";
import { CollateralUnit, CurrencyUnit, WrappedCurrency } from "../types";
import { InterBtcApi } from "..";
import { AddressOrPair } from "@polkadot/api/types";
export interface ChainConfirmations {
    bitcoinConfirmations: number;
    parachainConfirmations: number;
}
export interface InitializeIssue {
    amount: MonetaryAmount<WrappedCurrency, BitcoinUnit>;
    issuingAccount: KeyringPair;
    vaultAddress: string;
}
export interface InitializeRedeem {
    amount: MonetaryAmount<WrappedCurrency, BitcoinUnit>;
    redeemingAccount: KeyringPair;
    redeemingBTCAddress: string;
}
export interface InitializationParams {
    initialize?: boolean;
    setStableConfirmations?: true | ChainConfirmations;
    setExchangeRate?: true | ExchangeRate<Bitcoin, BitcoinUnit, Currency<CollateralUnit>, CollateralUnit>;
    btcTxFees?: true | Big;
    enableNomination?: boolean;
    issue?: true | InitializeIssue;
    redeem?: true | InitializeRedeem;
    delayMs: number;
}
export declare function initializeStableConfirmations(api: ApiPromise, stableConfirmationsToSet: ChainConfirmations, account: AddressOrPair, bitcoinCoreClient: BitcoinCoreClient): Promise<void>;
export declare function initializeExchangeRate<U extends CurrencyUnit>(exchangeRateToSet: ExchangeRate<Bitcoin, BitcoinUnit, Currency<U>, U>, oracleAPI: OracleAPI): Promise<void>;
export declare function initializeBtcTxFees(fees: Big, oracleAPI: OracleAPI): Promise<void>;
export declare function initializeVaultNomination(enabled: boolean, nominationAPI: NominationAPI): Promise<void>;
export declare function initializeIssue(InterBtcApi: InterBtcApi, bitcoinCoreClient: BitcoinCoreClient, issuingAccount: KeyringPair, amountToIssue: MonetaryAmount<WrappedCurrency, BitcoinUnit>, vaultAccountId: InterbtcPrimitivesVaultId): Promise<void>;
export declare function initializeRedeem(redeemAPI: RedeemAPI, amountToRedeem: MonetaryAmount<WrappedCurrency, BitcoinUnit>, redeemBTCAddress: string): Promise<void>;
