An unspent transaction output (UTXO) selection module for bitcoin.
WARNING: Value units are in
satoshis, not Bitcoin.
||Blackjack, with Accumulative fallback||By Descending Value|
||Accumulative - accumulates inputs until the target value (+fees) is reached, skipping detrimental inputs||-|
||Blackjack - accumulates inputs until the target value (+fees) is matched, does not accumulate inputs that go over the target value (within a threshold)||-|
||Break - breaks the input values into equal denominations of
||Split - splits the input values evenly between all
Note: Each algorithm will add a change output if the
input - output - fee value difference is over a dust threshold.
This is calculated independently by
utils.finalize, irrespective of the algorithm chosen, for the purposes of safety.
Pro-tip: if you want to send-all inputs to an output address,
coinselect/split with a partial output (
.address defined, no
.value) can be used to send-all, while leaving an appropriate amount for the
let coinSelect =let feeRate = 55 // satoshis per bytelet utxos =...txId: '...'vout: 0...value: 10000// For use with PSBT:// not needed for coinSelect, but will be passed on to inputs laternonWitnessUtxo: Buffer// OR// if your utxo is a segwit output, you can use witnessUtxo insteadwitnessUtxo:script: Buffervalue: 10000 // 0.0001 BTC and is the exact same as the value abovelet targets =...address: '1EHNa6Q4Jz2uvNExL497mE43ikXhwF6kZm'value: 5000// ...let inputs outputs fee =// the accumulated fee is always returned for analysisconsole// .inputs and .outputs will be undefined if no solution was foundif !inputs || !outputs returnlet psbt =inputsoutputs