@xlink-network/xlink-sdk
Version:
96 lines (94 loc) • 2.85 kB
JavaScript
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