Binary messages exchanged between Ixian Core peers.
Each message has a numeric code and may have a request/response pairing.
Detailed structure for each message is documented on its own subpage.
Envelope (v6)
This section defines the binary envelope used by all core messages and links to each message specification. Every message lives in its own file.
| Offset | Size | Type | Field | Description |
|---|
| 0 | 1 | uint8 | start | Constant 0xEA |
| 1 | 2 | uint16 | code | ProtocolMessageCode for the payload |
| 3 | 4 | uint32 | length | Payload length in bytes (must be > 0, < 50MB) |
| 7 | 4 | uint32 | checksum | CRC32C of the payload bytes |
| 11 | 1 | uint8 | headerChecksum | XOR checksum over the 11 header bytes above |
| 12 | N | byte[length] | payload | Message payload, structure depends on code |
Header checksum: computed by XOR'ing all header bytes before headerChecksum, starting with seed 0x7F.
Payload checksum: CRC32C (Castagnoli) over the payload bytes.
Global Serialization Rules
The following rules apply to all message payloads unless specified otherwise.
- Endianness: All multi-byte integer types (
uint16, int32, uint64, etc.) are serialized in Little-Endian byte order.
- String Encoding: All strings are encoded using the standard .NET
BinaryWriter format, which prefixes the UTF-8 bytes with the string's length encoded as a 7-bit integer.
Handshake
| Name | Code | Description |
|---|
| hello | 0 | Initiates handshake; includes node ID, network ID, and capabilities. |
| helloData | 1 | Response to hello, confirming handshake and sharing peer data. |
| bye | 2 | Graceful session termination with details disconnection. |
Presence
Transactions
Other
| Name | Code | Description |
|---|
| getBalance2 | 30 | Requests wallet balance by address. |
| balance2 | 31 | Returns wallet balance data. |
| inventory2 | 59 | Announces available blocks or transactions by hash or height. |
| rejected | 3 | Message rejected with details about rejection. |
| s2data | 26 | Transfers S2 data payloads across the overlay. |
Notes
- Messages with
Chunk may repeat until the dataset is complete.
- Numeric codes are for wire-level interoperability; use symbolic names in code.
- Obsolete and deprecated codes are intentionally omitted here.