Data Structures
Internal data structures of blockchain objects and network messages.
Blockchain Objects
Signed transaction
Version 1 and 2
Field Name | Type | Length |
---|---|---|
Transaction type | Byte | 1 |
Version | Byte | 1 |
Transaction specific bytes | ||
Proofs version | Byte (constant, value=1) | 1 |
Proof size (N) | Short | 2 |
Proof | Array[Byte] | N |
Version 3+
Field Name | Type | Length |
---|---|---|
Transaction type | Byte | 1 |
Version | Byte | 1 |
Timestamp | Long | 8 |
Sender's key type | KeyType (Byte) | 1 |
Sender's public key | PublicKey (Array[Byte]) | 32 | 33 |
Fee | Long | 8 |
Transaction specific bytes | ||
Sponsor's key type | KeyType (Byte) | 1 |
Sponsor's public key | PublicKey (Array[Byte]) | 0 | 32 | 33 |
Proofs version | Byte (constant, value=1) | 1 |
Proof size (N) | Short | 2 |
Proof | Array[Byte] | N |
In version 3+ more fields are standardized. These are part of the transaction-specific bytes in versions 1 and 2.
Block
Field Name | Type | Length |
---|---|---|
Version (0x02 for Genesis block, 0x03 for common block) | Byte | 0 |
Timestamp | Long | 1 |
Parent block signature | Bytes | 64 |
Consensus block length (always 40 bytes) | Int | 4 |
Base target | Long | 8 |
Generation signature* | Bytes | 32 |
Transactions block length (N) | Int | 8 |
Transaction #1 bytes | Bytes | M1 |
... | ... | ... |
Transaction #K bytes | Bytes | MK |
Generator's public key | Bytes | 32 |
Block's signature | Bytes | 64 |
Generation signature is calculated as blake2b256
hash of the following bytes:
Field Name | Type | Length |
---|---|---|
Previous block's generation signature | Bytes | 32 |
Generator's public key | Bytes | 32 |
Block's signature is calculated from the following bytes:
Field Name | Type | Length |
---|---|---|
Version (0x02 for Genesis block, 0x03 for common block) | Byte | 0 |
Timestamp | Long | 1 |
Parent block signature | Bytes | 64 |
Consensus block length (always 40 bytes) | Int | 4 |
Base target | Long | 8 |
Generation signature* | Bytes | 32 |
Transactions block length (N) | Int | 8 |
Transaction #1 bytes | Bytes | M1 |
... | ... | ... |
Transaction #K bytes | Bytes | MK |
Generator's public key | Bytes | 32 |
Network messages
Network message structure
All network messages share the same structure, except the Handshake.
Field name | Type | Length |
---|---|---|
Packet length (BigEndian) | Int | 4 |
Magic Bytes | Bytes | 4 |
Content ID | Byte | 1 |
Payload length | Int | 4 |
Payload checksum | Bytes | 4 |
Payload | Bytes | N |
Magic Bytes are 0x12 0x34 0x56 0x78
. Payload checksum is the first 4 bytes of FastHash of Payload bytes. FastHash is the hash function Blake2b256(data)
.
Handshake message
Handshake is used to start communication between two nodes.
Field name | Type | Length |
---|---|---|
Application name length (N) | Byte | 1 |
Application name (UTF-8 encoded bytes) | Bytes | N |
Application version major | Int | 4 |
Application version minor | Int | 4 |
Application version patch | Int | 4 |
Node name length (M) | Byte | 1 |
Node name (UTF-8 encoded bytes) | Bytes | M |
Node nonce | Long | 8 |
Declared address length (K) or 0 if no declared address was set | Int | 4 |
Declared address bytes (if length is not 0) | Bytes | K |
Timestamp | Long | 8 |
GetPeers message
GetPeers message is sent when sending node wants to know of other nodes on network.
Field name | Type | Length |
---|---|---|
Packet length (BigEndian) | Int | 4 |
Magic Bytes | Bytes | 4 |
Content ID (0x01) | Byte | 1 |
Payload length | Int | 4 |
Payload checksum | Bytes | 4 |
Peers message
Peers message is a reply on GetPeers message.
Field name | Type | Length |
---|---|---|
Packet length (BigEndian) | Int | 4 |
Magic Bytes | Bytes | 4 |
Content ID (0x02) | Byte | 1 |
Payload length | Int | 4 |
Payload checksum | Bytes | 4 |
Peers count (N) | Int | 4 |
Peer #1 IP address | Bytes | 4 |
Peer #1 port | Int | 4 |
... | ... | ... |
Peer #N IP address | Bytes | 4 |
Peer #N port | Int | 4 |
GetSignatures message
Field name | Type | Length |
---|---|---|
Packet length (BigEndian) | Int | 4 |
Magic Bytes | Bytes | 4 |
Content ID (0x14) | Byte | 1 |
Payload length | Int | 4 |
Payload checksum | Bytes | 4 |
Block IDs count (N) | Int | 4 |
Block #1 ID | Bytes | 64 |
... | ... | ... |
Block #N ID | Bytes | 64 |
Signatures message
Field name | Type | Length |
---|---|---|
Packet length (BigEndian) | Int | 4 |
Magic Bytes | Bytes | 4 |
Content ID (0x15) | Byte | 1 |
Payload length | Int | 4 |
Payload checksum | Bytes | 4 |
Block signatures count (N) | Int | 4 |
Block #1 signature | Bytes | 64 |
... | ... | ... |
Block #N signature | Bytes | 64 |
GetBlock message
Field name | Type | Length |
---|---|---|
Packet length (BigEndian) | Int | 4 |
Magic Bytes | Bytes | 4 |
Content ID (0x16) | Byte | 1 |
Payload length | Int | 4 |
Payload checksum | Bytes | 4 |
Block ID | Bytes | 64 |
Block message
Field name | Type | Length |
---|---|---|
Packet length (BigEndian) | Int | 4 |
Magic Bytes | Bytes | 4 |
Content ID (0x17) | Byte | 1 |
Payload length | Int | 4 |
Payload checksum | Bytes | 4 |
Block bytes (N) | Bytes | N |
Score message
Field name | Type | Length |
---|---|---|
Packet length (BigEndian) | Int | 4 |
Magic Bytes | Bytes | 4 |
Content ID (0x18) | Byte | 1 |
Payload length | Int | 4 |
Payload checksum | Bytes | 4 |
Score (N bytes) | BigInt | N |
Transaction message
Field name | Type | Length |
---|---|---|
Packet length (BigEndian) | Int | 4 |
Magic Bytes | Bytes | 4 |
Content ID (0x19) | Byte | 1 |
Payload length | Int | 4 |
Payload checksum | Bytes | 4 |
Transaction (N bytes) | Bytes | N |
Checkpoint message
Field name | Type | Length |
---|---|---|
Packet length (BigEndian) | Int | 4 |
Magic Bytes | Bytes | 4 |
Content ID (0x64) | Byte | 1 |
Payload length | Int | 4 |
Payload checksum | Bytes | 4 |
Checkpoint items count (N) | Int | 4 |
Checkpoint #1 height | Long | 8 |
Checkpoint #1 signature | Bytes | 64 |
... | ... | ... |
Checkpoint #N height | Long | 8 |
Checkpoint #N signature | Bytes | 64 |
Last updated