Skip to content

feat: receive and decode gossiped attestations - #23

Merged
MegaRedHand merged 4 commits into
mainfrom
listen-for-attestations
Jan 13, 2026
Merged

MegaRedHand merged 4 commits into
mainfrom
listen-for-attestations

Conversation

@MegaRedHand

Copy link
Copy Markdown
Collaborator

No description provided.

@MegaRedHand
MegaRedHand merged commit 60df645 into main Jan 13, 2026
@MegaRedHand
MegaRedHand deleted the listen-for-attestations branch January 13, 2026 19:20
MegaRedHand added a commit that referenced this pull request Oct 26, 2026
A local run did not start. The newest reth-rbuilder image parses only enode
bootnodes while the package passes ENRs, and Commit-Boost's PBS requires
SECONDS_PER_SLOT, which the genesis generator no longer writes.

The first is fixed in the fork (PR #23), so the package pin moves to that
commit. The second is worked around by giving Commit-Boost an explicit chain
through `commit_boost_config`; its `chain_id` must be a hex string. The README
lists both workarounds so they can be dropped when upstream is fixed, and
explains the harmless "Builder is not answering" logs at startup.
tcoratger pushed a commit to tcoratger/ethlambda that referenced this pull request Oct 30, 2026
…lambdaclass#23)

* perf(beacon): rank dial candidates by custody redundancy, not presence

A mainnet follower fell ~100 slots behind and could not recover.
lean_custody_column_peers showed only 5-8 of 129 connected peers
custodying each sampled column, and 78% of its by-root column requests
went unanswered (81,073 requests against 17,785 response chunks) once
gossip could no longer carry it: off the tip, by-root fetch is the
only source, and lean_data_column_fetch_failures_total{reason="max_retries"}
hit 5,566 in ~50 minutes, spread evenly across peers rather than one
bad one, which points at supply rather than a bad peer.

covered_custody_columns collected custodians into a HashSet<u64>, so a
single custodian marked a column covered, and uncovered_custody_columns
only ever surfaced columns with zero custodians. At 5-8 custodians that
set is empty, custody stops contributing to rank_candidates entirely,
and dialing optimizes purely for attestation-subnet coverage while
columns are the actual binding constraint.

Replace presence with a per-column custodian count, and compare it
against a redundancy target instead of a zero/nonzero check. The
target is tied to MAX_FETCH_RETRIES: handle_column_fetch_failure
tracks failed_peers so each retry round wants a custodian it has not
already asked, and a column with fewer custodians than the ladder has
rounds runs out of fresh peers before it runs out of retries.

rank_candidates keeps its existing signature; only how the "wanted"
columns handed to it are computed changes.

* docs(beacon): describe rank_candidates' custody bar as redundancy, not presence

rank_candidates' doc comment still described the "wanted" columns as
those no connected peer holds at all, which was true before this
branch but is stale now: the caller hands it every column below
CUSTODY_REDUNDANCY_TARGET custodians, a much wider set than zero.

Rewrite the doc to state what the parameter means today and why
thin-but-nonzero supply belongs in it, not just the zero case: a
by-root lookup's retry ladder wants a custodian it has not already
asked each round, so a column with fewer custodians than the ladder
has rounds exhausts its retries re-asking peers that already failed
it. That is the failure the measured 5-8-custodians / 78%-unanswered
mainnet case actually hit, not merely a column with zero custodians.
The zero-custodian case and the supernode-sorts-first observation are
kept as the extreme case and still-true observation they are.

Also rename covered_custody_columns to custodian_counts_by_column: it
has returned a HashMap<u64, usize> since the redundancy-count change,
and the old name still reads like the HashSet<u64> presence check it
used to be.

No behavior change: docs and one function rename only.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant