Latest
Search
K
Comment on page

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