Version 2 (0x02). Deterministic layout for hashing and signing.
Block Canonical Encoding
| Offset | Size | Field |
|---|---|---|
| 0 | 1 | Version byte (0x02) |
| 1 | 1 | Type byte |
| 2 | 8 | Asset (left-aligned UTF-8, zero-padded) |
| 10 | 32 | Account (hex-decoded) |
| 42 | 32 | Previous (hex-decoded; "0" → 32 zero bytes) |
| 74 | 8 | Balance (big-endian uint64) |
| 82 | 8 | Timestamp (big-endian int64) |
| 90+ | var | Type-specific tail |
| after tail | 32 | Representative (32 zero bytes if empty) |
| after rep | 48 | Genesis lease-timing tail — genesis only, present iff any timing field is non-zero: six big-endian uint64s (min_duration, settle_grace, force_settle_gap, escrow_expiry, archive_gap, max_attestation_skew) |
| trailer | 1+N | Send/burn only: memo_len (1 byte, 0–64) + memo bytes — always present on send and burn, even when the memo is empty, so a missing memo and an empty memo encode identically |
Memos
Send and burn blocks may carry a UTF-8 memo of up to 64 bytes (MaxMemoBytes, byte-counted). The memo is part of the canonical encoding, so it is covered by the block hash and signature.
Type Bytes
Send=0x01, Receive=0x02, Lease=0x04, LeaseAccept=0x05, LeaseSettle=0x06, Genesis=0x07, MultisigOpen=0x08, MultisigUpdate=0x09, LeaseCancel=0x0A, Burn=0x0B, LeaseForceSettle=0x0C, Mint=0x0D
0x03 is a retired, unallocated gap (the removed permissionless claim type).
Full Block Encoding
[canonical bytes] [8 bytes PoW nonce (little-endian uint64)]Vote Encoding
| Offset | Size | Field |
|---|---|---|
| 0 | 1 | Version (0x02) |
| 1 | 32 | RepPubKey |
| 33 | 32 | BlockHash |
| 65 | 32 | ConflictAccount |
| 97 | 32 | ConflictPrev |
| 129 | 8 | Timestamp (big-endian) |
| 137 | 1 | Final flag (0 = converge, 1 = final) |
| 138 | 2 | Signature length |
| 140 | N | Signature bytes |
Signing bytes are offsets 0–137 (138 bytes); the final flag is signed so a converge vote cannot be flipped into a final vote. Total wire size with a 64-byte ed25519 signature: 204 bytes. DecodeVote rejects any version byte other than 0x02.
PoW nonce = little-endian; all other numeric fields = big-endian.