/// <reference types="node" />
import { BitcoinBlockbookTransactionCursor, BitcoinBlockbookTransactionResult } from './BitcoinTypes';
import { IAirGapSignedTransaction } from '../../interfaces/IAirGapSignedTransaction';
import { AirGapTransactionStatus, IAirGapTransaction } from '../../interfaces/IAirGapTransaction';
import { SignedBitcoinTransaction } from '../../serializer/schemas/definitions/signed-transaction-bitcoin';
import { UnsignedTransaction } from '../../serializer/schemas/definitions/unsigned-transaction';
import { RawBitcoinTransaction } from '../../serializer/types';
import { CurrencyUnit, FeeDefaults, ICoinProtocol } from '../ICoinProtocol';
import { ProtocolSymbols } from '../../utils/ProtocolSymbols';
import { BitcoinProtocolOptions } from './BitcoinProtocolOptions';
import { ICoinSubProtocol } from '../ICoinSubProtocol';
export interface Vin {
    txid: string;
    sequence: any;
    n: number;
    addresses: string[];
    value: string;
    hex: string;
}
export interface Vout {
    value: string;
    n: number;
    hex: string;
    addresses: string[];
    spent?: boolean;
}
export interface Transaction {
    txid: string;
    version: number;
    vin: Vin[];
    vout: Vout[];
    blockhash: string;
    blockHeight: number;
    confirmations: number;
    blockTime: number;
    value: string;
    valueIn: string;
    fees: string;
    hex: string;
}
export interface Token {
    type: string;
    name: string;
    path: string;
    transfers: number;
    decimals: number;
    balance: string;
    totalReceived: string;
    totalSent: string;
}
export interface XPubResponse {
    page: number;
    totalPages: number;
    itemsOnPage: number;
    address: string;
    balance: string;
    totalReceived: string;
    totalSent: string;
    unconfirmedBalance: string;
    unconfirmedTxs: number;
    txs: number;
    transactions?: Transaction[];
    totalTokens?: number;
    tokens?: Token[];
}
export interface AddressResponse {
    page: number;
    totalPages: number;
    itemsOnPage: number;
    address: string;
    balance: string;
    totalReceived: string;
    totalSent: string;
    unconfirmedBalance: string;
    unconfirmedTxs: number;
    txs: number;
    transactions?: Transaction[];
}
export declare class BitcoinProtocol implements ICoinProtocol {
    readonly options: BitcoinProtocolOptions;
    symbol: string;
    name: string;
    marketSymbol: string;
    feeSymbol: string;
    subProtocols: never[];
    feeDefaults: FeeDefaults;
    decimals: number;
    feeDecimals: number;
    identifier: ProtocolSymbols;
    units: CurrencyUnit[];
    supportsHD: boolean;
    standardDerivationPath: string;
    addressIsCaseSensitive: boolean;
    addressValidationPattern: string;
    addressPlaceholder: string;
    constructor(options?: BitcoinProtocolOptions);
    getBlockExplorerLinkForAddress(address: string): Promise<string>;
    getBlockExplorerLinkForTxId(txId: string): Promise<string>;
    getPublicKeyFromMnemonic(mnemonic: string, derivationPath: string, password?: string): Promise<string>;
    getPrivateKeyFromMnemonic(mnemonic: string, derivationPath: string, password?: string): Promise<Buffer>;
    getExtendedPrivateKeyFromMnemonic(mnemonic: string, derivationPath: string, password?: string): Promise<string>;
    getPublicKeyFromHexSecret(secret: string, derivationPath: string): Promise<string>;
    getPrivateKeyFromHexSecret(secret: string, derivationPath: string): Promise<Buffer>;
    getExtendedPrivateKeyFromHexSecret(secret: string, derivationPath: string): Promise<string>;
    getAddressFromPublicKey(publicKey: string): Promise<string>;
    getAddressesFromPublicKey(publicKey: string): Promise<string[]>;
    getAddressFromExtendedPublicKey(extendedPublicKey: string, visibilityDerivationIndex: number, addressDerivationIndex: number): Promise<string>;
    getAddressesFromExtendedPublicKey(extendedPublicKey: string, visibilityDerivationIndex: number, addressCount: number, offset: number): Promise<string[]>;
    signWithPrivateKey(privateKey: Buffer, transaction: RawBitcoinTransaction): Promise<IAirGapSignedTransaction>;
    signWithExtendedPrivateKey(extendedPrivateKey: string, transaction: RawBitcoinTransaction): Promise<string>;
    getTransactionDetails(unsignedTx: UnsignedTransaction): Promise<IAirGapTransaction[]>;
    getTransactionDetailsFromSigned(signedTx: SignedBitcoinTransaction): Promise<IAirGapTransaction[]>;
    getBalanceOfAddresses(addresses: string[]): Promise<string>;
    getBalanceOfPublicKey(publicKey: string): Promise<string>;
    getBalanceOfExtendedPublicKey(extendedPublicKey: string, offset?: number): Promise<string>;
    getBalanceOfPublicKeyForSubProtocols(publicKey: string, subProtocols: ICoinSubProtocol[]): Promise<string[]>;
    getAvailableBalanceOfAddresses(addresses: string[]): Promise<string>;
    estimateMaxTransactionValueFromExtendedPublicKey(extendedPublicKey: string, recipients: string[], fee?: string): Promise<string>;
    estimateMaxTransactionValueFromPublicKey(publicKey: string, recipients: string[], fee?: string): Promise<string>;
    estimateFeeDefaultsFromExtendedPublicKey(publicKey: string, recipients: string[], values: string[], data?: any): Promise<FeeDefaults>;
    estimateFeeDefaultsFromPublicKey(publicKey: string, recipients: string[], values: string[], data?: any): Promise<FeeDefaults>;
    prepareTransactionFromExtendedPublicKey(extendedPublicKey: string, offset: number, recipients: string[], values: string[], fee: string): Promise<RawBitcoinTransaction>;
    prepareTransactionFromPublicKey(publicKey: string, recipients: string[], values: string[], fee: string): Promise<RawBitcoinTransaction>;
    broadcastTransaction(rawTransaction: string): Promise<string>;
    getTransactionsFromExtendedPublicKey(extendedPublicKey: string, limit: number, cursor?: BitcoinBlockbookTransactionCursor, addressOffset?: number): Promise<BitcoinBlockbookTransactionResult>;
    getTransactionsFromPublicKey(publicKey: string, limit: number, cursor?: BitcoinBlockbookTransactionCursor): Promise<BitcoinBlockbookTransactionResult>;
    getTransactionsFromAddresses(addresses: string[], limit: number, cursor?: BitcoinBlockbookTransactionCursor): Promise<BitcoinBlockbookTransactionResult>;
    private containsSome;
    signMessage(message: string, keypair: {
        privateKey: Buffer;
    }): Promise<string>;
    verifyMessage(message: string, signature: string, publicKey: string): Promise<boolean>;
    getTransactionStatuses(transactionHashes: string[]): Promise<AirGapTransactionStatus[]>;
}
