Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

An unspent transaction output (UTXO) selection module for bitcoin.

License

NotificationsYou must be signed in to change notification settings

bitcoinjs/coinselect

Repository files navigation

TRAVISNPM

js-standard-style

An unspent transaction output (UTXO) selection module for bitcoin.

WARNING: Value units are insatoshis,not Bitcoin.

Algorithms

ModuleAlgorithmRe-orders UTXOs?
require('coinselect')Blackjack, with Accumulative fallbackBy Descending Value
require('coinselect/accumulative')Accumulative - accumulates inputs until the target value (+fees) is reached, skipping detrimental inputs-
require('coinselect/blackjack')Blackjack - accumulates inputs until the target value (+fees) is matched, does not accumulate inputs that go over the target value (within a threshold)-
require('coinselect/break')Break - breaks the input values into equal denominations ofoutput (as provided)-
require('coinselect/split')Split - splits the input values evenly between alloutputs, any providedoutput with.value remains unchanged-

Note: Each algorithm will add a change output if theinput - output - fee value difference is over a dust threshold.This is calculated independently byutils.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 thefee.

Example

letcoinSelect=require('coinselect')letfeeRate=55// satoshis per byteletutxos=[  ...,{txId:'...',vout:0,    ...,value:10000,// For use with PSBT:// not needed for coinSelect, but will be passed on to inputs laternonWitnessUtxo:Buffer.from('...full raw hex of txId tx...','hex'),// OR// if your utxo is a segwit output, you can use witnessUtxo insteadwitnessUtxo:{script:Buffer.from('... scriptPubkey hex...','hex'),value:10000// 0.0001 BTC and is the exact same as the value above}}]lettargets=[  ...,{address:'1EHNa6Q4Jz2uvNExL497mE43ikXhwF6kZm',value:5000}]// ...let{ inputs, outputs, fee}=coinSelect(utxos,targets,feeRate)// the accumulated fee is always returned for analysisconsole.log(fee)// .inputs and .outputs will be undefined if no solution was foundif(!inputs||!outputs)returnletpsbt=newbitcoin.Psbt()inputs.forEach(input=>psbt.addInput({hash:input.txId,index:input.vout,nonWitnessUtxo:input.nonWitnessUtxo,// OR (not both)witnessUtxo:input.witnessUtxo,}))outputs.forEach(output=>{// watch out, outputs may have been added that you need to provide// an output address/script forif(!output.address){output.address=wallet.getChangeAddress()wallet.nextChangeAddress()}psbt.addOutput({address:output.address,value:output.value,})})

LicenseMIT

About

An unspent transaction output (UTXO) selection module for bitcoin.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

[8]ページ先頭

©2009-2025 Movatter.jp