UNPKG

@xlink-network/xlink-sdk

Version:
96 lines (94 loc) 2.85 kB
import { decodeHex } from "./chunk-UZKY7HXV.mjs"; import { isNotNull } from "./chunk-E5Y3FGR6.mjs"; import { isSameUTXO, sumUTXO } from "./chunk-VA3HOX5B.mjs"; import { MAX_BIGINT, sum } from "./chunk-YV2TZGS6.mjs"; import { hasAny, sortBy } from "./chunk-PRLWYSC3.mjs"; // src/bitcoinUtils/selectUTXOs.ts var reselectSpendableUTXOsFactory = (availableUTXOs, getUTXOSpendable) => { return async (satsToSend, pinnedUTXOs, _lastTimeSelectedUTXOs) => { const lastTimeSelectedUTXOs = await Promise.all( _lastTimeSelectedUTXOs.map(getUTXOSpendable) ).then((utxos) => utxos.filter(isNotNull)); const otherAvailableUTXOs = await Promise.all( availableUTXOs.filter( (availableUTXO) => !lastTimeSelectedUTXOs.find( (selectedUTXO) => isSameUTXO(availableUTXO, selectedUTXO) ) ).map(getUTXOSpendable) ).then((utxos) => utxos.filter(isNotNull)); return selectUTXOs(satsToSend, lastTimeSelectedUTXOs, otherAvailableUTXOs); }; }; var reselectSpendableUTXOsWithSafePadFactory = (availableUTXOs, getUTXOSpendable) => { const reselect = reselectSpendableUTXOsFactory( availableUTXOs, getUTXOSpendable ); return async (satsToSend, pinnedUTXOs, lastTimeSelectedUTXOs) => { const utxos = await reselect(satsToSend, pinnedUTXOs, lastTimeSelectedUTXOs); const selectedAmount = sumUTXO(utxos); const difference = satsToSend - selectedAmount; if (difference > 0n) { return utxos.concat({ addressType: "p2pkh", txId: "0000000000000000000000000000000000000000000000000000000000000000", index: 0, amount: MAX_BIGINT, /** * OutScript.encode({ * type: 'pkh', * hash: hash160(secp256k1.getPublicKey( * hex.decode('0000000000000000000000000000000000000000000000000000000000000001'), * false, * )) * }) */ scriptPubKey: decodeHex( "76a91491b24bf9f5288532960ac687abb035127b1d28a588ac" ), isPublicKeyCompressed: false }); } return utxos; }; }; function selectUTXOs(satsToSend, selectedUTXOs, otherAvailableUTXOs) { const inputs = []; let sumValue = 0n; otherAvailableUTXOs = otherAvailableUTXOs.slice(); if (hasAny(selectedUTXOs)) { inputs.push(...selectedUTXOs); sumValue = sum([sumValue, ...selectedUTXOs.map((o) => o.amount)]); } otherAvailableUTXOs = sortBy( [(o) => -o.amount, (o) => o.blockHeight], otherAvailableUTXOs ); for (const utxo of otherAvailableUTXOs) { inputs.push(utxo); sumValue = sumValue + utxo.amount; if (sumValue >= satsToSend) { break; } } return inputs; } export { reselectSpendableUTXOsFactory, reselectSpendableUTXOsWithSafePadFactory, selectUTXOs }; //# sourceMappingURL=chunk-4P3N75GA.mjs.map