Network messages

This section describes the structure of network messages in the Waves Enterprise blockchain platform.

Network message

All network messages, except Handshake, are based on the following structure:

Field order number

Field

Type

Field size in bytes

1

Packet length (BigEndian)

Int

4

2

Magic Bytes

Bytes

4

3

Content ID

Byte

1

4

Payload length

Int

4

5

Payload checksum

Bytes

4

6

Payload

Bytes

N

Magic Bytes are 0x12, 0x34, 0x56, 0x78. Payload checksum is first 4 bytes of_FastHash_of Payload bytes. FastHash is hash function Blake2b256(data).

Handshake message

Handshake message is intended for primary data exchange between two nodes. An authorized Handshake contains the node owner’s blockchain address and signature. Unsigned Handshakes are not accepted.

Authorized Handshake

Field order number

Field

Type

Field size in bytes

1

HandshakeType

byte

1

2

Application name length (N)

Byte

1

3

Application name (UTF-8 encoded bytes)

Bytes

N

4

Application version major

Int

4

5

Application version minor

Int

4

6

Application version patch

Int

4

7

Consensus name lenght (P)

Byte

1

8

Consensus name lenght (UTF-8 encoded bytes)

Bytes

P

9

Node name length (M)

Byte

1

10

Node name (UTF-8 encoded bytes)

Bytes

M

12

Node nonce

Long

8

13

Declared address length (K) or 0 if no declared address was set

Int

4

14

Declared address bytes (if length is not 0)

Bytes

K

15

Peer port

Int

4

16

Node owner address

Bytes

26

17

Signature

Bytes

64

GetPeers message

GetPeers message is sent to request network addresses of network participants.

Field order number

Field

Type

Field size in bytes

1

Packet length (BigEndian)

Int

4

2

Magic Bytes

Bytes

4

3

Content ID (0x01)

Byte

1

4

Payload length

Int

4

5

Payload checksum

Bytes

4

Peers message

Peers message is a response to a GetPeers request.

Field order number

Field

Type

Field size in bytes

1

Packet length (BigEndian)

Int

4

2

Magic Bytes

Bytes

4

3

Content ID (0x02)

Byte

1

4

Payload length

Int

4

5

Payload checksum

Bytes

4

6

Peers count (N)

Int

4

7

Peer #1 IP address

Bytes

4

8

Peer #1 port

Int

4

6 + 2 * N - 1

Peer #N IP address

Bytes

4

6 + 2 * N

Peer #N port

Int

4

GetSignatures message

Field order number

Field

Type

Field size in bytes

1

Packet length (BigEndian)

Int

4

2

Magic Bytes

Bytes

4

3

Content ID (0x14)

Byte

1

4

Payload length

Int

4

5

Payload checksum

Bytes

4

6

Block IDs count (N)

Int

4

7

Block #1 ID

Bytes

64

6 + N

Block #N ID

Bytes

64

Signatures message

Field order number

Field

Type

Field size in bytes

1

Packet length (BigEndian)

Int

4

2

Magic Bytes

Bytes

4

3

Content ID (0x15)

Byte

1

4

Payload length

Int

4

5

Payload checksum

Bytes

4

6

Block signatures count (N)

Int

4

7

Block #1 signature

Bytes

64

6 + N

Block #N signature

Bytes

64

GetBlock message

Field order number

Field

Type

Field size in bytes

1

Packet length (BigEndian)

Int

4

2

Magic Bytes

Bytes

4

3

Content ID (0x16)

Byte

1

4

Payload length

Int

4

5

Payload checksum

Bytes

4

6

Block ID

Bytes

64

Block message

Field order number

Field

Type

Field size in bytes

1

Packet length (BigEndian)

Int

4

2

Magic Bytes

Bytes

4

3

Content ID (0x17)

Byte

1

4

Payload length

Int

4

5

Payload checksum

Bytes

4

6

Block bytes (N)

Bytes

N

Score message

Field order number

Field

Type

Field size in bytes

1

Packet length (BigEndian)

Int

4

2

Magic Bytes

Bytes

4

3

Content ID (0x18)

Byte

1

4

Payload length

Int

4

5

Payload checksum

Bytes

4

6

Score (N bytes)

BigInt

N

Transaction message

Field order number

Field

Type

Field size in bytes

1

Packet length (BigEndian)

Int

4

2

Magic Bytes

Bytes

4

3

Content ID (0x19)

Byte

1

4

Payload length

Int

4

5

Payload checksum

Bytes

4

6

Transaction (N bytes)

Bytes

N

Checkpoint message

Field order number

Field

Type

Field size in bytes

1

Packet length (BigEndian)

Int

4

2

Magic Bytes

Bytes

4

3

Content ID (0x64)

Byte

1

4

Payload length

Int

4

5

Payload checksum

Bytes

4

6

Checkpoint items count (N)

Int

4

7

Checkpoint #1 height

Long

8

8

Checkpoint #1 signature

Bytes

64

6 + 2 * N - 1

Checkpoint #N height

Long

8

6 + 2 * N

Checkpoint #N signature

Bytes

64