/// <reference types="node" />
import { TxOutput } from 'bitcoinjs-lib';
import { Network } from '..';
import { UtxoPsbt } from './UtxoPsbt';
import { UtxoTransaction } from './UtxoTransaction';
import { UtxoTransactionBuilder } from './UtxoTransactionBuilder';
import { ChainCode, RootWalletKeys, WalletUnspent, WalletUnspentSigner } from './wallet';
/**
 * Public unspent data in BitGo-specific representation.
 */
export interface Unspent<TNumber extends number | bigint = number> {
    /**
     * Format: ${txid}:${vout}.
     * Use `parseOutputId(id)` to parse.
     */
    id: string;
    /**
     * The network-specific encoded address.
     * Use `toOutputScript(address, network)` to obtain scriptPubKey.
     */
    address: string;
    /**
     * The amount in satoshi.
     */
    value: TNumber;
}
export interface NonWitnessUnspent<TNumber extends number | bigint = number> extends Unspent<TNumber> {
    prevTx: Buffer;
}
export declare function isNonWitnessUnspent<TNumber extends number | bigint = number>(u: Unspent<TNumber>): u is NonWitnessUnspent<TNumber>;
/**
 * @return TxOutput from Unspent
 */
export declare function toOutput<TNumber extends number | bigint>(u: Unspent<TNumber>, network: Network): TxOutput<TNumber>;
/**
 * @param outputId
 * @return TxOutPoint
 */
export declare function parseOutputId(outputId: string): TxOutPoint;
/**
 * @param txid
 * @param vout
 * @return outputId
 */
export declare function formatOutputId({ txid, vout }: TxOutPoint): string;
export declare function getOutputIdForInput(i: {
    hash: Buffer;
    index: number;
}): TxOutPoint;
/**
 * Reference to output of an existing transaction
 */
export declare type TxOutPoint = {
    txid: string;
    vout: number;
};
/**
 * Output reference and script data.
 * Suitable for use for `txb.addInput()`
 */
export declare type PrevOutput<TNumber extends number | bigint = number> = TxOutPoint & TxOutput<TNumber>;
/**
 * @return PrevOutput from Unspent
 */
export declare function toPrevOutput<TNumber extends number | bigint>(u: Unspent<TNumber>, network: Network): PrevOutput<TNumber>;
/**
 * @param txb
 * @param u
 * @param sequence - sequenceId
 */
export declare function addToTransactionBuilder<TNumber extends number | bigint>(txb: UtxoTransactionBuilder<TNumber>, u: Unspent<TNumber>, sequence?: number): void;
/**
 * Add a verifiable change output to the PSBT. The change output and all data
 * needed to verify it from public keys only are added to the PSBT.
 *
 * @param psbt the PSBT to add change output to
 * @param rootWalletKeys keys that will be able to spend the output
 * @param chain chain code to use for deriving scripts (and to determine script
 *              type) chain is an API parameter in the BitGo API, and may be
 *              any valid ChainCode
 * @param index derivation index for the change address
 * @param value value of the change output
 */
export declare function addChangeOutputToPsbt(psbt: UtxoPsbt<UtxoTransaction<bigint>>, rootWalletKeys: RootWalletKeys, chain: ChainCode, index: number, value: bigint): void;
export declare function addToPsbt(psbt: UtxoPsbt<UtxoTransaction<bigint>>, u: WalletUnspent<bigint>, rootSigner: WalletUnspentSigner<RootWalletKeys>, network: Network): void;
/**
 * Sum the values of the unspents.
 * Throws error if sum is not a safe integer value, or if unspent amount types do not match `amountType`
 * @param unspents - array of unspents to sum
 * @param amountType - expected value type of unspents
 * @return unspentSum - type matches amountType
 */
export declare function unspentSum<TNumber extends number | bigint>(unspents: Unspent<TNumber>[], amountType?: 'number' | 'bigint'): TNumber;
//# sourceMappingURL=Unspent.d.ts.map