Message Headers#

All messages in the network protocol use the same container format, which provides a required multi-field message header and an optional payload. The message header format is:

Bytes

Name

Data Type

Description

4

start string

char[4]

Magic bytes indicating the originating network; used to seek to next message when stream state is unknown.

12

command name

char[12]

ASCII string which identifies what message type is contained in the payload. Followed by nulls (0x00) to pad out byte count; for example: version\0\0\0\0\0.

4

payload size

uint32_t

Number of bytes in payload. The current maximum number of bytes (MAX_SIZE) allowed in the payload by Dash Core is 32 MiB—messages with a payload size larger than this will be dropped or rejected.

4

checksum

char[4]

Added in protocol version 209.

First 4 bytes of SHA256(SHA256(payload)) in internal byte order.

If payload is empty, as in verack and getaddr messages, the checksum is always 0x5df6e0e2 (SHA256(SHA256())).

Example#

The following example is an annotated hex dump of a mainnet message header from a verack message which has no payload.

bf0c6bbd ................... Start string: Mainnet
76657261636b000000000000 ... Command name: verack + null padding
00000000 ................... Byte count: 0
5df6e0e2 ................... Checksum: SHA256(SHA256(<empty>))