Skip to content
This repository has been archived by the owner on Sep 27, 2023. It is now read-only.

Commit

Permalink
feat: add support for verkle (#115)
Browse files Browse the repository at this point in the history
  • Loading branch information
barnabasbusa committed Sep 12, 2023
1 parent bee10ab commit 83ef0a2
Show file tree
Hide file tree
Showing 11 changed files with 79 additions and 33 deletions.
3 changes: 2 additions & 1 deletion default-network-params.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@
"seconds_per_slot": 12,
"genesis_delay": 120,
"capella_fork_epoch": 0,
"deneb_fork_epoch": 500
"deneb_fork_epoch": 500,
"electra_fork_epoch": "None"
},
"global_client_log_level": "info"
}
17 changes: 14 additions & 3 deletions package_io/input_parser.star
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ DEFAULT_CL_IMAGES = {
NETHERMIND_NODE_NAME = "nethermind"
NIMBUS_NODE_NAME = "nimbus"

# Placeholder value for the deneb fork epoch if electra is being run
# TODO: This is a hack, and should be removed once we electra is rebased on deneb
HIGH_DENEB_VALUE_FORK_VERKLE = 20000

ATTR_TO_BE_SKIPPED_AT_ROOT = ("network_params", "participants")

def parse_input(input_args):
Expand Down Expand Up @@ -96,6 +100,13 @@ def parse_input(input_args):
if result["network_params"]["deneb_fork_epoch"] == 0:
fail("deneb_fork_epoch is 0 needs to be > 0 ")

if result["network_params"]["electra_fork_epoch"] != None:
# if electra is defined, then deneb needs to be set very high
result["network_params"]["deneb_fork_epoch"] = HIGH_DENEB_VALUE_FORK_VERKLE

if result["network_params"]["capella_fork_epoch"] > 0 and result["network_params"]["electra_fork_epoch"] != None:
fail("electra can only happen with capella genesis not bellatrix")

required_num_validtors = 2 * result["network_params"]["slots_per_epoch"]
actual_num_validators = len(result["participants"]) * result["network_params"]["num_validator_keys_per_node"]
if required_num_validtors > actual_num_validators:
Expand Down Expand Up @@ -135,9 +146,10 @@ def parse_input(input_args):
deposit_contract_address=result["network_params"]["deposit_contract_address"],
seconds_per_slot=result["network_params"]["seconds_per_slot"],
slots_per_epoch=result["network_params"]["slots_per_epoch"],
genesis_delay=result["network_params"]["genesis_delay"],
capella_fork_epoch=result["network_params"]["capella_fork_epoch"],
deneb_fork_epoch=result["network_params"]["deneb_fork_epoch"],
genesis_delay=result["network_params"]["genesis_delay"],
electra_fork_epoch=result["network_params"]["electra_fork_epoch"]
),
wait_for_finalization=result["wait_for_finalization"],
wait_for_verifications=result["wait_for_verifications"],
Expand Down Expand Up @@ -180,9 +192,8 @@ def default_network_params():
"slots_per_epoch": 32,
"genesis_delay": 120,
"capella_fork_epoch": 0,
# arbitrarily large while we sort out https://github.com/kurtosis-tech/eth-network-package/issues/42
# this will take 53~ hoours for now
"deneb_fork_epoch": 500,
"electra_fork_epoch": None
}

def default_participant():
Expand Down
2 changes: 1 addition & 1 deletion src/el/el_client_context.star
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,5 @@ def new_el_client_context(
rpc_port_num = rpc_port_num,
ws_port_num = ws_port_num,
engine_rpc_port_num = engine_rpc_port_num,
jwt_secret = jwt_secret
jwt_secret = jwt_secret,
)
18 changes: 10 additions & 8 deletions src/el/geth/geth_launcher.star
Original file line number Diff line number Diff line change
Expand Up @@ -77,9 +77,7 @@ def launch(
el_max_mem,
extra_params):


log_level = input_parser.get_client_log_level_or_default(participant_log_level, global_log_level, VERBOSITY_LEVELS)

el_min_cpu = el_min_cpu if int(el_min_cpu) > 0 else EXECUTION_MIN_CPU
el_max_cpu = el_max_cpu if int(el_max_cpu) > 0 else EXECUTION_MAX_CPU
el_min_mem = el_min_mem if int(el_min_mem) > 0 else EXECUTION_MIN_MEMORY
Expand All @@ -98,7 +96,8 @@ def launch(
el_max_cpu,
el_min_mem,
el_max_mem,
extra_params
extra_params,
launcher.electra_fork_epoch
)

service = plan.add_service(service_name, config)
Expand All @@ -116,7 +115,7 @@ def launch(
WS_PORT_NUM,
ENGINE_RPC_PORT_NUM,
jwt_secret,
service_name,
service_name
)

def get_config(
Expand All @@ -132,7 +131,8 @@ def get_config(
el_max_cpu,
el_min_mem,
el_max_mem,
extra_params):
extra_params,
electra_fork_epoch):

genesis_json_filepath_on_client = shared_utils.path_join(GENESIS_DATA_MOUNT_DIRPATH, genesis_data.geth_genesis_json_relative_filepath)
jwt_secret_json_filepath_on_client = shared_utils.path_join(GENESIS_DATA_MOUNT_DIRPATH, genesis_data.jwt_secret_relative_filepath)
Expand All @@ -157,7 +157,8 @@ def get_config(

accounts_to_unlock_str = ",".join(account_addresses_to_unlock)

init_datadir_cmd_str = "geth init --datadir={0} {1}".format(
init_datadir_cmd_str = "geth init {0} --datadir={1} {2}".format(
"--cache.preimages" if electra_fork_epoch != None else "",
EXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER,
genesis_json_filepath_on_client,
)
Expand Down Expand Up @@ -244,11 +245,12 @@ def get_config(
), jwt_secret_json_filepath_on_client


def new_geth_launcher(network_id, el_genesis_data, prefunded_geth_keys_artifact_uuid, prefunded_account_info, genesis_validators_root = ""):
def new_geth_launcher(network_id, el_genesis_data, prefunded_geth_keys_artifact_uuid, prefunded_account_info, genesis_validators_root = "", electra_fork_epoch = None):
return struct(
network_id = network_id,
el_genesis_data = el_genesis_data,
prefunded_account_info = prefunded_account_info,
prefunded_geth_keys_artifact_uuid = prefunded_geth_keys_artifact_uuid,
genesis_validators_root = genesis_validators_root
genesis_validators_root = genesis_validators_root,
electra_fork_epoch = electra_fork_epoch
)
8 changes: 5 additions & 3 deletions src/participant_network.star
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,8 @@ def launch_participant_network(plan, participants, network_params, global_log_le
network_params.genesis_delay,
network_params.seconds_per_slot,
network_params.capella_fork_epoch,
network_params.deneb_fork_epoch
network_params.deneb_fork_epoch,
network_params.electra_fork_epoch
)

plan.print(json.indent(json.encode(el_genesis_data)))
Expand Down Expand Up @@ -107,7 +108,8 @@ def launch_participant_network(plan, participants, network_params, global_log_le
total_number_of_validator_keys,
network_params.genesis_delay,
network_params.capella_fork_epoch,
network_params.deneb_fork_epoch
network_params.deneb_fork_epoch,
network_params.electra_fork_epoch
)

plan.print(json.indent(json.encode(cl_genesis_data)))
Expand All @@ -116,7 +118,7 @@ def launch_participant_network(plan, participants, network_params, global_log_le
genesis_validators_root = cl_genesis_data.genesis_validators_root

el_launchers = {
package_io.EL_CLIENT_TYPE.geth : {"launcher": geth.new_geth_launcher(network_params.network_id, el_genesis_data, geth_prefunded_keys_artifact_name, genesis_constants.PRE_FUNDED_ACCOUNTS, genesis_validators_root), "launch_method": geth.launch},
package_io.EL_CLIENT_TYPE.geth : {"launcher": geth.new_geth_launcher(network_params.network_id, el_genesis_data, geth_prefunded_keys_artifact_name, genesis_constants.PRE_FUNDED_ACCOUNTS, genesis_validators_root, network_params.electra_fork_epoch), "launch_method": geth.launch},
package_io.EL_CLIENT_TYPE.besu : {"launcher": besu.new_besu_launcher(network_params.network_id, el_genesis_data), "launch_method": besu.launch},
package_io.EL_CLIENT_TYPE.erigon : {"launcher": erigon.new_erigon_launcher(network_params.network_id, el_genesis_data), "launch_method": erigon.launch},
package_io.EL_CLIENT_TYPE.nethermind : {"launcher": nethermind.new_nethermind_launcher(el_genesis_data), "launch_method": nethermind.launch},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ def generate_cl_genesis_data(
genesis_delay,
capella_fork_epoch,
deneb_fork_epoch,
electra_fork_epoch
):

template_data = new_cl_genesis_config_template_data(
Expand All @@ -50,7 +51,8 @@ def generate_cl_genesis_data(
deposit_contract_address,
genesis_delay,
capella_fork_epoch,
deneb_fork_epoch
deneb_fork_epoch,
electra_fork_epoch
)

genesis_generation_mnemonics_template_and_data = shared_utils.new_template_and_data(genesis_generation_mnemonics_yml_template, template_data)
Expand All @@ -70,7 +72,8 @@ def generate_cl_genesis_data(
EL_GENESIS_DIRPATH_ON_GENERATOR: el_genesis_data.files_artifact_uuid,
},
"cl-genesis-data",
capella_fork_epoch
capella_fork_epoch,
electra_fork_epoch
)

all_dirpaths_to_create_on_generator = [
Expand Down Expand Up @@ -202,7 +205,8 @@ def new_cl_genesis_config_template_data(
deposit_contract_address,
genesis_delay,
capella_fork_epoch,
deneb_fork_epoch):
deneb_fork_epoch,
electra_fork_epoch):
return {
"NetworkId": network_id,
"SecondsPerSlot": seconds_per_slot,
Expand All @@ -212,7 +216,8 @@ def new_cl_genesis_config_template_data(
"DepositContractAddress": deposit_contract_address,
"GenesisDelay": genesis_delay,
"CapellaForkEpoch": capella_fork_epoch,
"DenebForkEpoch": deneb_fork_epoch
"DenebForkEpoch": deneb_fork_epoch,
"ElectraForkEpoch": electra_fork_epoch,
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ def generate_cl_validator_keystores(
{},
"cl-validator-keystore",
capella_fork_epoch=0, # It doesn't matter how the validator keys are generated
electra_fork_epoch=None # It doesn't matter how the validator keys are generated
)

all_output_dirpaths = []
Expand Down Expand Up @@ -136,7 +137,8 @@ def generate_cl_valdiator_keystores_in_parallel(
plan,
{},
["cl-validator-keystore-" + str(idx) for idx in range(0, len(participants))],
capella_fork_epoch=0) # It doesn't matter how the validator keys are generated
capella_fork_epoch=0, # It doesn't matter how the validator keys are generated
electra_fork_epoch=None) # It doesn't matter how the validator keys are generated

all_output_dirpaths = []
all_generation_commands = []
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,8 @@ def generate_el_genesis_data(
genesis_delay,
seconds_per_slot,
capella_fork_epoch,
deneb_fork_epoch
deneb_fork_epoch,
electra_fork_epoch
):

template_data = genesis_generation_config_template_data(
Expand All @@ -45,7 +46,8 @@ def generate_el_genesis_data(
genesis_delay,
seconds_per_slot,
capella_fork_epoch,
deneb_fork_epoch
deneb_fork_epoch,
electra_fork_epoch
)

genesis_config_file_template_and_data = shared_utils.new_template_and_data(genesis_generation_config_template, template_data)
Expand All @@ -63,7 +65,8 @@ def generate_el_genesis_data(
CONFIG_DIRPATH_ON_GENERATOR: genesis_generation_config_artifact_name,
},
"el-genesis-data",
capella_fork_epoch
capella_fork_epoch,
electra_fork_epoch
)


Expand Down Expand Up @@ -148,13 +151,15 @@ def genesis_generation_config_template_data(
genesis_delay,
seconds_per_slot,
capella_fork_epoch,
deneb_fork_epoch):
deneb_fork_epoch,
electra_fork_epoch):
return {
"NetworkId": network_id,
"DepositContractAddress": deposit_contract_address,
"UnixTimestamp": unix_timestamp,
"GenesisDelay": genesis_delay,
"SecondsPerSlot": seconds_per_slot,
"CapellaForkEpoch": capella_fork_epoch,
"DenebForkEpoch": deneb_fork_epoch
"DenebForkEpoch": deneb_fork_epoch,
"ElectraForkEpoch": electra_fork_epoch,
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,14 @@ ENTRYPOINT_ARGS = [
]

# Launches a prelaunch data generator IMAGE, for use in various of the genesis generation
def launch_prelaunch_data_generator(plan, files_artifact_mountpoints, service_name_suffix, capella_fork_epoch):
def launch_prelaunch_data_generator(
plan,
files_artifact_mountpoints,
service_name_suffix,
capella_fork_epoch,
electra_fork_epoch):

config = get_config(files_artifact_mountpoints, capella_fork_epoch)
config = get_config(files_artifact_mountpoints, capella_fork_epoch, electra_fork_epoch)

service_name = "{0}{1}".format(
SERVICE_NAME_PREFIX,
Expand All @@ -20,8 +25,13 @@ def launch_prelaunch_data_generator(plan, files_artifact_mountpoints, service_na
return service_name


def launch_prelaunch_data_generator_parallel(plan, files_artifact_mountpoints, service_name_suffixes, capella_fork_epoch):
config = get_config(files_artifact_mountpoints, capella_fork_epoch)
def launch_prelaunch_data_generator_parallel(
plan,
files_artifact_mountpoints,
service_name_suffixes,
capella_fork_epoch,
electra_fork_epoch):
config = get_config(files_artifact_mountpoints, capella_fork_epoch, electra_fork_epoch)
service_names = ["{0}{1}".format(
SERVICE_NAME_PREFIX,
service_name_suffix,
Expand All @@ -31,11 +41,14 @@ def launch_prelaunch_data_generator_parallel(plan, files_artifact_mountpoints, s
return service_names


def get_config(files_artifact_mountpoints, capella_fork_epoch):
if capella_fork_epoch > 0:
def get_config(files_artifact_mountpoints, capella_fork_epoch, electra_fork_epoch):
if capella_fork_epoch > 0 and electra_fork_epoch == None: # we are running capella
img = "ethpandaops/ethereum-genesis-generator:1.3.4"
else:
elif capella_fork_epoch == 0 and electra_fork_epoch == None: # we are running dencun
img = "ethpandaops/ethereum-genesis-generator:2.0.0-rc.6"
else: # we are running electra
img = "ethpandaops/ethereum-genesis-generator:3.0.0-rc.2"

return ServiceConfig(
image = img,
entrypoint = ENTRYPOINT_ARGS,
Expand Down
4 changes: 4 additions & 0 deletions static_files/genesis-generation-config/cl/config.yaml.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,10 @@ CAPELLA_FORK_EPOCH: {{ .CapellaForkEpoch }}
DENEB_FORK_VERSION: 0x50000038
DENEB_FORK_EPOCH: {{ .DenebForkEpoch }}

# Electra
ELECTRA_FORK_VERSION: 0x60000038
ELECTRA_FORK_EPOCH: {{ .ElectraForkEpoch }}

# Time parameters
# ---------------------------------------------------------------
# 12 seconds
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,4 @@ genesis_delay: {{ .GenesisDelay }}
slot_duration_in_seconds: {{ .SecondsPerSlot }}
capella_fork_epoch: {{ .CapellaForkEpoch }}
deneb_fork_epoch: {{ .DenebForkEpoch }}
electra_fork_epoch: {{ .ElectraForkEpoch }}

0 comments on commit 83ef0a2

Please sign in to comment.