Skip to content

feat(collector): prepare paired proposer signature collection - #1312

Merged
shane-moore merged 2 commits into
sigp:epbsfrom
shane-moore:feat/1309-proposer-collector
Sep 25, 2026
Merged

shane-moore merged 2 commits into
sigp:epbsfrom
shane-moore:feat/1309-proposer-collector

Conversation

@shane-moore

@shane-moore shane-moore commented Sep 25, 2026 •

Copy link
Copy Markdown
Member

Merge order: #1311 → #1312 → #1313. All three target epbs; rebase remaining branches after each merge.

Problem, Evidence, and Context (Required)

Second of three PRs for #1309, dependent on #1311. SIP-94 requires one proposer packet containing block and envelope shares, while block completion must not wait for envelope quorum. Two independent collection calls would emit two packets.

Change Overview (Required)

  • Add paired proposer collection and a wait-only path for an already registered root.
  • Preserve bounded same-packet block-companion evidence for envelope shares, including packets received before registration.
  • Reconstruct block and envelope signatures independently within the existing collector lifecycle. Existing duty callers keep their current behavior until the final layer activates the fold.

Review only this layer.

Risks, Trade-offs, and Mitigations (Required)

The shared collector is the main regression risk. Companion policy is opt-in and immutable after registration; evidence is bounded, signature-specific, and removed with existing slot cleanup. This avoids a separate packet inbox or another lifetime-managed cache.

Validation (Required)

Executed independently with the first two layers applied:

  • cargo check --workspace --tests --locked: passed.
  • cargo nextest run --locked -p signature_collector -p anchor_validator_store: 232 passed, 0 skipped.
  • make lint, make cargo-fmt-check, git diff --check: passed.
  • Coverage includes early arrivals, both entry orders, independent thresholds, companion mismatches, immutable registration, cached results and expiry without respawning a collector.

Rollback (Required for behavior or runtime changes; optional otherwise)

Before activation, revert this preparatory layer. After activation, revert the final layer first.

Blockers / Dependencies (Optional)

Merge #1311 first. The source branch is stacked in shane-moore/anchor. This PR targets epbs because its predecessor branch exists only in the fork; the upstream diff includes the prerequisite until it lands.

Pin Lighthouse #10036 so the proposer fold can receive the local payload
root. Adapt signing call sites while retaining the existing envelope flow
and leaving stateless production disabled.

Refs sigp#1309.
Register block and envelope roots together, publish one proposer packet,
and reconstruct each signature independently. Retain bounded same-packet
companion evidence and expose a wait-only path for later publication.
Existing duty callers retain their behavior until the fold activates.

Refs sigp#1309.
@codecov-commenter

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 74.20382% with 81 lines in your changes missing coverage. Please review.
⚠️ Please upload report for BASE (epbs@58e2255). Learn more about missing BASE report.

Files with missing lines Patch % Lines
anchor/signature_collector/src/lib.rs 81.78% 45 Missing ⚠️
anchor/validator_store/src/testing/common.rs 33.96% 35 Missing ⚠️
anchor/message_receiver/src/manager.rs 75.00% 1 Missing ⚠️
Additional details and impacted files
@@           Coverage Diff           @@
##             epbs    #1312   +/-   ##
=======================================
  Coverage        ?   80.93%           
=======================================
  Files           ?      181           
  Lines           ?    42337           
  Branches        ?        0           
=======================================
  Hits            ?    34265           
  Misses          ?     8072           
  Partials        ?        0           
Flag Coverage Δ
rust 80.93% <74.20%> (?)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@shane-moore shane-moore left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed 8d9a52cc. No findings.

The paired API emits one proposer packet and waits only for the block signature. Envelope reconstruction is independent, same-packet companion evidence remains bound to the signature bytes, and the wait-only path cannot recreate an expired collector. Existing callers retain unrestricted collection.

Verified hosted debug and release logs: 1,030 tests passed in each on the same source tree as this head, including all ten new proposer tests and the existing collector fallback tests. Local-testnet CI also passed.

This is collector preparation only: the paired API has no production caller yet, and two-entry proposer admission remains for #1313.

Reviewed by gpt-6 astra high.

@shane-moore
shane-moore merged commit f93c9eb into sigp:epbs Sep 25, 2026
19 checks passed
@shane-moore
shane-moore deleted the feat/1309-proposer-collector branch September 25, 2026 02:50
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.

2 participants