UNPKG

bsv-sdk

Version:

bsv sdk

48 lines (47 loc) 1.52 kB
"use strict"; 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;