π‘ Please ensure you backup your private keys to a safe location. By default, the encrypted keys will be stored in ~/.eigenlayer/operator_keys/
Fund at least 0.3 ETH to the ECDSA address generated. It will be required for node registration in the later steps.
Register on EigenLayer as an operator
π‘ You may skip the following steps if you are already a registered operator on the EigenLayer testnet and mainnet.
You will need to do it once for testnet and once for mainnet.
Create the configuration files needed for operator registration using the following commands. Follow the step-by-step prompt. Once completed, operator.yaml and metadata.json will be created.
eigenlayer operator config create
Edit metadata.json and fill in your operator's details.
Inside this repository, we have configurations for various MACH AVS. Select the AVS you would like to run
π‘ You can be an operator of different MACH AVS. Repeat the following steps for each MACH AVS
Change the directory to the network and MACH AVS you would like to run
cd mach-avs-operator-setup/ethereum/mach-avs/xterio
Opt-in and out of MACH AVS
For opt-in and out, copy the following env
cp .env.opt-example .env.opt
Update the TODO sections in the .env.opt
###############################################################################
####### TODO: Operators please update below values for your node ##############
###############################################################################
# TODO: Set the metadata url for operator
METADATA_URI=https://path/to/metadata.json
# TODO: Operators need to update this to their own paths
USER_HOME=${HOME}
EIGENLAYER_HOME=${USER_HOME}/.eigenlayer
# TODO: Operators need to update this to their own keys
NODE_ECDSA_KEY_FILE_HOST=${EIGENLAYER_HOME}/operator_keys/opr.ecdsa.key.json
NODE_BLS_KEY_FILE_HOST=${EIGENLAYER_HOME}/operator_keys/opr.bls.key.json
# TODO: Operators need to add password to decrypt the above keys
# If your password contain space, / or $, please use single quote to
# encapsulate your password e.g 'mypassword /$'
OPERATOR_BLS_KEY_PASSWORD=
OPERATOR_ECDSA_KEY_PASSWORD=
To opt-in
π‘ Before you opt-in to MACH AVS, please ensure that
You have the right infrastructure (e.g., cloud hosting) to keep the operator up and running. Non-performing AVS operators may be subjected to ejection out of MACH AVS.
You have already been whitelisted as an operator for MACH AVS.
./run.sh opt-in
If you no longer want to run the AVS, you can opt out by running
./run.sh opt-out
π‘ It may take a few minutes for EigenLayer AVS and the operator page to be updated. This is an automatic process.
Running MACH AVS
Create the environment file
cp .env.example .env
Configuring MACH AVS operator
Update the TODO sections in the .env
π‘ The default path where your generated keys are stored in ~/.eigenlayer/operator_keys/
###############################################################################
####### TODO: Operators please update below values for your node ##############
###############################################################################
# TODO: Operators need to update this to their own paths
USER_HOME=${HOME}
EIGENLAYER_HOME=${USER_HOME}/.eigenlayer
# TODO: Operators need to set it ecdsa address
# can got by `eigenlayer operator keys list`, the address is in `Key Type: ECDSA`
OPERATOR_ECDSA_ADDRESS=
# TODO: Operators need to update this to their own keys
NODE_BLS_KEY_FILE_HOST=${EIGENLAYER_HOME}/operator_keys/opr.bls.key.json
# TODO: Operators need to add password to decrypt the above keys
# If your password contain space, / or $, please use single quote to
# encapsulate your password e.g 'mypassword /$'
OPERATOR_BLS_KEY_PASSWORD=
Configuring rollup endpoint
We have pre-configured mach-config.toml with RPC hosted by AltLayer. Alternately, you can reach out to the AltLayer team members on the Slack working group for instruction on how to host your own RPC node.
Running MACH AVS
To run MACH AVS, you may launch it using docker compose.
docker compose pull
docker compose up -d
Helm chart
Facing issues?
Please feel free to reach out to us via the Slack working group.
Frequently ask questions
How do I know whether my operator is running?
First, check whether your operator docker container is running, by running docker compose ps.
docker compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
mach-avs-operator-node public.ecr.aws/altlayer/mach-operator:latest "operator" mach-operator-node 33 seconds ago Up 32 seconds 0.0.0.0:9092->9092/tcp, :::9092->9092/tcp
mach-avs-operator-verifier public.ecr.aws/altlayer/mach:latest "/usr/local/bin/op-mβ¦" mach-operator-verifier 33 seconds ago Up 32 seconds 0.0.0.0:9094->9094/tcp, :::9094->9094/tcp, 9715/tcp
mach-avs-reverse-proxy-1 nginx:latest "/docker-entrypoint.β¦" reverse-proxy 33 seconds ago Up 32 seconds 80/tcp, 0.0.0.0:9091->9091/tcp, :::9091->9091/tcp
Next, you can check the logs to see whether the services has been started or not
2024-04-01T17:04:29.613Z INFO logging/zap_logger.go:49 Start operator {"address": "0xAD6B95793DD4D2b8e184FB4666D1cfb14871A035"}
2024-04-01T17:04:29.956Z INFO logging/zap_logger.go:69 Starting operator.
2024-04-01T17:04:29.956Z INFO logging/zap_logger.go:69 Starting node api server at address 0.0.0.0:9091
2024-04-01T17:04:29.956Z INFO logging/zap_logger.go:69 Starting metrics server at port 0.0.0.0:9092
2024-04-01T17:04:29.956Z INFO logging/zap_logger.go:49 start rpc server for got alert
2024-04-01T17:04:29.957Z INFO logging/zap_logger.go:49 node api server running {"addr": "0.0.0.0:9091"}
Finally, to determine whether your AVS is actively validating the target rollup, you can look for logs of the verifier container to see whether there is block validation activities
docker logs <name of container>
[2024-04-01T17:06:28Z INFO actor::scheduler] Validate block #166853(0x7ddde84c28da088639bb699a8982e206ca4aea4031fe37b2aa9c69fd23bac940) passed
[2024-04-01T17:06:32Z INFO actor::block-fetcher] Finalized block #166666(0x747828ae5886e1c254462ab586a32ac2fd69f93c06af8b339819160997de3879)
[2024-04-01T17:06:32Z INFO actor::block-fetcher] Latest block #166853(0x7ddde84c28da088639bb699a8982e206ca4aea4031fe37b2aa9c69fd23bac940)
[2024-04-01T17:06:36Z INFO actor::block-fetcher] Finalized block #166666(0x747828ae5886e1c254462ab586a32ac2fd69f93c06af8b339819160997de3879)
[2024-04-01T17:06:37Z INFO actor::block-fetcher] Latest block #166854(0x6f3029b754134107c4e341e1d37a4be99709b1781ba281a7d8483b5dc63b1dbb)
[2024-04-01T17:06:37Z INFO actor::scheduler] Pre validate block #166854(0x6f3029b754134107c4e341e1d37a4be99709b1781ba281a7d8483b5dc63b1dbb) passed
[2024-04-01T17:06:37Z INFO actor::scheduler] There are 1 block validation tasks waiting for result
[2024-04-01T17:06:37Z INFO actor::scheduler] Validate block #166854(0x6f3029b754134107c4e341e1d37a4be99709b1781ba281a7d8483b5dc63b1dbb) passed
[2024-04-01T17:06:41Z INFO actor::block-fetcher] Finalized block #166666(0x747828ae5886e1c254462ab586a32ac2fd69f93c06af8b339819160997de3879)
[2024-04-01T17:06:41Z INFO actor::block-fetcher] Latest block #166854(0x6f3029b754134107c4e341e1d37a4be99709b1781ba281a7d8483b5dc63b1dbb)
[2024-04-01T17:06:46Z INFO actor::block-fetcher] Finalized block #166666(0x747828ae5886e1c254462ab586a32ac2fd69f93c06af8b339819160997de3879)
[2024-04-01T17:06:46Z INFO actor::block-fetcher] Latest block #166855(0x07fbc09cf59e93b965c471153d4fabbff38ed0f72a7a2da43a141861b500fea1)
[2024-04-01T17:06:46Z INFO actor::scheduler] Pre validate block #166855(0x07fbc09cf59e93b965c471153d4fabbff38ed0f72a7a2da43a141861b500fea1) passed
[2024-04-01T17:06:46Z INFO actor::scheduler] There are 1 block validation tasks waiting for result
[2024-04-01T17:06:46Z INFO actor::scheduler] Validate block #166855(0x07fbc09cf59e93b965c471153d4fabbff38ed0f72a7a2da43a141861b500fea1) passed
Who is running the aggregator and doing the BLS signature aggregator?
AltLayer will provide an aggregator to which your MACH AVS can connect and submit the signatures for aggregation. The aggregator endpoint has been pre-configured in the configuration file.
How do I know when I do not meet the sufficient minimal stake requirements during registration? You will encounter execution reverted: StakeRegistry.registerOperator: Operator does not meet minimum stake
2024-04-02T19:05:40.535Z INFO logging/zap_logger.go:49 registering operator with the AVS's registry coordinator {"avs-service-manager": "0xAE9a4497dee2540DaF489BeddB0706128a99ec63", "operator": "0x44220295991E4Fe4f3A4C5FE04E96B1b19960766", "quorumNumbers": "AA=="}
2024-04-02T19:05:42.162Z ERROR logging/zap_logger.go:57 Unable to register operator with avs registry coordinator {"error": "execution reverted: StakeRegistry.registerOperator: Operator does not meet minimum stake requirement for quorum"}
github.com/Layr-Labs/eigensdk-go/logging.(*ZapLogger).Error
Will there be token rewards?
There will be rewards for mainnet MACH AVS in the future. More details will be announced in the future.
Xterio MACH AVS - XTER tokens
I am unable to opt in and encounter Unable to register operator with avs registry coordinator
Please check that your ECDSA address is sufficiently funded. We recommend maintaining at least 0.3 ETH to ensure you have sufficient gas tokens for AVS registering, opt-in, and de-registering operations.
Follow and Install EigenLayer CLI
Please submit the ECDSA address via MACH AVS interest form .
Upload metadata.json to a public URL. Then update the operator.yaml file with the url (metadata_url). If you need hosting service to host the metadata, you can consider uploading the metadata and get the raw url.
Testnet:
Mainnet:
π‘ Training wheels Xterio Mach AVS will initially launch in operator allowlist mode. Interested operators can register their interest with us using this form:
Run the following command to clone the
To run MACH AVS within your Kubernetes cluster, use the reference Helm chart available in the MACH AVS Operator Setup repository. You can find the Helm chart at the following link: .