Skip to content

feat: support full MEV - #115

Merged
h4ck3rk3y merged 83 commits into
mainfrom
gyani/current-mev
Aug 15, 2023
Merged

feat: support full MEV#115
h4ck3rk3y merged 83 commits into
mainfrom
gyani/current-mev

Conversation

@h4ck3rk3y

@h4ck3rk3y h4ck3rk3y commented Aug 9, 2023

Copy link
Copy Markdown
Collaborator

There are some immediate FLUPs here

  1. Replace h4ck3rk3y/builder with flashbots/builder ( pending publishing of builder)
  2. Replace h4ck3rk3y/mev-boost-relay with flashbots/mev-boost-relay (pending Capella signature fix)

@h4ck3rk3y

Copy link
Copy Markdown
Collaborator Author

Run using kurtosis run '{"mev_type": "full"}'

@h4ck3rk3y h4ck3rk3y mentioned this pull request Aug 9, 2023
@h4ck3rk3y

Copy link
Copy Markdown
Collaborator Author

Use this PR over #97 @barnabasbusa @parithosh

@h4ck3rk3y

Copy link
Copy Markdown
Collaborator Author

You have to wait for 4 epochs or 128 slots to see payloads get delivered. This should start happening around slot 130~

Comment thread main.star
@parithosh

Copy link
Copy Markdown
Member

Since its in a working state now, I'd like to merge this and we iterate any fixes into separate PRs so that its a bit more digestible.

Comment thread main.star
@h4ck3rk3y
h4ck3rk3y merged commit e9e8c41 into main Aug 15, 2023
@h4ck3rk3y
h4ck3rk3y deleted the gyani/current-mev branch August 15, 2023 12:59
@barnabasbusa

Copy link
Copy Markdown
Collaborator

🚀

h4ck3rk3y added a commit that referenced this pull request Sep 4, 2023
🤖 I have created a release *beep* *boop*
---


##
[0.3.0](0.2.0...0.3.0)
(2023-09-03)


### ⚠ BREAKING CHANGES

* Uses the `plan` object. Users will have to update their Kurtosis CLI
to >= 0.63.0 and restart the engine

### Features

* add beacon-metrics-gazer + beacon-metrics-gazer grafana dashboard
([#114](#114))
([5540587](5540587))
* add deneb support
([#96](#96))
([07ed500](07ed500))
* add ethereumjs to nightly runners
([b86d886](b86d886))
* add ethereumjs to nightly runners
([#154](#154))
([b86d886](b86d886))
* add forkmon
([#107](#107))
([2a8ad19](2a8ad19))
* add light-beaconchain-explorer
([83e01a1](83e01a1))
* add light-beaconchain-explorer
([#125](#125))
([83e01a1](83e01a1))
* add multiple endpoint support for lightbeaconchain expolorer
([#151](#151))
([68572cd](68572cd))
* counting by summing each participant
([f9b638b](f9b638b))
* counting by summing each participant
([#112](#112))
([f9b638b](f9b638b))
* disable login for grafana
([4d7df4b](4d7df4b))
* disable login for grafana
([#122](#122))
([4d7df4b](4d7df4b))
* **formatting:** Add editorconfig, move everything to using tabs (4)
([#106](#106))
([cb0fc69](cb0fc69))
* launch the mock mev builder
([#94](#94))
([7fcd3e2](7fcd3e2))
* make it possible to have capella on epoch 0 or non 0
([#108](#108))
([1133497](1133497))
* make mev more configurable
([#164](#164))
([0165ef1](0165ef1))
* parameterize mev_boost and mev_builder images
([#171](#171))
([28adec1](28adec1))
* snooper support
([#121](#121))
([d2cccf4](d2cccf4))
* support full MEV
([#115](#115))
([e9e8c41](e9e8c41))
* use eth-network-package to spin up participant network
([#90](#90))
([91029ac](91029ac))


### Bug Fixes

* a bug around participants
([#129](#129))
([9382767](9382767))
* delay deneb to 500 epoch
([#102](#102))
([d07270b](d07270b))
* dont spin up extra el/cl client for mock-mev
([#158](#158))
([46d67fc](46d67fc))
* fix an arg parsing bug
([#135](#135))
([f084e7c](f084e7c))
* fix passed argument parsing
([#85](#85))
([a5d40e9](a5d40e9))
* fixed teku validator params for MEV
([#149](#149))
([b0079cf](b0079cf))
* fixing nimbus payload url
([#155](#155))
([55c1f59](55c1f59))
* geth failing after ethash package removal
([#93](#93))
([41e3d2c](41e3d2c)),
closes [#91](#91)
* make besu a bootnode
([29296cd](29296cd))
* make besu a bootnode
([#146](#146))
([29296cd](29296cd))
* make this work with kurtosis 0.65.0
([#73](#73))
([13c72ec](13c72ec))
* mention reth in package readme
([#133](#133))
([d11a689](d11a689))
* move parallel keystore generation to global config
([0789eed](0789eed))
* move parallel keystore generation to global config
([#130](#130))
([0789eed](0789eed))
* nightly tests that rely on etherejums get the right image
([#159](#159))
([97b4d33](97b4d33))
* Nimbus can't run when slot time is below 12s
([#100](#100))
([c38bff9](c38bff9))
* pass right mev-boost url to teku
([#147](#147))
([8bb75d9](8bb75d9))
* pin postgres package
([#174](#174))
([6b8d9d3](6b8d9d3))
* Remove nethermind restriction
([#126](#126))
([373c6c9](373c6c9))
* Switch default images to latest
([#99](#99))
([4a85c9d](4a85c9d))
* Update enclave name flag
([#87](#87))
([6531a7a](6531a7a))
* update genesis generator to support netherminds new format
([#68](#68))
([094352d](094352d))
* update nightly runner
([#163](#163))
([4eba65d](4eba65d))
* use eth maintained tx-fuzz
([#110](#110))
([b0903bd](b0903bd))
* use flashbots builder
([#162](#162))
([7a0c2d0](7a0c2d0))
* use mev-boost-relay by flashbots
([#141](#141))
([fca62fc](fca62fc))
* use named artifacts
([#69](#69))
([968f073](968f073)),
closes [#70](#70)
* Use plan object
([#65](#65))
([8e5d185](8e5d185))
* use v2 endoint to get the head block
([#153](#153))
([f084711](f084711))
* work with latest eth-network-package
([14dc957](14dc957))
* work with latest eth-network-package
([#116](#116))
([14dc957](14dc957))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Gyanendra Mishra <anomaly.the@gmail.com>
darigaaz86 pushed a commit to darigaaz86/kurtosis-eth that referenced this pull request Nov 12, 2025
🤖 I have created a release *beep* *boop*
---


##
[0.3.0](ethpandaops/ethereum-package@0.2.0...0.3.0)
(2023-09-03)


### ⚠ BREAKING CHANGES

* Uses the `plan` object. Users will have to update their Kurtosis CLI
to >= 0.63.0 and restart the engine

### Features

* add beacon-metrics-gazer + beacon-metrics-gazer grafana dashboard
([#114](ethpandaops/ethereum-package#114))
([5540587](ethpandaops/ethereum-package@5540587))
* add deneb support
([#96](ethpandaops/ethereum-package#96))
([07ed500](ethpandaops/ethereum-package@07ed500))
* add ethereumjs to nightly runners
([b86d886](ethpandaops/ethereum-package@b86d886))
* add ethereumjs to nightly runners
([#154](ethpandaops/ethereum-package#154))
([b86d886](ethpandaops/ethereum-package@b86d886))
* add forkmon
([#107](ethpandaops/ethereum-package#107))
([2a8ad19](ethpandaops/ethereum-package@2a8ad19))
* add light-beaconchain-explorer
([83e01a1](ethpandaops/ethereum-package@83e01a1))
* add light-beaconchain-explorer
([#125](ethpandaops/ethereum-package#125))
([83e01a1](ethpandaops/ethereum-package@83e01a1))
* add multiple endpoint support for lightbeaconchain expolorer
([#151](ethpandaops/ethereum-package#151))
([68572cd](ethpandaops/ethereum-package@68572cd))
* counting by summing each participant
([f9b638b](ethpandaops/ethereum-package@f9b638b))
* counting by summing each participant
([#112](ethpandaops/ethereum-package#112))
([f9b638b](ethpandaops/ethereum-package@f9b638b))
* disable login for grafana
([4d7df4b](ethpandaops/ethereum-package@4d7df4b))
* disable login for grafana
([#122](ethpandaops/ethereum-package#122))
([4d7df4b](ethpandaops/ethereum-package@4d7df4b))
* **formatting:** Add editorconfig, move everything to using tabs (4)
([#106](ethpandaops/ethereum-package#106))
([cb0fc69](ethpandaops/ethereum-package@cb0fc69))
* launch the mock mev builder
([#94](ethpandaops/ethereum-package#94))
([7fcd3e2](ethpandaops/ethereum-package@7fcd3e2))
* make it possible to have capella on epoch 0 or non 0
([#108](ethpandaops/ethereum-package#108))
([1133497](ethpandaops/ethereum-package@1133497))
* make mev more configurable
([#164](ethpandaops/ethereum-package#164))
([0165ef1](ethpandaops/ethereum-package@0165ef1))
* parameterize mev_boost and mev_builder images
([#171](ethpandaops/ethereum-package#171))
([28adec1](ethpandaops/ethereum-package@28adec1))
* snooper support
([#121](ethpandaops/ethereum-package#121))
([d2cccf4](ethpandaops/ethereum-package@d2cccf4))
* support full MEV
([#115](ethpandaops/ethereum-package#115))
([e9e8c41](ethpandaops/ethereum-package@e9e8c41))
* use eth-network-package to spin up participant network
([#90](ethpandaops/ethereum-package#90))
([91029ac](ethpandaops/ethereum-package@91029ac))


### Bug Fixes

* a bug around participants
([#129](ethpandaops/ethereum-package#129))
([9382767](ethpandaops/ethereum-package@9382767))
* delay deneb to 500 epoch
([#102](ethpandaops/ethereum-package#102))
([d07270b](ethpandaops/ethereum-package@d07270b))
* dont spin up extra el/cl client for mock-mev
([#158](ethpandaops/ethereum-package#158))
([46d67fc](ethpandaops/ethereum-package@46d67fc))
* fix an arg parsing bug
([#135](ethpandaops/ethereum-package#135))
([f084e7c](ethpandaops/ethereum-package@f084e7c))
* fix passed argument parsing
([#85](ethpandaops/ethereum-package#85))
([a5d40e9](ethpandaops/ethereum-package@a5d40e9))
* fixed teku validator params for MEV
([#149](ethpandaops/ethereum-package#149))
([b0079cf](ethpandaops/ethereum-package@b0079cf))
* fixing nimbus payload url
([#155](ethpandaops/ethereum-package#155))
([55c1f59](ethpandaops/ethereum-package@55c1f59))
* geth failing after ethash package removal
([#93](ethpandaops/ethereum-package#93))
([41e3d2c](ethpandaops/ethereum-package@41e3d2c)),
closes [#91](ethpandaops/ethereum-package#91)
* make besu a bootnode
([29296cd](ethpandaops/ethereum-package@29296cd))
* make besu a bootnode
([#146](ethpandaops/ethereum-package#146))
([29296cd](ethpandaops/ethereum-package@29296cd))
* make this work with kurtosis 0.65.0
([#73](ethpandaops/ethereum-package#73))
([13c72ec](ethpandaops/ethereum-package@13c72ec))
* mention reth in package readme
([#133](ethpandaops/ethereum-package#133))
([d11a689](ethpandaops/ethereum-package@d11a689))
* move parallel keystore generation to global config
([0789eed](ethpandaops/ethereum-package@0789eed))
* move parallel keystore generation to global config
([#130](ethpandaops/ethereum-package#130))
([0789eed](ethpandaops/ethereum-package@0789eed))
* nightly tests that rely on etherejums get the right image
([#159](ethpandaops/ethereum-package#159))
([97b4d33](ethpandaops/ethereum-package@97b4d33))
* Nimbus can't run when slot time is below 12s
([#100](ethpandaops/ethereum-package#100))
([c38bff9](ethpandaops/ethereum-package@c38bff9))
* pass right mev-boost url to teku
([#147](ethpandaops/ethereum-package#147))
([8bb75d9](ethpandaops/ethereum-package@8bb75d9))
* pin postgres package
([#174](ethpandaops/ethereum-package#174))
([6b8d9d3](ethpandaops/ethereum-package@6b8d9d3))
* Remove nethermind restriction
([#126](ethpandaops/ethereum-package#126))
([373c6c9](ethpandaops/ethereum-package@373c6c9))
* Switch default images to latest
([#99](ethpandaops/ethereum-package#99))
([4a85c9d](ethpandaops/ethereum-package@4a85c9d))
* Update enclave name flag
([#87](ethpandaops/ethereum-package#87))
([6531a7a](ethpandaops/ethereum-package@6531a7a))
* update genesis generator to support netherminds new format
([#68](ethpandaops/ethereum-package#68))
([094352d](ethpandaops/ethereum-package@094352d))
* update nightly runner
([#163](ethpandaops/ethereum-package#163))
([4eba65d](ethpandaops/ethereum-package@4eba65d))
* use eth maintained tx-fuzz
([#110](ethpandaops/ethereum-package#110))
([b0903bd](ethpandaops/ethereum-package@b0903bd))
* use flashbots builder
([#162](ethpandaops/ethereum-package#162))
([7a0c2d0](ethpandaops/ethereum-package@7a0c2d0))
* use mev-boost-relay by flashbots
([#141](ethpandaops/ethereum-package#141))
([fca62fc](ethpandaops/ethereum-package@fca62fc))
* use named artifacts
([#69](ethpandaops/ethereum-package#69))
([968f073](ethpandaops/ethereum-package@968f073)),
closes [#70](ethpandaops/ethereum-package#70)
* Use plan object
([#65](ethpandaops/ethereum-package#65))
([8e5d185](ethpandaops/ethereum-package@8e5d185))
* use v2 endoint to get the head block
([#153](ethpandaops/ethereum-package#153))
([f084711](ethpandaops/ethereum-package@f084711))
* work with latest eth-network-package
([14dc957](ethpandaops/ethereum-package@14dc957))
* work with latest eth-network-package
([#116](ethpandaops/ethereum-package#116))
([14dc957](ethpandaops/ethereum-package@14dc957))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Gyanendra Mishra <anomaly.the@gmail.com>
barnabasbusa added a commit that referenced this pull request Jun 24, 2026
…1432)

## What

Adds support for **multiple dedicated buildoor builder instances**,
configured independently of the participants via
`buildoor_params.instances` and enabled as an `additional_services`
entry.

```yaml
participants:
  - el_type: geth
    cl_type: lighthouse
  - el_type: reth
    cl_type: prysm
additional_services:
  - buildoor          # enables buildoor (like dora/spamoor/etc)
buildoor_params:
  builder_api: true
  epbs_builder: true
  lifecycle: true
  instances:
    - participant: 1  # 1-based participant index
      count: 1
    - participant: 2
      count: 2        # two competing builders wired to participant 2
```

This spins up `buildoor-lighthouse-geth-1`, `buildoor-reth-prysm-2-1`,
and `buildoor-reth-prysm-2-2`, each wired to the named participant's own
CL/EL.

## Why

A block builder is independent of the network — it reads one CL's
`payload_attributes` stream and (under ePBS) gossips bids to everyone.
The previous model only allowed a single shared builder via `mev_type:
buildoor` against participant 0. This lets you run many builders, target
specific participants, and run more than one per participant.

## How

- **buildoor as an additional_service** — buildoor only spins up when
`buildoor` is in `additional_services` (consistent with other optional
services), instead of being implied by config. With `buildoor` enabled
and no `instances` set, it defaults to a single builder on the first
participant. Mutually exclusive with the (deprecated) `mev_type:
buildoor`.
- **`buildoor_params.instances`** — `[{participant, count}]` declares
which participants get builders and how many each. Validated for index
range, duplicates, and count.
- **Cleaner key derivation** — buildoor derives its builder BLS key
itself via `--builder-mnemonic` + `--builder-key-index`, dropping the
per-instance `ethdo` `run_sh` containers.
- **Lifecycle / post-genesis onboarding (default on)** — each builder
onboards itself after genesis via its lifecycle deposit (`--lifecycle`),
so builders no longer need genesis registration and **gloas does not
have to be at genesis** (works at any gloas epoch). Builder keys are
derived at indices after any genesis-registered builders to avoid
collisions.
- **Block attribution** — each instance passes
`--extra-data=<service-name>` so built blocks can be traced back to the
builder that produced them.
- **Service naming** — `buildoor-<cl>-<el>-<participant>` (with a `-<n>`
suffix when count > 1), matching the cl/el naming convention.
- **Deprecation** — `mev_type: buildoor` (single shared builder) is
marked deprecated and will be dropped after the gloas fork; a runtime
warning is printed.
- **Docs + validation + tests** — README updated; sanity checks added
for the new params; nightly tests added (`buildoor-instances.yaml`,
`buildoor-instances-matrix.yaml`).

## Notes / limitations

- The `--extra-data` flag and lifecycle/early-deposit onboarding require
a buildoor build that supports them (in `glamsterdam-devnet-6`; not yet
in `:main`). Bump the default `buildoor_params.image` once buildoor PRs
#115/#110 land on main.
- The CL has a single external-builder endpoint, so it is wired to its
participant's first buildoor instance; additional instances still run
(e.g. competing ePBS builders) but are not the CL's Builder-API
endpoint.
- Each instance uses a distinct prefunded account so concurrent
buildoors don't collide on tx nonces; with a custom single-account
`prefunded_accounts` they would share a wallet.

## Testing

Validated with `kurtosis run . --dry-run`:
- `additional_services: [buildoor]` + instances → all instances spin up.
- `additional_services: [buildoor]`, no instances → one builder on
participant 1.
- instances set without `buildoor` in additional_services → clear
failure.
- gloas at a non-genesis epoch → builders spin up (lifecycle
onboarding).
- combining with `mev_type: buildoor` → conflict failure; deprecated
`mev_type: buildoor` alone still works.
- `black`-formatted.

---------

Co-authored-by: Claude <noreply@anthropic.com>
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.

3 participants