decode method
Decode message from bytes
Implementation
@override
void decode(Uint8List data, int protocolVersion, MessageEncoding encoding) {
if (data.isEmpty) {
throw WireException('Addr message cannot be empty');
}
final buffer = ByteData.sublistView(data);
int offset = 0;
// Read count of addresses
final count = VarInt.read(buffer, offset);
offset += VarInt.size(count);
// Validate count
if (count > 1000) {
throw WireException('Too many addresses: $count (max 1000)');
}
// Calculate expected size
final addressSize = 30; // 4 + 8 + 16 + 2 = 30 bytes per address
final expectedSize = count * addressSize;
if (data.length < offset + expectedSize) {
throw WireException(
'Insufficient data for addresses: '
'need ${offset + expectedSize}, got ${data.length}',
);
}
// Read addresses
addressList.clear();
for (int i = 0; i < count; i++) {
final addr = NetworkAddress.deserialize(data, offset, includeTimestamp: true);
addressList.add(addr);
offset += addressSize;
}
}