[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 -yInstall the Docker package, and allow it to create and manage containers for your applications. Press Y if requested.
sudo apt install docker.ioDownload 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-composeGrant 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-composeDownload 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.gzExtract 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.gzAdd 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/binYou can check your Go version.
go versionIII) 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-cliChange the current working directory to eigenlayer-cli.
cd eigenlayer-cliCreate a directory named build in the current directory.
mkdir -p buildCompile the Go program located at cmd/eigenlayer/main.go and generate an executable binary named eigenlayer.
go build -o build/eigenlayer cmd/eigenlayer/main.goCopy 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 !
eigenlayerGenerate 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 listIV) 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 createType N.
As requested, you must fill in the metadata.json file and upload it into a publicly accessible location. You can use nanoto open it in a text editor.
nano metadata.jsonFill 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.yamlYou 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.jsonfile 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.yamlConfirm 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.yamlAnd 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!
