MessageHeader.deserialize constructor
MessageHeader.deserialize(
- Uint8List data
Deserialize header from bytes
Implementation
factory MessageHeader.deserialize(Uint8List data) {
if (data.length < messageHeaderSize) {
throw ArgumentError('Invalid header size: ${data.length}');
}
final buffer = ByteData.sublistView(data, 0, messageHeaderSize);
// Read network magic
final magic = buffer.getUint32(0, Endian.little);
final network = BitcoinNetwork.fromMagic(magic);
if (network == null) {
throw ArgumentError('Unknown network magic: 0x${magic.toRadixString(16)}');
}
// Read command (null-terminated)
final commandBytes = <int>[];
for (int i = 0; i < commandSize; i++) {
final byte = buffer.getUint8(4 + i);
if (byte == 0) break;
commandBytes.add(byte);
}
final command = utf8.decode(commandBytes);
// Read payload length
final payloadLength = buffer.getUint32(16, Endian.little);
// Read checksum (4 raw bytes)
final checksum = Uint8List(4);
for (int i = 0; i < 4; i++) {
checksum[i] = buffer.getUint8(20 + i);
}
return MessageHeader(
network: network,
command: command,
payloadLength: payloadLength,
checksum: checksum,
);
}