Skip to content

Commit 9f23975

Browse files
tcoratgerclaude
andauthored
docs(timeline): explain the per-interval tick schedule (#1130)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent 46b8b05 commit 9f23975

1 file changed

Lines changed: 18 additions & 1 deletion

File tree

src/lean_spec/spec/forks/lstar/timeline.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,24 @@ def tick_interval(
1919
has_proposal: bool,
2020
is_aggregator: bool = False,
2121
) -> tuple[LstarStore, list[SignedAggregatedAttestation]]:
22-
"""Advance store time by one interval and perform interval-specific actions."""
22+
"""
23+
Advance store time by one interval and perform interval-specific actions.
24+
25+
Each slot is split into five intervals so consensus work runs at fixed points
26+
relative to when a block arrives and votes spread across the network.
27+
28+
Timing of the action points within a slot:
29+
30+
- Interval 0: ingest the slot's pending votes once the proposal has landed.
31+
- Interval 2: aggregators bundle the slot's votes into proofs and broadcast them.
32+
- Interval 3: advance the safe target from the latest votes for fast confirmation.
33+
- Interval 4: ingest the votes that accumulated through the rest of the slot.
34+
35+
Aggregation waits until interval 2 so a block proposed at the slot start has
36+
time to propagate and gather votes before they are bundled.
37+
Fast confirmation sits at interval 3, after aggregates exist, so the safe
38+
target reflects the freshest votes the node has seen.
39+
"""
2340
store = store.model_copy(update={"time": store.time + Interval(1)})
2441
interval_within_slot = int(store.time) % int(INTERVALS_PER_SLOT)
2542
new_aggregates: list[SignedAggregatedAttestation] = []

0 commit comments

Comments
 (0)