Skip to content

Commit 2d1cab5

Browse files
authored
feat: generate keys if not default key is used (#707)
1 parent a9ba40e commit 2d1cab5

File tree

7 files changed

+75
-27
lines changed

7 files changed

+75
-27
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -550,7 +550,7 @@ network_params:
550550
# - A prometheus will be started, coupled with grafana
551551
# - A beacon metrics gazer will be launched
552552
# - A light beacon chain explorer will be launched
553-
# - Default: ["tx_spammer", "blob_spammer", "el_forkmon", "beacon_metrics_gazer", "dora"," "prometheus_grafana"]
553+
# - Default: []
554554
additional_services:
555555
- assertoor
556556
- broadcaster
@@ -1007,7 +1007,7 @@ For more details, including a guide and architecture of the `mev-boost` infrastr
10071007

10081008
## Pre-funded accounts at Genesis
10091009

1010-
This package comes with [20 prefunded keys for testing](https://github.com/ethpandaops/ethereum-package/blob/main/src/prelaunch_data_generator/genesis_constants/genesis_constants.star).
1010+
This package comes with [21 prefunded keys for testing](https://github.com/ethpandaops/ethereum-package/blob/main/src/prelaunch_data_generator/genesis_constants/genesis_constants.star).
10111011

10121012
Here's a table of where the keys are used
10131013

main.star

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@ mev_custom_flood = import_module(
5151
)
5252
broadcaster = import_module("./src/broadcaster/broadcaster.star")
5353
assertoor = import_module("./src/assertoor/assertoor_launcher.star")
54+
get_prefunded_accounts = import_module(
55+
"./src/prefunded_accounts/get_prefunded_accounts.star"
56+
)
5457

5558
GRAFANA_USER = "admin"
5659
GRAFANA_PASSWORD = "admin"
@@ -83,6 +86,15 @@ def run(plan, args={}):
8386
keymanager_enabled = args_with_right_defaults.keymanager_enabled
8487
apache_port = args_with_right_defaults.apache_port
8588

89+
prefunded_accounts = genesis_constants.PRE_FUNDED_ACCOUNTS
90+
if (
91+
network_params.preregistered_validator_keys_mnemonic
92+
!= constants.DEFAULT_MNEMONIC
93+
):
94+
prefunded_accounts = get_prefunded_accounts.get_accounts(
95+
plan, network_params.preregistered_validator_keys_mnemonic
96+
)
97+
8698
grafana_datasource_config_template = read_file(
8799
static_files.GRAFANA_DATASOURCE_CONFIG_TEMPLATE_FILEPATH
88100
)
@@ -240,7 +252,7 @@ def run(plan, args={}):
240252

241253
first_cl_client = all_cl_contexts[0]
242254
first_client_beacon_name = first_cl_client.beacon_service_name
243-
contract_owner, normal_user = genesis_constants.PRE_FUNDED_ACCOUNTS[6:8]
255+
contract_owner, normal_user = prefunded_accounts[6:8]
244256
mev_flood.launch_mev_flood(
245257
plan,
246258
mev_params.mev_flood_image,
@@ -362,8 +374,9 @@ def run(plan, args={}):
362374
if len(args_with_right_defaults.additional_services) == 0:
363375
output = struct(
364376
all_participants=all_participants,
365-
pre_funded_accounts=genesis_constants.PRE_FUNDED_ACCOUNTS,
377+
pre_funded_accounts=prefunded_accounts,
366378
network_params=network_params,
379+
network_id=network_id,
367380
final_genesis_timestamp=final_genesis_timestamp,
368381
genesis_validators_root=genesis_validators_root,
369382
)
@@ -379,7 +392,7 @@ def run(plan, args={}):
379392
tx_spammer_params = args_with_right_defaults.tx_spammer_params
380393
transaction_spammer.launch_transaction_spammer(
381394
plan,
382-
genesis_constants.PRE_FUNDED_ACCOUNTS,
395+
prefunded_accounts,
383396
fuzz_target,
384397
tx_spammer_params,
385398
network_params.electra_fork_epoch,
@@ -390,7 +403,7 @@ def run(plan, args={}):
390403
plan.print("Launching Blob spammer")
391404
blob_spammer.launch_blob_spammer(
392405
plan,
393-
genesis_constants.PRE_FUNDED_ACCOUNTS,
406+
prefunded_accounts,
394407
fuzz_target,
395408
all_cl_contexts[0],
396409
network_params.deneb_fork_epoch,
@@ -404,7 +417,7 @@ def run(plan, args={}):
404417
goomy_blob_params = args_with_right_defaults.goomy_blob_params
405418
goomy_blob.launch_goomy_blob(
406419
plan,
407-
genesis_constants.PRE_FUNDED_ACCOUNTS,
420+
prefunded_accounts,
408421
all_el_contexts,
409422
all_cl_contexts[0],
410423
network_params.seconds_per_slot,
@@ -606,8 +619,8 @@ def run(plan, args={}):
606619
elif additional_service == "custom_flood":
607620
mev_custom_flood.spam_in_background(
608621
plan,
609-
genesis_constants.PRE_FUNDED_ACCOUNTS[-1].private_key,
610-
genesis_constants.PRE_FUNDED_ACCOUNTS[0].address,
622+
prefunded_accounts[-1].private_key,
623+
prefunded_accounts[0].address,
611624
fuzz_target,
612625
args_with_right_defaults.custom_flood_params,
613626
global_node_selectors,
@@ -669,7 +682,7 @@ def run(plan, args={}):
669682
if ("blockscout" in args_with_right_defaults.additional_services) == False
670683
else blockscout_sc_verif_url,
671684
all_participants=all_participants,
672-
pre_funded_accounts=genesis_constants.PRE_FUNDED_ACCOUNTS,
685+
pre_funded_accounts=prefunded_accounts,
673686
network_params=network_params,
674687
network_id=network_id,
675688
final_genesis_timestamp=final_genesis_timestamp,

network_params.yaml

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -84,13 +84,7 @@ network_params:
8484
additional_preloaded_contracts: {}
8585
devnet_repo: ethpandaops
8686
checkpoint_sync_enabled: false
87-
additional_services:
88-
- tx_spammer
89-
- blob_spammer
90-
- el_forkmon
91-
- beacon_metrics_gazer
92-
- dora
93-
- prometheus_grafana
87+
additional_services: []
9488
dora_params:
9589
image: ""
9690
tx_spammer_params:

src/package_io/constants.star

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,8 @@ DEFAULT_MEV_SECRET_KEY = (
9191
"0x607a11b45a7219cc61a3d9c5fd08c7eebd602a6a19a977f8d3771d5711a550f2"
9292
)
9393

94+
DEFAULT_MNEMONIC = "giant issue aisle success illegal bike spike question tent bar rely arctic volcano long crawl hungry vocal artwork sniff fantasy very lucky have athlete"
95+
9496
PRIVATE_IP_ADDRESS_PLACEHOLDER = "KURTOSIS_IP_ADDR_PLACEHOLDER"
9597

9698
GENESIS_FORK_VERSION = "0x10000038"

src/package_io/input_parser.star

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -61,14 +61,7 @@ MEV_BOOST_SERVICE_NAME_PREFIX = "mev-boost"
6161
# Minimum number of validators required for a network to be valid is 64
6262
MIN_VALIDATORS = 64
6363

64-
DEFAULT_ADDITIONAL_SERVICES = [
65-
"tx_spammer",
66-
"blob_spammer",
67-
"el_forkmon",
68-
"beacon_metrics_gazer",
69-
"dora",
70-
"prometheus_grafana",
71-
]
64+
DEFAULT_ADDITIONAL_SERVICES = []
7265

7366
ATTR_TO_BE_SKIPPED_AT_ROOT = (
7467
"network_params",
@@ -782,7 +775,7 @@ def default_network_params():
782775
"deposit_contract_address": "0x4242424242424242424242424242424242424242",
783776
"seconds_per_slot": 12,
784777
"num_validator_keys_per_node": 64,
785-
"preregistered_validator_keys_mnemonic": "giant issue aisle success illegal bike spike question tent bar rely arctic volcano long crawl hungry vocal artwork sniff fantasy very lucky have athlete",
778+
"preregistered_validator_keys_mnemonic": constants.DEFAULT_MNEMONIC,
786779
"preregistered_validator_count": 0,
787780
"genesis_delay": 20,
788781
"max_per_epoch_activation_churn_limit": 8,
@@ -814,7 +807,7 @@ def default_minimal_network_params():
814807
"deposit_contract_address": "0x4242424242424242424242424242424242424242",
815808
"seconds_per_slot": 6,
816809
"num_validator_keys_per_node": 64,
817-
"preregistered_validator_keys_mnemonic": "giant issue aisle success illegal bike spike question tent bar rely arctic volcano long crawl hungry vocal artwork sniff fantasy very lucky have athlete",
810+
"preregistered_validator_keys_mnemonic": constants.DEFAULT_MNEMONIC,
818811
"preregistered_validator_count": 0,
819812
"genesis_delay": 20,
820813
"max_per_epoch_activation_churn_limit": 4,
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
new_prefunded_account = import_module(
2+
"../prelaunch_data_generator/genesis_constants/genesis_constants.star"
3+
)
4+
5+
IMAGE = "wealdtech/ethereal:latest"
6+
7+
8+
def get_accounts(plan, mnemonic, num_of_keys=21):
9+
PRE_FUNDED_ACCOUNTS = []
10+
plan.print("mnemonic: {0}".format(mnemonic))
11+
for current_key in range(num_of_keys):
12+
private_key = plan.run_sh(
13+
name="run-ethereal-private-key",
14+
image=IMAGE,
15+
description="Running ethereal to derive private keys of key {0}".format(
16+
current_key
17+
),
18+
run="private_key=$(/app/ethereal hd keys --seed=\"{0}\" --path=\"m/44'/60'/0'/0/{1}\" | awk '/Private key/{{print substr($NF, 3)}}'); echo -n $private_key".format(
19+
mnemonic, current_key
20+
),
21+
)
22+
eth_address = plan.run_sh(
23+
name="run-ethereal-eth-address",
24+
image=IMAGE,
25+
description="Running ethereal to derive eth address of key {0}".format(
26+
current_key
27+
),
28+
run="eth_addr=$(/app/ethereal hd keys --seed=\"{0}\" --path=\"m/44'/60'/0'/0/{1}\" | awk '/Ethereum address/{{print $NF}}'); echo -n $eth_addr".format(
29+
mnemonic, current_key
30+
),
31+
)
32+
33+
PRE_FUNDED_ACCOUNTS.append(
34+
new_prefunded_account.new_prefunded_account(
35+
eth_address.output, private_key.output
36+
)
37+
)
38+
39+
plan.print("PRE_FUNDED_ACCOUNTS: {0}".format(PRE_FUNDED_ACCOUNTS))
40+
41+
return PRE_FUNDED_ACCOUNTS

src/prelaunch_data_generator/genesis_constants/genesis_constants.star

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,4 +107,9 @@ PRE_FUNDED_ACCOUNTS = [
107107
"0xD8F3183DEF51A987222D845be228e0Bbb932C222",
108108
"c5114526e042343c6d1899cad05e1c00ba588314de9b96929914ee0df18d46b2",
109109
),
110+
# m/44'/60'/0'/0/20
111+
new_prefunded_account(
112+
"0xafF0CA253b97e54440965855cec0A8a2E2399896",
113+
"4b9f63ecf84210c5366c66d68fa1f5da1fa4f634fad6dfc86178e4d79ff9e59",
114+
),
110115
]

0 commit comments

Comments
 (0)