Skip to content

Commit 308d4d4

Browse files
qu0bclaude
andcommitted
Add ethrex (lambdaclass) EL client to bal-devnet-2 infrastructure
Adds terraform node definitions and ansible configuration for ethrex, a Rust-based execution layer client. All nodes start with count=0 (disabled) until the ethpandaops/ansible-collection-general ethrex role is merged upstream. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent ede5d48 commit 308d4d4

5 files changed

Lines changed: 124 additions & 1 deletion

File tree

ansible/inventories/devnet-2/group_vars/all/images.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ default_ethereum_client_images:
1414
nethermind: ethpandaops/nethermind:bal-devnet-2
1515
reth: ethpandaops/reth:bal-devnet-2
1616
nimbusel: ethpandaops/nimbus-eth1:bal-devnet-2
17+
ethrex: ethpandaops/ethrex:bal-devnet-2
1718

1819
default_tooling_images:
1920
mev_boost: ethpandaops/mev-boost:develop
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
# role: ethpandaops.general.bootstrap
2+
bootstrap_default_user_authorized_keys_github_team_el:
3+
- fmoletta
4+
- JereSalo
5+
- ilitteri
6+
7+
# role: ethpandaops.general.ethereum_node
8+
ethereum_node_el: ethrex
9+
# role: ethpandaops.general.ethrex
10+
ethrex_container_name: execution
11+
ethrex_container_image: "{{ default_ethereum_client_images.ethrex }}"
12+
ethrex_container_env:
13+
VIRTUAL_HOST: "{{ ethereum_node_rcp_hostname }}"
14+
VIRTUAL_PORT: "{{ ethereum_node_el_ports_http_rpc | string }}"
15+
LETSENCRYPT_HOST: "{{ ethereum_node_rcp_hostname }}"
16+
RUST_LOG: "info"
17+
ethrex_container_volumes:
18+
- "{{ ethrex_datadir }}:/data"
19+
- "{{ ethrex_auth_jwt_path }}:/execution-auth.jwt:ro"
20+
- "{{ eth_testnet_config_dir }}:/network-config:ro"
21+
ethrex_container_command_extra_args:
22+
- --chain=/network-config/genesis.json
23+
- --http.api=eth,net,web3,debug,admin,txpool
24+
- --bootnodes={{ ethereum_el_bootnodes | join(',') }}
25+
- --builder.gaslimit=80000000
26+
27+
prometheus_config: |
28+
global:
29+
scrape_interval: 30s
30+
evaluation_interval: 30s
31+
scrape_timeout: 10s
32+
external_labels:
33+
instance: "{{ ethereum_network_name }}-{{ inventory_hostname }}"
34+
ip_address: "{{ ansible_host }}"
35+
network: "{{ ethereum_network_name }}"
36+
testnet: "{{ ethereum_network_name }}"
37+
execution_client: "{{ ethereum_node_el }}"
38+
consensus_client: "{{ ethereum_node_cl }}"
39+
supernode: "{{ ethereum_node_cl_supernode_enabled | bool | default(false) }}"
40+
remote_write:
41+
- queue_config:
42+
batch_send_deadline: 5s
43+
max_backoff: 500ms
44+
max_samples_per_send: 500
45+
min_backoff: 50ms
46+
max_shards: 100
47+
url: {{ prometheus_remote_push_url }}
48+
remote_timeout: 10s
49+
basic_auth:
50+
username: {{ prometheus_remote_write_username }}
51+
password: {{ prometheus_remote_write_password }}
52+
scrape_configs:
53+
- job_name: "prometheus"
54+
metrics_path: "/metrics"
55+
static_configs:
56+
- targets: ["localhost:9090"]
57+
labels:
58+
instance: "{{ ethereum_network_name }}-{{ inventory_hostname }}"
59+
- job_name: "node"
60+
metrics_path: "/metrics"
61+
static_configs:
62+
- targets: ["172.17.0.1:9100"]
63+
labels:
64+
instance: "{{ ethereum_network_name }}-{{ inventory_hostname }}"
65+
- job_name: "exporter"
66+
metrics_path: "/metrics"
67+
static_configs:
68+
- targets: ["ethereum-metrics-exporter:9090"]
69+
labels:
70+
instance: "{{ ethereum_network_name }}-{{ inventory_hostname }}"
71+
- job_name: "consensus_node"
72+
metrics_path: "/metrics"
73+
static_configs:
74+
- targets: ["{{ vars[ethereum_node_cl + '_container_name'] }}:{{ ethereum_node_cl_ports_metrics }}"]
75+
labels:
76+
instance: "{{ ethereum_network_name }}-{{ inventory_hostname }}"
77+
- job_name: "execution"
78+
metrics_path: "/metrics"
79+
static_configs:
80+
- targets: ["execution:{{ ethereum_node_el_ports_metrics }}"]
81+
labels:
82+
instance: "{{ ethereum_network_name }}-{{ inventory_hostname }}"

terraform/devnet-2/ansible_inventory.tmpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ ${replace(gid, "-", "_")}
3333

3434
# Execution client groups
3535

36-
%{ for el in ["besu", "ethereumjs", "geth", "nethermind", "erigon", "reth", "nimbusel"] ~}
36+
%{ for el in ["besu", "ethereumjs", "geth", "nethermind", "erigon", "reth", "nimbusel", "ethrex"] ~}
3737
[${el}:children]
3838
%{ for gid, group in groups ~}
3939
%{ if split("-", gid)[0] != "bootnode" && split("-", gid)[0] != "mev" ~}

terraform/devnet-2/hetzner/main.tf

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ locals {
7474
var.lighthouse_besu_full,
7575
var.lighthouse_reth_full,
7676
var.lighthouse_nimbusel_full,
77+
var.lighthouse_ethrex_full,
7778
var.prysm_geth_full,
7879
var.prysm_nethermind_full,
7980
var.prysm_erigon_full,
@@ -86,6 +87,7 @@ locals {
8687
var.lodestar_besu_full,
8788
var.lodestar_reth_full,
8889
var.lodestar_nimbusel_full,
90+
var.lodestar_ethrex_full,
8991
var.nimbus_geth_full,
9092
var.nimbus_nethermind_full,
9193
var.nimbus_erigon_full,
@@ -111,6 +113,7 @@ locals {
111113
var.lighthouse_besu_super,
112114
var.lighthouse_reth_super,
113115
var.lighthouse_nimbusel_super,
116+
var.lighthouse_ethrex_super,
114117
var.prysm_geth_super,
115118
var.prysm_nethermind_super,
116119
var.prysm_erigon_super,
@@ -123,6 +126,7 @@ locals {
123126
var.lodestar_besu_super,
124127
var.lodestar_reth_super,
125128
var.lodestar_nimbusel_super,
129+
var.lodestar_ethrex_super,
126130
var.nimbus_geth_super,
127131
var.nimbus_nethermind_super,
128132
var.nimbus_erigon_super,

terraform/devnet-2/hetzner/nodes.tf

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,15 @@ variable "lighthouse_nimbusel_super" {
7575
}
7676
}
7777

78+
variable "lighthouse_ethrex_super" {
79+
default = {
80+
name = "lighthouse-ethrex-super"
81+
count = 1
82+
validator_start = 2000
83+
validator_end = 2200
84+
}
85+
}
86+
7887
# Prysm
7988
variable "prysm_geth_super" {
8089
default = {
@@ -185,6 +194,15 @@ variable "lodestar_nimbusel_super" {
185194
}
186195
}
187196

197+
variable "lodestar_ethrex_super" {
198+
default = {
199+
name = "lodestar-ethrex-super"
200+
count = 1
201+
validator_start = 2200
202+
validator_end = 2400
203+
}
204+
}
205+
188206
# Nimbus
189207
variable "nimbus_geth_super" {
190208
default = {
@@ -407,6 +425,15 @@ variable "lighthouse_nimbusel_full" {
407425
}
408426
}
409427

428+
variable "lighthouse_ethrex_full" {
429+
default = {
430+
name = "lighthouse-ethrex-full"
431+
count = 0
432+
validator_start = 0
433+
validator_end = 0
434+
}
435+
}
436+
410437
# Prysm
411438
variable "prysm_geth_full" {
412439
default = {
@@ -517,6 +544,15 @@ variable "lodestar_nimbusel_full" {
517544
}
518545
}
519546

547+
variable "lodestar_ethrex_full" {
548+
default = {
549+
name = "lodestar-ethrex-full"
550+
count = 0
551+
validator_start = 0
552+
validator_end = 0
553+
}
554+
}
555+
520556
# Nimbus
521557
variable "nimbus_geth_full" {
522558
default = {

0 commit comments

Comments
 (0)