Anatomy of a Kaspa block

Fig 01 One Kaspa block
Isometric anatomy of a post-Toccata Kaspa BlockDAG Block (Block v2 · Tx v1) — tap a neighbouring block to walk the DAG, or open a transaction into its own anatomy
1.0×
Pinch to zoom · drag to orbit · tap a part ← → station · drag to orbit · E peel · M stamp · S slow · + − 0 zoom · D bytes · / search · Esc back
hash > target

A sealed Kaspa block, one of ten a second.

Byte anatomy
sample
wire offset 0 B—

header.version

u16 · 2 bytes · offset 0..2
46°
drag to orbit
Tap a field or byte to inspect it.
Mergeset sample
Block header
Block stream
Transactions
STATION 00 · COMPLETE INSTRUMENT

Post-Toccata Kaspa BlockDAG Block (Block Version 2 · Tx Version 1)

solids in view

Activated on June 30, 2026 at DAA score 474,165,565, the Toccata hard fork (Covenants++) sets the block header version to TOCCATA_BLOCK_VERSION = 2 (pre-Toccata: 1) and transaction version to TX_VERSION_TOCCATA = 1 (pre-Toccata: 0), while doubling the transient-mass limit to 1,000,000 grams.

// Consensus Recurrence & Mass Ceiling (KIP-16, KIP-17, KIP-20, KIP-21)
B.header.accepted_id_merkle_root = SeqCommit(B) = H_seq(SeqCommit(parent(B)), SeqStateRoot(B))
Compute ≤ 500,000g · Transient (4×bytes) ≤ 1,000,000g · Storage ≤ 500,000g — three independent per-block budgets
RelayFeeFloor(tx) ≈ 100 sompi/g × tx mass // rate = node policy (raised 1 → 100 sompi/g at Toccata)
BlockHeader v2 & Transaction v1 Wire Anatomy Tap row to inspect
Field / Substructure Type / Size Post-Toccata Consensus Role
header.version u16 = 2 Post-Toccata TOCCATA_BLOCK_VERSION = 2 (pre-Toccata: 1) — flags KIP-21 sequencing commit
header.parents_by_level CompressedParents Multi-level DAG tips under GHOSTDAG k = 124 (≤ 16 direct; cumulative ≤ 255 × 2048 uncompressed)
header.pruning_point Hash (32B) IBD bootstrap anchor · 1,080,000 blue-score depth (~30 h at 10 BPS)
header.hash_merkle_root Hash (32B) Merkle root over the block’s transaction IDs (txid omits signature_script)
header.accepted_id_merkle_root SeqCommit(B) (32B) KIP-21 H_seq(SeqCommit(parent), SeqStateRoot) via 256-bit ActiveLanes SMT
header.utxo_commitment Hash (32B) Rolling MuHash of the UTXO set (entries carry covenant_id)
header.{timestamp,bits,nonce} u64, u32, u64 ms clock, target difficulty, kHeavyHash matrix PoW nonce
header.{daa_score,blue_score,blue_work} u64, u64, Uint192 Committed in MergesetContextHash(B) & miner_payload_leaf(X)
tx_v1.inputs[].compute_budget u16 · script units Replaces v0 sig_op_count in the same TxInputMass slot; allowance q × 10,000 + 9,999 SU
tx_v1.outputs[].covenant Option<Binding> KIP-20 { authorizing_input: u16, covenant_id: Hash(32B) } lineage lock
tx_v1.{subnetwork_id, gas, payload} 20B, u64, Vec<u8> System lanes 0x00‖0… native & 0x01‖0… coinbase (tx.gas = 0) · user lane [ns:4B, 0x00*16] · ≤ 50 lanes/blk
Workload model Fee floor Σ (100 sompi/g)
Compute (≤ 500k)
412,000 g
script units
Transient (≤ 1M)
642,800 g
KB / 250 KB cap
Storage (≤ 500k)
298,400 g
floor