coinSelect function

SelectionModel coinSelect(
  1. List<InputModel> utxos,
  2. List<OutputModel> outputs,
  3. int feeRate, {
  4. AlgorithmsEnum? algo,
})

Implementation

SelectionModel coinSelect(
    List<InputModel> utxos, List<OutputModel> outputs, int feeRate,
    {AlgorithmsEnum? algo}) {
  switch (algo) {
    case AlgorithmsEnum.accumulative:
      return accumulativeAlgorithm(utxos, outputs, feeRate);
    case AlgorithmsEnum.blackjack:
      return blackjackAlgorithm(utxos, outputs, feeRate);
    case AlgorithmsEnum.breakAlgo:
      if (outputs.length > 1) {
        throw ArgumentError(
            'Output parameter must contain at most one element.');
      }

      return breakAlgorithm(utxos, outputs.first, feeRate);
    case AlgorithmsEnum.split:
      return splitAlgorithm(utxos, outputs, feeRate);
    default:
      {
        utxos.sort((a, b) => _utxoScore(b, feeRate) - _utxoScore(a, feeRate));

        // attempt to use the blackjack strategy first (no change output)
        SelectionModel base = blackjackAlgorithm(utxos, outputs, feeRate);
        if (base.inputs != null) {
          return base;
        }

        // else, try the accumulative strategy
        return accumulativeAlgorithm(utxos, outputs, feeRate);
      }
  }
}