Conversation
KA-ROM
force-pushed
the
feat/buildernet-node
branch
from
September 17, 2026 09:51
5455f53 to
4d2cce9
Compare
This was referenced Sep 17, 2026
KA-ROM
added this pull request to stack #15
September 17, 2026 09:54
haproxy -> flowproxy -> rbuilder-operator-reth -> bidding-gateway -> relay, pinned to what flashbots-images trunk/buildernet runs (rbuilder-prism v1.14.0, flowproxy-private v2.13.0, lighthouse v8.2.0); configs transcribed from the production mustache templates. Factory options: rbuilder.<key>=<raw toml> overrides one line of the production-shaped rbuilder.toml; withdrawals=none (BLS creds); triePadding=<n> (warmup pre-creates accounts). ImageBuildSpec.name/variant, ensureClone for tags/SHAs, lighthouse image/feeRecipient overrides.
…tracts Via artifacts genesisAccounts. The gateway seal pays the proposer through the mainnet PaymentForwarder and folds only builder+proposer balances into the shipped tries; without the contract every sealed block failed 'mismatched block state root'. The EIP-4788/2935/7002/7251 contracts make the per-block system calls hit real code, as on mainnet.
KA-ROM
force-pushed
the
feat/buildernet-node
branch
from
September 17, 2026 09:56
4d2cce9 to
1492c39
Compare
…m; relay pinned to a SHA flowproxy moved into rbuilder-prism (crates/flowproxy); build it at the node's ref with the two _assets twins re-based on docker/Dockerfile.flowproxy (upstream: rbuilder-prism #311 --chain-id, #312 arch-agnostic Dockerfile). Bump everything to v1.16.0 (production moved the same day). Pin mev-boost-relay + housekeeper to a commit via config.ref: the container default 'main' is a mutable tag.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
A decker recipe,
buildernet-node, that stands up one BuilderNet node the way production runs it, on a local L1 devnet:The existing
rbuilderrecipe only covers the builder-to-relay half (out-of-process rbuilder, no flowproxy, no haproxy). This recipe adds the missing pieces as new containers and pins every component to whatflashbots-imagestrunk/buildernetships today (rbuilder-prism v1.16.0 for operator-reth, gateway and flowproxy; lighthouse v8.2.0), with configs copied from the production templates.Why
So a change to rbuilder, flowproxy or gateway config can be tried on a laptop or a kind cluster (ALP dev envs) before it goes into a TEE image.
What's in the PR
rbuilder-operator-reth,bidding-gateway,flowproxy,haproxy; new recipebuildernet-node.crates/flowproxy, where it moved on 2026-09-08) at the same ref as the operator, with two small local patches under_assets/: an arch-agnostic Dockerfile and a--chain-idflag. Both are proposed upstream (rbuilder-prism #311, #312); the patches go away once a release has them.config.ref; the container defaultmainis a mutable image tag.rbuilder.<key>=<value>changes one line of rbuilder's config, e.g.rbuilder.evm_caching_enable=falsewithdrawals=nonegives validators no withdrawal credentials, so no per-block withdrawal sweepstriePadding=<n>pre-createsnaccounts before any load, for a mainnet-like state trieImageBuildSpec.name/.variant(one repo can yield several images; a patched build gets its own tag),ensureCloneaccepts tags and commit SHAs, lighthouse acceptsconfig.feeRecipient.make compilenow bundles_assets/into the binary (the flowproxy image tag hashes those files, read relative to the module, lazily). No CI workflow changes.The genesis fix (second commit)
The gateway pays the proposer through a contract that exists on mainnet, the PaymentForwarder, and when it seals a block it assumes that contract is there. Our devnet genesis did not have it, so the payout call did nothing useful and reth rejected every block the builder won with
mismatched block state root.The recipe now predeploys that contract (plus the four Prague system contracts, also present on mainnet) through the
genesisAccountsmechanism from #7. rbuilder-prism's own e2e is disabled for exactly this reason: "until builder-playground ships the PaymentForwarder in its L1 genesis".Verified
build --pods k8s) and generates artifacts; CL and EL agree on the genesis block. Also from a compiled binary in an empty directory.extra_data = "BuilderNet devnet"), 60–120 txs per block, no rejections over 1500+ sealed bids.Not covered
TDX / attested TLS, Builder Hub config, ClickHouse, nftables, edge TLS. It is a dev env, not a TEE image.
Stacked on #13.