Byzantine Finance
Website - Home🖥️ For Developers
  • 👋Introduction
    • What is Byzantine Finance?
      • Permissionless strategy vaults
      • Strategy layer & infrastructure layer - Explain Like I'm 5
      • Architecture Overview
    • Explanation of terms
    • Restaking explained
  • Media kit
  • 🔑Byzantine Vaults
    • What are Byzantine vaults?
    • Features of Native Vaults
      • Byzantine Oracle
      • Best practices for Validator Managers
    • Types of Native Vaults
      • Solo Staker Vaults
      • Partner Validated Vaults
      • Distributed Validator Vaults
  • ↔️Vault Interaction
    • Deposit
      • Deposit to ERC20 Vaults
      • Deposit to Native Vaults
    • Withdraw
      • Withdraw from ERC20 Vaults
      • Withdraw from Native Vaults
    • Claim Rewards
      • Restaking Rewards
        • EigenLayer Rewards
        • Symbiotic Rewards
  • 🎛️Vault Creation
    • Overview
      • Vault Configuration Guide
      • Vault Parameters
        • Byzantine Vault Parameters
        • Native Vault Parameters
        • EigenLayer Parameters
        • Symbiotic Parameters
      • Roles
    • Single Protocol Vaults
      • EigenLayer Vault
        • Eigen ERC20 Vault
        • Eigen Native Vault
      • Symbiotic Vault
        • Sym ERC20 Vault
        • Sym Native Vault
    • Cross Protocol Vaults
      • Eigen Layer / Symbiotic ERC20 Vault
  • 🤖Curation
    • Overview
    • Curator Related Roles
    • Vault Management
    • Strategy Management
      • EigenLayer Strategy
      • Symbiotic Strategy
      • Cross Protocol Vault
    • Curation Fee Management
  • 🌐Node operators
    • Operators in the Byzantine ecosystem
    • Register as a Staking Operator
    • Staking
    • Restaking Operator
      • Symbiotic
      • EigenLayer
      • Allocation to existing Restaking Operators
      • Creation of on-demand Restaking Operators
  • Claiming DV operator fees
Powered by GitBook
On this page
  • Keywords
  • Overview
  • Prerequisites
  • Integration Flow
  • Integration Steps
  • Installation
  • 1. Create and List Keys
  • 2. Operator Configuration and Registration
  • 3. Allocate and Register to Operator Set
  • Metadata Updates
  1. Node operators
  2. Restaking Operator

EigenLayer

PreviousSymbioticNextAllocation to existing Restaking Operators

Last updated 1 day ago

Keywords

  • : Operator Sets are groups responsible for securing an AVS (Autonomous Verifiable Service) and earning rewards. Each AVS defines one or more Operator Sets that operators can choose to join. By joining an Operator Set, operators take on the responsibility of securing the system and gain access to its rewards, as well as the risk of slashing penalties. (cf. )

  • : Number of blocks required for an Operator's allocation to become active in an Operator Set for a specific Strategy.

  • : Number of blocks between an operator's request to deallocate stake from an Operator Set for a strategy and the deallocation becoming effective.

  • : Magnitude tracks Operator's allocations within Operator Sets. It represents proportions of an Operator’s stake delegations for a particular Strategy. The initial value of the total magnitude is 1x1018.

Overview

This guide explains how operators can integrate with Byzantine's EigenLayer vaults. Operators are entities running infrastructure for decentralized networks within the EigenLayer ecosystem.

Prerequisites

  • An Ethereum account (EOA) or smart contract (e.g multisig) that will act as the operator

  • Understanding of the following EigenLayer contracts:

Contract
Holesky Address
Mainnet Address

DelegationManager

AllocationManager

Integration Flow

Integration Steps

Installation

System Requirements

  • Docker

  • Docker Compose

  • Linux Environment

Checking for requirements

To check if Docker is installed, run:

docker --version

CLI Installation

Install CLI using Binary

To install a binary inside the ~/bin directory for latest release, run:

curl -sSfL https://raw.githubusercontent.com/layr-labs/eigenlayer-cli/master/scripts/install.sh | sh -s

To download the binary in a custom location, run:

curl -sSfL https://raw.githubusercontent.com/layr-labs/eigenlayer-cli/master/scripts/install.sh | sh -s -- -b <custom_location>

Install CLI Using Go

To install the eigenlayer-CLI using Go, run:

go install github.com/Layr-Labs/eigenlayer-cli/cmd/eigenlayer@latest

Install CLI from Source

Requirements:

  • Go with a minimum version of 1.21

To generate the binary manually, download and compile the source code, run:

git clone https://github.com/Layr-Labs/eigenlayer-cli.git
cd eigenlayer-cli
mkdir -p build
go build -o build/eigenlayer cmd/eigenlayer/main.go

or if you have make installed, run:

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

System Requirements

  • Node.js (v14 or higher)

  • npm or yarn

  • TypeScript (optional but recommended)

Installation Steps

  1. Install the SDK

npm install @byzantine/operator-sdk
  1. Create Environment File Create a .env file in your project root:

RPC_URL=https://holesky.infura.io/v3/your_api_key_here

# Choose ONE of the following authentication methods:
MNEMONIC=your_wallet_mnemonic
# OR
PRIVATE_KEY=your_wallet_private_key_without_0x_prefix

DEFAULT_CHAIN_ID=17000  # 17000 for Holesky testnet, 1 for Ethereum Mainnet, 560048 for Hoodi Testnet
  1. Basic Setup

import { ByzOperatorClient } from "@byzantine/operator-sdk";
import { ethers } from "ethers";
import * as dotenv from "dotenv";

dotenv.config();

const provider = new ethers.JsonRpcProvider(process.env.RPC_URL);
const wallet = ethers.Wallet.fromPhrase(process.env.MNEMONIC).connect(provider);
// OR const wallet = new ethers.Wallet(process.env.PRIVATE_KEY).connect(provider);

const client = new ByzOperatorClient({
  chainId: 17000, // 17000 for Holesky, 1 for Mainnet, 560048 for Hoodi
  provider: provider,
  signer: wallet,
});

1. Create and List Keys

Creation of ECDSA and BLS keys is required when using the EigenLayer features.

The ECDSA keypair aligns with the operator's Ethereum address, allowing interaction with Eigenlayer. The BLS key, on the other hand, is used for attestations within the EigenLayer protocol and is required when registering an AVS.

Create and List Keys

Create Keys

To generate encrypted ECDSA and BLS keys, run:

eigenlayer operator keys create --key-type ecdsa [keyname]
eigenlayer operator keys create --key-type bls [keyname]

[keyname] - This will be the name of the created key file. It will be saved as <keyname>.ecdsa.key.json or <keyname>.bls.key.json.

This will prompt a password which you can use to encrypt the keys. Keys will be stored in a local disk and will be shown once keys are created. It will also show the private key only once, so that you can back it up in case you lose the password or key file.

Input Command

Run:

eigenlayer operator keys create --key-type ecdsa test

The tool is requesting a password to encrypt the ECDSA private key for security purposes. The password input is hidden for security reasons.

? Enter password to encrypt the ecdsa private key:
ECDSA Private Key (Hex):  b3eba201405d5b5f7aaa9adf6bb734dc6c0f448ef64dd39df80ca2d92fca6d7b
Please backup the above private key hex in safe place.

Key location: /home/ubuntu/.eigenlayer/operator_keys/test.ecdsa.key.json
Public Key hex:  f87ee475109c2943038b3c006b8a004ee17bebf3357d10d8f63ef202c5c28723906533dccfda5d76c1da0a9f05cc6d32085ca1af8aaab5a28171474b1ad0aa68
Ethereum Address 0x6a8c0D554a694899041E52a91B4EC3Ff23d8aBD5

Import Keys

To import an ECDSA key, run:

eigenlayer operator keys import --key-type ecdsa [keyname] [privatekey]

To import a BLS key, run:

eigenlayer operator keys import --key-type bls [keyname] [privatekey]
  • [keyname] is the name of the imported key file, and it will be saved as <keyname>.ecdsa.key.json or <keyname>.bls.key.json.

  • privatekey is the private key of the key you wish to import.

    • For BLS keys, it should be a large number.

    • For ECDSA keys, it should be in hex format.

Import command

To tell the EigenLayer tool that you want to import a key, run:

eigenlayer operator keys import --key-type ecdsa test 6842fb8f5fa574d0482818b8a825a15c4d68f542693197f2c2497e3562f335f6

Output

This is a prompt asking you to enter a password to encrypt the ECDSA private key.

? Enter password to encrypt the ecdsa private key: *******
ECDSA Private Key (Hex):  6842fb8f5fa574d0482818b8a825a15c4d68f542693197f2c2497e3562f335f6
Please backup the above private key hex in safe place.

Key location: /home/ubuntu/.eigenlayer/operator_keys/test.ecdsa.key.json
Public Key hex:  a30264c19cd7292d5153da9c9df58f81aced417e8587dd339021c45ee61f20d55f4c3d374d6f472d3a2c4382e2a9770db395d60756d3b3ea97e8c1f9013eb1bb
Ethereum Address 0x9F664973BF656d6077E66973c474cB58eD5E97E1

List Keys

To retrieve a list of the keys you have created with the EigenLayer cli tool, run:

eigenlayer operator keys list

Export keys

To see the private key of the existing keys, run:

eigenlayer operator keys export --key-type ecdsa [keyname]

This will only work if your keys are in default location (~/.eigenlayer/operator_keys).

If your keys is not in the default location, you can give the full path to the key file using --key-path flag. You don't need to provide the key name in that case.

eigenlayer operator keys export --key-type ecdsa --key-path [path]

Fund ECDSA Wallet

Send at least 1 ETH to the “address” field referenced in your operator.yaml file.

Coming soon...

2. Operator Configuration and Registration

Operators must register themselves as operators within the EigenLayer ecosystem.

Step 1: Create the config files needed for operator registration, run:

eigenlayer operator config create

When prompted for operator address, make sure your operator address is same as the ECDSA key address you created/imported in key creation steps.

The command will create two files: operator.yaml and metadata.json.

Step 2: Upload Logo Image, Configure metadata.json, and Upload Both

  • Upload the logo of the operator (only .png file within 1MB in size) to a publicly accessible location and set the url in your metadata.json file.

  • The metadata.json must be less than 4KB in size. Upload the file to a publicly accessible location and set that url in operator.yaml.

Step 3: Configure RPC Node:

The EigenLayer CLI requires access to an Ethereum RPC node in order to post registration.

Please find example lists of RPC node providers here:

Ensure that your Operator server can reach your RPC provider at this point. You may run the following command from your Operator server: curl -I [your_server_url]

Step 4: DelegationManager Contract Address

You must configure the correct DelegationManager contract address for your environment.

  • Set the value for el_delegation_manager_address in your operator config file to the address for your environment.

Optional: Set Delegation Approver

The EigenLayer Web App simulates transactions to check for contract reversions. If the delegate call will revert for any reason the button will be disabled.

Step 5: Registration Command

To register your operator, run:

eigenlayer operator register operator.yaml

ECDSA key is required for operator registration. You may choose to either:

Coming soon...

3. Allocate and Register to Operator Set

Before allocating for their first Operator Set, an Operator is required to set an ALLOCATION_DELAY in the AllocationManager. If an Operator is registering with EigenLayer for the first time, they will be required to provide an ALLOCATION_DELAY during registration. It takes the amount of time specified in the ALLOCATION_CONFIGURATION_DELAY for the Operator's ALLOCATION_DELAY to be set initially or updated. This delay is to ensure Stakers have time to adjust to changes in their delegated Operator’s stake allocations. Stakers can withdraw their funds if an allocation is viewed as undesirable, subject to the WITHDRAWAL_DELAY.

To Set the Allocation Delay, run:

eigenlayer operator allocations set-delay <flags> <allocation-delay>

To Set Allocations per Operator Set and Strategy, run:

eigenlayer operator allocations update 
	--network sepolia
	--operator-address <operator-address> 
	--csv-file updates.csv 
	--caller-address <address-of-caller>

Use the csv in the below format to set multiple allocations in one transaction, where update.csv will look like:

avs_address,operator_set_id,strategy_address,bips
0x2222AAC0C980Cc029624b7ff55B88Bc6F63C538f,2,0x4936BA8f0a04CcC2e49b8C9E42448c5cD04bF3f5,1200
0x2222AAC0C980Cc029624b7ff55B88Bc6F63C538f,1,0x4936BA8f0a04CcC2e49b8C9E42448c5cD04bF3f5,165

To view all your allocations, run:

eigenlayer operator allocations show 
	--network sepolia
	--operator-address <operator-address> 
	--strategy-addresses <comma-separated-strategy-addresses>

To register to Operator Set, run:

eigenlayer operator register-operator-sets 
	--operator-address <operator-address> 
	--avs-address <avs-service-manager-address> 
	--operator-set-ids <comma-separated-list-of-operator-set-ids>
	--caller-address <address-of-caller>

To de-register from Operator Sets, run:

eigenlayer operator deregister-operator-sets 
	--operator-address <operator-address> 
	--avs-address <avs-address> 
	--operator-set-ids <comma-separated-list-of-operator-set-ids>
	--caller-address <address-of-caller>

Coming soon...

Metadata Updates

Registered operators can update their metadata.

eigenlayer operator update operator.yaml

To update metadata URI:

eigenlayer operator update-metadata-uri operator.yaml

Coming soon...

Find the complete guide here:

Find the complete guide here:

Output

Find the complete guide here:

The name and description should comply with the regex mention . You can use services like to validate your fields.

Please note that a publicly accessible metadata url is required for successful registration. An example operator.yaml file is provided for your reference here: .

When using Github for hosting please ensure you link to the raw file (), rather than the github repo URL ().

Navigate to and locate the Proxy address for DelegationManager for your environment (Mainnet, Testnet).

Operators have the option to set when they register. If the delegationApprover is set to a nonzero value, then the delegationApprover address will be required sign its approval of new delegations from Stakers to this Operator. If the default value is left as the zero address (0x000...) then all new delegations will be automatically approved without the need for any signature. Please see for more detail.

your own set of keys using the EigenLayer CLI (if you have not previously created keys).

your existing keys (if you have previously created keys).

Find the complete guide here:

This is the command you can use to make changes or updates to the metadata of your operator. Post v0.9.0, this command will not update metadata uri. Please use command to update it.

🌐
Operator Sets
code
Allocation Delay
Deallocation Delay
Magnitudes
DelegationManager
AllocationManage
https://docs.eigenlayer.xyz/operators/howto/operator-installation
https://docs.eigenlayer.xyz/operators/howto/operator-installation#create-and-list-keys
​
https://docs.eigenlayer.xyz/operators/howto/operator-installation#operator-configuration-and-registration
here
https://regex101.com/
operator.yaml
example
example
https://chainlist.org/
https://www.alchemy.com/list-of/rpc-node-providers-on-ethereum
EigenLayer Contracts: Deployments
delegationApprover
delegationApprover Design Patterns
create
import
https://docs.eigenlayer.xyz/operators/howto/operator-sets
below
0xA44151489861Fe9e3055d95adC98FbD462B948e7
0x78469728304326CBc65f8f95FA756B0B73164462
0x78469728304326CBc65f8f95FA756B0B73164462
0x948a420b8CC1d6BFd0B6087C2E7c344a2CD0bc39