Commit 2d1cab53 authored by Barnabas Busa's avatar Barnabas Busa Committed by GitHub

feat: generate keys if not default key is used (#707)

parent a9ba40e5
...@@ -550,7 +550,7 @@ network_params: ...@@ -550,7 +550,7 @@ network_params:
# - A prometheus will be started, coupled with grafana # - A prometheus will be started, coupled with grafana
# - A beacon metrics gazer will be launched # - A beacon metrics gazer will be launched
# - A light beacon chain explorer will be launched # - A light beacon chain explorer will be launched
# - Default: ["tx_spammer", "blob_spammer", "el_forkmon", "beacon_metrics_gazer", "dora"," "prometheus_grafana"] # - Default: []
additional_services: additional_services:
- assertoor - assertoor
- broadcaster - broadcaster
...@@ -1007,7 +1007,7 @@ For more details, including a guide and architecture of the `mev-boost` infrastr ...@@ -1007,7 +1007,7 @@ For more details, including a guide and architecture of the `mev-boost` infrastr
## Pre-funded accounts at Genesis ## Pre-funded accounts at Genesis
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). 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).
Here's a table of where the keys are used Here's a table of where the keys are used
......
...@@ -51,6 +51,9 @@ mev_custom_flood = import_module( ...@@ -51,6 +51,9 @@ mev_custom_flood = import_module(
) )
broadcaster = import_module("./src/broadcaster/broadcaster.star") broadcaster = import_module("./src/broadcaster/broadcaster.star")
assertoor = import_module("./src/assertoor/assertoor_launcher.star") assertoor = import_module("./src/assertoor/assertoor_launcher.star")
get_prefunded_accounts = import_module(
"./src/prefunded_accounts/get_prefunded_accounts.star"
)
GRAFANA_USER = "admin" GRAFANA_USER = "admin"
GRAFANA_PASSWORD = "admin" GRAFANA_PASSWORD = "admin"
...@@ -83,6 +86,15 @@ def run(plan, args={}): ...@@ -83,6 +86,15 @@ def run(plan, args={}):
keymanager_enabled = args_with_right_defaults.keymanager_enabled keymanager_enabled = args_with_right_defaults.keymanager_enabled
apache_port = args_with_right_defaults.apache_port apache_port = args_with_right_defaults.apache_port
prefunded_accounts = genesis_constants.PRE_FUNDED_ACCOUNTS
if (
network_params.preregistered_validator_keys_mnemonic
!= constants.DEFAULT_MNEMONIC
):
prefunded_accounts = get_prefunded_accounts.get_accounts(
plan, network_params.preregistered_validator_keys_mnemonic
)
grafana_datasource_config_template = read_file( grafana_datasource_config_template = read_file(
static_files.GRAFANA_DATASOURCE_CONFIG_TEMPLATE_FILEPATH static_files.GRAFANA_DATASOURCE_CONFIG_TEMPLATE_FILEPATH
) )
...@@ -240,7 +252,7 @@ def run(plan, args={}): ...@@ -240,7 +252,7 @@ def run(plan, args={}):
first_cl_client = all_cl_contexts[0] first_cl_client = all_cl_contexts[0]
first_client_beacon_name = first_cl_client.beacon_service_name first_client_beacon_name = first_cl_client.beacon_service_name
contract_owner, normal_user = genesis_constants.PRE_FUNDED_ACCOUNTS[6:8] contract_owner, normal_user = prefunded_accounts[6:8]
mev_flood.launch_mev_flood( mev_flood.launch_mev_flood(
plan, plan,
mev_params.mev_flood_image, mev_params.mev_flood_image,
...@@ -362,8 +374,9 @@ def run(plan, args={}): ...@@ -362,8 +374,9 @@ def run(plan, args={}):
if len(args_with_right_defaults.additional_services) == 0: if len(args_with_right_defaults.additional_services) == 0:
output = struct( output = struct(
all_participants=all_participants, all_participants=all_participants,
pre_funded_accounts=genesis_constants.PRE_FUNDED_ACCOUNTS, pre_funded_accounts=prefunded_accounts,
network_params=network_params, network_params=network_params,
network_id=network_id,
final_genesis_timestamp=final_genesis_timestamp, final_genesis_timestamp=final_genesis_timestamp,
genesis_validators_root=genesis_validators_root, genesis_validators_root=genesis_validators_root,
) )
...@@ -379,7 +392,7 @@ def run(plan, args={}): ...@@ -379,7 +392,7 @@ def run(plan, args={}):
tx_spammer_params = args_with_right_defaults.tx_spammer_params tx_spammer_params = args_with_right_defaults.tx_spammer_params
transaction_spammer.launch_transaction_spammer( transaction_spammer.launch_transaction_spammer(
plan, plan,
genesis_constants.PRE_FUNDED_ACCOUNTS, prefunded_accounts,
fuzz_target, fuzz_target,
tx_spammer_params, tx_spammer_params,
network_params.electra_fork_epoch, network_params.electra_fork_epoch,
...@@ -390,7 +403,7 @@ def run(plan, args={}): ...@@ -390,7 +403,7 @@ def run(plan, args={}):
plan.print("Launching Blob spammer") plan.print("Launching Blob spammer")
blob_spammer.launch_blob_spammer( blob_spammer.launch_blob_spammer(
plan, plan,
genesis_constants.PRE_FUNDED_ACCOUNTS, prefunded_accounts,
fuzz_target, fuzz_target,
all_cl_contexts[0], all_cl_contexts[0],
network_params.deneb_fork_epoch, network_params.deneb_fork_epoch,
...@@ -404,7 +417,7 @@ def run(plan, args={}): ...@@ -404,7 +417,7 @@ def run(plan, args={}):
goomy_blob_params = args_with_right_defaults.goomy_blob_params goomy_blob_params = args_with_right_defaults.goomy_blob_params
goomy_blob.launch_goomy_blob( goomy_blob.launch_goomy_blob(
plan, plan,
genesis_constants.PRE_FUNDED_ACCOUNTS, prefunded_accounts,
all_el_contexts, all_el_contexts,
all_cl_contexts[0], all_cl_contexts[0],
network_params.seconds_per_slot, network_params.seconds_per_slot,
...@@ -606,8 +619,8 @@ def run(plan, args={}): ...@@ -606,8 +619,8 @@ def run(plan, args={}):
elif additional_service == "custom_flood": elif additional_service == "custom_flood":
mev_custom_flood.spam_in_background( mev_custom_flood.spam_in_background(
plan, plan,
genesis_constants.PRE_FUNDED_ACCOUNTS[-1].private_key, prefunded_accounts[-1].private_key,
genesis_constants.PRE_FUNDED_ACCOUNTS[0].address, prefunded_accounts[0].address,
fuzz_target, fuzz_target,
args_with_right_defaults.custom_flood_params, args_with_right_defaults.custom_flood_params,
global_node_selectors, global_node_selectors,
...@@ -669,7 +682,7 @@ def run(plan, args={}): ...@@ -669,7 +682,7 @@ def run(plan, args={}):
if ("blockscout" in args_with_right_defaults.additional_services) == False if ("blockscout" in args_with_right_defaults.additional_services) == False
else blockscout_sc_verif_url, else blockscout_sc_verif_url,
all_participants=all_participants, all_participants=all_participants,
pre_funded_accounts=genesis_constants.PRE_FUNDED_ACCOUNTS, pre_funded_accounts=prefunded_accounts,
network_params=network_params, network_params=network_params,
network_id=network_id, network_id=network_id,
final_genesis_timestamp=final_genesis_timestamp, final_genesis_timestamp=final_genesis_timestamp,
......
...@@ -84,13 +84,7 @@ network_params: ...@@ -84,13 +84,7 @@ network_params:
additional_preloaded_contracts: {} additional_preloaded_contracts: {}
devnet_repo: ethpandaops devnet_repo: ethpandaops
checkpoint_sync_enabled: false checkpoint_sync_enabled: false
additional_services: additional_services: []
- tx_spammer
- blob_spammer
- el_forkmon
- beacon_metrics_gazer
- dora
- prometheus_grafana
dora_params: dora_params:
image: "" image: ""
tx_spammer_params: tx_spammer_params:
......
...@@ -91,6 +91,8 @@ DEFAULT_MEV_SECRET_KEY = ( ...@@ -91,6 +91,8 @@ DEFAULT_MEV_SECRET_KEY = (
"0x607a11b45a7219cc61a3d9c5fd08c7eebd602a6a19a977f8d3771d5711a550f2" "0x607a11b45a7219cc61a3d9c5fd08c7eebd602a6a19a977f8d3771d5711a550f2"
) )
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"
PRIVATE_IP_ADDRESS_PLACEHOLDER = "KURTOSIS_IP_ADDR_PLACEHOLDER" PRIVATE_IP_ADDRESS_PLACEHOLDER = "KURTOSIS_IP_ADDR_PLACEHOLDER"
GENESIS_FORK_VERSION = "0x10000038" GENESIS_FORK_VERSION = "0x10000038"
......
...@@ -61,14 +61,7 @@ MEV_BOOST_SERVICE_NAME_PREFIX = "mev-boost" ...@@ -61,14 +61,7 @@ MEV_BOOST_SERVICE_NAME_PREFIX = "mev-boost"
# Minimum number of validators required for a network to be valid is 64 # Minimum number of validators required for a network to be valid is 64
MIN_VALIDATORS = 64 MIN_VALIDATORS = 64
DEFAULT_ADDITIONAL_SERVICES = [ DEFAULT_ADDITIONAL_SERVICES = []
"tx_spammer",
"blob_spammer",
"el_forkmon",
"beacon_metrics_gazer",
"dora",
"prometheus_grafana",
]
ATTR_TO_BE_SKIPPED_AT_ROOT = ( ATTR_TO_BE_SKIPPED_AT_ROOT = (
"network_params", "network_params",
...@@ -782,7 +775,7 @@ def default_network_params(): ...@@ -782,7 +775,7 @@ def default_network_params():
"deposit_contract_address": "0x4242424242424242424242424242424242424242", "deposit_contract_address": "0x4242424242424242424242424242424242424242",
"seconds_per_slot": 12, "seconds_per_slot": 12,
"num_validator_keys_per_node": 64, "num_validator_keys_per_node": 64,
"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", "preregistered_validator_keys_mnemonic": constants.DEFAULT_MNEMONIC,
"preregistered_validator_count": 0, "preregistered_validator_count": 0,
"genesis_delay": 20, "genesis_delay": 20,
"max_per_epoch_activation_churn_limit": 8, "max_per_epoch_activation_churn_limit": 8,
...@@ -814,7 +807,7 @@ def default_minimal_network_params(): ...@@ -814,7 +807,7 @@ def default_minimal_network_params():
"deposit_contract_address": "0x4242424242424242424242424242424242424242", "deposit_contract_address": "0x4242424242424242424242424242424242424242",
"seconds_per_slot": 6, "seconds_per_slot": 6,
"num_validator_keys_per_node": 64, "num_validator_keys_per_node": 64,
"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", "preregistered_validator_keys_mnemonic": constants.DEFAULT_MNEMONIC,
"preregistered_validator_count": 0, "preregistered_validator_count": 0,
"genesis_delay": 20, "genesis_delay": 20,
"max_per_epoch_activation_churn_limit": 4, "max_per_epoch_activation_churn_limit": 4,
......
new_prefunded_account = import_module(
"../prelaunch_data_generator/genesis_constants/genesis_constants.star"
)
IMAGE = "wealdtech/ethereal:latest"
def get_accounts(plan, mnemonic, num_of_keys=21):
PRE_FUNDED_ACCOUNTS = []
plan.print("mnemonic: {0}".format(mnemonic))
for current_key in range(num_of_keys):
private_key = plan.run_sh(
name="run-ethereal-private-key",
image=IMAGE,
description="Running ethereal to derive private keys of key {0}".format(
current_key
),
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(
mnemonic, current_key
),
)
eth_address = plan.run_sh(
name="run-ethereal-eth-address",
image=IMAGE,
description="Running ethereal to derive eth address of key {0}".format(
current_key
),
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(
mnemonic, current_key
),
)
PRE_FUNDED_ACCOUNTS.append(
new_prefunded_account.new_prefunded_account(
eth_address.output, private_key.output
)
)
plan.print("PRE_FUNDED_ACCOUNTS: {0}".format(PRE_FUNDED_ACCOUNTS))
return PRE_FUNDED_ACCOUNTS
...@@ -107,4 +107,9 @@ PRE_FUNDED_ACCOUNTS = [ ...@@ -107,4 +107,9 @@ PRE_FUNDED_ACCOUNTS = [
"0xD8F3183DEF51A987222D845be228e0Bbb932C222", "0xD8F3183DEF51A987222D845be228e0Bbb932C222",
"c5114526e042343c6d1899cad05e1c00ba588314de9b96929914ee0df18d46b2", "c5114526e042343c6d1899cad05e1c00ba588314de9b96929914ee0df18d46b2",
), ),
# m/44'/60'/0'/0/20
new_prefunded_account(
"0xafF0CA253b97e54440965855cec0A8a2E2399896",
"4b9f63ecf84210c5366c66d68fa1f5da1fa4f634fad6dfc86178e4d79ff9e59",
),
] ]
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment