|
| 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) |
0 commit comments