blackjackAlgorithm function
Implementation
SelectionModel blackjackAlgorithm(
List<InputModel> utxos, List<OutputModel> outputs, int feeRate) {
int bytesAccum = utils.transactionBytes(<InputModel>[], outputs);
int inAccum = 0;
List<InputModel> inputs = [];
final int? outAccum = utils.sumOrNull(outputs);
final threshold = utils.dustThreshold(/*OutputModel(), */ feeRate);
for (var i = 0; i < utxos.length; ++i) {
var input = utxos[i];
var inputBytes = utils.inputBytes(input);
var fee = feeRate * (bytesAccum + inputBytes);
// would it waste value?
if (input.value != null && outAccum != null) {
if ((inAccum + input.value!) > (outAccum + fee + threshold)) {
continue;
}
}
bytesAccum += inputBytes;
inAccum += input.value!;
inputs.add(input);
// go again?
if (outAccum != null && inAccum < outAccum + fee) {
continue;
}
return utils.finalize(inputs, outputs, feeRate);
}
return SelectionModel(feeRate * bytesAccum);
}