[Node] Deploy your EigenLayer operator
EigenLayer is a groundbreaking protocol developed on the Ethereum network, revolutionizing security through restaking. Users engage with smart contracts to restake their ETH, including assets like stETH from Lido, rETH from RocketPool, or sETH from Swell. This innovative approach aggregates security across Ethereum, addressing fragmented security challenges. EigenLayer’s opt-in feature introduces additional slashing conditions, incentivizing honesty and enabling validation services beyond Ethereum.
EigenLayer just raised a $100 millions in Series B round from Andreessen Horowitz in February 2024. They have also raised $50 millions in March 2023 in a Series A led by Blockchain Capital for a valuation of $500 millions and $14,5 millions in August 2022 in a seed led by Polychain Capital.
Welcome to Node Science! Here, you will learn and understand how to set up your node easily and quickly, without any prior technical knowledge.
Feel free to follow us on Twitter to stay updated on everything related to nodes and join our Discord for further discussion or any questions with our community!
I) VPS configuration
To run a node you’ll need a VPS (Virtual Private Server) and one of the most reliable and cheapest solutions is Contabo. It’s a cost-effective German VPS solution built in 2003, known for its robust performance and reliability, catering to a wide range of computing needs and budgets.
You can choose the CLOUD VPS 2 by clicking here. Note that you can opt for a more powerful server (VPS 3 or 4) to run multiple different nodes on it more economically.
Once payment is complete, you’ll receive an e-mail with your IP address entitled “Your login data!”. To connect to your VPS and securely run your node, you must download and install the Putty software, which enables a secure connection.
II) Checking for Requirements
Ensure you copy each command line using (Ctrl+C), and then paste it into your terminal by right-clicking your mouse. Execute them sequentially, pressing Enter after each, if required.
Start by refreshing the local package index to incorporate the most recent modifications made in the repositories.
apt-get update && sudo apt-get upgrade -y
Install the Docker package, and allow it to create and manage containers for your applications. Press Y
if requested.
sudo apt install docker.io
Download the Docker Compose binary and installs it into the /usr/local/bin
directory.
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Grant the execute permission to the Docker Compose binary file. This permission allows you to run the Docker Compose command directly from the command line without having to specify its full path.
sudo chmod +x /usr/local/bin/docker-compose
Download the Go programming language version 1.21.4 for Linux with an AMD64 architecture.
wget https://golang.org/dl/go1.21.4.linux-amd64.tar.gz
Extract the contents of the go1.21.4.linux-amd64.tar.gz
tarball file into the /usr/local
directory while preserving the directory structure and handling the compression.
tar -C /usr/local -xzf go1.21.4.linux-amd64.tar.gz
Add the /usr/local/go/bin
directory to the system's PATH
environment variable. This allows the system to find and execute Go executable files without specifying their full path.
export PATH=$PATH:/usr/local/go/bin
You can check your Go version.
go version
III) Install CLI from Source
Clone the EigenLayer repository : it creates a local copy of the repository on your system, allowing you to access and modify its contents.
git clone https://github.com/Layr-Labs/eigenlayer-cli
Change the current working directory to eigenlayer-cli.
cd eigenlayer-cli
Create a directory named build
in the current directory.
mkdir -p build
Compile the Go program located at cmd/eigenlayer/main.go
and generate an executable binary named eigenlayer
.
go build -o build/eigenlayer cmd/eigenlayer/main.go
Copy the eigenlayer
executable binary from the ./build
directory to the /usr/local/bin/
directory, making it accessible system-wide for execution.
cp ./build/eigenlayer /usr/local/bin/
Launch EigenLayer !
eigenlayer
Generate your encrypted ECDSA and BLS keys using the CLI, by replacing <KEY_NAME>
with the name of your choice. This will prompt a password which you can use to encrypt the keys, so choose a storng password and do not forget to save your key !
eigenlayer operator keys create --key-type ecdsa <KEY_NAME>
You can leave with “CTRL+C”.
Now, create your BLS private key by replacing <KEY_NAME>
with the same wallet name. Do not forget to save all information displayed (private, public key and Ethereum Address).
eigenlayer operator keys create --key-type bls <KEY_NAME>
Leave with “CTRL+C”.
You can retrieve the keys you have created with the EigenLayer cli tool:
eigenlayer operator keys list
IV) Operator Registration
You’re ready to register your operator on the EigenLayer blockchain! Begin by creating the required config files (operator.yaml
and metadata.json
) for the registration process:
eigenlayer operator config create
Type N
.
As requested, you must fill in the metadata.json
file and upload it into a publicly accessible location. You can use nano
to open it in a text editor.
nano metadata.json
Fill in the metadata.json
file with your own informations. You are also required to upload the image of the operator to a publicly accessible location and give the url in the metadata file. Operator registration only supports .png
images for now ! I made you a screen of my file as an example.
{
"name": "<YOUR_OPERATOR_NAME>",
"website": "<YOUR_WEBSITE>",
"description": "<RANDOM_DESCRIPTION>",
"logo": "<URL_OF_YOUR_LOGO>",
"twitter": "<YOUR_TWITTER>"
}
Afterward, you should press “Ctrl+X”, then “Y” to save, and finally “Enter” to confirm.
Next, you’ll need to export this information on GitHub. Start by creating a GitHub account and create a “New repository”.
Name your repository with the name of your choice.
Click on “creating a new file”.
Name your file “metadata.json” and copy the following text.
{
"name": "<YOUR_OPERATOR_NAME>",
"website": "<YOUR_WEBSITE>",
"description": "<RANDOM_DESCRIPTION>",
"logo": "<URL_OF_YOUR_LOGO>",
"twitter": "<YOUR_TWITTER>"
}
Click on “Commit changes…”, then click on your metadata.json file, click on “Raw” and copy the URL.
Go back to PuTTY and edit your operator.yaml file with nano.
nano operator.yaml
You can copy the following block and replace all in “<...>
” with your own informations.
operator:
address: <ECDSA_ADRESS>
earnings_receiver_address: <ECDSA_ADRESS>
delegation_approver_address: "0x0000000000000000000000000000000000000000"
staker_opt_out_window_blocks: 0
metadata_url: <RAW_URL>
el_delegation_manager_address: 0x1b7b8F6b258f95Cf9596EabB9aa18B62940Eb0a8
eth_rpc_url: https://rpc.ankr.com/eth_goerli
private_key_store_path: /root/.eigenlayer/operator_keys/<KEY_NAME>.ecdsa.key.json
signer_type: local_keystore
chain_id: 5
<ECDSA_ADRESS>
: ETH address previously generated.<RAW_URL>
: URL of your Rawmetadata.json
file from Github.<KEY_NAME>
: this your previously defined key name.
Press “Ctrl+X”, then “Y” to save, and finally “Enter” to confirm.
You can now proceed with the registration of your operator! You’ll need some goerliETH in the wallet you generated. You can claim faucet here, but note that you need to have >0.001 ETH on mainnet, so you can not claim directly on your ECDSA address. Claim with your main wallet and then send the goerliETH on your ECDSA address (you can only claim 0.02 Goerli ETH every 24 hours).
You can now start the registration of your operator.
eigenlayer operator register operator.yaml
Confirm with your previously created password.
Congratulations, you’ve just deployed your own EigenLayer Operator!
You can use the following command to inquire about the registration status of your operator.
eigenlayer operator status operator.yaml
And check here with your ECDSA address or your Operator name.
We will see in a futur guide how to set up your validator !
Feel free to follow us on Twitter to stay updated on everything related to nodes and join our Discord for further discussion or any questions with our community!