MsgHeaders.deserialize constructor
MsgHeaders.deserialize(
- Uint8List data
Deserializes a MsgHeaders from byte data.
Implementation
factory MsgHeaders.deserialize(Uint8List data) {
final buffer = ByteData.sublistView(data);
var offset = 0;
// Read count of headers
final count = VarInt.read(buffer, offset);
offset += VarInt.size(count);
// Limit to max block headers per message
if (count > maxBlockHeadersPerMsg) {
throw WireException('headers',
'Too many block headers for message: count $count, max $maxBlockHeadersPerMsg');
}
final headers = <BlockHeader>[];
// Read each header
for (int i = 0; i < count; i++) {
// Ensure we have enough data for a block header
if (offset + blockHeaderLen > data.length) {
throw WireException('headers',
'Insufficient data for block header $i: need $blockHeaderLen, got ${data.length - offset}');
}
// Extract header bytes
final headerBytes = data.sublist(offset, offset + blockHeaderLen);
final header = BlockHeader.deserialize(headerBytes);
headers.add(header);
offset += blockHeaderLen;
// Read transaction count (should always be 0 for headers message)
if (offset >= data.length) {
throw WireException('headers', 'Insufficient data for transaction count');
}
final txCount = VarInt.read(buffer, offset);
offset += VarInt.size(txCount);
// Transaction count should be 0 in headers message
if (txCount != 0) {
throw WireException('headers',
'Invalid transaction count in headers message: expected 0, got $txCount');
}
}
return MsgHeaders(headers: headers);
}