Repository navigation
ci: add a Commit-Boost check to the kurtosis battery - #708
MegaRedHand wants to merge 8 commits into
Conversation
The builder PR stack (#694 to #705) lets ethlambda's beacon node and validator client build blocks through a MEV-Boost compatible builder, but nothing exercises it against a real relay and builder. Commit-Boost's PBS module is a drop-in MEV-Boost replacement, so a devnet with `mev_type: commit-boost` covers the whole path. The check reads the ethlambda services' builder metrics instead of running assertoor, because the base battery's assertoor tests currently fail on an unrelated spec-endpoint gap. It passes once registrations are forwarded, the ethlambda beacon node serves a builder payload, and the ethlambda validator client proposes blinded blocks both through that node and through lighthouse. The new `commit-boost` job runs on manual dispatch only: main's image has no `--builder` or `--builder-proposals` until the stack lands. It has its own ethereum-package pin, which needs the fork's builder-flags branch pushed. The relay, builder and PBS images are pinned by digest since the package defaults are floating tags.
A contributor running the check locally needs to know how to get an image with the builder flags and that kurtosis will use it without pulling, or it looks like the run needs a published image. The fork pin also now has a PR to point at instead of an unpushed branch.
🤖 Codex Code ReviewLooks good overall. I did not find consensus-layer logic changes here; this PR is CI/tooling-only, so fork choice, attestation processing, state transition, XMSS, and SSZ risks are not directly touched.
If you want, I can turn the first three points into concrete patch suggestions. Automated review by OpenAI Codex · gpt-5.4 · custom prompt |
🤖 Claude Code ReviewReview of PR 708: Commit-Boost kurtosis checkThis is a CI and tooling change with no consensus code. It looks sound overall. I read the diff but did not run the workflow or the script, so the points below are from reading only. Good
Points to consider
No blocking issues. Automated review by Claude (Anthropic) · sonnet · custom prompt |
🤖 Kimi Code ReviewI'll review this PR, which adds a Commit-Boost builder test battery to the Kurtosis/Assertoor CI workflow. The changes are primarily in CI configuration, documentation, and a shell test script — no consensus-layer Rust code is modified. General AssessmentThis is a well-structured CI addition with good documentation. The shell script has several issues that could cause flaky or incorrect behavior in CI. Detailed Findings1. Shell Script:
|
| Priority | Item | Location |
|---|---|---|
| High | Fix notify job to depend on commit-boost |
.github/workflows/kurtosis_assertoor.yml |
| Medium | Fix awk integer parsing in value_of |
scripts/check-builder-blocks.sh:63 |
| Medium | Cache metrics to avoid race conditions | scripts/check-builder-blocks.sh:88 |
| Low | Add kurtosis availability check |
scripts/check-builder-blocks.sh (top) |
| Low | Verify/fix date comment | commit_boost_params.yaml:44 |
| Low | Add TODO for fork re-pin | .github/workflows/kurtosis_assertoor.yml or README |
Automated review by Kimi (Moonshot AI) · kimi-k2.6 · custom prompt
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.
A local run registered every validator but never got a builder block: rbuilder submits no bid for a block without transactions, and the enclave had none, so the relay held no bids for any proposer and every getHeader answered 204. With transactions flowing, the same enclave served a builder payload within a few slots, and the ethlambda validator client signed the blinded block that the relay delivered. spamoor runs with the package's default spammers (transfers and blob transactions), pinned by digest like the other images. The README also explains the no_finality fallbacks a run counts before the chain first finalizes.
With spamoor's defaults (a chain-load group, 200 transfers and 6 blob transactions a slot) the relay's getHeader slowed to Commit-Boost's 950 ms timeout, so most proposals got no bid, and in 40 minutes the ethlambda validator client behind lighthouse never received one. 10 transfers and 1 blob transaction a slot keep bids coming without that slowdown: a local run met every condition about 12 minutes after the enclave started, and the relay delivered a builder block in 14 of the 32 slots of epoch 1. The package's own 100 Uniswap swaps a slot, which it adds whenever a builder runs, stay on; they are not configurable.
Adds a Commit-Boost check to the kurtosis battery: ethlambda builds blocks through Commit-Boost's PBS module, the MEV-Boost replacement that speaks the same builder-API.
What it runs
tooling/kurtosis-assertoor/commit_boost_params.yaml:mev_type: commit-boost. ethereum-package then adds a flashbots relay, an rbuilder with its own lighthouse, and one Commit-Boost PBS sidecar per participant.GLOAS_FORK_EPOCHspec mismatch (README, "Known failure").scripts/check-builder-blocks.shpolls Prometheus metrics until all of these hold, or 40 minutes pass:lean_beacon_builder_registrations_total{outcome="forwarded"} >= 1lean_beacon_builder_payload_source_total{source="builder"} >= 1produceBlockV3served a builder blockethlambda_validator_builder_registrations_sent_total >= 1,ethlambda_validator_blinded_blocks_proposed_total >= 1ethlambda_validator_blinded_blocks_proposed_total >= 1The script writes each service's builder metrics and the unmet conditions to the results directory on every exit.
Dispatch only, for now
main's) has no--builderor--builder-proposalsuntil the builder stack (feat(beacon): builder-specs containers and the fulu blinded block's state root #694 to feat(validator): propose builder blocks (fulu) #705) lands. The newcommit-boostjob therefore runs only onworkflow_dispatchwithbattery: commit-boostorboth, against an image built from that stack.main, drop the event condition so the check runs on push too.Depends on
a15e7df): adds ethlambda toapply_external_builder_flags.reth-rbuilderimage refuses the ENRs the package has passed since its 08-05 refactor.COMMIT_BOOST_PACKAGE_REFis feat: receive and decode gossiped attestations #23's commit, separate from the base battery'sETHEREUM_PACKAGE_REF. Re-pin to the merge commit once feat: receive and decode gossiped attestations #23 lands.Upstream workarounds
SECONDS_PER_SLOT, which the genesis generator no longer writesmev_params.commit_boost_config(chain_idmust be a hex string)Tested
shellcheck,actionlintandyqpass.ae1a3d2f) met all five conditions about 12 minutes after the enclave started.