Skip to content

tests: revamp and simplify interop tests#399

Open
tcoratger wants to merge 10 commits intoleanEthereum:mainfrom
tcoratger:revamp-interop-tests
Open

tests: revamp and simplify interop tests#399
tcoratger wants to merge 10 commits intoleanEthereum:mainfrom
tcoratger:revamp-interop-tests

Conversation

@tcoratger
Copy link
Collaborator

🗒️ Description

🔗 Related Issues or PRs

✅ Checklist

  • Ran tox checks to avoid unnecessary CI fails:
    uvx tox
  • Considered adding appropriate tests for the changes.
  • Considered updating the online docs in the ./docs/ directory.

tcoratger and others added 9 commits February 14, 2026 23:33
Poll loops capture safe_targets/justified_slots before sleeping 2s.
During that sleep, gossip updates the store. If the timeout expires,
the assertion uses the stale pre-sleep snapshot while diagnostics
show fresh values. Re-read values after diagnostics to fix.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove phases 4-7 (safe target, justification, finalization, sustained
finalization) which require the attestation pipeline to meet 800ms
interval deadlines. On a 2-core CI runner with 3 nodes sharing one
asyncio event loop, CPU contention causes missed intervals, divergent
attestation targets, and aggregation failures (nagg=0 on all nodes).

Keep 4 timing-tolerant phases:
1. Connectivity (QUIC full mesh)
2. Block production (gossip propagation, chain integrity, proposer rotation)
3. Attestation pipeline activity (gossip signatures enter pipeline)
4. Continued production (multi-slot growth, head consistency, block content)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Comment on lines +971 to +986
all_payloads: dict[SignatureKey, list[AggregatedSignatureProof]] = dict(
self.latest_known_aggregated_payloads
)
for sig_key, proofs in self.latest_new_aggregated_payloads.items():
if sig_key in all_payloads:
# Both pools have proofs for this key. Combine them.
all_payloads[sig_key] = [*all_payloads[sig_key], *proofs]
else:
# Only "new" has proofs for this key. Add them directly.
all_payloads[sig_key] = proofs

# Find head with minimum attestation threshold.
# Convert the merged aggregated payloads into per-validator votes.
#
# Each proof encodes which validators participated.
# This step unpacks those bitfields into a flat mapping of validator -> vote.
attestations = self.extract_attestations_from_aggregated_payloads(all_payloads)
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

@unnawut @kamilsa please let me know what you think about this fix? If you think this is ok or not?


def on_tick(
self, time: Uint64, has_proposal: bool, is_aggregator: bool = False
self, target_interval: Uint64, has_proposal: bool, is_aggregator: bool = False
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

@MegaRedHand Let me know if this solves the problem you had in mind?

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