# How to migrate from `lighthouse-docker` to `eth-docker`
# Step 1: Stop the `lighthouse-docker` validator
In order to avoid getting slashed, you need to shutdown and permanently disable the Lighthouse node that is running via `lighthouse-docker`.
To do that, `cd` to the `lighthouse-docker` directory:
```
cd ~/lighthouse-docker
```
(your path may be slightly different)
Then run this command to bring down the running node:
```
docker-compose down
```
You should see output like this:
```
Stopping lighthouse-docker_validator_client_1 ... done
Stopping lighthouse-docker_beacon_node_1 ... done
Removing lighthouse-docker_validator_client_1 ... done
Removing lighthouse-docker_beacon_node_1 ... done
Removing lighthouse-docker_geth_1 ... done
Removing network lighthouse-docker_default
```
Then, to prevent accidentally restarting the node, _move_ the node's data where `lighthouse-docker` won't find it:
```
mv validator_keys validator_keys_backup
mv lighthouse-data lighthouse-data-backup
mv .env env-backup
```
You can verify that `lighthouse-docker` has been successfully disabled using this command:
```
docker-compose up
```
You should see:
```
WARNING: The LIGHTHOUSE_VERSION variable is not set. Defaulting to a blank string.
WARNING: The GETH_VERSION variable is not set. Defaulting to a blank string.
ERROR: Couldn't find env file: /home/your_name/lighthouse-docker/.env
```
You should also verify that nothing is running under `docker`:
```
docker ps
```
Output should be:
```
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
```
With no running processes listed.
# Step 2: sign up for an Infura account
In order to make the transition as easy as possible we'll use Infura to checkpoint sync.
Make an Infura account at https://infura.io/ and sign up for an "ETH2" node.
```
Create New Key > ETH2
```
Then make a note of the URL that looks like this:
```
https://2DTFPon3xyLNrj3hjfPrit1PAOV:7c1c0a51784d719c6cd1b511372912fa@eth2-beacon-mainnet.infura.io
```
You'll need that URL in the next step.
# Step 3: set up a new node with `eth-docker`
Clone the `eth-docker` repository into `~/eth-docker`:
```
cd ~ && git clone https://github.com/eth-educators/eth-docker.git && cd eth-docker
```
Next, run the `ethd` setup wizard:
```
./ethd config
```
Select the following options in order:
* Select Network: _Ethereum Mainnet_
* Select deployment type: _Ethereum node_
* Select consensus client: _Lighthouse (Rust)_
* Select execution client: _choose whichever you would like, Geth is fine_
* Rapid sync with remote checkpoint, e.g. Infura? _Yes_
* Configure remote consensus client: _put the URL from step 2_
* Grafana dashboards? _No (unless you want that)_
* Configure Rewards Address: _any Ethereum/eth1 address of your choice_
* Configure Graffiti: _whatever you want_
The wizard will now finish and output a few logs that end with something like this:
```
Successfully built 9860ba6a9641
Successfully tagged geth:local
```
Stop and ask for help if you get anything that looks like an error.
# Step 4: import keys to `eth-docker`
Run this command, where `~/lighthouse-docker` is the path to your old `lighthouse-docker` directory:
```
./ethd keyimport --path ~/lighthouse-docker/validator_keys_backup
```
Enter the password when prompted. You should see output like the following:
```
Creating network "eth-docker_default" with the default driver
Creating volume "eth-docker_lhbeacon-data" with default driver
Creating volume "eth-docker_lhvalidator-data" with default driver
Creating volume "eth-docker_geth-eth1-data" with default driver
Creating eth-docker_validator-import_run ... done
Do all validator keys have the same password? (y/n) y
Running account manager for mainnet network
validator-dir path: "/var/lib/lighthouse/validators"
WARNING: DO NOT USE THE ORIGINAL KEYSTORES TO VALIDATE WITH ANOTHER CLIENT, OR YOU WILL GET SLASHED.
Keystore found at "/val_keys/keystore-m_12381_3600_0_0_0-1660711555.json":
- Public key: 0xa245b62661953e3b32a6b1fc2d6ac30820580746b35440125e2e25274835d288d04b4865848f4353eeaac58535390ff7
- UUID: 272bb6e0-b3b0-472b-974b-00947d641198
If you enter the password it will be stored as plain-text in validator_definitions.yml so that it is not required each time the validator client starts.
Enter the keystore password, or press enter to omit it:
Password is correct.
Successfully imported keystore.
Successfully updated validator_definitions.yml.
Successfully imported 1 validators (0 skipped).
WARNING: DO NOT USE THE ORIGINAL KEYSTORES TO VALIDATE WITH ANOTHER CLIENT, OR YOU WILL GET SLASHED.
```
# Step 5: check validator is offline, then start
Check your validator indices on https://beaconcha.in to confirm that they're currently offline. They should have been offline and failing to attest since you completed Step 1. Ensure that at least 15 minutes have elapsed since you started.
> IF YOUR VALIDATORS ARE NOT OFFLINE AT THIS POINT YOU WILL GET SLASHED. IF YOU'RE UNSURE STOP RIGHT NOW AND SEEK HELP.
Heeding the above warning, start the new node:
```
./ethd start
```
You can check on the logs with:
```
./ethd logs --tail 200 -f consensus
```
Which should show:
```
consensus_1 | Aug 17 05:53:57.905 INFO Lighthouse started version: Lighthouse/v2.5.1-df51a73
consensus_1 | Aug 17 05:53:57.905 INFO Configured for network name: mainnet
consensus_1 | Aug 17 05:53:57.905 INFO Data directory initialised datadir: /var/lib/lighthouse
consensus_1 | Aug 17 05:53:57.905 INFO Deposit contract address: 0x00000000219ab540356cbb839cbe05303d7705fa, deploy_block: 11184524
consensus_1 | Aug 17 05:53:57.982 INFO Starting checkpoint sync remote_url: https://eth2-beacon-mainnet.infura.io/, service: beacon
consensus_1 | Aug 17 05:54:49.717 INFO Loaded checkpoint block and state state_root: 0xdf03c7a9be59ed4b1732e3e1b8ed04337cac4b71d1a0c01d8043cf0fd14368d0, block_root: 0x803c4e696d2b55f80852bc3134b515ddf967cff5af7943f351d84503f88a59be, slot: 4490880, service: beacon
consensus_1 | Aug 17 05:54:50.231 INFO Block production enabled method: json rpc via http, endpoints: NoAuth(["http://execution:8545/"])
```
If you instead see errors from Infura just try re-running the log command to see if succeeds on a retry. The error case looks like this:
```
consensus_1 | Aug 17 05:52:55.631 INFO Logging to file path: "/var/lib/lighthouse/beacon/logs/beacon.log"
consensus_1 | Aug 17 05:52:55.631 INFO Lighthouse started version: Lighthouse/v2.5.1-df51a73
consensus_1 | Aug 17 05:52:55.631 INFO Configured for network name: mainnet
consensus_1 | Aug 17 05:52:55.631 INFO Data directory initialised datadir: /var/lib/lighthouse
consensus_1 | Aug 17 05:52:55.631 INFO Deposit contract address: 0x00000000219ab540356cbb839cbe05303d7705fa, deploy_block: 11184524
consensus_1 | Aug 17 05:52:55.722 INFO Starting checkpoint sync remote_url: https://eth2-beacon-mainnet.infura.io/, service: beacon
consensus_1 | Aug 17 05:53:57.311 CRIT Failed to start beacon node reason: Error loading checkpoint state from remote 0xdf03c7a9be59ed4b1732e3e1b8ed04337cac4b71d1a0c01d8043cf0fd14368d0: StatusCode(504)
consensus_1 | Aug 17 05:53:57.311 INFO Internal shutdown received reason: Failed to start beacon node
consensus_1 | Aug 17 05:53:57.311 INFO Shutting down.. reason: Failure("Failed to start beacon node")
```
Check on the validator with `./ethd logs --tail 200 -f validator`. It should show:
```
validator_1 | Aug 17 06:07:14.795 INFO Logging to file path: "/var/lib/lighthouse/validators/logs/validator.log"
validator_1 | Aug 17 06:07:14.795 INFO Lighthouse started version: Lighthouse/v2.5.1-df51a73
validator_1 | Aug 17 06:07:14.795 INFO Configured for network name: mainnet
validator_1 | Aug 17 06:07:14.796 INFO Starting validator client validator_dir: "/var/lib/lighthouse/validators", beacon_nodes: ["http://consensus:5052/"]
validator_1 | Aug 17 06:07:14.796 INFO Metrics HTTP server started listen_address: 0.0.0.0:8009
validator_1 | Aug 17 06:07:14.796 INFO Completed validator discovery new_validators: 0
validator_1 | Aug 17 06:07:15.499 INFO Enabled validator voting_pubkey: 0xa245b62661953e3b32a6b1fc2d6ac30820580746b35440125e2e25274835d288d04b4865848f4353eeaac58535390ff7, signing_method: local_keystore
validator_1 | Aug 17 06:07:15.499 INFO Initialized validators enabled: 1, disabled: 0
```
After a few minutes you should see that your beacon node is synced and your validator is attesting again. Check https://beaconcha.in again to confirm attestations are being processed by the rest of the network.
# Troubleshooting
If you run into issues please ping `@sproul` on Discord or ask for help on the Lighthouse server, or the `lighthouse-helpdesk` channel on the EthStaker server. The best time to ping me is 9am-5pm Australia eastern standard time (approx UTC+10).
You may also find the docs for `eth-docker` helpful:
* https://eth-docker.net/docs/Support/Troubleshooting/
# Cleaning Up
Once you're happy with your new `eth-docker` setup, and confident that you have a backup of your keys somewhere, you can delete the old `lighthouse-docker` data to save space:
```
sudo rm -r ~/lighthouse-docker
```