watchtower-operator is a command-line interface (CLI) tool for interacting with some functionalities provided by the WatchTower(EigenLayer AVS) contracts . You can refer to the How to use the config files section to understand how to use the config files.
You can get the watchtower-operator cli prebuilt, or build from source
You can run the following command in your terminal and follow instructions provided by the script to use the cli
curl -sSfL witnesschain.com/install-operator-cli | bash
Installation instructions for building from source is available in docs/install.md.
Once you have the watchtower-operator installed, you can directly use the exectable -
watchtower-operator command [command options] [arguments...]
Note: In case you haven't exported the path for watchtower-operator executable, you can start the cli by ./watchtower-operator
Command | Description |
---|---|
keys | Used to store private keys in an encrypted format |
registerWatchtower | Used to register watch tower |
deRegisterWatchtower | Used to deregister watch tower |
registerOperatorToAVS | Used to notify EigenLayer that an operator is registered to the AVS |
deRegisterOperatorFromAVS | Used to notify EigenLayer that an operator is de-registered from the AVS |
You need access to operator and watchtower private keys to register your operator and watchtowers to WitnessChain. The following sections guide how to setup operator and watchtower keys.
$ watchtower-operator keys init
Creating directory: .w3secretkeys
Init keystore done
$ watchtower-operator keys import --key-name operator
Enter password to import: **********
Enter private key: ******************************************************************
Imported key: operator
$ watchtower-operator keys import --key-name watchtower1
Enter password to import: **********
Enter private key: ******************************************************************
Imported key: watchtower1
$ watchtower-operator keys list
------------------------------------------------------------------------------------------------------------------------------------------------------
Name Created
------------------------------------------------------------------------------------------------------------------------------------------------------
/home/ubuntu/.witnesschain/cli/.w3secretkeys/operator.ecdsa.key.json 25-07-2024 14:57:20
/home/ubuntu/.witnesschain/cli/.w3secretkeys/watchtower1.ecdsa.key.json 25-07-2024 14:57:36
/home/ubuntu/.witnesschain/cli/.w3secretkeys/watchtower2.ecdsa.key.json 25-07-2024 14:58:01
------------------------------------------------------------------------------------------------------------------------------------------------------
These keys are stored in web3 secret storage format recommended by
ethereum
foundation.
watchtower-operator
cli also support gocryptfs
and plaintext format.
Now create a new file, operator-config.json
, and fill in the operator
private keys and watchtower private keys. You must also change the
eth_rpc_url
to the L1 Ethereum node that you trust.
Create a new configuration file (operator-config.json
) with the following template for testnet:
{
"watchtower_encrypted_keys": [
"/home/ubuntu/.witnesschain/cli/.w3secretkeys/watchtower1.ecdsa.key.json",
"/home/ubuntu/.witnesschain/cli/.w3secretkeys/watchtower2.ecdsa.key.json"
],
"operator_encrypted_key": "/home/ubuntu/.witnesschain/cli/.w3secretkeys/operator.ecdsa.key.json",
"eth_rpc_url": "https://ethereum-holesky-rpc.publicnode.com",
"proof_submission_rpc_url": "https://blue-orangutan-rpc.eu-north-2.gateway.fm/"
}
In case you are running on mainnet, replace eth_rpc_url
and
proof_submission_rpc_url
.
Template config (operator-config.json
) for mainnet
{
"watchtower_encrypted_keys": [
"/home/ubuntu/.witnesschain/cli/.w3secretkeys/watchtower1.ecdsa.key.json",
"/home/ubuntu/.witnesschain/cli/.w3secretkeys/watchtower2.ecdsa.key.json"
],
"operator_encrypted_key": "/home/ubuntu/.witnesschain/cli/.w3secretkeys/operator.ecdsa.key.json",
"eth_rpc_url": "wss://ethereum-rpc.publicnode.com",
"proof_submission_rpc_url": "https://rpc.witnesschain.com"
}
Here, operator_encrypted_key
corresponds to the operator private key
that you imported earlier. Similarly, watchtower_encrypted_keys
represent the imported keys of your watchotwers.
You can read more about other customization in docs/config.md
$ watchtower-operator registerOperatorToAVS --config-file operator-config.json
Using config file path : operator-config.json
Using the key path : .w3secretkeys
Enter password to export web3 secret storage keys: **********
Connection successful : 17000
github.com/witnes .. │ Jul 25 16:09:23 2024 │ ➤ keystore: raw://0x621593B9Ae270C418e9190714e7786Ba69398834
Tx sent: https://holesky.etherscan.io/tx/0x36ead44cfaa8b9d3e0b25f03399a0b0517b59e77e407b3574b5dc09dc7479b4a
Transaction executed successfully, logs are ...
[0xc010af8000]
$ watchtower-operator registerWatchtower --config-file operator-config.json
Using config file path : operator-config.json
Using the key path : .w3secretkeys
Enter password to export web3 secret storage keys: **********
Connection successful : 17000
github.com/witnes .. │ Jul 25 16:52:40 2024 │ ➤ keystore: raw://0x621593B9Ae270C418e9190714e7786Ba69398834
watchtowerAddress: 0x621593B9Ae270C418e9190714e7786Ba69398834
github.com/witnes .. │ Jul 25 16:52:41 2024 │ ➤ keystore: raw://0x621593B9Ae270C418e9190714e7786Ba69398834
Tx sent: https://holesky.etherscan.io/tx/0x4f5d9ac9f8b425cbd2d32ac32625e6441e00c7692a57d7d884b842ff92be8901
Transaction executed successfully, logs are ...
[0xc010966000]
Congratulations! Your watchtower is successfully registered. Now you can proceed to install watchtower-client and submit proofs on chain.