Why Kaspa Exists ended on the change that makes the rest of this section possible: a block may name more than one parent. Before the shape of that structure, the thing being shaped - one block.
What a block is
A block is a small header and a list of transactions. The split matters more than it looks.
- The header is what gets mined. It is small - a fixed set of fields plus the parent list - and it is what the proof of work hashes. A block’s hash is the hash of its header. Nothing in the body is hashed directly during mining.
- The body is the cargo. The transactions the block carries, in order, and nothing else.
- The header commits to the body. One field in the header is a hash over the transaction list, so the body cannot be swapped out after the fact without invalidating the work.
That separation is why a node can check a block’s proof of work before it has the body, and why the pieces of the protocol that only care about the DAG’s shape - ordering, difficulty, pruning proofs - can work on headers alone.
What the header carries
Twelve fields, doing four jobs between them. The Block Model page lists every one with its type; what matters here is the four jobs.
- Three are mining fields. The target, the nonce, and the timestamp - what the miner controls, and what the network checks the work against.
- Three are commitments. One hash for what the block carries, one for what it accepts, and one for the state of the ledger afterward.
- Four are position. The parent list, plus three counters saying where the block sits in the DAG and how much work stands behind it. They are what GHOSTDAG reads.
- Two are bookkeeping. A version, and the pruning point this block agrees history is settled behind.
Why there are three commitments
A Kaspa block does not only carry transactions - it also accepts transactions from the blocks it merges. Those are different sets, so they get different hashes.
- What it carries. Its own body, nothing else.
- What it put into the ledger. The transactions it merged from parallel blocks and accepted as valid, which is where most of a chain block’s accepted transactions come from. A blockchain needs no such field; a blockDAG does.
- What the ledger became. Every block commits to the resulting UTXO set, so a node that has thrown away old block data can still prove its current state is the right one. That is the hook pruning hangs on.
Why the parent list is a list of lists
Parents are grouped by block level, and the reason is proofs, not ordering.
- Level 0 is the parent list. These are the tips the miner had seen, and they are the only ones that matter for consensus ordering. A block may name up to 16 of them.
- Higher levels are a skeleton of lucky blocks. A block whose hash came in far under the target could have satisfied a much harder one, so it counts as a block at that higher level too. Those sparse links let a syncing node verify a long stretch of history without downloading every block in it.
Where the proof of work goes
The miner hashes the header, not the body. The pipeline is kHeavyHash, and the loop is short: zero out the nonce and timestamp, hash once to fix the expensive part, then spin the nonce until the result lands at or under the target.
A block’s hash is the hash of its header. So the identity of a block, the proof that work was spent on it, and the commitment to everything it contains are all the same 32 bytes.
The first transaction is always the coinbase
Every block’s body opens with a coinbase transaction - the one transaction with no inputs, because it creates coins rather than moving them.
- It pays the blocks this one merged, not this one. A Kaspa block’s own reward arrives later, in whichever block merges it. The mechanics are on Mining.
- It names a payout address in its payload, which is the address used when some later block pays this one.
- Its outputs cannot be spent for 1,000 blocks (~100 seconds), the coinbase maturity rule.
How much a block can hold
Block size is capped by mass rather than by bytes, in three dimensions at once:
- 500,000 grams of compute mass and of storage mass.
- 1,000,000 grams of transient mass, raised from 500,000 at Toccata, which allows block bodies of roughly 250 KB.
In practice that is a few hundred ordinary transactions per block. Multiply by ten blocks a second and you have the network’s ceiling, which is the subject of Throughput.
What a block does not settle
A block says what it carries, what it accepts, and which blocks it saw. It does not say where it sits relative to the blocks mined alongside it - nothing in the header can, because their miners never saw each other.
Resolving that is the job of The BlockDAG, for the structure these parent lists build, and PHANTOM-GHOSTDAG, for the rule that puts it in order. The field-by-field reference for everything above is Block Model.