Setup Aligned Infrastructure Locally

Aligned Infrastructure Deployment Guide

Dependencies

Ensure you have the following installed:

After installing foundryup, you need to install a specific Foundry version:

foundryup -i v1.1.0

Then run:

make deps

This will:

  • Initialize git submodules

  • Install: eigenlayer-cli, zap-pretty and abigen

  • Build ffis for your os.

Contracts and eth node

To start anvil, a local Ethereum devnet with all necessary contracts already deployed and ready to be interacted with, run:

More information on deploying the smart contracts on anvil:

EigenLayer Contracts

If EigenLayer contracts change, the anvil state needs to be updated with:

This also deploys an ERC20 token with a strategy that can be used to test the EigenLayer restaking.

Aligned Contracts

When changing Aligned contracts, the anvil state needs to be updated with:

Note that when changing the contracts, you must also re-generate the Go smart contract bindings:

Aggregator

To start the Aggregator:

or with a custom config:

Operator

To setup an Operator run:

or with a custom config:

Different configs for operators can be found in config-files/config-operator.

More information about Operator registration:

If you wish to only register an operator you can run:

and to start it once it has been registered:

Batcher

To start the Batcher locally:

This starts a localstack to act as a replacement for S3.

If you want to use the batcher under a real S3 connection you'll need to specify the environment variables under crates/batcher/.env and then run:


Other components

Aligned also counts with 2 external components, which are not necessary for Aligned to work, but are useful for observability.

Explorer

Dependencies

Ensure you have the following installed:

After installing the necessary deps, setup the environment variables by running:

Then start the explorer:

This will:

  • Start a postgres docker container

  • Run ecto setup

  • Start the explorer on http://localhost:4000.

Clean, dump and recover DB

To clear the DB, you can run:

If you need to dump the data from the DB, you can run:

This will create a dump.$date.sql SQL script on the explorer directory with all the existing data.

Data can be recovered from a dump.$date.sql using the following command:

Then you'll be requested to enter the file name of the dump you want to recover already positioned in the /explorer directory.

This will update your database with the dumped database data.

Fetching batches and operators data

If you want to fetch past batches that for any reason were not inserted into the DB, you will first need to make sure you have the ELIXIR_HOSTNAME in the .env file.

You can get the hostname of your elixir by running:

Then you can run:

To get operators strategies and restakes data:

Metrics/Telemetry

The Metrics and Telemetry are used to view more in-depth information about the network. With it, you can visualize all sort of cumulative and historical metrics of the network, of the individual components and their behaviors. Tese services are not necessary to run aligned, though you will see warnings in the rest of components as they won't be able to connect and send their status.

Dependencies

Ensure you have the following installed:

Metrics service

To run Prometheus and Grafana, run:

This will start containers for Prometheus and Grafana. You can access Grafana on http://localhost:3000 with the default credentials admin:admin.

Alternately, you can access the raw scrapped metrics collected with Prometheus on http://localhost:9091/metrics.

Telemetry service

To setup the telemetry service run:

If it is your first time first you'll need to execute the following commands:

Then, to start the service:

This will:

  • Start OpenTelemetry and Jaeger containers for the traces: available at http://localhost:16686/

  • Start telemetry server: available at http://localhost:4001/


Send test proofs

To send proofs quickly you can run any of the targets that have the prefix batcher_send for example:

Send a single plonk proof:

Send a burst of <N> risc0 proofs:

Send an infinite stream of groth_16 proofs:

Feel free to explore the rest of targets.


Last updated