Repository navigation
test(e2e): run four peered validators per managed Besu chain - #1588
Conversation
Vulnerable dependencies2 advisories across 2 libraries need attention, 2 accepted. 🚨 Needs attention
|
| Advisory | CVE | Fixed in | Summary |
|---|---|---|---|
| GO-2025-3684 | — | no fix yet | Cosmos EVM Allows Partial Precompile State Writes in github.com/cosmos/evm |
Go standard library
In use: go1.26.9 — reached from cli, e2e, gen/go/solidity-abi
| Advisory | CVE | Fixed in | Summary |
|---|---|---|---|
| GO-2026-6809 | CVE-2026-111943 | go1.26.10 |
Distrust compromised intermediate certificates in crypto/x509 |
Run make vulncheck for the call paths. Either upgrade the library, or add the
advisory to .govulncheck-ignore with a reason if no fix exists yet.
Accepted
Listed in .govulncheck-ignore with a reason.
github.com/pion/dtls/v2
In use: v2.2.12 — reached from cli
| Advisory | CVE | Fixed in | Summary |
|---|---|---|---|
| GO-2026-4479 | CVE-2026-26014 | no fix yet | Usage of random nonce generation with AES GCM ciphers risks leaking the authentication key in github.com/pion/dtls |
golang.org/x/crypto
In use: v0.57.0 — reached from cli, e2e
| Advisory | CVE | Fixed in | Summary |
|---|---|---|---|
| GO-2026-5932 | — | no fix yet | The golang.org/x/crypto/openpgp package is unmaintained, unsafe by design, and has known security issues |
From make vulncheck-json on this run: logs.
[Medium impact] This PR appears safe to merge; no actionable defects were found. SummaryManaged Besu chains now run four validators on a dedicated Docker network.
No actionable issues were found. Tests were not run during this review.
|
1b42b9a to
f327c47
Compare
f327c47 to
ba2fff8
Compare
ba2fff8 to
39591e7
Compare
|
@greptile review |
a66795e to
d43f74c
Compare
1e59706 to
84888ba
Compare
A single validator seals every header alone, so tests cannot show quorum or forge evidence a light client accepts as validly sealed. Every managed Besu chain now runs four validators, the smallest BFT set that tolerates a faulty one, and exposes their keys. - Besu boots four validators concurrently on a Docker network of its own, then peers each with the validators before it through admin_addPeer once all listen. Static nodes dial at startup, and a peer still booting costs a 30s+ redial backoff while the BFT round timeouts escalate. - JVM options cap each validator's heap and nearly halve its startup CPU, since a two-chain environment boots eight Besu JVMs at once. - Follower nodes, which the validator turnover tests vote in, now join the four validators on the chain's network and are peered the same way. Chain.Validators covers every managed Besu chain; Keys returns the genesis validator keys. The turnover tests vote three followers in and three genesis validators out, since a one-for-one swap leaves the client enough trusted signers to skip the change. - The timeout-refund tests give the packet ten destination block intervals, enough for the approval and the send to land through a BFT round change, and wait for the packet's own timeout to pass. - cli/routeraccess owns the router methods opened to PUBLIC_ROLE, so ibc deploy and the harness deployer share one list; the harness now also opens multicall and submitMisbehaviour, and checks every one. - Harness networks need only the e2e labels, not the name prefix, so Besu creates its network through network.New. make clean also removes labeled e2e Docker networks. Refs: FOU-1903 Signed-off-by: Gjermund Garaba <gjermund@garaba.net>
Parallel tests booting their four-node chains together ran thirty-odd Besu JVMs on CI's four cores, starving nodes past the 90s wait for their RPC to listen. Booting is the CPU-bound part, so queue chains at the boot; running ones cost little. Signed-off-by: Gjermund Garaba <gjermund@garaba.net>
Signed-off-by: Gjermund Garaba <gjermund@garaba.net>
A QBFT turnover run in CI ended with two voted-out genesis validators back in the set; ten local runs did not reproduce it. Nothing in the test casts the add vote Besu would need to re-add them, so the vote wait most likely passed early and the deferred discard then cancelled the removal's votes. The wait read only node 0, the first validator voted out, and counted a null answer, which Besu gives when it has no header at its head, as a removal. Every node's head must now show the change, a node reporting no validators is an error, and the turnover tests vote out genesis validators 1-3, keeping node 0, which serves the chain's RPC. Signed-off-by: Gjermund Garaba <gjermund@garaba.net>
The merge-base changed after approval.
84888ba to
616fb01
Compare
Description
Stacked on #1583. Every managed Besu chain now runs four validators, the smallest BFT set that tolerates a faulty one, so tests can show quorum and forge evidence a light client accepts as validly sealed. A single validator sealed every header alone.
e2e/internal/harness/chain/evm/besu/besu.go): the four start concurrently on a Docker network of their own and are peered throughadmin_addPeeronce all listen. Static nodes dial at startup, and a peer still booting costs a 30s+ redial backoff while the BFT round timeouts escalate. JVM options cap each node's heap and nearly halve its startup CPU, since a two-chain environment boots eight Besu JVMs at once.ManagedBesu.NodesbecomesManagedBesu.Followers, nodes beyond the four validators that join the same network and are peered the same way, replacing the static-nodes follower path.Chain.Validators()now covers every managed Besu chain, and itsKeys()returns the genesis validator keys. The turnover tests vote three followers in and three genesis validators out: with four trusted validators, a one-for-one swap leaves the client enough trusted signers to skip the change. The matrix labels such a chain "Besu QBFT (+3 followers)".e2e/transfer_test.go): the packet gets ten destination block intervals, enough for the approval and the send to land through a BFT round change, and the test waits for the packet's own timeout to pass. Five seconds raced the two source transactions on four-validator chains.cli/routeraccess): one public package owns the router methods opened toPUBLIC_ROLE, soibc deployand the harness deployer share the list. The harness now also opensmulticallandsubmitMisbehaviour, and checks every method withCanCall.network.New;make cleanalso removes labeled networks. Both e2e AGENTS.md files allow importing any public CLI package.Part of FOU-1903 (Linear).
Verification
make -C e2e lint,make -C cli lint,check-matrix, the harness unit and integration tests andgo test ./...inclipass;refgen.py all --checkis clean.CHANGELOG.mdonly tracks the spec)docs/) if anything is changed. (e2e/README.md, AGENTS.md files)godoccomments if relevant.Files changedin the GitHub PR explorer.🤖 Generated with Claude Code