Сетевые сообщения¶
В этом разделе приведена структура сетевых сообщений в блокчейн-платформе 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 |