import { AxiosInstance } from "axios";
import { BlockBase, BlockHeaderBase, BlockTipBase, TransactionBase } from "../base-objects";
import { UtxoBlockTip } from "../base-objects/blockTips/UtxoBlockTip";
import { FullBlockBase } from "../base-objects/FullBlockBase";
import { UtxoNodeStatus } from "../base-objects/status/UtxoStatus";
import { getAddressByLabelResponse, IIUtxoVin, IIUtxoVout, IUtxoTransactionListRes, IUtxoWalletRes, UtxoMccCreate } from "../types";
import { ChainType, getTransactionOptions, ReadRpcInterface } from "../types/genericMccTypes";
import { IUtxoChainTip, IUtxoGetAlternativeBlocksOptions, IUtxoGetAlternativeBlocksRes, IUtxoGetBlockHeaderRes, IUtxoGetBlockRes, IUtxoGetTransactionRes, IUtxoTransactionAdditionalData } from "../types/utxoTypes";
export interface objectConstructors<BTipCon extends BlockTipBase, BHeadCon extends BlockHeaderBase, BlockCon extends BlockBase, FBlockCon extends FullBlockBase<TranCon>, TranCon extends TransactionBase> {
    transactionConstructor: new (d: IUtxoGetTransactionRes, a?: IUtxoTransactionAdditionalData) => TranCon;
    fullBlockConstructor: new (d: IUtxoGetBlockRes) => FBlockCon;
    blockConstructor: new (d: IUtxoGetBlockRes) => BlockCon;
    blockHeaderConstructor: new (d: IUtxoGetBlockHeaderRes) => BHeadCon;
    blockTipConstructor: new (d: IUtxoChainTip) => BTipCon;
}
export declare abstract class UtxoCore<BTipCon extends UtxoBlockTip, BHeadCon extends BlockHeaderBase, BlockCon extends BlockBase, FBlockCon extends FullBlockBase<TranCon>, TranCon extends TransactionBase> implements ReadRpcInterface<BTipCon, BHeadCon, BlockCon, FBlockCon, TranCon> {
    client: AxiosInstance;
    inRegTest: boolean;
    constructors: objectConstructors<BTipCon, BHeadCon, BlockCon, FBlockCon, TranCon>;
    chainType: ChainType;
    constructor(createConfig: UtxoMccCreate, constructors: objectConstructors<BTipCon, BHeadCon, BlockCon, FBlockCon, TranCon>);
    /**
     * Return node status object for Utxo nodes
     */
    getNodeStatus(): Promise<UtxoNodeStatus>;
    /**
     * On Utxo chains nodes always need full history
     * @returns 0
     */
    getBottomBlockHeight(): Promise<number>;
    private blockRequestBase;
    getFullBlock(blockNumberOrHash: string | number): Promise<FBlockCon>;
    /**
     * Returns the block information
     * @param blockHashOrHeight Provide either block hash or height of the block
     * @returns All available block information
     */
    getBlock(blockNumberOrHash: string | number): Promise<BlockCon>;
    getBlockHeader(blockNumberOrHash: number | string | any): Promise<BHeadCon>;
    /**
     * Get Block height (number of blocks) from connected chain
     * @returns block height (block count)
     */
    getBlockHeight(): Promise<number>;
    /**
     * Get transaction details
     * @param txId Transaction id
     * @param options provide verbose:boolean, set true if you want more info such as block hash...
     * @returns transaction details
     */
    getTransaction(txId: string, options?: getTransactionOptions): Promise<TranCon>;
    /**
     * Get header information about the block
     * @param blockHash
     * @returns
     */
    getBlockHeaderBase(blockHashOrHeight: string | number): Promise<IUtxoGetBlockHeaderRes>;
    /**
     * Get only tips of all the branches
     * @param height_gte
     * @returns
     */
    getBlockTips(height_gte: number): Promise<BTipCon[]>;
    /**
     * Get block tips and full block chain for all tips (all of heir branches) for the last x blocks (defined bt branch_len parameter)
     * @param branch_len the branch length indicating how long can branches be
     * @returns Array of LiteBlocks
     */
    getTopLiteBlocks(branch_len: number, read_main?: boolean): Promise<BTipCon[]>;
    /**
     * Get an array of all alternative chain tips
     * @returns
     */
    getTopBlocks(option?: IUtxoGetAlternativeBlocksOptions): Promise<IUtxoGetAlternativeBlocksRes>;
    /**
     * Get network info
     * @returns network info details
     */
    private getNetworkInfo;
    /**
     * Gets the block from main mining tip with provided height
     * @param blockNumber Block height
     * @returns Block hash
     */
    private getBlockHashFromHeight;
    /**
     *
     * @param height_gte
     * @param mainBranchProcess
     * @returns
     */
    private getBlockTipsHelper;
    /**
     * Creates a new wallet on node's database
     * @param walletLabel label of your wallet used as a reference for future use
     * @returns name of the created wallet and possible warnings
     */
    createWallet(walletLabel: string): Promise<IUtxoWalletRes>;
    /**
     * loads the wallet if it exist on node, but it has to be relisted
     * @param walletLabel wallet label to load
     * @returns
     */
    loadWallet(walletLabel: string): Promise<IUtxoWalletRes>;
    /**
     *
     * @param walletLabel label of wallet, if you dont have one create one with createWallet
     * @param label label of address within wallet (default to "")
     * @param address_type type of address (default to "legacy") options = ["legacy", "p2sh-segwit", "bech32"]
     * @returns
     */
    createAddress(walletLabel: string, addressLabel?: string, address_type?: string): Promise<any>;
    /**
     * List all wallets on node
     * @returns
     */
    listAllWallets(): Promise<string[]>;
    /**
     * List all addresses by their label on provided wallet
     * @param walletLabel label of the parent wallet we want to list addresses
     * @param addressLabel label of the addresses we want to list
     * @returns
     */
    listAllAddressesByLabel(walletLabel: string, addressLabel?: string): Promise<getAddressByLabelResponse[]>;
    /**
     * List all unspent transactions that happened between min and max blocks before current block
     * If we are in block 100 and set min to 10 and max to 40 we will get all transactions that happened
     * between block 60 and 90
     * @param walletLabel
     * @param min min block offset
     * @param max max block offset
     * @returns
     */
    listUnspentTransactions(walletLabel: string, min?: number, max?: number): Promise<IUtxoTransactionListRes[]>;
    createRawTransaction(walletLabel: string, vin: IIUtxoVin[], out: IIUtxoVout[]): Promise<any>;
    signRawTransaction(walletLabel: string, rawTx: string, keysList: string[]): Promise<any>;
    /**
     * Send raw transaction
     * @param walletLabel the label of the wallet we are sending the transaction from
     * @param signedRawTx hash of signed transaction
     * @returns transaction sending status
     */
    sendRawTransaction(walletLabel: string, signedRawTx: string): Promise<any>;
    /**
     * Send raw transaction and wait for it to be in next block
     * @param walletLabel the label of the wallet we are sending the transaction from
     * @param signedRawTx hash of signed transaction
     * @returns transaction sending status
     */
    sendRawTransactionInBlock(walletLabel: string, signedRawTx: string): Promise<any>;
    /**
     * Get private key from wallet
     * @notice Dont share this with anyone
     * @param walletLabel wallet label that owns the address
     * @param address
     * @returns private key
     */
    getPrivateKey(walletLabel: string, address: string): Promise<any>;
    recursive_block_hash(hash: string, processHeight: number): Promise<string[]>;
    recursive_block_tip(tip: BTipCon, processHeight: number): Promise<UtxoBlockTip[]>;
    /**
     *
     * @dev Note that miner has to be registered in miner wallet
     * @dev only in regtest mode
     * @param address
     * @param amount
     * @returns
     */
    fundAddress(address: string, amount: number): Promise<any>;
}
//# sourceMappingURL=UtxoCore.d.ts.map