You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(blockchain): source attestations from the head state's justified
Validators sourced their vote's `source` checkpoint from the store's
global `latest_justified`, which is a highest-slot-wins maximum. When a
minority fork justifies a slot the head chain never saw, that maximum
latches onto an off-head sibling. Voting with an off-chain source makes
every head-chain target fail `is_valid_vote` (the target no longer
descends from the source), so the head can never re-justify and block
production stalls.
Source from the head state's `latest_justified` instead, which always
lies on the head's own chain. The target walk-back is fed the same
head-state justified so the emitted source and target stay mutually
consistent. The store's `latest_justified` is left untouched; only vote
production changes. `get_attestation_target` (used by the forkchoice
spec-test harness) keeps reading the store checkpoints, so spec behavior
is unchanged.
This mirrors the head-state-driven treatment finalized already received
in #437, but applied to vote production rather than the stored
checkpoint. It is a deliberate divergence from leanSpec, which sources
from `store.latest_justified` (leanSpec PR #595).
Claude-Session: https://claude.ai/code/session_01783X9yFrkXfA7uY1cyL8E4
0 commit comments