Development and Deployment

This page provides guidance for developers working on or deploying the EigenLayer-AVS system.

This page provides guidance for developers working on or deploying the EigenLayer-AVS system. It covers the development environment setup, build process, deployment options, and CI/CD pipeline. For specific configuration details, see Configuration. For testing information, see Testing.

Development Environment Setup#

Prerequisites#

Before working with the EigenLayer-AVS codebase, ensure you have the following prerequisites installed:

  • Go 1.24 - The project uses Go 1.24 as specified in the workflow files and go.mod
  • Git - For version control and accessing the repository
  • Docker (optional) - For containerized development and deployment

Sources:

Repository Structure#

The EigenLayer-AVS repository is organized to separate core functionality, contracts, and deployment configurations:

Sources:

Building the Software#

Local Build#

To build the software locally:

  1. Clone the repository
  2. Navigate to the project root directory
  3. Build using the Go build command:

The build command includes version information via ldflags, which is used by the version command.

Sources:

Versioning#

The system uses semantic versioning, which is incorporated into the binary during the build process. The version can be displayed using:

Version information is set during the build process using ldflags and stored in the version package.

Sources:

Deployment Options#

Docker Deployment#

The recommended method for deploying EigenLayer-AVS is using Docker containers, which ensures consistency across different environments.

The project includes Dockerfile configurations in the dockerfiles directory. The main operator Dockerfile is used in the CI/CD pipeline to create releases.

Sources:

Multi-Architecture Support#

The release process builds binaries for multiple architectures to support deployment on various platforms:

ArchitectureOperating SystemBinary Name Format
amd64Linuxap-avs-linux-amd64
arm64Linuxap-avs-linux-arm64
amd64macOS (Darwin)ap-avs-darwin-amd64
arm64macOS (Darwin)ap-avs-darwin-arm64

Docker images are also built for multiple platforms (linux/amd64, linux/arm64) to support deployment on various server architectures.

Sources:

Configuration#

Configuration File Structure#

The system uses YAML configuration files for setting up various components. Configuration is loaded from a specified path and parsed into Go structures.

For detailed information about configuration options, refer to the Configuration page.

Sources:

CI/CD Pipeline#

Automated Workflows#

The EigenLayer-AVS project uses GitHub Actions to automate testing, building, and deployment. The workflow is triggered on specific events, such as pushes to the repository and tag creation.

Sources:

Release Process#

The release process is automated via GitHub Actions and is triggered when a tag matching the pattern v* is pushed to the repository. The workflow:

  1. Builds Docker images for multiple architectures (amd64, arm64)
  2. Creates binary releases for different operating systems and architectures
  3. Generates release notes from git commit messages
  4. Creates a draft GitHub release with the binaries attached

To create a new release:

  1. Tag the desired commit with a version following semantic versioning (e.g., v1.0.0)
  2. Push the tag to the repository
  3. The workflow will automatically build and publish the release

Sources:

Development Builds#

For development and testing purposes, a separate workflow creates development builds on each push to the repository:

  1. Code is automatically formatted using gofmt
  2. A development Docker image is built and tagged with the commit SHA
  3. The image is pushed to Docker Hub with the avs-dev repository

This allows for continuous testing of changes before creating an official release.

Sources:

Running in Production#

For production deployments, consider the following best practices:

  1. Data Persistence: Configure the backup system to regularly back up data

  2. Security:

    • Use secure private keys and never share them
    • Configure proper JWT secrets for authentication
    • Consider using a secure secret management system
  3. Monitoring: Enable metrics collection for monitoring system health

  4. Resource Requirements:

    • Minimum: 2 CPU cores, 4GB RAM
    • Recommended: 4 CPU cores, 8GB RAM, SSD storage

Sources:

Troubleshooting#

Common issues and their solutions:

IssuePossible Solution
Configuration not loadingVerify file path and format (YAML)
Connection to Ethereum nodes failingCheck network connectivity and RPC URL configuration
Database errorsEnsure the database directory is writable and has sufficient space
Build failuresVerify Go version (1.24) and dependencies

For any persistent issues, please refer to the GitHub repository issues section or contact the development team.

Sources:

Feature this wiki to auto refresh weekly

Try DeepWiki on your private codebase with Devin