decode method

  1. @override
void decode(
  1. Uint8List data,
  2. int protocolVersion,
  3. MessageEncoding encoding
)
override

Decode message from bytes

Implementation

@override
void decode(Uint8List data, int protocolVersion, MessageEncoding encoding) {
  if (data.length < 10) {
    throw WireException('Transaction too short');
  }

  int pos = 0;
  final buffer = ByteData.sublistView(data);

  // Version (4 bytes)
  version = _bytesToUint32(data, pos);
  pos += 4;

  // Input count
  final inputCount = VarInt.read(buffer, pos);
  pos += VarInt.size(inputCount);

  if (inputCount == 0) {
    throw WireException('Transaction must have at least one input');
  }

  // Transaction inputs
  txIn.clear();
  for (int i = 0; i < inputCount; i++) {
    final input = TxIn.deserialize(data, pos);
    txIn.add(input);
    pos += input.serializedSize;
  }

  // Output count
  final outputCount = VarInt.read(buffer, pos);
  pos += VarInt.size(outputCount);

  if (outputCount == 0) {
    throw WireException('Transaction must have at least one output');
  }

  // Transaction outputs
  txOut.clear();
  for (int i = 0; i < outputCount; i++) {
    final output = TxOut.deserialize(data, pos);
    txOut.add(output);
    pos += output.serializedSize;
  }

  // Lock time (4 bytes)
  lockTime = _bytesToUint32(data, pos);
}