breakAlgorithm function

SelectionModel breakAlgorithm(
  1. List<InputModel> utxos,
  2. OutputModel output,
  3. int feeRate
)

Implementation

SelectionModel breakAlgorithm(List<InputModel> utxos, OutputModel output, int feeRate) {
  int bytesAccum = utils.transactionBytes(utxos, <OutputModel>[]);
  int? inAccum = utils.sumOrNull(utxos);
  if (output.value == null || inAccum == null) {
    return SelectionModel(feeRate * bytesAccum);
  }

  int outputBytes = utils.outputBytes(output);
  int outAccum = 0;
  List<OutputModel> outputs = [];

  while (true) {
    int fee = feeRate * (bytesAccum + outputBytes);

    // did we bust?
    if (inAccum < (outAccum + fee + output.value!)) {
      // premature?
      if (outAccum == 0) {
        return SelectionModel(fee);
      }

      break;
    }

    bytesAccum += outputBytes;
    outAccum += output.value!;
    outputs.add(output);
  }

  return utils.finalize(utxos, outputs, feeRate);
}