Сетевые сообщения

В этом разделе приведена структура сетевых сообщений в блокчейн-платформе Waves Enterprise.

Network message

Все сетевые сообщения, за исключением Handshake, базируются на следующей структуре:

Порядковый номер поля

Поле

Тип

Размер поля в байтах

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 следующие: 0x12, 0x34, 0x56, 0x78. Контрольная сумма полезной нагрузки это первые 4 байта от _FastHash_ от байтов _Payload_. FastHash это хеш-функция Blake2b256(data).

Handshake message

Handshake сообщение предназначена для первичного обмена данными между двумя нодами. Авторизованный Handshake содержит блокчейн-адрес владельца ноды и подпись. Неподписанные Handshake сообщения не принимаются.

Авторизованный Handshake

Порядковый номер поля

Поле

Тип

Размер поля в байтах

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 сообщение отправляется для запроса сетевых адресов участников сети.

Порядковый номер поля

Поле

Тип

Размер поля в байтах

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 сообщение является ответом на запрос GetPeers.

Порядковый номер поля

Поле

Тип

Размер поля в байтах

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

Порядковый номер поля

Поле

Тип

Размер поля в байтах

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

Порядковый номер поля

Поле

Тип

Размер поля в байтах

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

Порядковый номер поля

Поле

Тип

Размер поля в байтах

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

Порядковый номер поля

Поле

Тип

Размер поля в байтах

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

Порядковый номер поля

Поле

Тип

Размер поля в байтах

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

Порядковый номер поля

Поле

Тип

Размер поля в байтах

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

Порядковый номер поля

Поле

Тип

Размер поля в байтах

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