send-crypto
Version:
A minimal JavaScript library / wallet for sending crypto assets
50 lines • 3.16 kB
JavaScript
import BigNumber from "bignumber.js";
/**
* sortUTXOs compares two UTXOs by amount, then confirmations and then hash.
*
* @example
* sortUTXOs({amount: 1, confirmations: 1}, {amount: 2, confirmations: 0});
* // -1, representing that the first parameter should be ordered first.
*
* @returns a negative value to represent that a should come before b or a
* positive value to represent that b should come before a.
*/
export const sortUTXOs = (a, b) => {
// Sort greater values first
if (a.amount !== b.amount) {
return b.amount - a.amount;
}
// Sort older UTXOs first
if (a.confirmations !== b.confirmations) {
return a.confirmations - b.confirmations;
}
return a.txHash <= b.txHash ? -1 : 1;
};
/**
* fixValue turns a readable value, e.g. `0.0001` BTC, to the value in the smallest
* unit, e.g. `10000` sats.
*
* @example
* fixValue(0.0001, 8) = 10000;
*
* @param value Value in the readable representation, e.g. `0.0001` BTC.
* @param decimals The number of decimals to shift by, e.g. 8.
*/
export const fixValue = (value, decimals) => new BigNumber(value)
.multipliedBy(new BigNumber(10).exponentiatedBy(decimals))
.decimalPlaces(0)
.toNumber();
/**
* fixUTXO calls {{fixValue}} on the value of the UTXO.
*/
export const fixUTXO = (utxo, decimals) => ({
...utxo,
amount: fixValue(utxo.amount, decimals),
});
/**
* fixUTXOs maps over an array of UTXOs and calls {{fixValue}}.
*/
export const fixUTXOs = (utxos, decimals) => {
return utxos.map((utxo) => fixUTXO(utxo, decimals));
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXR4by5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdXR4by50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFNBQVMsTUFBTSxjQUFjLENBQUM7QUFVckM7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBTyxFQUFFLENBQU8sRUFBVSxFQUFFO0lBQ2xELDRCQUE0QjtJQUM1QixJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRTtRQUN2QixPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztLQUM5QjtJQUNELHlCQUF5QjtJQUN6QixJQUFJLENBQUMsQ0FBQyxhQUFhLEtBQUssQ0FBQyxDQUFDLGFBQWEsRUFBRTtRQUNyQyxPQUFPLENBQUMsQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLGFBQWEsQ0FBQztLQUM1QztJQUNELE9BQU8sQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pDLENBQUMsQ0FBQztBQUVGOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQWEsRUFBRSxRQUFnQixFQUFFLEVBQUUsQ0FDeEQsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDO0tBQ2YsWUFBWSxDQUFDLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUN6RCxhQUFhLENBQUMsQ0FBQyxDQUFDO0tBQ2hCLFFBQVEsRUFBRSxDQUFDO0FBRXBCOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLENBQUMsSUFBVSxFQUFFLFFBQWdCLEVBQVEsRUFBRSxDQUFDLENBQUM7SUFDNUQsR0FBRyxJQUFJO0lBQ1AsTUFBTSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQztDQUMxQyxDQUFDLENBQUM7QUFFSDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQXNCLEVBQUUsUUFBZ0IsRUFBRSxFQUFFO0lBQ2pFLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ3hELENBQUMsQ0FBQyJ9