decode method
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);
}