# Ticks

Every UTC minute is a tick. Tick `n` is `floor(unix_seconds / 60)`, so tick 29,875,722 covers 2026-10-21 00:42:00 to 00:42:59 UTC. A tick closes even when nobody stamped.

## What a Tick Root Commits To

A tick root commits to five things.

```
tick_root = sha256(prev_tick_root || calendar_root || beacon_root || witness_root || tick_header)
```

Once a minute five parts are hashed into the tick root. They are the previous tick root, the tree of the minute's rounds, the newest block of about 35 chains, the witness captures and the tick header.

- `prev_tick_root` links each tick to the one before it, which makes the tick history a single chain.
- `calendar_root` is the Merkle root over the round commitments of every second in the minute.
- `beacon_root` covers the newest block the calendar saw on 35 other chains, checked by a quorum of public RPCs.
- `witness_root` covers the hashes of the sources we capture on their own schedules, from Hacker News every hour to Certificate Transparency tree heads every minute, and each one has its own lane on the [Live page](https://etchd.app/), under the chains.
- `tick_header` holds the calendar name, the ETC head it saw, the window, the counts and the content IDs of the beacon evidence and the previous tick body.

Each tick root takes the one before it in, so the minutes form one chain. A tick closes even when nobody stamped anything.

## The Beacon Chains

SPEC.md lists them in this order.

Bitcoin, Litecoin, Dogecoin, Bitcoin Cash, Dash, Zcash, Ethereum, BNB Smart Chain, Avalanche C-Chain, Polygon PoS, Gnosis, Arbitrum One, OP Mainnet, Base, Linea, Scroll, Hyperliquid EVM, Solana, NEAR, Aptos, Sui, Tron, TON, Cosmos Hub, Polkadot, XRP Ledger, Stellar, Algorand, Tezos, Cardano, Monero, Kaspa, Filecoin, Hedera, drand quicknet.

Ticks come after the blocks they name. Each tick body is a DAG-CBOR block with its own CID, served at `/v1/ticks/<n>/body`, and for UTXO and EVM chains the raw block headers sit in an evidence object next to it, where those heads can be checked offline.

The rest have no header to check. For them, the claim that a tick came after their heads rests on our RPC quorum and the sources we name, one of the entries in the [Trust Model](https://etchd.app/docs/trust). Bitcoin heads also feed [the Bitcoin bridge](https://etchd.app/docs/bitcoin), where an hourly roll-up puts the ticks back into a Bitcoin block.

## Reading a Tick

Each tick has its own page, linked from the [live view](https://etchd.app/), with a drawing of its tree and the raw tick. The API serves the body at `/v1/ticks/<n>/body` and each beacon observation, with its path to the beacon root, at `/v1/ticks/<n>/beacon/<chain>`, while the day's tick bodies and evidence objects also go into that day's CAR, one of the [daily bundles](https://etchd.app/docs/data).

Because each tick root takes in the one before it and the tick bodies link into one DAG, changing an old tick would change every later tick root, including the roots already on Ethereum Classic.
