Epochs and committees
How time is divided, how committees are chosen and how shards move between them.
Time in Bashard is divided into epochs of fixed length set at deployment. The epoch is the unit of payment, committee selection, unbonding and jail.
Advancing an epoch
Anyone can call advanceEpoch() once the current epoch has elapsed; nodes running with KEEPER=1 do this automatically. The call:
- Pays the closing epoch's scheduled tape fees to its committee, weighted by stake.
- Selects the next committee: the top 20 eligible nodes by stake. Jailed nodes are not eligible.
Placement
Shard i of track t lives on seat (keccak(t) + i) mod committeeSize. Placement is deterministic, so any client can compute where to find a shard from chain state alone.
Sync and repair
When membership changes, a node copies its newly assigned shards from the previous holders, or rebuilds them from any 7 other shards if the old holder is gone. SYNC_GRACE reserves a share of each epoch (20% by default) for this before peers start challenging the new assignments.
Proof of access
Committee members periodically challenge each other for a random 1 KiB leaf with its merkle path to the on-chain root. Failures are counted per peer per epoch; beyond SLASH_THRESHOLD the challenger opens a slash vote. Other members re-check the target before co-signing.
Watching epochs
The explorer shows current and past epochs and their committees. The indexer exposes them at /v1/epochs.