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.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;
  }
}