make build
./avs-cli
- Ethereum RPC endpoint to send transactions.
You will be assigned an operatorID and an operator smart contract that is registered with eigenlayer
operatorId
: AVS operator ID assigned by ether.fi team.operatorAddress
: Eigenlayer operator address, which is managed by ether.fi team.
- Aligned Layer
- AltLayer MACH
- ARPA
- Automata Multi-Prover
- Brevis
- Cyber MACH
- EigenDA
- eOracle
- gasp
- Hyperlane
- Lagrange State Committees
- Lagrange ZK Coprocessor
- Openlayer
- Predicate
- Ungate
- UniFi
- Witness Chain
-
generate a new BLS keystore using the eigenlayer tooling https://docs.eigenlayer.xyz/eigenlayer/operator-guides/operator-installation#create-keys
-
Determine which
quorums
andsocket
you wish to register for -
Sign digest establishing ownership of your newly generated BLS key
./avs-cli alignedlayer prepare-registration --operator-id {operator_id} --bls-keystore {path_to_keystore} --bls-password {password} --quorums {quorums} --socket {socket}
-
Send the result of the previous command to the ether.fi team via
[email protected]
-
Wait for confirmation from the ether.fi team that your registration is complete
-
Proceed to run the node software
-
Receive prepared registration json file from target node operator
-
Register the operator contract
./avs-cli alignedlayer register --registration-input input.json // submit resulting output as a gnosis TX via AVS admin gnosis
-
generate a new BLS keystore using the eigenlayer tooling https://docs.eigenlayer.xyz/eigenlayer/operator-guides/operator-installation#create-keys
-
Determine which
quorums
andsocket
you wish to register for -
Sign digest establishing ownership of your newly generated BLS key
./avs-cli gasp prepare-registration --operator-id {operator_id} --bls-keystore {path_to_keystore} --bls-password {password} --quorums {quorums} --socket {socket}
-
Send the result of the previous command to the ether.fi team via
[email protected]
-
Wait for confirmation from the ether.fi team that your registration is complete
-
Proceed to run the node software
-
Receive prepared registration json file from target node operator
-
Register the operator contract
./avs-cli gasp register --registration-input input.json // submit resulting output as a gnosis TX via AVS admin gnosis
-
Generate a new ECDSA key using EigenLayer CLI and note the address of the key you generated
-
Run the following command and send the output to the ether.fi team via
[email protected]
./avs-cli predicate prepare-registration --operator-id {operator_id} --avs-signer {address_of_generated_ecdsa_key}
-
Wait for confirmation from the ether.fi team that your registration is complete
-
Proceed to run the hyperlane node software
-
Receive prepared registration json file from target node operator
-
Register the operator contract
./avs-cli predicate register --registration-input input.json // submit resulting output as a gnosis TX via AVS admin gnosis
- generate a bls key and signature using Othentic's tooling https://github.com/Othentic-Labs/othentic-eip1271-operator-registration-script?tab=readme-ov-file#generate-avs-bls-public-key--auth-signature
- Send the resulting json artifact from the previous command to the ether.fi team via
[email protected]
- Wait for confirmation from the ether.fi team that your registration is complete
- Proceed to run the node software
-
Receive prepared registration json file from target node operator
-
Register the operator contract
./avs-cli alignedlayer register --registration-input input.json // submit resulting output as a gnosis TX via AVS admin gnosis
In order to run the witnesschain node software you will need to register a watchtower on both mainnet and their L2
-
Generate a new ECDSA keypair that will be associated with a witness chain "Watchtower"
-
Sign required inputs for registering watchtower
// Expose the private key generated above as an environment variable "WATCHTOWER_PRIVATE_KEY" // Sign ./avs-cli witness-chain prepare-registration --rpc-url $RPC_URL --operator-id {operator_id}
-
Send the json output of the above command to
[email protected]
-
Wait for confirmation from ether.fi team that L1 registration is complete
-
Proceed to L2 watchtower registration below
Generate a separate ECDSA key you control for the value of operator_private_key
, and request the witnesschain team to whitelist this address on their L2.
Be sure to explicitly set "eth_rpc_url": ""
(set it to empty value) in your config file so that the cli only registers the watchtower on the L2
- Notify the ether.fi team that you have completed registration and begin to run witnesschain node software.
Please use the same value as
operator_private_key
in your L1 + L2 config files.
-
Request WitnessChain team to whitelist target Operator contract
-
Receive prepared registration json file from target node operator
-
Register the operator contract with witness chain
./avs-cli witness-chain register --registration-input witness-input.json --rpc-url $RPC_URL // submit resulting output as a gnosis TX via AVS admin gnosis
-
Register the watchtower on L1
./avs-cli witness-chain register-watchtower --registration-input witness-input.json // submit resulting output as a gnosis TX via AVS admin gnosis
-
Generate a new key via the lagrange tooling https://docs.lagrange.dev/zk-coprocessor/avs-operators/registration#lagrange-network-avs-key Be sure to save the
public_key
hex string that will be returned as part of the above command -
Run the following command and send the output to the ether.fi team via
[email protected]
./avs-cli lagrangeZK prepare-registration --operator-id {operator_id} --pubkey {pubkey_hex}
-
Wait for confirmation from the ether.fi team that your registration is complete
-
Proceed to run the lagrange zk coprocessor node software
-
Recieve prepared registration json file from target node operator
-
Ensure target operator contract is whitelisted by lagrange team (Whitelisting was requested for operators 1-12)
-
Register the operator contract with lagrange ZK Coprocessor
./avs-cli lagrangeZK register --registration-input lagrangeZK-input.json // submit resulting output as a gnosis TX via AVS admin gnosis
-
Generate a new BLS and ECSDA key via the lagrange tooling https://docs.lagrange.dev/state-committees/run-node/commands
-
Run the following command and send the output to the ether.fi team via
[email protected]
./avs-cli lagrangeSC prepare-registration --operator-id {operator_id} --bls-keystore {path_to_keystore} --bls-password {encryption_password} --signer-address {address_of_generated_ecdsa_key}
-
Wait for confirmation from the ether.fi team that your registration is complete
-
Proceed to run the lagrange state committee node software
-
Recieve prepared registration json file from target node operator
-
Ensure target operator contract is whitelisted by lagrange team (Whitelisting was requested for operators 1-12)
-
Register the operator contract with lagrange state committees
./avs-cli lagrangeSC register --registration-input lagrangeSC-input.json // submit resulting output as a gnosis TX via AVS admin gnosis
-
Subscribe the operator to target chains so that the operator can recieve workloads
./avs-cli lagrangeSC subscribe --registration-input lagrangeSC-input.json // submit resulting output as a gnosis TX via AVS admin gnosis
-
generate a new BLS keystore using the eigenlayer tooling https://docs.eigenlayer.xyz/eigenlayer/operator-guides/operator-installation#create-keys
-
Determine which
quorums
andsocket
you wish to register for -
Sign digest establishing ownership of your newly generated BLS key
./avs-cli eigenda prepare-registration --operator-id {operator_id} --bls-keystore {path_to_keystore} --bls-password {password} --quorums {0,1} --socket {socket}
-
Send the result of the previous command to the ether.fi team via
[email protected]
-
Wait for confirmation from the ether.fi team that your registration is complete
-
Proceed to run the eigenDA node software
-
Receive prepared registration json file from target node operator
-
Register the operator contract with eigenda
./avs-cli eigenda register --registration-input eigenda-input.json // submit resulting output as a gnosis TX via AVS admin gnosis
-
generate a new BLS keystore using the eigenlayer tooling https://docs.eigenlayer.xyz/eigenlayer/operator-guides/operator-installation#create-keys
-
Determine which
quorums
andsocket
you wish to register for -
Sign digest establishing ownership of your newly generated BLS key
./avs-cli brevis prepare-registration --operator-id {operator_id} --bls-keystore {path_to_keystore} --bls-password {password} --quorums {0,1} --socket {socket}
-
Send the result of the previous command to the ether.fi team via
[email protected]
-
Wait for confirmation from the ether.fi team that your registration is complete
-
Proceed to run the brevis node software
-
Receive prepared registration json file from target node operator
-
Brevis operates with a strict limit on operator numbers. Prior to registering a new operator, you must organize a time with the brevis team where they will briefly update the limits. After you get confirmation that they have updated the limits, immediately perform the below registration
-
Register the operator contract with brevis
./avs-cli brevis register --registration-input brevis-input.json // submit resulting output as a gnosis TX via AVS admin gnosis
-
generate and encrypt a new BLS keystore using the eOracle tooling https://eoracle.gitbook.io/eoracle/operators/registration#generate-a-bls-pair-recommended
-
generate a new ECDSA key pair to serve as your
aliasAddress
-
Sign digest establishing ownership of your newly generated BLS key
./avs-cli eoracle prepare-registration --operator-id {my_operator_id} --bls-keystore {path_to_keystore} --bls-password {keystore_password} --alias-address {alias_address}
-
Send the result of the previous command to the ether.fi team via
[email protected]
-
Wait for confirmation from the ether.fi team that your registration is complete
-
Proceed to run the eigenda node software
-
Receive prepared registration json file from target node operator
-
Register the operator contract with eoracle
./avs-cli eoracle register --registration-input eoracle-input.json // submit resulting output as a gnosis TX via AVS admin gnosis
-
Ask the eOracle team to manually set the alias address from the input to be associated with the target operator
-
Once the eOracle has confirmed set the alias address, you may proceed to tell the node operator to begin running the node software
-
generate and encrypt a BLS keystore using the EigenLayer CLI
-
Determine which
quorums
andsocket
you wish to register for -
Sign digest establishing ownership of your newly generated BLS key
./avs-cli altlayer prepare-registration --operator-id {operator_id} --bls-keystore {path_to_keystore} --bls-password {password} --quorums {0,1} --socket {socket}
-
Send the result of the previous command to the ether.fi team via
[email protected]
-
Wait for confirmation from the ether.fi team that your registration is complete
-
Follow the AltLayer Operator Guide skipping the
Opt-in and out of MACH AVS
sections. TheOpt-in
was already handling by the steps above. TheOPERATOR_ECDSA_ADDRESS
isecdsaSigner
of ether.fi operator contract you are registering with.
-
Receive prepared registration json file from target node operator
-
Register the operator contract with altlayer
./avs-cli altlayer register --registration-input input.json // submit resulting output as a gnosis TX via AVS admin gnosis
-
generate an encrypted BLS key and ECDSA key as described here
-
Determine which
quorums
andsocket
you wish to register for -
Sign digest establishing ownership of your newly generated BLS key
./avs-cli cybermach prepare-registration --operator-id {operator_id} --bls-keystore {path_to_keystore} --bls-password {password} --quorums {0} --socket {socket}
-
Send the result of the previous command to the ether.fi team via
[email protected]
-
Wait for confirmation from the ether.fi team that your registration is complete
-
Follow the Cyber MACH Operator Guide
-
Receive prepared registration json file from target node operator
-
Register the operator contract with cybermach
./avs-cli cybermach register --registration-input input.json // submit resulting output as a gnosis TX via AVS admin gnosis
-
generate and encrypt a BLS keystore using the EigenLayer CLI
-
Sign digest establishing ownership of your newly generated BLS key
./avs-cli automata prepare-registration --operator-id {operator_id} --bls-keystore {path_to_keystore} --bls-password {password}
-
Send the result of the previous command to the ether.fi team via
[email protected]
-
Wait for confirmation from the ether.fi team that your registration is complete
-
Follow the Automata Mainnet Runbook skipping the steps to
Deposit into strategies
andOpt into Multi-Prover AVS
to run the automata operator node
-
Receive prepared registration json file from target node operator
-
Ensure target operator contract is whitelisted by automata team (Whitelisting was requested for operators 1-12)
-
Register the operator contract with automata
./avs-cli automata register --registration-input automata-input.json // submit resulting output as a gnosis TX via AVS admin gnosis
-
Generate a new ECDSA key using EigenLayer CLI and note the address of the key you generated
-
Run the following command and send the output to the ether.fi team via
[email protected]
./avs-cli hyperlane prepare-registration --operator-id {operator_id} --avs-signer {address_of_generated_ecdsa_key}
-
Wait for confirmation from the ether.fi team that your registration is complete
-
Proceed to run the hyperlane node software
-
Receive prepared registration json file from target node operator
-
Register the operator contract with Hyperlane
./avs-cli hyperlane register --registration-input hyperlane-input.json // submit resulting output as a gnosis TX via AVS admin gnosis
-
Follow the instructions provided in the ARPA EigenLayer Onboarding Docs to run the
node-client
. The Node Account will be an ECDSA key controlled by your team to submit tasks to ETH Mainnet, OP Mainnet, Base Mainnet, and Redstone Mainnet. Stop at the Register to ARPA Network using your Node Account step -
Open the log and search for the keyword "public_key" (or "DKGKeyGenerated") and store the DKG public key value for use later in the registration process
-
Keep the
node-client
software running, and email the ether.fi team at[email protected]
with your operator ID to request an ARPA AVS registration signature -
Receive the registration signature from the admin
-
Set the
.env
with a mainnet RPC URL forRPC_URL
and your Node Account (the account that interacts with ARPA) ECDSA key forPRIVATE_KEY
:./avs-cli arpa register-node --operator-id {operator_id} --dkg-public-key {dkg_public_key} --registration-signature {arpa-registration-signature}
-
Continue to run the
node-client
software
-
Receive an ARPA AVS registration request
-
Generate an AVS registration signature for the given operator:
./avs-cli arpa generate-registration-signature --operator-id {operator_id}
// return result to the AVS operator for them to execute
-
generate a new BLS keystore and ECDSA key using the openlayer tooling https://openlayer.gitbook.io/openlayer/for-node-operators#generating-keys
-
Determine which
quorums
andsocket
you wish to register for -
Sign digest establishing ownership of your newly generated BLS key
./avs-cli openlayer prepare-registration --operator-id {operator_id} --bls-keystore {path_to_keystore} --bls-password {password} --signer-address {address_of_generated_ecdsa_key} --quorums {0} --socket {socket}
-
Send the result of the previous command to the ether.fi team via
[email protected]
-
Wait for confirmation from the ether.fi team that your registration is complete
-
Proceed to run the openlayer node software
-
Receive prepared registration json file from target node operator
-
Register the operator contract with openlayer
./avs-cli openlayer register --registration-input openlayer-input.json // submit resulting output as a gnosis TX via AVS admin gnosis
-
Register the operator contract with UniFi
./avs-cli UniFi register --operator-id {operator_id} // submit resulting output as a gnosis TX via AVS admin gnosis
Ether.fi utilizes a contract based operator alongside EIP-1271 signing. Most AVS's do not support this
out of the box. Please confirm that their contracts will be compatible with this scheme.
Many AVS's also utilize different styles of keys/signatures and different numbers of them and even multiple chains.
Figure out which actions need to be taken by the individual node operators and which need to be
done by an ether.fi admin with the EIP-1271 signing key.
Please take the time to open a PR against https://github.com/etherfi-protocol/avs-smart-contracts/
with a test walking through the entire registration flow. You can find an examples in the test/
directory of the avs-smart-contracts repo
Add your top level command to this file and then implement subcommands in their own package. For an example see https://github.com/etherfi-protocol/etherfi-avs-operator-CLI/tree/witness-chain/bin/avs-cli/witness-chain The CLI command should be a simple wrapper that forwards data to the package you implement in the following step
Please also place any abi's and generated bindings in this package. For an example see https://github.com/etherfi-protocol/etherfi-avs-operator-CLI/blob/witness-chain/src/witnesschain/witnesschain.go
- Code
- Deployment
- Mainnet: 0x2093Bbb221f1d8C7c932c32ee28Be6dEe4a37A6a
- Holesky: 0xdf9679e8bfce22ae503fd2726cb1218a18cd8bf4