Repository navigation
test(e2e): relay across a Besu validator turnover - #1583
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.
[Low impact] The PR appears safe to merge; no actionable issues remain. SummaryAdds QBFT and IBFT 2.0 transfer tests that replace chain B’s original validator before relaying.
No new actionable issues were found. Tests were not run during this review.
|
2bbca9d to
c1ce7a6
Compare
c1ce7a6 to
272b052
Compare
|
@greptile review |
0110014 to
e692586
Compare
| chainB.Nodes = 2 | ||
| chains[1] = chainB | ||
| spec, runtime := besuMesh(chains) | ||
| // At the default two thirds, a client trusting both of B's validators |
There was a problem hiding this comment.
We should probably not use default of 2/3rds if the light client gets stuck and cannot recover on a validator change.
Let's discuss this thread tomorrow #1581 (comment). I'm wondering if we decided to add the mitigation at the contract level or if right now the recommendation is just to migrate clients if an operator's besu LC gets stuck
A managed Besu chain can now run several nodes: the first validates from genesis and the others follow it over static peering on the Docker bridge. Chain.Validators votes followers in and validators out through the QBFT or IBFT 2.0 voting RPCs. TestTransferBesuQBFT_ValidatorTurnover and its IBFT 2.0 twin vote chain B's second node in and its first out before any packet is relayed, so no header at B's head is sealed by the validator chain A's client trusts. The transfer only relays if the relayer steps the client across both set changes. The tests deploy their clients at a trust level of one half, which NewBesuClient.TrustLevel now sets: at the default two thirds the client cannot follow the removal. Refs: FOU-1612 Signed-off-by: Gjermund Garaba <gjermund@garaba.net>
VoteValidator discarded its votes only after the vote passed, so a failed proposal or a timed-out wait left nodes voting after it returned. Discard every proposed vote on each exit, under a context the caller's cancellation does not end, and join the discard errors with the failure. Refs: FOU-1612 Signed-off-by: Gjermund Garaba <gjermund@garaba.net>
e692586 to
dab5f87
Compare
* test(e2e): relay across a Besu validator turnover A managed Besu chain can now run several nodes: the first validates from genesis and the others follow it over static peering on the Docker bridge. Chain.Validators votes followers in and validators out through the QBFT or IBFT 2.0 voting RPCs. TestTransferBesuQBFT_ValidatorTurnover and its IBFT 2.0 twin vote chain B's second node in and its first out before any packet is relayed, so no header at B's head is sealed by the validator chain A's client trusts. The transfer only relays if the relayer steps the client across both set changes. The tests deploy their clients at a trust level of one half, which NewBesuClient.TrustLevel now sets: at the default two thirds the client cannot follow the removal. Refs: FOU-1612 Signed-off-by: Gjermund Garaba <gjermund@garaba.net> * fix(e2e): discard Besu validator votes when a vote fails VoteValidator discarded its votes only after the vote passed, so a failed proposal or a timed-out wait left nodes voting after it returned. Discard every proposed vote on each exit, under a context the caller's cancellation does not end, and join the discard errors with the failure. Refs: FOU-1612 Signed-off-by: Gjermund Garaba <gjermund@garaba.net> --------- Signed-off-by: Gjermund Garaba <gjermund@garaba.net> Signed-off-by: Diana Borbe <diana@cosmoslabs.io>
Description
Stacked on #1581. An end-to-end test of #1581 against real Besu: the relayer steps a Besu light client across validator set changes made by header voting.
e2e/internal/harness/chain/evm/besu/besu.go): a managed Besu chain can run several nodes (ManagedBesu.Nodes). The first validates from genesis; the others follow it, peered over the Docker bridge through a static-nodes file. A newChain.Validators()capability votes validators in and out through the QBFT or IBFT 2.0 voting RPCs (qbft_*/ibft_*), waits until the head's set reflects the vote and discards it. It refuses to vote in an address that runs no node of the chain, which would halt it.e2e/transfer_test.go):TestTransferBesuQBFT_ValidatorTurnoverandTestTransferBesuIBFT2_ValidatorTurnoverrun chain B on two nodes and, before any packet is relayed, vote the second node in and the first out. No header at B's head is then sealed by the validator chain A's client trusts, so the transfer from B only relays if the relayer steps the client across both changes.closes: FOU-1612 (Linear, with #1581)
Verification
InsufficientTrustedValidatorOverlap(0, 1)at gas estimation.make -C e2e test-harness,make -C e2e lintandmake -C e2e generate-matrixare clean.Not covered end to end: a validator-list override in genesis
transitions. Its block must be fixed before the chain starts while the client must be deployed before it, which makes the test timing-fragile; the prover's unit tests cover that case.CHANGELOG.mdonly tracks the spec)docs/) if anything is changed. (e2e/README.md)godoccomments if relevant.Files changedin the GitHub PR explorer.🤖 Generated with Claude Code