Skip to content
LogoLogo

Checkpoints & finality

Arrekta adds an optional finality layer on top of proof of work, modelled on Dash ChainLocks (DIP-0008): a public group of up to 32 ML-DSA keys signs checkpoints, and a checkpoint with m valid signatures is final (§9.8).

What a checkpoint is

checkpoint = u8 1 ‖ u32 height ‖ block_hash 32 ‖ u8 has_next ‖ [var next_set] ‖ k × (signer_index ‖ signature)
  • Signers sign independently. Partial signature sets for the same (height, hash, next_set) merge, over P2P (CHECKPOINT messages) or POST /v1/checkpoints.
  • A signer signs the active block at every multiple of the interval (default 10) once it is depth deep (default 6). First seen wins, and a signer never signs two hashes at one height.

The finality floor

When a block at height h becomes final:

  • blocks at h with another hash, and their descendants, become invalid;
  • a node on a conflicting branch disconnects back below h and follows the best valid chain, even one with less work;
  • no reorganisation ever crosses the floor.

A snapshot import also sets the floor at the snapshot height. GET /v1/checkpoints shows the signer group, the latest final checkpoint, pending signatures and the floor.

Trust model

The group canThe group cannot
make an existing block finalcreate blocks
hand over to a new group (next_set) without a software releasemove coins
end a reorg attack by checkpointing the honest chain earlyreverse a checkpoint it already signed

If the group goes offline, the chain continues under plain proof of work. If m keys turned malicious they could finalise one honest-looking fork, which is why the group is public, multi-party and rotatable, and why "finality lagging" alerts exist. Checkpoints are policy-free consensus inputs: a node that never sees one still follows the most-work chain.

Per network

NetworkSigner group
mainnet, testnetnone until the genesis ceremony
regtest2-of-3 public test seeds 0x31…, 0x32…, 0x33… (never reuse them)