Source code for coinselectpy.blackjack

from decimal import Decimal
from . import utils


# only add inputs if they don't bust the target value (aka, exact match)
# worst-case: O(n)
[docs]def blackjack(utxos, outputs, feeRate): feeRate = Decimal(feeRate) bytesAccum = utils.transactionBytes([], outputs) inAccum = 0 inputs = [] outAccum = utils.sumOrNaN(outputs) threshold = utils.dustThreshold({}, feeRate) for i in range(len(utxos)): input = utxos[i] inputBytes = utils.inputBytes(input) fee = feeRate * (bytesAccum + inputBytes) inputValue = Decimal(input['value']) # would it waste value? if ((inAccum + inputValue) > (outAccum + fee + threshold)): continue bytesAccum += inputBytes inAccum += inputValue inputs.append(input) # go again? if inAccum < outAccum + fee: continue return utils.finalize(inputs, outputs, feeRate) return {'fee': round(feeRate * bytesAccum)}