bsv-sdk
Version:
bsv sdk
48 lines (47 loc) • 1.52 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.getTransferNeedUtxosAndFee = exports.getDustThreshold = void 0;
const dustLimitFactor = 300;
function getDustThreshold(size) {
return Math.ceil((Math.ceil((250 * (size + 9 + 148)) / 1000) * dustLimitFactor) / 100);
}
exports.getDustThreshold = getDustThreshold;
function getTransferNeedUtxosAndFee(receivers, utxos, feeb) {
const minOutputAmount = getDustThreshold(34) + 34 * feeb;
let needAmount = 0;
for (let receiver of receivers) {
needAmount += receiver.amount;
}
let retUtxos = [];
let retAmount = 0;
let fee = 0;
let flag = 0;
for (let utxo of utxos) {
retAmount += utxo.satoshis;
retUtxos.push(utxo);
fee = Math.ceil((retUtxos.length * 148 + receivers.length * 34 + 10) * feeb);
const remainAmount = retAmount - needAmount - fee;
if (remainAmount == 0) {
flag = 1;
break;
}
else if (remainAmount > 0 && remainAmount < minOutputAmount) {
flag = 1;
fee += remainAmount;
break;
}
else if (remainAmount >= minOutputAmount) {
flag = 1;
fee = Math.ceil((retUtxos.length * 148 + (receivers.length + 1) * 34 + 10) * feeb);
break;
}
}
if (flag == 0) {
return null;
}
return {
utxos: retUtxos,
fee
};
}
exports.getTransferNeedUtxosAndFee = getTransferNeedUtxosAndFee;
;