Skip to content
LogoLogo

Checkpoint signer

Checkpoint signers make blocks final (Checkpoints & finality). Each signer is an ordinary synced node with a signing seed.

Set up a signer

  1. Generate a 32-byte seed offline, from a hardware RNG, one per signer.
  2. Give the group's public keys and threshold to the network parameters (at the genesis ceremony for mainnet and testnet).
  3. Run a synced node with the seed:
ARREKTA_CHECKPOINT_SEED=<64 hex chars> \
ARREKTA_CHECKPOINT_INTERVAL=10 \
ARREKTA_CHECKPOINT_DEPTH=6 \
  arrekta-node-rs

The node signs the active block at every multiple of the interval once it is depth blocks deep, and relays its partial signature over P2P. At m signatures the checkpoint is final.

Rules for signers

  • Never sign two different hashes at one height. The node enforces "first seen wins"; don't run two nodes with the same seed.
  • Never reuse the public regtest seeds (0x31…, 0x32…, 0x33…).
  • Keep the signer connected and synced: too few online signers trigger the ArrektaFinalityLagging and ArrektaCheckpointStuck alerts.

Check status

curl -s http://127.0.0.1:28332/v1/checkpoints

Shows the signer group, the latest final checkpoint, pending signatures and the finality floor.

Rotate the group

  1. Build the new group's encoded signer set (u8 m ‖ varint n ‖ n × serialized public key).
  2. Have m current signers sign a checkpoint carrying it as next_set (for example with the reference's arrekta_core.checkpoint.sign(...)).
  3. POST each partial signature to /v1/checkpoints (hex body).

Once final, only the new group counts for later heights; no release is needed. New peers receive every hand-over after connecting.

In an incident

During a reorg attack, signers may checkpoint the honest chain early to end it; see Incident response.