From cb0fc695cce7a64386349193ef3cd3ebf692f18d Mon Sep 17 00:00:00 2001 From: Barnabas Busa Date: Thu, 13 Jul 2023 23:47:12 +0200 Subject: [PATCH] feat(formatting): Add editorconfig, move everything to using tabs (4) (#106) --- .circleci/config.yml | 4 - .editorconfig | 33 +++++++++ .../conventional-pr-title-checker.yml | 1 - .github/workflows/pr-description-update.yml | 2 +- CHANGELOG.md | 18 ++++- README.md | 43 +++++------ docs/architecture.md | 48 ++++++------ main.star | 8 +- src/forkmon/forkmon_launcher.star | 4 +- src/grafana/grafana_launcher.star | 2 +- src/mev_boost/mev_boost_launcher.star | 6 +- src/mock_mev/mock_mev_launcher.star | 30 ++++---- src/package_io/parse_input.star | 73 ++++++++++--------- src/static_files/static_files.star | 10 +-- static_files/forkmon-config/config.toml.tmpl | 2 +- .../grafana-config/dashboards/dashboard.json | 6 +- .../templates/dashboard-providers.yml.tmpl | 2 +- .../templates/datasource.yml.tmpl | 2 +- .../prometheus-config/prometheus.yml.tmpl | 2 +- 19 files changed, 171 insertions(+), 125 deletions(-) create mode 100644 .editorconfig diff --git a/.circleci/config.yml b/.circleci/config.yml index 7d94570d7..a5ce4b155 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -27,7 +27,6 @@ jobs: run_starlark: executor: ubuntu_vm steps: - # Set up Kurtosis - run: | echo "deb [trusted=yes] https://apt.fury.io/kurtosis-tech/ /" | sudo tee /etc/apt/sources.list.d/kurtosis.list @@ -43,11 +42,9 @@ jobs: - run: kurtosis run ${PWD} - check_latest_version: executor: ubuntu_vm steps: - # Set up Kurtosis - run: | echo "deb [trusted=yes] https://apt.fury.io/kurtosis-tech/ /" | sudo tee /etc/apt/sources.list.d/kurtosis.list @@ -63,7 +60,6 @@ jobs: - run: kurtosis run --dry-run ${PWD} - workflows: check_latest_version: when: << pipeline.parameters.should-enable-check-latest-version-workflow >> diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000..fd1a90ea1 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,33 @@ +# EditorConfig is awesome: https://EditorConfig.org + +# top-most EditorConfig file +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +# This is the top-most .editorconfig file (do not search in parent directories) +root = true + +# 4 space indentation for all starlark files +[*.star] +indent_style = tab +indent_size = 4 + +# 4 space indentation for all python files +[*.py] + +# 2 space indentation for all yaml files +[*.yml, *.yaml] +indent_style = space +indent_size = 2 + +# 2 space indentation for all json files +[*.json] +indent_style = space +indent_size = 2 diff --git a/.github/workflows/conventional-pr-title-checker.yml b/.github/workflows/conventional-pr-title-checker.yml index 610645a7c..845b07e0a 100644 --- a/.github/workflows/conventional-pr-title-checker.yml +++ b/.github/workflows/conventional-pr-title-checker.yml @@ -20,4 +20,3 @@ jobs: - uses: aslafy-z/conventional-pr-title-action@v3 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - diff --git a/.github/workflows/pr-description-update.yml b/.github/workflows/pr-description-update.yml index a02e05f90..ffd6e66a1 100644 --- a/.github/workflows/pr-description-update.yml +++ b/.github/workflows/pr-description-update.yml @@ -46,5 +46,5 @@ jobs: base-branch-regex: '[a-z\d-_.\\/]+' body-template: | ${{ env.CONVENTIONAL_COMMITS }} - body-update-action: 'replace' + body-update-action: "replace" body-uppercase-base-match: false diff --git a/CHANGELOG.md b/CHANGELOG.md index 8aab45d2c..f0a82aa86 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,23 +6,28 @@ - Update `--enclave-id` flag to `--enclave` in README ### Breaking Change + - Introduced optional application protocol and renamed protocol to transport_protocol # 0.1.0 ### Breaking changes + - Updated `struct` to `PortSpec` for declaring port definitions ### Changes + - Change `exec` syntax # 0.0.5 ### Fixes + - Fix bug with input parsing of participants - Fix bug with `get_enode_for_node` being assigned to two parameters ### Changes + - Updated `run(input_args)` to `run(args)` - Refactor code to use `wait` and `request` commands - Removed `print(output)` at the end as it is now printed by the framework @@ -31,24 +36,31 @@ - Use the `args` argument instead of flags # 0.0.4 + ### Changes + - Removed 'module' key in the 'kurtosis.yml' file # 0.0.3 + ### Changes + - Replaced 'module' with 'package' where relevant - Removed protobuf types as they are now unsupported in Kurtosis. - Renamed `kurtotis.mod` to `kurtosis.yml` ### Fixes + - Fixed a bug in `run` of `main.star` where we'd refer to `module_io` instead of `package_io` # 0.0.2 ### Features + - Added the docs ### Fixes + - Renamed `num_validators_per_keynode` to `num_validator_keys_per_node` - Moved away from `load` infavor of `import_module` - Moved away from `store_files_from_service` to `store_service_files` @@ -57,11 +69,13 @@ - Moved away from passing json string to struct/dict for render templates ### Changes + - Move from `main` to `run` in `main.star` # 0.0.1 ### Features + - Changed the .circlei/config.yml to apply to Startosis - Added genesis_constants - Added a lot of participant_network/pre_launch_data_generator @@ -70,7 +84,9 @@ - Almost perfect parity with the eth2-merge-kurtosis-module ### Fixes + - Fixes some bugs with the initial implementation of the monitors # 0.0.0 -* Initial commit + +- Initial commit diff --git a/README.md b/README.md index c17a59e0d..d3edaffdf 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,4 @@ -Ethereum Package -======================= +# Ethereum Package This is a [Kurtosis Starlark Package][starlark-docs] that will: @@ -11,8 +10,7 @@ This is a [Kurtosis Starlark Package][starlark-docs] that will: For much more detailed information about how the merge works in Ethereum testnets, see [this document](https://notes.ethereum.org/@ExXcnR0-SJGthjz1dwkA1A/H1MSKgm3F). -Quickstart ----------- +## Quickstart 1. [Install Docker if you haven't done so already][docker-installation] 1. [Install the Kurtosis CLI, or upgrade it to the latest version if it's already installed][kurtosis-cli-installation] @@ -24,9 +22,9 @@ Quickstart ```bash kurtosis run --enclave eth2 github.com/kurtosis-tech/eth2-package ``` - + To remove the enclave running the Ethereum network, run `kurtosis enclave rm -f eth2`. - + You can customize the package's behaviour by passing in a configuration JSON or YAML (see the "Configuration" section below). For example: ```bash @@ -46,13 +44,11 @@ For extra convenience, you can store the parameters in a file: kurtosis run --enclave eth2 github.com/kurtosis-tech/eth2-package "$(cat ~/eth2-package-params.json)" ``` -Management ----------- +## Management Kurtosis will create a new enclave to house the services of the Ethereum network. [This page][using-the-cli] contains documentation for managing the created enclave & viewing detailed information about it. -Configuration -------------- +## Configuration To configure the package behaviour, you can modify your `eth2-package-params.yaml` file. The full YAML schema that can be passed in is as follows with the defaults provided: @@ -60,6 +56,7 @@ To configure the package behaviour, you can modify your `eth2-package-params.yam Click to show all configuration options + ```json { // Specification of the participants in the network @@ -74,7 +71,7 @@ To configure the package behaviour, you can modify your `eth2-package-params.yam // - geth: ethereum/client-go:latest // - erigon: thorax/erigon:devel // - nethermind: nethermind/nethermind:latest - // - besu: hyperledger/besu:develop + // - besu: hyperledger/besu:develop "el_client_image": "", // The log level string that this participant's EL client should log at @@ -118,7 +115,7 @@ To configure the package behaviour, you can modify your `eth2-package-params.yam // A set of parameters the node needs to reach an external block building network // If `null` then the builder infrastructure will not be instantiated // Example: - // + // // "relay_endpoints": [ // "https://0xdeadbeefcafa@relay.example.com", // "https://0xdeadbeefcafb@relay.example.com", @@ -151,7 +148,7 @@ To configure the package behaviour, you can modify your `eth2-package-params.yam "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" }, - + // True by defaults such that in addition to the Ethereum network: // - A transaction spammer is launched to fake transactions sent to the network // - Forkmon will be launched after CL genesis has happened @@ -183,17 +180,19 @@ To configure the package behaviour, you can modify your `eth2-package-params.yam "mev_type": None } ``` - + You can find the latest Kiln compatible docker images here: https://notes.ethereum.org/@launchpad/kiln -Developing On This Package -------------------------- +## Developing On This Package + First, install prerequisites: + 1. [Install Kurtosis itself][kurtosis-cli-installation] Then, run the dev loop: + 1. Make your code changes 1. Rebuild and re-run the package by running the following from the root of the repo: ```bash @@ -205,20 +204,22 @@ Then, run the dev loop: To get detailed information about the structure of the package, visit [the architecture docs](./docs/architecture.md). When you're happy with your changes: + - Add an entry to `docs/changelog.md` under the `# TBD` header describing your changes (this is required for CI checks to pass!) - Create a PR - Add one of the maintainers of the repo as a "Review Request": - - `parithosh` (Ethereum) - - `gbouv` (Kurtosis) - - `h4ck3rk3y` (Kurtosis) - - `mieubrisse` (Kurtosis) -- Once everything works, merge! + - `parithosh` (Ethereum) + - `gbouv` (Kurtosis) + - `h4ck3rk3y` (Kurtosis) + - `mieubrisse` (Kurtosis) +- Once everything works, merge! ## Known Bugs `wait_for_epoch_finalization` - doesn't work as expected, as Starlark doesn't have ways to do assertions on facts just yet. The [issue](https://github.com/kurtosis-tech/eth2-package/issues/15) tracks this. + [docker-installation]: https://docs.docker.com/get-docker/ [kurtosis-cli-installation]: https://docs.kurtosis.com/install [starlark-docs]: https://docs.kurtosis.com/starlark-reference diff --git a/docs/architecture.md b/docs/architecture.md index a7e3ff226..6aefb9298 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -1,21 +1,21 @@ -Package Architecture -=================== +# Package Architecture + This repo is a Kurtosis package. To get general information on what a Kurtosis package is and how it works, visit [the Starlark documentation](https://docs.kurtosis.com/starlark-reference). The overview of this particular package's operation is as follows: 1. Parse user parameters 1. Launch a network of Ethereum participants - 1. Generate execution layer (EL) client config data - 1. Launch EL clients - 1. Generate consensus layer (CL) client config data - 1. Launch CL clients + 1. Generate execution layer (EL) client config data + 1. Launch EL clients + 1. Generate consensus layer (CL) client config data + 1. Launch CL clients 1. Launch auxiliary services (Grafana, Forkmon, etc.) 1. Run Ethereum Merge verification logic 1. Return information to the user -Overview --------- +## Overview + The package has six main components, in accordance with the above operation: 1. [Main Function][main-function] @@ -25,12 +25,12 @@ The package has six main components, in accordance with the above operation: 1. [Auxiliary Services][auxiliary-services] 1. [Merge Verification Logic][testnet-verifier] -[Main][main-function] ------------------------------------- +## [Main][main-function] + The main function is the package's entrypoint, where parameters are received from the user, lower-level calls are made, and a response is returned. -[Package I/O][package-io] ------------------------ +## [Package I/O][package-io] + This particular package has many configuration options (see the "Configuration" section in the README for the full list of values). These are passed in as a JSON-serialized string, and arrive to the package's main function via the `input_args` variable. The process of setting defaults, overriding them with the user's desired options, and validating the resulting config object requires some space in the codebase. All this logic happens inside the `package_io` directory, so you'll want to visit this directory if you want to: - View or change parameters that the package can receive @@ -38,12 +38,12 @@ This particular package has many configuration options (see the "Configuration" - View or change the validation logic that the package applies to configuration parameters - View or change the properties that the package passes back to the user after execution is complete -[Static Files][static-files] ----------------------------- +## [Static Files][static-files] + Kurtosis packages can have static files that are made available inside the container during the package's operation. For this package, [the static files included][static-files] are various key files and config templates which get used during participant network operation. -[Participant Network][participant-network] ------------------------------------------- +## [Participant Network][participant-network] + The participant network is the beating heart at the center of the package. The participant network code is responsible for: 1. Generating EL client config data @@ -54,19 +54,23 @@ The participant network is the beating heart at the center of the package. The p We'll explain these phases one by one. ### Generating EL client data + All EL clients require both a genesis file and a JWT secret. The exact format of the genesis file differs per client, so we first leverage [a Docker image containing tools for generating this genesis data][ethereum-genesis-generator] to create the actual files that the EL clients-to-be will need. This is accomplished by filling in several genesis generation config files found in [the `static_files` directory][static-files]. The generated output files then get stored in the Kurtosis enclave, ready for use when we start the EL clients. The information about these stored files is tracked in [the `el_genesis_data` struct](https://github.com/kurtosis-tech/eth2-package/blob/main/src/participant_network/prelaunch_data_generator/el_genesis/el_genesis_data.star). ### Starting EL clients + Next, we plug the generated genesis data [into EL client "launchers"](https://github.com/kurtosis-tech/eth2-package/tree/main/src/participant_network/el) to start a mining network of EL nodes. The launchers come with a `launch` function that consumes EL genesis data and produces information about the running EL client node. Running EL node information is represented by [an `el_client_context` struct](https://github.com/kurtosis-tech/eth2-package/blob/main/src/participant_network/el/el_client_context.star). Each EL client type has its own launcher (e.g. [Geth](https://github.com/kurtosis-tech/eth2-package/tree/main/src/participant_network/el/geth), [Besu](https://github.com/kurtosis-tech/eth2-package/tree/main/src/participant_network/el/besu)) because each EL client will require different environment variables and flags to be set when launching the client's container. ### Generating CL client data + CL clients, like EL clients, also have genesis and config files that they need. We use [the same Docker image with tools for generating genesis data][ethereum-genesis-generator] to create the necessary CL files, we provide the genesis generation config using templates in [the `static_files` directory][static-files], and we store the generated output files in the Kurtosis enclave in the same way as the EL client genesis files. Like with EL nodes, CL genesis data information is tracked in [the `cl_client_context` struct](https://github.com/kurtosis-tech/eth2-package/blob/main/src/participant_network/el/el_client_context.star). The major difference with CL clients is that CL clients have validator keys, so we need to generate keys for the CL clients to use during validation. The generation happens using [the same genesis-generating Docker image][ethereum-genesis-generator], but via a call to [a different tool bundled inside the Docker image](https://github.com/protolambda/eth2-val-tools). ### Starting CL clients + Once CL genesis data and keys have been created, the CL client nodes are started via [the CL client launchers](https://github.com/kurtosis-tech/eth2-package/tree/main/src/participant_network/cl). Just as with EL clients: - CL client launchers implement come with a `launch` method @@ -75,8 +79,8 @@ Once CL genesis data and keys have been created, the CL client nodes are started There are only two major difference between CL client and EL client launchers. First, the `cl_client_launcher.launch` method also consumes an `el_client_context`, because each CL client is connected in a 1:1 relationship with an EL client. Second, because CL clients have keys, the keystore files are passed in to the `launch` function as well. -Auxiliary Services ------------------- +## Auxiliary Services + After the Ethereum network is up and running, this package starts several auxiliary containers to make it easier to work with the Ethereum network. At time of writing, these are: - [Forkmon](https://github.com/kurtosis-tech/eth2-package/tree/main/src/forkmon), a "fork monitor" web UI for visualizing the CL clients' forks @@ -84,19 +88,17 @@ After the Ethereum network is up and running, this package starts several auxili - [Grafana](https://github.com/kurtosis-tech/eth2-package/tree/main/src/grafana) for visualizing client node metrics - [An ETH transaction spammer](https://github.com/kurtosis-tech/eth2-package/tree/main/src/transaction_spammer), which [has been forked off](https://github.com/kurtosis-tech/tx-fuzz) of [Marius' transaction spammer code](https://github.com/MariusVanDerWijden/tx-fuzz) so that it can run as a container -[Testnet Verifier][testnet-verifier] ------------------------------------- +## [Testnet Verifier][testnet-verifier] + Once the Ethereum network is up and running, verification logic will be run to ensure that the Merge has happened successfully. This happens via [a testnet-verifying Docker image](https://github.com/ethereum/merge-testnet-verifier) that periodically polls the network to check the state of the merge. If the merge doesn't occur, the testnet-verifying image returns an unsuccessful exit code which in turn signals the Kurtosis package to exit with an error. This merge verification can be disabled in the package's configuration (see the "Configuration" section in the README). [enclave-context]: https://docs.kurtosistech.com/kurtosis/core-lib-documentation#enclavecontext - [main-function]: https://github.com/kurtosis-tech/eth2-package/blob/main/main.star#22 [package-io]: https://github.com/kurtosis-tech/eth2-package/tree/main/src/package_io [participant-network]: https://github.com/kurtosis-tech/eth2-package/tree/main/src/participant_network [ethereum-genesis-generator]: https://github.com/skylenet/ethereum-genesis-generator [static-files]: https://github.com/kurtosis-tech/eth2-package/tree/main/static_files [testnet-verifier]: https://github.com/kurtosis-tech/eth2-package/tree/main/src/testnet_verifier - -[auxiliary-services]: #auxiliary-services \ No newline at end of file +[auxiliary-services]: #auxiliary-services diff --git a/main.star b/main.star index 1771a42e3..9e6038f59 100644 --- a/main.star +++ b/main.star @@ -12,9 +12,9 @@ testnet_verifier = import_module("github.com/kurtosis-tech/eth2-package/src/test mev_boost_launcher_module = import_module("github.com/kurtosis-tech/eth2-package/src/mev_boost/mev_boost_launcher.star") mock_mev_launcher_module = import_module("github.com/kurtosis-tech/eth2-package/src/mock_mev/mock_mev_launcher.star") -GRAFANA_USER = "admin" -GRAFANA_PASSWORD = "admin" -GRAFANA_DASHBOARD_PATH_URL = "/d/QdTOwy-nz/eth2-merge-kurtosis-module-dashboard?orgId=1" +GRAFANA_USER = "admin" +GRAFANA_PASSWORD = "admin" +GRAFANA_DASHBOARD_PATH_URL = "/d/QdTOwy-nz/eth2-merge-kurtosis-module-dashboard?orgId=1" FIRST_NODE_FINALIZATION_FACT = "cl-boot-finalization-fact" HTTP_PORT_ID_FOR_FACT = "http" @@ -58,7 +58,7 @@ def run(plan, args): mev_endpoints.append(endpoint) # spin up the mev boost contexts if some endpoints for relays have been passed - all_mevboost_contexts = [] + all_mevboost_contexts = [] if mev_endpoints: for index, participant in enumerate(args_with_right_defaults.participants): mev_boost_launcher = mev_boost_launcher_module.new_mev_boost_launcher(MEV_BOOST_SHOULD_CHECK_RELAY, mev_endpoints) diff --git a/src/forkmon/forkmon_launcher.star b/src/forkmon/forkmon_launcher.star index 3c99d89f5..1d90fd042 100644 --- a/src/forkmon/forkmon_launcher.star +++ b/src/forkmon/forkmon_launcher.star @@ -4,8 +4,8 @@ shared_utils = import_module("github.com/kurtosis-tech/eth2-package/src/shared_u SERVICE_NAME = "forkmon" IMAGE_NAME = "ralexstokes/ethereum_consensus_monitor:latest" -HTTP_PORT_ID = "http" -HTTP_PORT_NUMBER = 80 +HTTP_PORT_ID = "http" +HTTP_PORT_NUMBER = 80 FORKMON_CONFIG_FILENAME = "forkmon-config.toml" diff --git a/src/grafana/grafana_launcher.star b/src/grafana/grafana_launcher.star index 06f297ff0..2d9eb15e7 100644 --- a/src/grafana/grafana_launcher.star +++ b/src/grafana/grafana_launcher.star @@ -25,7 +25,7 @@ USED_PORTS = { } -def launch_grafana(plan, datasource_config_template, dashboard_providers_config_template, prometheus_private_url): +def launch_grafana(plan, datasource_config_template, dashboard_providers_config_template, prometheus_private_url): grafana_config_artifacts_uuid, grafana_dashboards_artifacts_uuid = get_grafana_config_dir_artifact_uuid(plan, datasource_config_template, dashboard_providers_config_template, prometheus_private_url) config = get_config(grafana_config_artifacts_uuid, grafana_dashboards_artifacts_uuid) diff --git a/src/mev_boost/mev_boost_launcher.star b/src/mev_boost/mev_boost_launcher.star index 4c407f240..ffc89af78 100644 --- a/src/mev_boost/mev_boost_launcher.star +++ b/src/mev_boost/mev_boost_launcher.star @@ -10,9 +10,9 @@ USED_PORTS = { } NETWORK_ID_TO_NAME = { - "5": "goerli", + "5": "goerli", "11155111": "sepolia", - "3": "ropsten", + "3": "ropsten", } def launch(plan, mev_boost_launcher, service_name, network_id): @@ -45,5 +45,5 @@ def get_config(mev_boost_launcher, network_id): def new_mev_boost_launcher(should_check_relay, relay_end_points): - return struct(should_check_relay=should_check_relay, relay_end_points=relay_end_points) + return struct(should_check_relay=should_check_relay, relay_end_points=relay_end_points) diff --git a/src/mock_mev/mock_mev_launcher.star b/src/mock_mev/mock_mev_launcher.star index 5efeda936..9b4b44fbd 100644 --- a/src/mock_mev/mock_mev_launcher.star +++ b/src/mock_mev/mock_mev_launcher.star @@ -4,18 +4,18 @@ MOCK_MEV_BUILDER_PORT = 18550 DUMMY_PUB_KEY_THAT_ISNT_VERIFIED = "0xae1c2ca7bbd6f415a5aa5bb4079caf0a5c273104be5fb5e40e2b5a2f080b2f5bd945336f2a9e8ba346299cb65b0f84c8" def launch_mock_mev(plan, el_uri, beacon_uri, jwt_secret): - mock_builder = plan.add_service( - name = MOCK_MEV_SERVICE_NAME, - config = ServiceConfig( - image = MOCK_MEV_IMAGE, - ports = { - "rest": PortSpec(number = MOCK_MEV_BUILDER_PORT, transport_protocol="TCP"), - }, - cmd = [ - "--jwt-secret={0}".format(jwt_secret), - "--el={0}".format(el_uri), - "--cl={0}".format(beacon_uri) - ] - ) - ) - return "http://{0}@{1}:{2}".format(DUMMY_PUB_KEY_THAT_ISNT_VERIFIED, mock_builder.ip_address, MOCK_MEV_BUILDER_PORT) + mock_builder = plan.add_service( + name = MOCK_MEV_SERVICE_NAME, + config = ServiceConfig( + image = MOCK_MEV_IMAGE, + ports = { + "rest": PortSpec(number = MOCK_MEV_BUILDER_PORT, transport_protocol="TCP"), + }, + cmd = [ + "--jwt-secret={0}".format(jwt_secret), + "--el={0}".format(el_uri), + "--cl={0}".format(beacon_uri) + ] + ) + ) + return "http://{0}@{1}:{2}".format(DUMMY_PUB_KEY_THAT_ISNT_VERIFIED, mock_builder.ip_address, MOCK_MEV_BUILDER_PORT) diff --git a/src/package_io/parse_input.star b/src/package_io/parse_input.star index a9cfee2e1..6584bfc12 100644 --- a/src/package_io/parse_input.star +++ b/src/package_io/parse_input.star @@ -1,16 +1,16 @@ DEFAULT_EL_IMAGES = { - "geth": "ethereum/client-go:latest", - "erigon": "thorax/erigon:devel", - "nethermind": "nethermind/nethermind:latest", - "besu": "hyperledger/besu:develop" + "geth": "ethereum/client-go:latest", + "erigon": "thorax/erigon:devel", + "nethermind": "nethermind/nethermind:latest", + "besu": "hyperledger/besu:develop" } DEFAULT_CL_IMAGES = { - "lighthouse": "sigp/lighthouse:latest", - "teku": "consensys/teku:latest", - "nimbus": "statusim/nimbus-eth2:multiarch-latest", - "prysm": "prysmaticlabs/prysm-beacon-chain:latest,prysmaticlabs/prysm-validator:latest", - "lodestar": "chainsafe/lodestar:latest", + "lighthouse": "sigp/lighthouse:latest", + "teku": "consensys/teku:latest", + "nimbus": "statusim/nimbus-eth2:multiarch-latest", + "prysm": "prysmaticlabs/prysm-beacon-chain:latest,prysmaticlabs/prysm-validator:latest", + "lodestar": "chainsafe/lodestar:latest", } BESU_NODE_NAME = "besu" @@ -51,7 +51,7 @@ def parse_input(input_args): if index == 0 and el_client_type in (BESU_NODE_NAME, NETHERMIND_NODE_NAME): fail("besu/nethermind cant be the first participant") - + el_image = participant["el_client_image"] if el_image == "": default_image = DEFAULT_EL_IMAGES.get(el_client_type, "") @@ -129,7 +129,7 @@ def parse_input(input_args): seconds_per_slot=result["network_params"]["seconds_per_slot"], slots_per_epoch=result["network_params"]["slots_per_epoch"], capella_fork_epoch=result["network_params"]["capella_fork_epoch"], - deneb_fork_epoch=result["network_params"]["deneb_fork_epoch"], + deneb_fork_epoch=result["network_params"]["deneb_fork_epoch"], genesis_delay=result["network_params"]["genesis_delay"] ), launch_additional_services=result["launch_additional_services"], @@ -153,43 +153,44 @@ def default_input_args(): participants = [default_participant()] return { "mev_type": None, - "participants": participants, - "network_params": network_params, - "launch_additional_services" : True, - "wait_for_finalization": False, - "wait_for_verifications": False, - "verifications_epoch_limit": 5, - "global_client_log_level": "info" + "participants": participants, + "network_params": network_params, + "launch_additional_services": True, + "wait_for_finalization": False, + "wait_for_verifications": False, + "verifications_epoch_limit": 5, + "global_client_log_level": "info" } def default_network_params(): # this is temporary till we get params working return { "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", - "num_validator_keys_per_node": 64, - "network_id": "3151908", - "deposit_contract_address": "0x4242424242424242424242424242424242424242", - "seconds_per_slot": 12, - "slots_per_epoch": 32, - "genesis_delay": 120, - "capella_fork_epoch": 2, + "num_validator_keys_per_node": 64, + "network_id": "3151908", + "deposit_contract_address": "0x4242424242424242424242424242424242424242", + "seconds_per_slot": 12, + "slots_per_epoch": 32, + "genesis_delay": 120, + "capella_fork_epoch": 2, # 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, + "deneb_fork_epoch": 500, } def default_participant(): return { - "el_client_type": "geth", - "el_client_image": "", - "el_client_log_level": "", - "cl_client_type": "lighthouse", - "cl_client_image": "", - "cl_client_log_level": "", - "beacon_extra_params": [], - "el_extra_params": [], - "validator_extra_params": [], - "builder_network_params": None + "el_client_type": "geth", + "el_client_image": "", + "el_client_log_level": "", + "cl_client_type": "lighthouse", + "cl_client_image": "", + "cl_client_log_level": "", + "beacon_extra_params": [], + "el_extra_params": [], + "validator_extra_params": [], + "builder_network_params": None, + "count": 1 } diff --git a/src/static_files/static_files.star b/src/static_files/static_files.star index 6e0985f4e..796f2a365 100644 --- a/src/static_files/static_files.star +++ b/src/static_files/static_files.star @@ -3,17 +3,17 @@ STATIC_FILES_DIRPATH = "github.com/kurtosis-tech/eth2-package/static_files" # Forkmon config FORKMON_CONFIG_TEMPLATE_FILEPATH = STATIC_FILES_DIRPATH + \ - "/forkmon-config/config.toml.tmpl" + "/forkmon-config/config.toml.tmpl" # Prometheus config PROMETHEUS_CONFIG_TEMPLATE_FILEPATH = STATIC_FILES_DIRPATH + \ - "/prometheus-config/prometheus.yml.tmpl" + "/prometheus-config/prometheus.yml.tmpl" # Grafana config GRAFANA_CONFIG_DIRPATH = "/grafana-config" GRAFANA_DATASOURCE_CONFIG_TEMPLATE_FILEPATH = STATIC_FILES_DIRPATH + \ - GRAFANA_CONFIG_DIRPATH + "/templates/datasource.yml.tmpl" + GRAFANA_CONFIG_DIRPATH + "/templates/datasource.yml.tmpl" GRAFANA_DASHBOARD_PROVIDERS_CONFIG_TEMPLATE_FILEPATH = STATIC_FILES_DIRPATH + \ - GRAFANA_CONFIG_DIRPATH + "/templates/dashboard-providers.yml.tmpl" + GRAFANA_CONFIG_DIRPATH + "/templates/dashboard-providers.yml.tmpl" GRAFANA_DASHBOARDS_CONFIG_DIRPATH = STATIC_FILES_DIRPATH + \ - GRAFANA_CONFIG_DIRPATH + "/dashboards/dashboard.json" + GRAFANA_CONFIG_DIRPATH + "/dashboards/dashboard.json" diff --git a/static_files/forkmon-config/config.toml.tmpl b/static_files/forkmon-config/config.toml.tmpl index 496ba9f6c..0877a956f 100644 --- a/static_files/forkmon-config/config.toml.tmpl +++ b/static_files/forkmon-config/config.toml.tmpl @@ -18,4 +18,4 @@ port = {{ .ListenPortNum }} [[monitor.endpoints]] consensus = "http://{{ $clClient.IPAddr }}:{{ $clClient.PortNum }}" execution = "N/A" # This doesn't seem to be used -{{ end }} \ No newline at end of file +{{ end }} diff --git a/static_files/grafana-config/dashboards/dashboard.json b/static_files/grafana-config/dashboards/dashboard.json index d749502c0..33ed4dba5 100644 --- a/static_files/grafana-config/dashboards/dashboard.json +++ b/static_files/grafana-config/dashboards/dashboard.json @@ -144,9 +144,7 @@ "justifyMode": "auto", "orientation": "auto", "reduceOptions": { - "calcs": [ - "lastNotNull" - ], + "calcs": ["lastNotNull"], "fields": "", "values": false }, @@ -295,4 +293,4 @@ "uid": "QdTOwy-nz", "version": 2, "weekStart": "" -} \ No newline at end of file +} diff --git a/static_files/grafana-config/templates/dashboard-providers.yml.tmpl b/static_files/grafana-config/templates/dashboard-providers.yml.tmpl index 1257a252d..21a99768c 100644 --- a/static_files/grafana-config/templates/dashboard-providers.yml.tmpl +++ b/static_files/grafana-config/templates/dashboard-providers.yml.tmpl @@ -22,4 +22,4 @@ providers: # path to dashboard files on disk. Required when using the 'file' type path: {{ .DashboardsDirpath }} # use folder names from filesystem to create folders in Grafana - foldersFromFilesStructure: true \ No newline at end of file + foldersFromFilesStructure: true diff --git a/static_files/grafana-config/templates/datasource.yml.tmpl b/static_files/grafana-config/templates/datasource.yml.tmpl index 1c17b2b8c..a5e27c052 100644 --- a/static_files/grafana-config/templates/datasource.yml.tmpl +++ b/static_files/grafana-config/templates/datasource.yml.tmpl @@ -10,4 +10,4 @@ datasources: url: {{ .PrometheusURL }} basicAuth: false isDefault: true - editable: true \ No newline at end of file + editable: true diff --git a/static_files/prometheus-config/prometheus.yml.tmpl b/static_files/prometheus-config/prometheus.yml.tmpl index fb93f9978..3e63f5a5c 100644 --- a/static_files/prometheus-config/prometheus.yml.tmpl +++ b/static_files/prometheus-config/prometheus.yml.tmpl @@ -9,4 +9,4 @@ scrape_configs: metrics_path: {{ $clNode.path }} static_configs: - targets: ['{{ $clNode.url }}'] - {{ end }} \ No newline at end of file + {{ end }}