Skip to content

Commit 729ead8

Browse files
authored
fix: mev-pectra workflow (#963)
Signed-off-by: Barnabas Busa <[email protected]>
1 parent d677e63 commit 729ead8

File tree

13 files changed

+132
-69
lines changed

13 files changed

+132
-69
lines changed

.github/tests/mev-pectra.yaml

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,61 +1,61 @@
11
participants:
22
- el_type: geth
3-
el_image: ethereum/client-go:v1.15.7
3+
el_image: ethereum/client-go:v1.15.9
44
el_extra_params: ["--miner.extradata=pawanRocks"]
55
cl_type: lighthouse
6-
cl_image: sigp/lighthouse:v7.0.0-beta.5
7-
validator_count: 1
8-
- el_type: geth
9-
el_image: ethereum/client-go:v1.15.7
10-
el_extra_params: ["--miner.extradata=TekuFromLocal"]
6+
cl_image: sigp/lighthouse:v7.0.0
7+
8+
- el_type: nethermind
9+
el_image: nethermindeth/nethermind:release-1.31.9-genesis-pectra
10+
el_extra_params: ["--Blocks.ExtraData=TekuFromLocal"]
1111
cl_type: teku
1212
cl_image: consensys/teku:25.4.0
13-
- el_type: geth
14-
el_image: ethereum/client-go:v1.15.7
15-
el_extra_params: ["--miner.extradata=lodestarFromLocal"]
13+
14+
- el_type: reth
15+
el_image: ghcr.io/paradigmxyz/reth:v1.3.12
16+
el_extra_params: ["--builder.extradata=lodestarFromLocal"]
1617
cl_type: lodestar
17-
cl_image: chainsafe/lodestar:v1.28.1
18-
- el_type: geth
19-
el_image: ethereum/client-go:v1.15.7
18+
cl_image: chainsafe/lodestar:v1.29.0
19+
20+
- el_type: erigon
21+
el_image: erigontech/erigon:v3.0.2
2022
el_extra_params: ["--miner.extradata=prysmFromLocal"]
2123
cl_type: prysm
22-
cl_image: prysmaticlabs/prysm-beacon-chain:v5.3.2
23-
vc_image: prysmaticlabs/prysm-validator:v5.3.2
24-
- el_type: geth
25-
el_image: ethereum/client-go:v1.15.7
26-
el_extra_params: ["--miner.extradata=nimbusFromLocal"]
24+
cl_image: prysmaticlabs/prysm-beacon-chain:v6.0.0
25+
vc_image: prysmaticlabs/prysm-validator:v6.0.0
26+
27+
- el_type: besu
28+
el_image: hyperledger/besu:25.4.1
29+
el_extra_params: ["--miner-extra-data=0x6E696D62757346726F6D4C6F63616C"]
2730
cl_type: nimbus
28-
cl_image: statusim/nimbus-eth2:multiarch-v25.3.1
29-
- el_type: geth
30-
el_image: ethereum/client-go:v1.15.7
31-
el_extra_params: ["--miner.extradata=grandineFromLocal"]
32-
cl_type: grandine
33-
cl_image: sifrai/grandine:1.0.1
31+
cl_image: statusim/nimbus-eth2:multiarch-v25.4.0
3432

3533
additional_services:
3634
- dora
3735
- tx_fuzz
3836
- spamoor
37+
- assertoor
3938
mev_type: flashbots
4039

4140
mev_params:
42-
mev_relay_image: ethpandaops/mev-boost-relay:main-17ed054
43-
mev_boost_image: ethpandaops/mev-boost:develop-79c3997
44-
mev_builder_cl_image: sigp/lighthouse:v7.0.0-beta.5
45-
mev_builder_image: ethpandaops/reth-rbuilder:develop-01c8071
46-
41+
mev_relay_image: ethpandaops/mev-boost-relay:ssz-91648d3
42+
mev_boost_image: ethpandaops/mev-boost:develop-d65d507
43+
mev_builder_cl_image: sigp/lighthouse:v7.0.0
44+
mev_builder_image: ethpandaops/reth-rbuilder:develop-8cd28c1
45+
mev_builder_subsidy: 1
4746

4847
network_params:
49-
electra_fork_epoch: 1
48+
electra_fork_epoch: 0
5049
min_validator_withdrawability_delay: 1
5150
shard_committee_period: 1
5251
churn_limit_quotient: 16
53-
genesis_delay: 120
52+
prefunded_accounts: '{"0xb9e79D19f651a941757b35830232E7EFC77E1c79": {"balance": "100000ETH"}}'
5453

55-
spamoor_params:
56-
spammers:
57-
- scenario: blob-combined
54+
assertoor_params:
55+
tests:
56+
- file: https://raw.githubusercontent.com/ethpandaops/assertoor/refs/heads/master/playbooks/pectra-dev/kurtosis/fillup-all-el-queues.yaml
5857
config:
59-
throughput: 10
60-
sidecars: 2
61-
max_pending: 40
58+
requestCount: 1000 # total number of requests
59+
walletCount: 2 # number of wallets to send from for each request type
60+
throughputPerWallet: 2 # number of transactions per slot, type and wallet
61+
maxPendingPerWallet: 10 # max number of pending requests per type

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -871,6 +871,8 @@ mev_params:
871871
mev_builder_image: ethpandaops/flashbots-builder:main
872872
# The image to use for the CL builder
873873
mev_builder_cl_image: sigp/lighthouse:latest
874+
# The subsidy to use for the builder (in ETH)
875+
mev_builder_subsidy: 0
874876
# The image to use for mev-boost
875877
mev_boost_image: ethpandaops/mev-boost:develop
876878
# Parameters for MEV Boost. This overrides all arguments of the mev-boost container

main.star

Lines changed: 5 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ def run(plan, args={}):
173173
network_params,
174174
constants.VALIDATING_REWARDS_ACCOUNT,
175175
network_params.preregistered_validator_keys_mnemonic,
176-
args_with_right_defaults.mev_params.mev_builder_extra_data,
176+
args_with_right_defaults.mev_params,
177177
enumerate(args_with_right_defaults.participants),
178178
global_node_selectors,
179179
)
@@ -299,34 +299,18 @@ def run(plan, args={}):
299299
all_el_contexts[-1].ip_addr, all_el_contexts[-1].rpc_port_num
300300
)
301301
beacon_uri = all_cl_contexts[-1].beacon_http_url
302-
beacon_uris = ",".join(
303-
["{0}".format(context.beacon_http_url) for context in all_cl_contexts]
304-
)
305302

306303
first_cl_client = all_cl_contexts[0]
307304
first_client_beacon_name = first_cl_client.beacon_service_name
308305
contract_owner, normal_user = prefunded_accounts[6:8]
309306
mev_flood.launch_mev_flood(
310307
plan,
311308
mev_params.mev_flood_image,
312-
fuzz_target,
309+
all_el_contexts[-1].rpc_http_url, # Only spam builder
313310
contract_owner.private_key,
314311
normal_user.private_key,
315312
global_node_selectors,
316313
)
317-
epoch_recipe = GetHttpRequestRecipe(
318-
endpoint="/eth/v2/beacon/blocks/head",
319-
port_id=HTTP_PORT_ID_FOR_FACT,
320-
extract={"epoch": ".data.message.body.attestations[0].data.target.epoch"},
321-
)
322-
plan.wait(
323-
recipe=epoch_recipe,
324-
field="extract.epoch",
325-
assertion=">=",
326-
target_value=str(network_params.deneb_fork_epoch),
327-
timeout="20m",
328-
service_name=first_client_beacon_name,
329-
)
330314
if (
331315
args_with_right_defaults.mev_type == constants.FLASHBOTS_MEV_TYPE
332316
or args_with_right_defaults.mev_type == constants.COMMIT_BOOST_MEV_TYPE
@@ -335,7 +319,7 @@ def run(plan, args={}):
335319
plan,
336320
mev_params,
337321
network_id,
338-
beacon_uris,
322+
beacon_uri,
339323
genesis_validators_root,
340324
blocksim_uri,
341325
network_params.seconds_per_slot,
@@ -356,7 +340,7 @@ def run(plan, args={}):
356340

357341
mev_flood.spam_in_background(
358342
plan,
359-
fuzz_target,
343+
all_el_contexts[-1].rpc_http_url, # Only spam builder
360344
mev_params.mev_flood_extra_args,
361345
mev_params.mev_flood_seconds_per_bundle,
362346
contract_owner.private_key,
@@ -399,6 +383,7 @@ def run(plan, args={}):
399383
final_genesis_timestamp,
400384
mev_params.mev_boost_image,
401385
mev_params.mev_boost_args,
386+
args_with_right_defaults.participants[index],
402387
global_node_selectors,
403388
)
404389
elif args_with_right_defaults.mev_type == constants.MEV_RS_MEV_TYPE:

src/el/reth/reth_launcher.star

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ DISCOVERY_PORT_NUM = 30303
1717
ENGINE_RPC_PORT_NUM = 8551
1818
METRICS_PORT_NUM = 9001
1919
RBUILDER_PORT_NUM = 8645
20+
RBUILDER_METRICS_PORT_NUM = 6060
21+
2022
# Paths
2123
METRICS_PATH = "/metrics"
2224

@@ -144,6 +146,9 @@ def get_config(
144146
or launcher.builder_type == constants.COMMIT_BOOST_MEV_TYPE
145147
):
146148
used_port_assignments[constants.RBUILDER_PORT_ID] = RBUILDER_PORT_NUM
149+
used_port_assignments[
150+
constants.RBUILDER_METRICS_PORT_ID
151+
] = RBUILDER_METRICS_PORT_NUM
147152

148153
used_ports = shared_utils.get_port_specs(used_port_assignments)
149154

@@ -248,6 +253,9 @@ def get_config(
248253
cmd.append("--rbuilder.config=" + flashbots_rbuilder.MEV_FILE_PATH_ON_CONTAINER)
249254
cmd.append("--engine.persistence-threshold=0")
250255
cmd.append("--engine.memory-block-buffer-target=0")
256+
cmd.append(
257+
"--txpool.no-local-transactions-propagation"
258+
) # disable tx propagation so that builder will have juicy blocks
251259
files[
252260
flashbots_rbuilder.MEV_BUILDER_MOUNT_DIRPATH_ON_SERVICE
253261
] = flashbots_rbuilder.MEV_BUILDER_FILES_ARTIFACT_NAME

src/mev/flashbots/mev_boost/mev_boost_launcher.star

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ def launch(
3232
genesis_timestamp,
3333
mev_boost_image,
3434
mev_boost_args,
35+
participant,
3536
global_node_selectors,
3637
):
3738
config = get_config(
@@ -40,6 +41,7 @@ def launch(
4041
mev_boost_image,
4142
mev_boost_args,
4243
global_node_selectors,
44+
participant,
4345
)
4446

4547
mev_boost_service = plan.add_service(service_name, config)
@@ -55,6 +57,7 @@ def get_config(
5557
mev_boost_image,
5658
mev_boost_args,
5759
node_selectors,
60+
participant,
5861
):
5962
command = mev_boost_args
6063

@@ -67,7 +70,11 @@ def get_config(
6770
"GENESIS_TIMESTAMP": "{0}".format(genesis_timestamp),
6871
"BOOST_LISTEN_ADDR": "0.0.0.0:{0}".format(input_parser.MEV_BOOST_PORT),
6972
"SKIP_RELAY_SIGNATURE_CHECK": "1",
70-
"RELAYS": mev_boost_launcher.relay_end_points[0],
73+
"RELAYS": "{0}?id={1}-{2}".format(
74+
mev_boost_launcher.relay_end_points[0],
75+
participant.cl_type,
76+
participant.el_type,
77+
),
7178
},
7279
min_cpu=MIN_CPU,
7380
max_cpu=MAX_CPU,

src/mev/flashbots/mev_builder/mev_builder_launcher.star

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ def new_builder_config(
2020
network_params,
2121
fee_recipient,
2222
mnemonic,
23-
extra_data,
23+
mev_params,
2424
participants,
2525
global_node_selectors,
2626
):
@@ -33,8 +33,9 @@ def new_builder_config(
3333
constants.DEFAULT_MEV_SECRET_KEY[2:], # drop the 0x prefix
3434
mnemonic,
3535
fee_recipient,
36-
extra_data,
36+
mev_params.mev_builder_extra_data,
3737
num_of_participants,
38+
mev_params.mev_builder_subsidy,
3839
)
3940
flashbots_builder_config_template = read_file(
4041
static_files.FLASHBOTS_RBUILDER_CONFIG_FILEPATH
@@ -68,6 +69,7 @@ def new_builder_config_template_data(
6869
fee_recipient,
6970
extra_data,
7071
num_of_participants,
72+
subsidy,
7173
):
7274
return {
7375
"Network": network_params.network
@@ -88,4 +90,5 @@ def new_builder_config_template_data(
8890
"Mnemonic": mnemonic,
8991
"FeeRecipient": fee_recipient,
9092
"ExtraData": extra_data,
93+
"Subsidy": subsidy,
9194
}

src/mev/flashbots/mev_relay/mev_relay_launcher.star

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@ NETWORK_ID_TO_NAME = {
1919
LAUNCH_ADMINER = True
2020

2121
# The min/max CPU/memory that mev-relay can use
22-
RELAY_MIN_CPU = 100
23-
RELAY_MAX_CPU = 1000
24-
RELAY_MIN_MEMORY = 128
25-
RELAY_MAX_MEMORY = 1024
22+
RELAY_MIN_CPU = 500
23+
RELAY_MAX_CPU = 3000
24+
RELAY_MIN_MEMORY = 256
25+
RELAY_MAX_MEMORY = 2048
2626

2727
# The min/max CPU/memory that postgres can use
2828
POSTGRES_MIN_CPU = 10
@@ -31,8 +31,8 @@ POSTGRES_MIN_MEMORY = 32
3131
POSTGRES_MAX_MEMORY = 1024
3232

3333
# The min/max CPU/memory that redis can use
34-
REDIS_MIN_CPU = 10
35-
REDIS_MAX_CPU = 1000
34+
REDIS_MIN_CPU = 500
35+
REDIS_MAX_CPU = 3000
3636
REDIS_MIN_MEMORY = 16
3737
REDIS_MAX_MEMORY = 1024
3838

@@ -171,6 +171,15 @@ def launch_mev_relay(
171171
"https://{0}@{1}".format(
172172
constants.DEFAULT_MEV_PUBKEY, MEV_RELAY_ENDPOINT
173173
),
174+
"--show-config-details",
175+
"--relay-url",
176+
"http://{0}@{1}:{2}".format(
177+
constants.DEFAULT_MEV_PUBKEY,
178+
api.ip_address,
179+
MEV_RELAY_ENDPOINT_PORT,
180+
),
181+
"--pubkey-override",
182+
constants.DEFAULT_MEV_PUBKEY,
174183
]
175184
+ mev_params.mev_relay_website_extra_args,
176185
ports={

src/package_io/constants.star

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ ENGINE_RPC_PORT_ID = "engine-rpc"
5757
ENGINE_WS_PORT_ID = "engine-ws"
5858
ADMIN_PORT_ID = "admin"
5959
RBUILDER_PORT_ID = "rbuilder-rpc"
60+
RBUILDER_METRICS_PORT_ID = "rbuilder-metric"
6061
LITTLE_BIGTABLE_PORT_ID = "littlebigtable"
6162
VALDIATOR_GRPC_PORT_ID = "grpc"
6263

@@ -174,7 +175,7 @@ GENESIS_VALIDATORS_ROOT = {
174175
DEPOSIT_CONTRACT_ADDRESS = {
175176
"mainnet": "0x00000000219ab540356cBB839Cbe05303d7705Fa",
176177
"sepolia": "0x7f02C3E3c98b133055B8B348B2Ac625669Ed295D",
177-
"holesky": "0x00000000219ab540356cBB839Cbe05303d7705Fa",
178+
"holesky": "0x4242424242424242424242424242424242424242",
178179
"ephemery": "0x00000000219ab540356cBB839Cbe05303d7705Fa",
179180
"hoodi": "0x00000000219ab540356cBB839Cbe05303d7705Fa",
180181
}

src/package_io/input_parser.star

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,14 @@ def input_parser(plan, input_args):
213213
)
214214
)
215215

216+
if (
217+
result["mev_params"].get("mev_builder_subsidy") != 0
218+
and result["network_params"].get("prefunded_accounts") == {}
219+
):
220+
fail(
221+
'mev_builder_subsidy is not 0 but prefunded_accounts is empty, please provide a prefunded account for the builder. Example: prefunded_accounts: \'{"0xb9e79D19f651a941757b35830232E7EFC77E1c79": {"balance": "100000ETH"}}\''
222+
)
223+
216224
if result["docker_cache_params"]["enabled"]:
217225
docker_cache_image_override(plan, result)
218226
else:
@@ -369,6 +377,7 @@ def input_parser(plan, input_args):
369377
mev_builder_image=result["mev_params"]["mev_builder_image"],
370378
mev_builder_cl_image=result["mev_params"]["mev_builder_cl_image"],
371379
mev_builder_extra_data=result["mev_params"]["mev_builder_extra_data"],
380+
mev_builder_subsidy=result["mev_params"]["mev_builder_subsidy"],
372381
mev_boost_image=result["mev_params"]["mev_boost_image"],
373382
mev_boost_args=result["mev_params"]["mev_boost_args"],
374383
mev_relay_api_extra_args=result["mev_params"]["mev_relay_api_extra_args"],
@@ -1083,6 +1092,7 @@ def get_default_mev_params(mev_type, preset):
10831092
else:
10841093
mev_builder_cl_image = DEFAULT_CL_IMAGES[constants.CL_TYPE.lighthouse]
10851094
mev_builder_extra_data = None
1095+
mev_builder_subsidy = 0
10861096
mev_boost_image = constants.DEFAULT_FLASHBOTS_MEV_BOOST_IMAGE
10871097
mev_boost_args = ["mev-boost", "--relay-check"]
10881098
mev_relay_api_extra_args = []
@@ -1138,6 +1148,7 @@ def get_default_mev_params(mev_type, preset):
11381148
"mock_mev_image": mev_builder_image
11391149
if mev_type == constants.MOCK_MEV_TYPE
11401150
else None,
1151+
"mev_builder_subsidy": mev_builder_subsidy,
11411152
"mev_builder_cl_image": mev_builder_cl_image,
11421153
"mev_builder_extra_data": mev_builder_extra_data,
11431154
"mev_builder_extra_args": mev_builder_extra_args,

src/package_io/sanity_check.star

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,7 @@ SUBCATEGORY_PARAMS = {
231231
"mev_relay_image",
232232
"mev_builder_image",
233233
"mev_builder_cl_image",
234+
"mev_builder_subsidy",
234235
"mev_boost_image",
235236
"mev_boost_args",
236237
"mev_relay_api_extra_args",

0 commit comments

Comments
 (0)