From 039133602568eaa7d89c790e3b163a66fcd3f59a Mon Sep 17 00:00:00 2001 From: Barnabas Busa Date: Fri, 1 Sep 2023 18:00:10 +0200 Subject: [PATCH 1/6] feat: add support for electra --- src/package_io/parse_input.star | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/package_io/parse_input.star b/src/package_io/parse_input.star index af7dcdc14..dfb77b7f3 100644 --- a/src/package_io/parse_input.star +++ b/src/package_io/parse_input.star @@ -139,9 +139,10 @@ def parse_input(plan, 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"], ), mev_params = struct( mev_relay_image = result["mev_params"]["mev_relay_image"], @@ -197,7 +198,8 @@ def default_network_params(): "slots_per_epoch": 32, "genesis_delay": 120, "capella_fork_epoch": 0, - "deneb_fork_epoch": 500 + "deneb_fork_epoch": 500, + "electra_fork_epoch": None, } def default_participant(): From 7c7239c7d00e0f9a184d4c23ac0b7b674d660e5b Mon Sep 17 00:00:00 2001 From: Barnabas Busa Date: Wed, 6 Sep 2023 15:53:43 +0200 Subject: [PATCH 2/6] make deneb optional --- src/package_io/parse_input.star | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/package_io/parse_input.star b/src/package_io/parse_input.star index dfb77b7f3..9c35e0647 100644 --- a/src/package_io/parse_input.star +++ b/src/package_io/parse_input.star @@ -139,7 +139,7 @@ def parse_input(plan, 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"] + 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"], electra_fork_epoch=result["network_params"]["electra_fork_epoch"], @@ -198,7 +198,7 @@ def default_network_params(): "slots_per_epoch": 32, "genesis_delay": 120, "capella_fork_epoch": 0, - "deneb_fork_epoch": 500, + "deneb_fork_epoch": None, "electra_fork_epoch": None, } From bba2675b00c63adc86d2c633599e8feed1acde23 Mon Sep 17 00:00:00 2001 From: Barnabas Busa Date: Wed, 6 Sep 2023 16:44:17 +0200 Subject: [PATCH 3/6] set deneb to invalid if electra is defined --- src/package_io/parse_input.star | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/package_io/parse_input.star b/src/package_io/parse_input.star index a6ed9926c..cc52f6410 100644 --- a/src/package_io/parse_input.star +++ b/src/package_io/parse_input.star @@ -104,6 +104,13 @@ def parse_input(plan, 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 undefined + result["network_params"]["deneb_fork_epoch"] = None + + 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") + if total_participant_count < 1: total_participant_count = 1 @@ -200,7 +207,7 @@ def default_network_params(): "slots_per_epoch": 32, "genesis_delay": 120, "capella_fork_epoch": 0, - "deneb_fork_epoch": None, + "deneb_fork_epoch": 500, "electra_fork_epoch": None, } From f786af0b82d7a04eca2477969237df2ed45eea27 Mon Sep 17 00:00:00 2001 From: Barnabas Busa Date: Tue, 12 Sep 2023 13:25:47 +0200 Subject: [PATCH 4/6] add deneb override when electra running --- README.md | 42 +++++++++++++++++++++++++++------ network_params.json | 8 ++++--- src/package_io/parse_input.star | 12 ++++++---- 3 files changed, 48 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 836b3d054..9487563f4 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ Optional features (enabled via flags or parameter files at runtime): * Block until the Beacon nodes finalize an epoch (i.e. finalized_epoch > 0) * Spin up & configure parameters for the infrastructure behind Flashbot's implementation of PBS using `mev-boost`, in either `full` or `mock` mode. More details [here](./README.md#proposer-builder-separation-pbs-implementation-via-flashbots-mev-boost-protocol). * Spin up & connect the network to a [beacon metrics gazer service](https://github.com/dapplion/beacon-metrics-gazer) to collect network-wide participation metrics. -* Spin up and connect a [JSON RPC Snooper](https://github.com/ethDreamer/json_rpc_snoop) to the network log responses & requests between the EL engine API and the CL client. +* Spin up and connect a [JSON RPC Snooper](https://github.com/ethDreamer/json_rpc_snoop) to the network log responses & requests between the EL engine API and the CL client. * Specify extra parameters to be passed in for any of the: CL client Beacon, and CL client validator, and/or EL client containers * Specify the required parameters for the nodes to reach an external block building network * Generate keystores for each node in parallel @@ -35,7 +35,7 @@ kurtosis run --enclave my-testnet github.com/kurtosis-tech/eth2-package "$(cat ~ Where `network_params.json` contains the parameters for your network in your home directory. #### Run on Kubernetes -Kurtosis packages work the same way over Docker or on Kubernetes. Please visit our [Kubernetes docs](https://docs.kurtosis.com/k8s) to learn how to spin up a private testnet on a Kubernetes cluster. +Kurtosis packages work the same way over Docker or on Kubernetes. Please visit our [Kubernetes docs](https://docs.kurtosis.com/k8s) to learn how to spin up a private testnet on a Kubernetes cluster. #### Tear down The testnet will reside in an [enclave](https://docs.kurtosis.com/concepts-reference/enclaves/) - an isolated, ephemeral environment. The enclave and its contents (e.g. running containers, files artifacts, etc) will persist until torn down. You can remove an enclave and its contents with: @@ -44,7 +44,7 @@ kurtosis enclave rm -f my-testnet ``` ## Management -The [Kurtosis CLI](https://docs.kurtosis.com/cli) can be used to inspect and interact with the network. +The [Kurtosis CLI](https://docs.kurtosis.com/cli) can be used to inspect and interact with the network. For example, if you need shell access, simply run: ``` @@ -142,7 +142,32 @@ To configure the package behaviour, you can modify your `network_params.json` fi // "https://0xdeadbeefcafc@relay.example.com", // "https://0xdeadbeefcafd@relay.example.com" // ] - "builder_network_params": null + "builder_network_params": null, + + // Resource management for el/beacon/validator containers + // CPU is milicores + // RAM is in MB + // Defaults are set per client + "el_min_cpu": "", + "el_max_cpu": "", + "el_min_mem": "", + "el_max_mem": "", + "bn_min_cpu": "", + "bn_max_cpu": "", + "bn_min_mem": "", + "bn_max_mem": "", + "v_min_cpu": "", + "v_max_cpu": "", + "v_min_mem": "", + "v_max_mem": "", + + // Snooper can be enabled with the `snooper_enabled` flag per client or globally + // Defaults to false + "snooper_enabled": false, + + // Count of nodes to spin up for this participant + // Default to 1 + "count": 1 } ], @@ -166,10 +191,13 @@ To configure the package behaviour, you can modify your `network_params.json` fi // This mnemonic will a) be used to create keystores for all the types of validators that we have and b) be used to generate a CL genesis.ssz that has the children // validator keys already preregistered as validators "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", + // How long you want the network to wait before starting up + "genesis_delay": 120, // The epoch at which the capella and deneb forks are set to occur. - "capella_fork_epoch": 2, - "deneb_fork_epoch": 4 + "capella_fork_epoch": 0, + "deneb_fork_epoch": 4, + "electra_fork_epoch": "None", }, // True by defaults such that in addition to the Ethereum network: @@ -400,7 +428,7 @@ This package also supports a `"mev_type": "mock"` mode that will only bring up: 1. `mock-builder` - a server that listens for builder API directives and responds with payloads built using an execution client 1. `mev-boost` - for every EL/CL pair launched -For more details, including a guide and architecture of the `mev-boost` infrastructure, go [here](https://docs.kurtosis.com/how-to-full-mev-with-eth2-package). +For more details, including a guide and architecture of the `mev-boost` infrastructure, go [here](https://docs.kurtosis.com/how-to-full-mev-with-eth2-package). ## Pre-funded accounts at Genesis diff --git a/network_params.json b/network_params.json index 825e8c6a9..e8d69ffbe 100644 --- a/network_params.json +++ b/network_params.json @@ -21,8 +21,10 @@ "slots_per_epoch": 32, "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", - "capella_fork_epoch": 2, - "deneb_fork_epoch": 4 + "genesis_delay": 120, + "capella_fork_epoch": 0, + "deneb_fork_epoch": 4, + "electra_fork_epoch": "None" }, "launch_additional_services": true, "wait_for_finalization": false, @@ -41,4 +43,4 @@ "mev_flood_image": "flashbots/mev-flood", "mev_flood_extra_args": [] } -} \ No newline at end of file +} diff --git a/src/package_io/parse_input.star b/src/package_io/parse_input.star index 04792affe..26477f2cb 100644 --- a/src/package_io/parse_input.star +++ b/src/package_io/parse_input.star @@ -20,6 +20,10 @@ NIMBUS_NODE_NAME = "nimbus" ATTR_TO_BE_SKIPPED_AT_ROOT = ("network_params", "participants", "mev_params") +# 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 + # MEV Params FLASHBOTS_MEV_BOOST_PORT = 18550 MEV_BOOST_SERVICE_NAME_PREFIX = "mev-boost-" @@ -105,11 +109,11 @@ def parse_input(plan, input_args): 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 undefined - result["network_params"]["deneb_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") + 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") if total_participant_count < 1: total_participant_count = 1 From f0680b58d1a5da4f1da3db5b119ec4a1d75d3f03 Mon Sep 17 00:00:00 2001 From: Barnabas Busa Date: Tue, 12 Sep 2023 13:30:34 +0200 Subject: [PATCH 5/6] fix indent --- src/package_io/parse_input.star | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/package_io/parse_input.star b/src/package_io/parse_input.star index 26477f2cb..6a035fd6d 100644 --- a/src/package_io/parse_input.star +++ b/src/package_io/parse_input.star @@ -21,8 +21,8 @@ NIMBUS_NODE_NAME = "nimbus" ATTR_TO_BE_SKIPPED_AT_ROOT = ("network_params", "participants", "mev_params") # 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 +# TODO: This is a hack, and should be removed once we electra is rebased on deneb +HIGH_DENEB_VALUE_FORK_VERKLE = 20000 # MEV Params FLASHBOTS_MEV_BOOST_PORT = 18550 @@ -109,11 +109,11 @@ def parse_input(plan, input_args): 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 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") + 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") if total_participant_count < 1: total_participant_count = 1 From 31522bd6afb6f6f9e195e19864e5d6b001c76b40 Mon Sep 17 00:00:00 2001 From: Barnabas Busa Date: Tue, 19 Sep 2023 15:20:03 +0200 Subject: [PATCH 6/6] fix use null instead of none in json and readme --- README.md | 2 +- network_params.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c8cfc5a0d..6f4f2e41b 100644 --- a/README.md +++ b/README.md @@ -197,7 +197,7 @@ To configure the package behaviour, you can modify your `network_params.json` fi // The epoch at which the capella and deneb forks are set to occur. "capella_fork_epoch": 0, "deneb_fork_epoch": 4, - "electra_fork_epoch": "None", + "electra_fork_epoch": null, }, // True by defaults such that in addition to the Ethereum network: diff --git a/network_params.json b/network_params.json index e8d69ffbe..332c9afa1 100644 --- a/network_params.json +++ b/network_params.json @@ -24,7 +24,7 @@ "genesis_delay": 120, "capella_fork_epoch": 0, "deneb_fork_epoch": 4, - "electra_fork_epoch": "None" + "electra_fork_epoch": null }, "launch_additional_services": true, "wait_for_finalization": false,