Introduction#

As a part of the restaked rollup framework, AltLayer is facilitating the launch of several fast finality Actively Validated Services (AVSes) called MACH for different rollups. As a fast finality AVS, MACH offers the following core services to end users on these rollups:

  1. Fast confirmation for rollup transactions,

  2. Crypto-economic security to detect any malicious network participants,

  3. Decentralized validation of rollup states.

DODOchain MACH AVS for DODO Chain#

DODOchain MACH is a fast finality AVS that serves the DODOchain.

DODOchain is an Omni-Trading Layer3, powered by the integration of Arbitrum, EigenLayer, and AltLayer. As a rollup-level liquidity layer, it connects Ethereum rollups and Bitcoin networks, consolidating liquidity into a single platform for seamless cross-chain trading.

Operator Guide#

Minimal system requirements#

  • 4 CPU
  • 16GB Memory
  • 500GB SSD
  • Ubuntu 22.04 LTS
  • Docker v24 and above
  • EigenLayer CLI

Minimal stake requirements#

For smooth onboarding of operators, we will set the initial stake requirement to be 0.

Supported token strategy#

Beacon Chain Ether and all LSTs supported by EigenLayer are supported by our AVS.

Operator setup#

Key generation and wallet funding

  1. Follow EigenLayer guide and install EigenLayer CLI.
  2. Generate ECDSA and BLS keypair using the following command:
eigenlayer operator keys create --key-type ecdsa [keyname]
eigenlayer operator keys create --key-type bls [keyname]

💡Please ensure you backup your private keys to a safe location. By default, the encrypted keys will be stored in ~/.eigenlayer/operator_keys/. 3. Fund at least 0.3 ETH to the ECDSA address generated. It will be required for node registration in the later steps. 4. Submit the ECDSA address via MACH AVS interest form.

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.

  1. 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
  1. Edit metadata.json and fill in your operator's details.

    {
      "name": "Example Operator",
      "website": "https://example.com/",
      "description": "Example description",
      "logo": "https://example.com/logo.png",
      "twitter": "https://twitter.com/example"
    }
  2. 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 gist and get the raw URL.

  3. If this is your first time registering this operator, run the following command to register and update your operator: sh eigenlayer operator register operator.yaml
    Upon successful registration, you should see
    ✅ Operator is registered successfully to EigenLayer.

    If you need to edit the metadata in the future, simply update metadata.json and run the following command: eigenlayer operator update operator.yaml

  4. After your operator has been registered, it will be reflected on the EigenLayer operator page.
    Testnet: https://holesky.eigenlayer.xyz/operator
    Maiinnet: https://app.eigenlayer.xyz/operator

You can also check the operator registration status using the following command.

eigenlayer operator status operator.yaml

Joining MACH AVS#

Training wheels AltLayer Mach AVS will initially launch in operator allowlist mode. Interested operators can register their interest with us using this form: https://forms.gle/82CRnjBmZz8GaZnK8

Mach AVS Setup#

Clone the Mach AVS repository#

Run the following command to clone the MACH AVS operator repository and change directory to DODOchain MACH AVS mainnet config.

❗️ DODOchain MACH mainnet AVS will initially provide service to DODOchain testnet. Once DODOchain goes mainnet, DODOchain MACH mainnet AVS will switch over to DODOchain mainnet.

git clone https://github.com/alt-research/mach-avs-operator-setup.git
cd mach-avs-operator-setup/ethereum/mach-avs/dodochain-testnet
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

  1. 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.

  2. 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 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. Alternatively, you can reach out to the AltLayer team members on the Slack working group for instructions on how to host your own RPC node.

If you encounter rate limits on public endpoints, we recommend that you use managed RPC services such as Infura, Alchemy, or QuickNode

If you wish to update L1 or Rollup RPC,

Navigate to /chain-config/mach-config.toml

Locate the fetcher and l1-fetcher. Look for the variable url and l1_url. Replace the value with your endpoint.

Running MACH AVS#

To run MACH AVS, you may launch it using docker compose.

docker compose pull --policy always
docker compose pull
docker compose up -d

To tear down the container

docker compose down

If you want to enable monitoring, run the following

docker compose --profile monitoring up

If you want to stop the monitoring:

docker compose --profile monitoring down

When using the monitoring profile, you may wish to add grafana to monitor the service, the default port is 1300 can access via localhost:13000.

Frequently ask questions#

  1. 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"}
  1. Who is running the aggregator and doing 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.

  1. How do I know when I do not meet sufficient minimal stake requirements during registration? You will encounter

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
  1. Will there be token rewards?

There will be rewards for mainnet MACH AVS in the future. More details will be announced in the future.

  1. 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.

User Delegation Guide#

We invite delegators to restake ETH or other assets to help secure DODOchain MACH AVS. This post presents a guide that will walk you through the process of delegating assets to DODOchain MACH.

Restake your token#

Step 0: Acquire Beacon Chain ETH, or supported LSTs.

Step 1: Head over to EigenLayer’s web application at https://app.eigenlayer.xyz/ and connect your Web3 wallet.

Step 2: In the dashboard, click “Restake Your Tokens”.

delegate00.png

Step 3: You will now see the different restaking assets supported by EigenLayer. Select the assets that you have acquired in Step 0.

delegate01.png

Step 4: Input the amount of tokens you would like to restake, click “Deposit” and confirm the transaction in your wallet.

delegate02.png

At this point, you will have successfully restaked your assets via EigenLayer contracts. The next steps will allow you to delegate these restaked assets to DODOchain MACH AVS. Delegation is a way to allocate your assets to a given AVS and a given operator serving that AVS.

Delegating to an Operator running DODOchain MACH AVS#

Step 1: Navigate to the AVS tab on top of the web application at https://app.eigenlayer.xyz/.

Step 2: Search for and select the DODOchain MACH AVS card. Once you are on the DODOchain MACH AVS information page, scroll down to the section titled “Operators running DODOchain Mach AVS”. Select the operator you would like to delegate to:

Step 3: Click Delegate and confirm the transaction in your wallet and you are done!

delegate04.png

With these simple steps, you have successfully delegated your assets to DODOchain MACH AVS via an operator of your choice.

To close off, please take note of the following delegation caveats:

  • Stakers can only delegate to a single operator at any given time.
  • Delegation is an "all or nothing" operation. You must delegate all of your available Restaked balance to a single operator.
  • Delegation is not possible for Native Restakers while their validators are in the activation (aka entry) queue. Native Restaked tokens must be fully Restaked and proven on-chain before they can be delegated.
  • If you have already delegated your stake to an operator in any quorum, all new stakes will be delegated to the same operator automatically.
  • If the delegated operator is no longer in the active set of an AVS (such as due to Churning in EigenDA for example), the restaker has the option to redelegate their TVL balance to another Operator. Please see the Undelegate from an Operator and Initiate Withdrawal page for specific instructions.