EigenDA AVS Node (Testnet)

How to setup and run an EigenDA (Testnet) node the first AVS on EigenLayer.

EigenLayer: Introduces a new primitive Restaking which enables staked ETH to be used as crypto-economic security for protocols other than Ethereum, in exchange for additional protocol fees and rewards.

Node Operator: within EigenLayer are individuals or organizations that play an active role in the EigenLayer protocol. By registering within EigenLayer, they enable ETH stakers to delegate their staked assets, whether in the form of native ETH or LSTs. The Node Operators then opt-in to provide a range of services to AVSs, enhancing the overall security and functionality of their networks.

Operator CLI: EigenLayer CLI is used to manage core operator functionalities like local key management, operator registration and updates.

Actively Validated Services (AVS): Any system that requires its own distributed validation semantics for verification, such as sidechains, data availability layers, new virtual machines, keeper networks, oracle networks, bridges, threshold cryptography schemes, and trusted execution environments.

Delegating to AVS Operators

If you have Restaked ETH on EigenLayer Testnet, you can delegate to AVS operators here: You must have LSTs Restaked or be Native Restaking on Goerli Testnet to be able to Delegate.

Select your Operator

https://goerli.eigenlayer.xyz/operator
https://goerli.eigenlayer.xyz/operator

Delegate ‘your restaked balance’

Become an AVS Operator

EigenDA: the first actively validated service (AVS) to launch on EigenLayer, by EigenLabs. EigenDA is on Testnet and expected to Launch on Mainnet 2024.

A secure, high throughput, and decentralized data availability (DA) service built on top of Ethereum using the EigenLayer restaking primitive. Restakers will be able to delegate stake to node operators performing validation tasks for EigenDA in exchange for service payments, and rollups will be able to post data to EigenDA in order to access lower transaction costs, higher transaction throughput, and secure composability across the EigenLayer ecosystem, with security and throughput designed to horizontally scale with the amount of restake and operators opted into servicing the protocol.

EigenDA Docs here, this guide is designed to take you step by step on setup and running EigenDA.

Hardware Requirements

These are the initial requirements today, medium and small nodes will come later with reduced requirements
These are the initial requirements today, medium and small nodes will come later with reduced requirements

1. Prepare Server - Dependencies

Linux Operating System: Ubuntu 20.04 LTS is the standard across the space, most testing and development is done with this version, LTS means Long term support.

Update System once installed

sudo apt update && sudo apt upgrade -y

Install dependencies

sudo apt install build-essential curl git jq make tar clang pkg-config libssl-dev gcc -y

Docker and Docker compose

Full Install instructions for Docker here and Docker Compose here. The following is the recommended method.

curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh

remove the install script and add $USER to docker group, to allow use without sudo

sudo rm -r get-docker.sh
sudo usermod -aG docker $USER

Restart a new shell, this is to allow the adding $USER to docker group.

Check installed with (if correct will output version)

docker --version

This script should also install docker compose plugin, which you can check with the following command

docker compose version

Install Go

Golang (Go) is an open source programming language, to Install. Eigen CLI requires version 1.21 or later.

wget -q -O - https://git.io/vQhTU | bash -s -- --version 1.21.5

This script is made by golang and installs PATH variables to .bashrc and Go binary to $HOME/.go and $HOME/go/bin

Run source $HOME/.bashrc to take effect, confirm installed with go version which should return the version installed

#to remove installation 
wget -q -O - https://git.io/vQhTU | bash -s -- --remove

2. Setup Ethereum Node (Goerli)

EigenLayer CLI and EigenDA require a connection to a Goerli ETH node endpoint, it is setup by default to use a node hosted on the same device as EigenDA or the endpoint will need to be changed to a public one. (example found here)

eth_rpc_url: http://localhost:8545

To setup an Ethereum Node

An easy and quick deployment using Nethermind Sedge, a one-click setup tool for Ethereum validators and nodes. Github

3. Install Eigen CLI

Build from source

git clone https://github.com/Layr-Labs/eigenlayer-cli.git
cd eigenlayer-cli
make build

copy the binary to /usr/local/bin so it is available in the $PATH

sudo cp bin/eigenlayer /usr/local/bin

Call CLI to check

eigenlayer help
this just confirms that it is installed correctly, so it can be used in the next steps
this just confirms that it is installed correctly, so it can be used in the next steps

4. Create Keys

Keys will be created locally to manage Ethereum Transactions for registering/managing operator account.

Create Keys

KEYNAME=<ANY-NAME>
eigenlayer operator keys create --key-type ecdsa $KEYNAME
eigenlayer operator keys create --key-type bls $KEYNAME

This will prompt a password input which you can use to encrypt the keys, backup the keys stored in .eigenlayer/operator_keys/ and the password used.

Take Note of the Ethereum Address as it will be useful for funding.

NOTE: Keys can be imported with an existing private key.

View Keys

eigenlayer operator keys list

Fund Wallet

Fund with at least 5 Goerli ETH, this will be used to pay for fee required to register operator and steps later.

5. Register Operator

Create Configuration Files

eigenlayer operator config create

gate stakers approval: Select No if you wish for anyone to be able to delegate

ETH rpc url: Default is localhost, if you are running an Ethereum node locally, otherwise place endpoint here.

Example
Example

This will create the configuration files metadata.json and operator.yaml in the $HOME directory.

Edit metadata

Metadata file also requires a logo of your operator. Please ensure that images are also uploaded to a publicly hosted link. only .png images are supported for now.

Metadata example

metadata_url: https://example.com/metadata.json
# Metadata
{
  "name": "Some operator",
  "website": "https://www.example.com",
  "description": "I operate on some data",
  "logo": "https://www.example.com/logo.png",
  "twitter": "https://x.com/example"
}

Edit operator config

nano operator.yaml

Contract Addresses:

# EigenLayer Slasher contract address
# This will be provided by EigenLayer team
el_slasher_address: 0xD11d60b669Ecf7bE10329726043B3ac07B380C22
# Address of BLS Public Key Compendium contract
# This will be provided by EigenLayer team
bls_public_key_compendium_address: 0xc81d3963087Fe09316cd1E032457989C7aC91b19

Register Operator

eigenlayer operator register operator.yaml

Check Status

eigenlayer operator status operator.yaml

To Update Metadata

eigenlayer operator update operator-config.yaml

6. Install EigenDA AVS

At this Stage we should have a EigenLayer CLI installed and the ‘Node Operator’ Registered.

Install EigenDA

git clone https://github.com/Layr-Labs/eigenda-operator-setup.git
cd eigenda-operator-setup

Modify ENV

Manually update the .env file downloaded in the steps above.

nano .env

Modify the sections marked with TODO to match your environment.

NODE_HOSTNAME= <your public ip address>
NODE_NGINX_CONF_HOST=./resources/rate-limit-nginx.conf

EIGENLAYER_HOME=${USER_HOME}/.eigenlayer
EIGENDA_HOME=${EIGENLAYER_HOME}/eigenda

Create Directories

mkdir -p $HOME/.eigenlayer/eigenda/logs
mkdir -p $HOME/.eigenlayer/eigenda/db

7. Ports

Open Ports

NODE_RETRIEVAL_PORT=32004

NODE_DISPERSAL_PORT=32005

These ports require access to the public internet. Port Forward these ports from your router if running locally.

To limit traffic from the EigenLabs hosted Disperser you can restrict your node's ingress traffic to the following IPs 3.221.120.68/32, 52.2.226.152/32, 18.214.113.214/32

To do so create a /eigenda-operator-setup/resources/ip-limit-nginx.conf file

server {
    listen 32005;

    http2 on;

    location / {
        allow 3.221.120.68/32;
        allow 52.2.226.152/32;
        allow 18.214.113.214/32;
        deny all;

        grpc_set_header X-Real-IP $remote_addr;

        grpc_pass grpc://da-node:32004;
    }
}

8. Operator Opt-In

EigenDA operator set: has a cap that limits the maximum number of active Operator nodes in the network in order to maintain the desired network performance and limit the L1 gas cost for aggregating signatures.

The Churn Approver: is responsible for managing the active set of Operator nodes in the EigenDA network.

Operator Delegation: the active set is determined by the highest delegation to operators, as such to be in the active your operator must have a minimum stake. Delegation is done by EigenLayer restakers, visit goerli.eigenlayer.xyz/avs/eigenda

To successfully register the Operator account you must have the minimum stake delegated for entry the active set (currently 120 Operators, set to increase soon), and enough (goerli) ETH for fees otherwise the command will fail.

Opt-In to EigenDA

./run.sh opt-in
If you successfully Opt-in you should see the following
If you successfully Opt-in you should see the following

NOTE: the registration script, deploys a docker container that to remove has to be done manually.

Potential Errors:

If the account does not meet the minimum stake required to Opt-in your will be meet with the following error, the solve the ‘node-operator’ will need more delegation.

Account does not meet minimum stake
Account does not meet minimum stake

If the account in .eigenlayer/operator-keys does not have enough ETH for gas, it will result in this error.

Not enough ETH in account to Opt-In
Not enough ETH in account to Opt-In

If you can’t Opt-in, you can still proceed to run the DA node (next step), you just won’t be in the active set.

9. Run EigenDA Node

Run EigenDA

From eigenda-operator-setup directory

docker compose up -d

this will start a container for eigenda-operator-setup-reverse proxy-1 and eigenda-native-node, check running containers with docker ps -a

If the EigenDA is running without error, you should see logs like so after a while

EigenDA logs
EigenDA logs

Logs for the NGINX ‘reverse proxy’ should look like so

NGINX logs
NGINX logs

Updating EigenDA

Stop EigenDA

cd eigenda-operator-setup
docker compose down

Edit EigenDA version

Latest version can be found here:

Open .env to change container tag

nano .env

Edit the Version according to latest release for Variable MAIN_SERVICE_IMAGE

Restart EigenDA

docker compose up -d

NOTE: the above method is simply to update the docker image, there may be additional configuration changes, to implement you can update the repo entirely and work through edits again or have a look at changes on GitHub.

Subscribe to GLCstaked
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.