encode method

  1. @override
Uint8List encode(
  1. int protocolVersion,
  2. MessageEncoding encoding
)
override

Encode message to bytes

Implementation

@override
Uint8List encode(int protocolVersion, MessageEncoding encoding) {
  final bytes = <int>[];

  // Protocol version (4 bytes)
  bytes.addAll(_encodeUint32(this.protocolVersion));

  // Services (8 bytes)
  bytes.addAll(_encodeUint64(services));

  // Timestamp (8 bytes)
  bytes.addAll(_encodeUint64(timestamp));

  // Receiver address (26 bytes - no timestamp)
  bytes.addAll(addrReceiver.serialize(includeTimestamp: false));

  // Sender address (26 bytes - no timestamp)
  bytes.addAll(addrSender.serialize(includeTimestamp: false));

  // Nonce (8 bytes)
  bytes.addAll(_encodeUint64(nonce));

  // User agent (variable length string)
  final userAgentBytes = utf8.encode(userAgent);
  VarInt.write(bytes, userAgentBytes.length);
  bytes.addAll(userAgentBytes);

  // Start height (4 bytes)
  bytes.addAll(_encodeUint32(startHeight));

  // Relay flag (1 byte) - only for protocol version >= 70001
  if (this.protocolVersion >= 70001) {
    bytes.add(relay ? 1 : 0);
  }

  return Uint8List.fromList(bytes);
}