Spec: `get_attestation_due_ms(epoch)` uses ATTESTATION_DUE_BPS_GLOAS
(2500) for Gloas epochs vs ATTESTATION_DUE_BPS (3333) pre-Gloas.
`get_payload_attestation_due_ms` uses PAYLOAD_ATTESTATION_DUE_BPS (7500).
- Add both BPS fields to ChainSpec with derived Duration values
- Add `get_attestation_due::<E>(slot)` that returns epoch-appropriate
threshold matching the spec
- Add `get_payload_attestation_due()` matching the spec
- Use them in proto_array record_block_timeliness instead of hardcoded
values
- Fix leaf detection in heads_descended_from_finalization (parent()
method call, map away enumerate index)
- Clear best_child and best_descendant in v28->v29 migration (no
longer used, replaced by virtual tree walk)
- Migration now rewrites fork choice data instead of being a no-op
`serde_yaml` is now deprecated. The API-compatible `yaml_serde` should be used instead.
Replace `serde_yaml` with `yaml_serde`. This is purely mechanical as the API is 1-to-1.
Co-Authored-By: Mac L <mjladson@pm.me>
- Add missing payload attestation slot check: spec returns early when
data.slot != block.slot (PTC votes only for assigned block)
- Remove dead ignored tests (need mock EL Gloas support to run)
- Remove unused new_with_gloas and inspect_queued_payload_attestations
- Remove gloas entries from bin.rs (not part of this PR)
- Collapse nested if in payload attestation error handling (clippy)
- Rename env -> envelope in load_parent
- Add TODO(gloas) for parent_head_hash in re-org path
- Remove head_payload_status from ForkchoiceUpdateParameters (lives on
CachedHead, sourced from get_head return)
With LH v8.1.3 supporting Fulu-on-Gnosis, we no longer need these DB migrations. All Lighthouse nodes running in prod will soon be updated to LH v8.0.0+ and schema v28+.
This PR helps with Gloas fork choice changes, by allowing us to avoid updating old schema migrations when adding V29 for Gloas:
- https://github.com/sigp/lighthouse/pull/9025
Co-Authored-By: Michael Sproul <michael@sigmaprime.io>
- Build parent->children index once per find_head call, replacing O(n)
scans in filter_block_tree and get_node_children with O(1) lookups.
- Skip zero block_hash in is_parent_block_full check — default/zero
hashes don't indicate a real payload relationship.
- Fall back to block state_root for genesis when envelope not stored.
- Store execution payload envelope in EF test harness during
on_execution_payload step.
The children filter already skips invalid nodes, so a valid parent
whose only children are invalid becomes a leaf and gets rejected by
node_is_viable_for_head. The top-level check was redundant.