estimateSize static method

TxSizeEstimate estimateSize({
  1. int numP2pkhInputs = 0,
  2. int numP2shInputs = 0,
  3. int numP2wpkhInputs = 0,
  4. int numP2trInputs = 0,
  5. int numP2pkhOutputs = 0,
  6. int numP2shOutputs = 0,
  7. int numP2wpkhOutputs = 0,
  8. int numP2trOutputs = 0,
})

Implementation

static TxSizeEstimate estimateSize({
  int numP2pkhInputs = 0,
  int numP2shInputs = 0,
  int numP2wpkhInputs = 0,
  int numP2trInputs = 0,
  int numP2pkhOutputs = 0,
  int numP2shOutputs = 0,
  int numP2wpkhOutputs = 0,
  int numP2trOutputs = 0,
}) {
  final hasWitness = numP2wpkhInputs > 0 || numP2trInputs > 0;

  final baseInputs = numP2pkhInputs * p2pkhInputSize +
      numP2shInputs * p2shInputSize;

  final witnessInputs = numP2wpkhInputs * p2wpkhInputSize +
      numP2trInputs * p2trInputSize;

  final outputs = numP2pkhOutputs * p2pkhOutputSize +
      numP2shOutputs * p2shOutputSize +
      numP2wpkhOutputs * p2wpkhOutputSize +
      numP2trOutputs * p2trOutputSize;

  final overhead = txOverhead + (hasWitness ? segwitOverhead : 0);
  final baseSize = overhead + baseInputs + witnessInputs + outputs;
  final totalSize = baseSize; // simplified; witness discount handled via weight

  // Weight = base_size * 3 + total_size (BIP-141)
  final weight = hasWitness
      ? (overhead + baseInputs + outputs) * 4 +
          (segwitOverhead + witnessInputs) // witness at 1x
      : baseSize * 4;

  final vsize = (weight + 3) ~/ 4;

  return TxSizeEstimate(
    baseSize: baseSize,
    totalSize: totalSize,
    weight: weight,
    vsize: vsize,
  );
}