Skip to content

Commit df0eb5b

Browse files
authored
Merge pull request #779 from washosk/feat/add-ethereum-on-arm-guide
feat: add Ethereum on ARM guide to advanced node setup
2 parents 6dfaa15 + fa09205 commit df0eb5b

File tree

3 files changed

+355
-3
lines changed

3 files changed

+355
-3
lines changed
Lines changed: 350 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,350 @@
1+
---
2+
sidebar_position: 3
3+
---
4+
5+
import Tabs from '@theme/Tabs';
6+
import TabItem from '@theme/TabItem';
7+
8+
# Ethereum on ARM
9+
10+
[Ethereum on ARM](https://ethereum-on-arm-documentation.readthedocs.io/) offers a custom Linux image for ARM64 devices (Raspberry Pi 5, Rock 5B, NanoPC T6, and Orange Pi 5 Plus) that comes pre-configured for running Ethereum nodes. It includes a specific package `ls-lido` to simplify setting up Lido CSM validators.
11+
12+
:::info
13+
This guide assumes you have a supported ARM64 device with the [Ethereum on ARM image](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/installation.html) already installed and running.
14+
:::
15+
16+
## Prerequisites
17+
18+
- A supported ARM64 device with the Ethereum on ARM image installed (see above link for installation).
19+
- Validator keys generated (see "Creating Validator Keys" below).
20+
21+
## Running CSM on Mainnet
22+
23+
First, ensure the `ls-lido` package is installed on your node:
24+
25+
```bash
26+
sudo apt-get update && sudo apt-get install ls-lido
27+
```
28+
29+
You need to run a Full or Archive Ethereum node. This follows the standard process for Ethereum on ARM, but you must enable MEV Boost on the Beacon Chain and start a MEV Boost server to meet Lido CSM requirements.
30+
31+
1. **Start Execution Client**:
32+
Choose your preferred Execution Client and start it.
33+
34+
<Tabs>
35+
<TabItem value="nethermind" label="Nethermind">
36+
37+
```bash
38+
sudo systemctl start nethermind
39+
```
40+
41+
</TabItem>
42+
<TabItem value="geth" label="Geth">
43+
44+
```bash
45+
sudo systemctl start geth
46+
```
47+
48+
</TabItem>
49+
<TabItem value="besu" label="Besu">
50+
51+
```bash
52+
sudo systemctl start besu
53+
```
54+
55+
</TabItem>
56+
<TabItem value="reth" label="Reth">
57+
58+
```bash
59+
sudo systemctl start reth
60+
```
61+
62+
</TabItem>
63+
<TabItem value="erigon" label="Erigon">
64+
65+
```bash
66+
sudo systemctl start erigon
67+
```
68+
69+
</TabItem>
70+
</Tabs>
71+
72+
2. **Start Consensus Client**:
73+
Choose your preferred Consensus Client and start it.
74+
75+
<Tabs>
76+
77+
<TabItem value="lighthouse" label="Lighthouse">
78+
79+
```bash
80+
sudo systemctl start lighthouse-beacon-mev
81+
```
82+
83+
</TabItem>
84+
<TabItem value="prysm" label="Prysm">
85+
86+
```bash
87+
sudo systemctl start prysm-beacon-mev
88+
```
89+
90+
</TabItem>
91+
<TabItem value="teku" label="Teku">
92+
93+
```bash
94+
sudo systemctl start teku-beacon-mev
95+
```
96+
97+
</TabItem>
98+
<TabItem value="nimbus" label="Nimbus">
99+
100+
```bash
101+
sudo systemctl start nimbus-beacon-mev
102+
```
103+
104+
</TabItem>
105+
</Tabs>
106+
107+
:::warning
108+
Ensure you use the service name with the `-mev` suffix (e.g., `lighthouse-beacon-mev`, `prysm-beacon-mev`, `teku-beacon-mev`) to enable MEV, which is required for running CSM validators.
109+
:::
110+
111+
3. **Start MEV Boost**:
112+
113+
```bash
114+
sudo systemctl start mev-boost
115+
```
116+
117+
## Creating Validator Keys
118+
119+
To generate your validator keys, please refer to the [Key Generation for Mainnet](../../generating-validator-keys/key-generation-for-mainnet/) guide.
120+
121+
## Importing Keys and Starting the Validator
122+
123+
:::note
124+
For more details on importing keys, refer to the [Ethereum on ARM Validator Client guide](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/staking/solo-staking.html#running-validator-client-internal-alt).
125+
:::
126+
127+
1. **Import Keys**:
128+
Transfer your keys to the node if generated on your desktop. Run the import command for your client.
129+
130+
<Tabs>
131+
132+
<TabItem value="lighthouse" label="Lighthouse">
133+
134+
```bash
135+
lighthouse account validator import --directory=/home/ethereum/validator_keys -d /home/ethereum/.lighthouse-validator-lido
136+
```
137+
138+
</TabItem>
139+
<TabItem value="prysm" label="Prysm">
140+
141+
```bash
142+
validator accounts import --keys-dir=/home/ethereum/validator_keys --wallet-dir=/home/ethereum/.prysm-validator-mainnet-lido/prysm-wallet-v2
143+
```
144+
145+
</TabItem>
146+
<TabItem value="nimbus" label="Nimbus">
147+
148+
```bash
149+
nimbus_beacon_node deposits import /home/ethereum/validator_keys --data-dir=/home/ethereum/.nimbus-validator-lido
150+
```
151+
152+
</TabItem>
153+
<TabItem value="teku" label="Teku">
154+
155+
Run the helper script to create validator passwords:
156+
157+
```bash
158+
sudo setup_validator_passwords
159+
```
160+
161+
This will generate a secure random password and create a `.txt` file for each keystore with correct permissions.
162+
163+
You should now have matching files like:
164+
165+
```text
166+
keystore-m_12381_3600_0_0_0-1661710189.json
167+
keystore-m_12381_3600_0_0_0-1661710189.txt
168+
```
169+
170+
</TabItem>
171+
</Tabs>
172+
173+
1. **Start Validator with Lido Config**:
174+
Start the validator service that includes the Lido configuration (look for `lido` in the service name).
175+
176+
<Tabs>
177+
178+
<TabItem value="lighthouse" label="Lighthouse">
179+
180+
```bash
181+
sudo systemctl start lighthouse-validator-lido
182+
```
183+
184+
</TabItem>
185+
<TabItem value="prysm" label="Prysm">
186+
187+
```bash
188+
sudo systemctl start prysm-validator-lido
189+
```
190+
191+
</TabItem>
192+
<TabItem value="teku" label="Teku">
193+
194+
```bash
195+
sudo systemctl start teku-validator-lido
196+
```
197+
198+
</TabItem>
199+
<TabItem value="nimbus" label="Nimbus">
200+
201+
```bash
202+
sudo systemctl start nimbus-validator-lido
203+
```
204+
205+
</TabItem>
206+
</Tabs>
207+
208+
:::warning
209+
The `lido` argument/suffix is essential as it applies the specific configuration required for Lido CSM.
210+
:::
211+
212+
## Create and Activate the CSM Validator
213+
214+
For instructions on how to upload your deposit data and activate your validator, please refer to the [CSM Activation](../../lido-csm-widget/upload-remove-view-validator-keys) guide.
215+
216+
## Running CSM on Hoodi Testnet
217+
218+
You can test the setup on the Hoodi testnet as well. The process is the same, you just need to adjust the network parameter for each client using the hoodi suffix.
219+
220+
1. **Start Clients on Testnet**:
221+
222+
<Tabs>
223+
<TabItem value="nethermind" label="Nethermind">
224+
225+
```bash
226+
sudo systemctl start nethermind-hoodi
227+
```
228+
229+
</TabItem>
230+
<TabItem value="geth" label="Geth">
231+
232+
```bash
233+
sudo systemctl start geth-hoodi
234+
```
235+
236+
</TabItem>
237+
<TabItem value="besu" label="Besu">
238+
239+
```bash
240+
sudo systemctl start besu-hoodi
241+
```
242+
243+
</TabItem>
244+
<TabItem value="reth" label="Reth">
245+
246+
```bash
247+
sudo systemctl start reth-hoodi
248+
```
249+
250+
</TabItem>
251+
<TabItem value="erigon" label="Erigon">
252+
253+
```bash
254+
sudo systemctl start erigon-hoodi
255+
```
256+
257+
</TabItem>
258+
</Tabs>
259+
260+
<Tabs>
261+
<TabItem value="lighthouse" label="Lighthouse">
262+
263+
```bash
264+
sudo systemctl start lighthouse-beacon-hoodi-mev
265+
```
266+
267+
</TabItem>
268+
<TabItem value="prysm" label="Prysm">
269+
270+
```bash
271+
sudo systemctl start prysm-beacon-hoodi-mev
272+
```
273+
274+
</TabItem>
275+
<TabItem value="teku" label="Teku">
276+
277+
```bash
278+
sudo systemctl start teku-beacon-hoodi-mev
279+
```
280+
281+
</TabItem>
282+
<TabItem value="nimbus" label="Nimbus">
283+
284+
```bash
285+
sudo systemctl start nimbus-beacon-hoodi-mev
286+
```
287+
288+
</TabItem>
289+
</Tabs>
290+
291+
```bash
292+
sudo systemctl start mev-boost-hoodi
293+
```
294+
295+
2. **Generate Keys for Hoodi**:
296+
Follow the testnet instructions in the [Key Generation guide](../../generating-validator-keys/key-generation-for-testnet) (selecting Hoodi network).
297+
298+
3. **Import and Start on Testnet**:
299+
300+
<Tabs groupId="consensus-client">
301+
<TabItem value="lighthouse" label="Lighthouse">
302+
303+
```bash
304+
lighthouse account validator --network hoodi import --directory=/home/ethereum/validator_keys -d /home/ethereum/.lighthouse-validator-lido
305+
sudo systemctl start lighthouse-validator-hoodi-lido
306+
```
307+
308+
</TabItem>
309+
<TabItem value="prysm" label="Prysm">
310+
311+
```bash
312+
validator accounts import --hoodi --keys-dir=/home/ethereum/validator_keys --wallet-dir=/home/ethereum/.prysm-validator-hoodi-lido/prysm-wallet-v2
313+
sudo systemctl start prysm-validator-hoodi-lido
314+
```
315+
316+
</TabItem>
317+
<TabItem value="nimbus" label="Nimbus">
318+
319+
```bash
320+
nimbus_beacon_node deposits import /home/ethereum/validator_keys --data-dir=/home/ethereum/.nimbus-validator-hoodi-lido
321+
sudo systemctl start nimbus-validator-hoodi-lido
322+
```
323+
324+
</TabItem>
325+
<TabItem value="teku" label="Teku">
326+
327+
Run the helper script to create validator passwords:
328+
329+
```bash
330+
setup_validator_passwords
331+
```
332+
333+
This will generate a secure random password and create a `.txt` file for each keystore with correct permissions.
334+
335+
You should now have matching files like:
336+
337+
```text
338+
keystore-m_12381_3600_0_0_0-1661710189.json
339+
keystore-m_12381_3600_0_0_0-1661710189.txt
340+
```
341+
342+
```bash
343+
sudo systemctl start teku-validator-hoodi-lido
344+
```
345+
346+
</TabItem>
347+
</Tabs>
348+
349+
4. **CSM Testnet Portal**:
350+
[https://csm.testnet.fi](https://csm.testnet.fi)

run-on-lido/csm/node-setup/advanced/index.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,6 @@ Run these if you're a seasoned server manager and/or an OG Ethereum node operato
1616

1717
[**Eth Docker →**](./eth-docker)
1818

19-
[**Systemd →**](./systemd/)
19+
[**Ethereum on ARM →**](./ethereum-on-arm)
20+
21+
[**Systemd →**](./systemd/)

run-on-lido/csm/node-setup/advanced/systemd/index.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
sidebar_position: 3
2+
sidebar_position: 4
33
---
44

55
# Systemd
@@ -18,4 +18,4 @@ For an end-to-end setup of your validator node from scratch, refer to these comm
1818

1919
[**Method 1: Configure CSM fee recipient on validator keys →**](./method-1-configure-csm-fee-recipient-on-validator-keys.md)
2020

21-
[**Method 2: Configure CSM fee recipient on separate validator client →**](./method-2-configure-csm-fee-recipient-on-separate-validator-client.md)
21+
[**Method 2: Configure CSM fee recipient on separate validator client →**](./method-2-configure-csm-fee-recipient-on-separate-validator-client.md)

0 commit comments

Comments
 (0)