Commit 2283464b authored by Barnabas Busa's avatar Barnabas Busa Committed by GitHub

fix: guid fix for besu/teku/erigon/nimbus (#443)

parent 69da8f04
participants:
- el_client_type: besu
cl_client_type: teku
- el_client_type: erigon
cl_client_type: teku
additional_services: []
persistent: true
participants: participants:
- el_client_type: geth - el_client_type: geth
cl_client_type: prysm cl_client_type: teku
cl_split_mode_enabled: true
- el_client_type: nethermind - el_client_type: nethermind
cl_client_type: prysm
- el_client_type: erigon
cl_client_type: nimbus cl_client_type: nimbus
cl_client_image: ethpandaops/nimbus:unstable
cl_split_mode_enabled: true cl_split_mode_enabled: true
- el_client_type: besu - el_client_type: besu
cl_client_type: lighthouse cl_client_type: lighthouse
- el_client_type: reth - el_client_type: reth
cl_client_type: lodestar cl_client_type: lodestar
- el_client_type: ethereumjs - el_client_type: ethereumjs
cl_client_type: teku
cl_split_mode_enabled: true
- el_client_type: erigon
cl_client_type: teku
- el_client_type: besu
cl_client_type: nimbus cl_client_type: nimbus
additional_services: [] additional_services: []
persistent: true persistent: true
participants: participants:
- el_client_type: geth - el_client_type: geth
cl_client_type: teku
cl_split_mode_enabled: true
- el_client_type: nethermind
cl_client_type: prysm cl_client_type: prysm
- el_client_type: geth - el_client_type: erigon
cl_client_type: nimbus cl_client_type: nimbus
cl_client_image: ethpandaops/nimbus:unstable
cl_split_mode_enabled: true cl_split_mode_enabled: true
- el_client_type: nethermind - el_client_type: besu
cl_client_type: lighthouse cl_client_type: lighthouse
- el_client_type: reth - el_client_type: reth
cl_client_type: lodestar cl_client_type: lodestar
- el_client_type: ethereumjs - el_client_type: ethereumjs
cl_client_type: lighthouse cl_client_type: nimbus
additional_services: additional_services: []
- dora
persistent: true persistent: true
participants: participants:
- el_client_type: geth - el_client_type: geth
cl_client_type: nimbus cl_client_type: nimbus
cl_client_image: ethpandaops/nimbus:unstable
cl_split_mode_enabled: true cl_split_mode_enabled: true
validator_count: 0 validator_count: 0
- el_client_type: nethermind - el_client_type: nethermind
cl_client_type: nimbus cl_client_type: nimbus
cl_split_mode_enabled: true cl_split_mode_enabled: true
cl_client_image: ethpandaops/nimbus:unstable
- el_client_type: erigon - el_client_type: erigon
cl_client_type: nimbus cl_client_type: nimbus
cl_split_mode_enabled: true cl_split_mode_enabled: true
cl_client_image: ethpandaops/nimbus:unstable
- el_client_type: besu - el_client_type: besu
cl_client_type: nimbus cl_client_type: nimbus
cl_split_mode_enabled: true cl_split_mode_enabled: true
cl_client_image: ethpandaops/nimbus:unstable
- el_client_type: reth - el_client_type: reth
cl_client_type: nimbus cl_client_type: nimbus
cl_split_mode_enabled: true cl_split_mode_enabled: true
cl_client_image: ethpandaops/nimbus:unstable
- el_client_type: ethereumjs - el_client_type: ethereumjs
cl_client_type: nimbus cl_client_type: nimbus
cl_split_mode_enabled: true cl_split_mode_enabled: true
cl_client_image: ethpandaops/nimbus:unstable
additional_services: [] additional_services: []
...@@ -169,6 +169,7 @@ participants: ...@@ -169,6 +169,7 @@ participants:
# A list of optional extra params that will be passed to the CL to run separate Beacon and validator nodes # A list of optional extra params that will be passed to the CL to run separate Beacon and validator nodes
# Only possible for nimbus or teku # Only possible for nimbus or teku
# Please note that in order to get it to work with Nimbus, you have to use `ethpandaops/nimbus:unstable` as the image (default upstream image does not yet support this out of the box)
# Defaults to false # Defaults to false
cl_split_mode_enabled: false cl_split_mode_enabled: false
......
...@@ -7,6 +7,9 @@ node_metrics = import_module("../../node_metrics_info.star") ...@@ -7,6 +7,9 @@ node_metrics = import_module("../../node_metrics_info.star")
constants = import_module("../../package_io/constants.star") constants = import_module("../../package_io/constants.star")
# ---------------------------------- Beacon client ------------------------------------- # ---------------------------------- Beacon client -------------------------------------
# Nimbus requires that its data directory already exists (because it expects you to bind-mount it), so we
# have to to create it
BEACON_DATA_DIRPATH_ON_SERVICE_CONTAINER = "/data/nimbus/beacon-data"
# Port IDs # Port IDs
BEACON_TCP_DISCOVERY_PORT_ID = "tcp-discovery" BEACON_TCP_DISCOVERY_PORT_ID = "tcp-discovery"
BEACON_UDP_DISCOVERY_PORT_ID = "udp-discovery" BEACON_UDP_DISCOVERY_PORT_ID = "udp-discovery"
...@@ -29,7 +32,7 @@ DEFAULT_BEACON_IMAGE_ENTRYPOINT = ["nimbus_beacon_node"] ...@@ -29,7 +32,7 @@ DEFAULT_BEACON_IMAGE_ENTRYPOINT = ["nimbus_beacon_node"]
BEACON_METRICS_PATH = "/metrics" BEACON_METRICS_PATH = "/metrics"
# ---------------------------------- Validator client ------------------------------------- # ---------------------------------- Validator client -------------------------------------
VALIDATOR_KEYS_MOUNTPOINT_ON_CLIENTS = "/validator-keys" VALIDATOR_KEYS_MOUNTPOINT_ON_CLIENTS = "/data/nimbus/validator-keys"
VALIDATOR_HTTP_PORT_ID = "http" VALIDATOR_HTTP_PORT_ID = "http"
VALIDATOR_METRICS_PORT_ID = "metrics" VALIDATOR_METRICS_PORT_ID = "metrics"
VALIDATOR_HTTP_PORT_NUM = 5042 VALIDATOR_HTTP_PORT_NUM = 5042
...@@ -49,13 +52,6 @@ DEFAULT_VALIDATOR_IMAGE_ENTRYPOINT = ["nimbus_validator_client"] ...@@ -49,13 +52,6 @@ DEFAULT_VALIDATOR_IMAGE_ENTRYPOINT = ["nimbus_validator_client"]
VALIDATOR_METRICS_PATH = "/metrics" VALIDATOR_METRICS_PATH = "/metrics"
# ---------------------------------- Genesis Files ---------------------------------- # ---------------------------------- Genesis Files ----------------------------------
# Nimbus requires that its data directory already exists (because it expects you to bind-mount it), so we
# have to to create it
BEACON_DATA_DIRPATH_ON_SERVICE_CONTAINER = "/data/nimbus/beacon-data"
# Nimbus wants the data dir to have these perms
CONSENSUS_DATA_DIR_PERMS_STR = "0700"
# Nimbus needs write access to the validator keys/secrets directories, and b/c the module container runs as root # Nimbus needs write access to the validator keys/secrets directories, and b/c the module container runs as root
# while the Nimbus container does not, we can't just point the Nimbus binary to the paths in the shared dir because # while the Nimbus container does not, we can't just point the Nimbus binary to the paths in the shared dir because
# it won't be able to open them. To get around this, we copy the validator keys/secrets to a path inside the Nimbus # it won't be able to open them. To get around this, we copy the validator keys/secrets to a path inside the Nimbus
...@@ -431,6 +427,7 @@ def get_beacon_config( ...@@ -431,6 +427,7 @@ def get_beacon_config(
el_client_context.client_name, el_client_context.client_name,
extra_labels, extra_labels,
), ),
user=User(uid=0, gid=0),
) )
......
...@@ -8,7 +8,7 @@ TEKU_BINARY_FILEPATH_IN_IMAGE = "/opt/teku/bin/teku" ...@@ -8,7 +8,7 @@ TEKU_BINARY_FILEPATH_IN_IMAGE = "/opt/teku/bin/teku"
# ---------------------------------- Beacon client ------------------------------------- # ---------------------------------- Beacon client -------------------------------------
# The Docker container runs as the "teku" user so we can't write to root # The Docker container runs as the "teku" user so we can't write to root
BEACON_DATA_DIRPATH_ON_SERVICE_CONTAINER = "/opt/teku/teku-beacon-data" BEACON_DATA_DIRPATH_ON_SERVICE_CONTAINER = "/data/teku/teku-beacon-data"
# Port IDs # Port IDs
BEACON_TCP_DISCOVERY_PORT_ID = "tcp-discovery" BEACON_TCP_DISCOVERY_PORT_ID = "tcp-discovery"
...@@ -31,7 +31,7 @@ BEACON_METRICS_PATH = "/metrics" ...@@ -31,7 +31,7 @@ BEACON_METRICS_PATH = "/metrics"
# ---------------------------------- Validator client ------------------------------------- # ---------------------------------- Validator client -------------------------------------
# These will get mounted as root and Teku needs directory write permissions, so we'll copy this # These will get mounted as root and Teku needs directory write permissions, so we'll copy this
# into the Teku user's home directory to get around it # into the Teku user's home directory to get around it
VALIDATOR_DATA_DIRPATH_ON_SERVICE_CONTAINER = "/opt/teku/teku-validator-data" VALIDATOR_DATA_DIRPATH_ON_SERVICE_CONTAINER = "/data/teku/teku-validator-data"
VALIDATOR_KEYS_DIRPATH_ON_SERVICE_CONTAINER = "/validator-keys" VALIDATOR_KEYS_DIRPATH_ON_SERVICE_CONTAINER = "/validator-keys"
...@@ -438,6 +438,7 @@ def get_beacon_config( ...@@ -438,6 +438,7 @@ def get_beacon_config(
el_client_context.client_name, el_client_context.client_name,
extra_labels, extra_labels,
), ),
user=User(uid=0, gid=0),
) )
......
...@@ -5,7 +5,7 @@ el_admin_node_info = import_module("../../el/el_admin_node_info.star") ...@@ -5,7 +5,7 @@ el_admin_node_info = import_module("../../el/el_admin_node_info.star")
node_metrics = import_module("../../node_metrics_info.star") node_metrics = import_module("../../node_metrics_info.star")
constants = import_module("../../package_io/constants.star") constants = import_module("../../package_io/constants.star")
# The dirpath of the execution data directory on the client container # The dirpath of the execution data directory on the client container
EXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER = "/opt/besu/execution-data" EXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER = "/data/besu/execution-data"
METRICS_PATH = "/metrics" METRICS_PATH = "/metrics"
...@@ -254,6 +254,7 @@ def get_config( ...@@ -254,6 +254,7 @@ def get_config(
cl_client_name, cl_client_name,
extra_labels, extra_labels,
), ),
user=User(uid=0, gid=0),
) )
......
...@@ -7,7 +7,7 @@ node_metrics = import_module("../../node_metrics_info.star") ...@@ -7,7 +7,7 @@ node_metrics = import_module("../../node_metrics_info.star")
constants = import_module("../../package_io/constants.star") constants = import_module("../../package_io/constants.star")
# The dirpath of the execution data directory on the client container # The dirpath of the execution data directory on the client container
EXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER = "/home/erigon/execution-data" EXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER = "/data/erigon/execution-data"
METRICS_PATH = "/metrics" METRICS_PATH = "/metrics"
...@@ -193,8 +193,20 @@ def get_config( ...@@ -193,8 +193,20 @@ def get_config(
"--metrics", "--metrics",
"--metrics.addr=0.0.0.0", "--metrics.addr=0.0.0.0",
"--metrics.port={0}".format(METRICS_PORT_NUM), "--metrics.port={0}".format(METRICS_PORT_NUM),
"--db.size.limit={0}MB".format(el_volume_size),
] ]
files = {
constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS: el_cl_genesis_data.files_artifact_uuid,
constants.JWT_MOUNTPOINT_ON_CLIENTS: jwt_file,
}
if persistent:
files[EXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER] = Directory(
persistent_key="data-{0}".format(service_name),
size=el_volume_size,
)
if network == "kurtosis": if network == "kurtosis":
if len(existing_el_clients) > 0: if len(existing_el_clients) > 0:
cmd.append( cmd.append(
...@@ -216,7 +228,6 @@ def get_config( ...@@ -216,7 +228,6 @@ def get_config(
) )
) )
elif network not in constants.PUBLIC_NETWORKS: elif network not in constants.PUBLIC_NETWORKS:
cmd.append("--db.size.limit=100GB")
cmd.append( cmd.append(
"--bootnodes=" "--bootnodes="
+ shared_utils.get_devnet_enodes( + shared_utils.get_devnet_enodes(
...@@ -240,20 +251,9 @@ def get_config( ...@@ -240,20 +251,9 @@ def get_config(
command_arg_str = " && ".join(command_arg) command_arg_str = " && ".join(command_arg)
else: else:
cmd.append("--chain={0}".format(network)) cmd.append("--chain={0}".format(network))
cmd.append("--db.size.limit=3TB")
command_arg = cmd command_arg = cmd
command_arg_str = " ".join(command_arg) command_arg_str = " ".join(command_arg)
files = {
constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS: el_cl_genesis_data.files_artifact_uuid,
constants.JWT_MOUNTPOINT_ON_CLIENTS: jwt_file,
}
if persistent:
files[EXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER] = Directory(
persistent_key="data-{0}".format(service_name),
size=el_volume_size,
)
return ServiceConfig( return ServiceConfig(
image=image, image=image,
ports=USED_PORTS, ports=USED_PORTS,
...@@ -273,6 +273,7 @@ def get_config( ...@@ -273,6 +273,7 @@ def get_config(
cl_client_name, cl_client_name,
extra_labels, extra_labels,
), ),
user=User(uid=0, gid=0),
) )
......
...@@ -6,7 +6,7 @@ genesis_constants = import_module( ...@@ -6,7 +6,7 @@ genesis_constants = import_module(
DEFAULT_EL_IMAGES = { DEFAULT_EL_IMAGES = {
"geth": "ethereum/client-go:latest", "geth": "ethereum/client-go:latest",
"erigon": "ethpandaops/erigon:2.53.0", "erigon": "ethpandaops/erigon:devel",
"nethermind": "nethermind/nethermind:latest", "nethermind": "nethermind/nethermind:latest",
"besu": "hyperledger/besu:latest", "besu": "hyperledger/besu:latest",
"reth": "ghcr.io/paradigmxyz/reth", "reth": "ghcr.io/paradigmxyz/reth",
...@@ -16,7 +16,7 @@ DEFAULT_EL_IMAGES = { ...@@ -16,7 +16,7 @@ DEFAULT_EL_IMAGES = {
DEFAULT_CL_IMAGES = { DEFAULT_CL_IMAGES = {
"lighthouse": "sigp/lighthouse:latest", "lighthouse": "sigp/lighthouse:latest",
"teku": "consensys/teku:latest", "teku": "consensys/teku:latest",
"nimbus": "ethpandaops/nimbus:unstable", "nimbus": "statusim/nimbus-eth2:multiarch-latest",
"prysm": "prysmaticlabs/prysm-beacon-chain:latest,prysmaticlabs/prysm-validator:latest", "prysm": "prysmaticlabs/prysm-beacon-chain:latest,prysmaticlabs/prysm-validator:latest",
"lodestar": "chainsafe/lodestar:latest", "lodestar": "chainsafe/lodestar:latest",
} }
......
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