Important
You need to have previously created an ECDSA keystore with at least 1ETH. You can create keystore following this guide
To deploy the Batcher you need to set some variables and then run the Batcher playbook
Create the variables files:
make ansible_batcher_create_envThis will create the following files in infra/ansible/playbooks/ini
config-batcher.inienv-batcher.inicaddy-batcher.ini
The config-batcher.ini contains the following variables:
| Variable | Description | Stage | Testnet | Mainnet |
|---|---|---|---|---|
| aligned_layer_deployment_config_file_path | JSON with Aligned contracts addresses | /home/app/repos/batcher/aligned_layer/contracts/script/output/holesky/alignedlayer_deployment_output.stage.json | /home/app/repos/operator/aligned_layer/contracts/script/output/holesky/alignedlayer_deployment_output.json | TBD |
| eigen_layer_deployment_config_file_path | JSON with EigenLayer contracts addresses | /home/app/repos/batcher/aligned_layer/contracts/script/output/holesky/eigenlayer_deployment_output.json | /home/app/repos/operator/aligned_layer/contracts/script/output/holesky/eigenlayer_deployment_output.json | TBD |
| eth_rpc_url | HTTP RPC url | <your_rpc_http_provider> | <your_rpc_http_provider> | <your_rpc_http_provider> |
| eth_rpc_url_fallback | HTTP RPC fallback url. Must be different than eth_rpc_url | https://ethereum-holesky-rpc.publicnode.com | https://ethereum-holesky-rpc.publicnode.com | https://ethereum-rpc.publicnode.com |
| eth_ws_url | WS RPC url | <your_rpc_ws_provider> | <your_rpc_ws_provider> | <your_rpc_ws_provider> |
| eth_ws_url_fallback | WS RPC fallback url. Must be different than eth_ws_rpc_url | wss://ethereum-holesky-rpc.publicnode.com | wss://ethereum-holesky-rpc.publicnode.com | wss://ethereum-rpc.publicnode.com |
| ecdsa_private_key_store_password | Password of the ECDSA keystore | <your_ecdsa_keystore_password> | <your_ecdsa_keystore_password> | <your_ecdsa_keystore_password> |
| telemetry_ip_port_address | IP:Port of the Telemetry service | :4001 | :4001 | TBD |
| batcher_replacement_private_key | This is the private key for the non-paying users | - | - | - |
The env-batcher.ini contains the following variables:
| Variable | Description | Stage | Testnet | Mainnet |
|---|---|---|---|---|
| secret_access_key | Secret access key for user with access to the Storage (S3) | <your_secret_access_key> | <your_secret_access_key> | <your_secret_access_key> |
| region | Region of the Storage | |||
| access_key_id | Access key for the user with access to the Storage (S3) | <your_access_key_id> | <your_access_key_id> | <your_access_key_id> |
| bucket_name | Bucket name | <stage.storage.example.com> | <holesky.storage.example.com> | <storage.example.com> |
| download_endpoint | Public endpoint to download batcher | https://stage.storage.example.com | https://holesky.storage.example.com | https://storage.example.com |
| log_level | Log level | info | info | info |
The caddy-batcher.ini contains the following variables:
| Variable | Description | Stage | Testnet | Mainnet |
|---|---|---|---|---|
| batcher_domain | Domain of the Batcher to send proofs | <stage.batcher.example.com> | <holesky.batcher.example.com> | <batcher.example.com> |
Warning
You need to previously set the batcher_domain in your DNS provider to point to the Batcher IP.
Deploy the Batcher:
make ansible_batcher_deploy INVENTORY=</path/to/inventory> KEYSTORE=<path/to/keystore/in/your/local>Important
You need to have previously created an ECDSA keystore with at least 1ETH and a BLS keystore. You can create keystore following this guide The ECDSA keystore for the Operator must be created with the Eigenlayer CLI
Caution
To register the Operator in Aligned successfully, you need to have been whitelisted by the Aligned team previously.
To deploy the Operator you need to set some variables and then run the Operator playbook.
Create the variables files:
make ansible_operator_create_envThis will create the following files in infra/ansible/playbooks/ini:
config-operator.iniconfig-register-operator.ini
The config-register-operator.ini contains the variables to register the Operator in EigenLayer:
| Variable | Description | Stage | Testnet | Mainnet |
|---|---|---|---|---|
| address | ECDSA address of the Operator | <your_ecdsa_operator_address> | <your_ecdsa_operator_address> | <your_ecdsa_operator_address> |
| metadata_url | Operator Metadata. You can create one following this guide | <your_metadata_url> | <your_metadata_url> | <your_metadata_url> |
| el_delegation_manager_address | Delegation Manager Address | 0xA44151489861Fe9e3055d95adC98FbD462B948e7 |
0xA44151489861Fe9e3055d95adC98FbD462B948e7 |
TBD |
| eth_rpc_url | HTTP RPC url | https://ethereum-holesky-rpc.publicnode.com |
https://ethereum-holesky-rpc.publicnode.com |
https://ethereum-rpc.publicnode.com |
| private_key_store_path | Path to the ECDSA keystore in the Operator host | /home/app/.keystores/operator.ecdsa |
/home/app/.keystores/operator.ecdsa |
/home/app/.keystores/operator.ecdsa |
| private_key_store_password | Password of the ECDSA keystore | <your_ecdsa_keystore_password> | <your_ecdsa_keystore_password> | <your_ecdsa_keystore_password> |
| chain_id | Chain ID | 17000 | 17000 | 1 |
| weth_address | Address of wETH token | 0x94373a4919B3240D86eA41593D5eBa789FEF3848 | 0x94373a4919B3240D86eA41593D5eBa789FEF3848 | TBD |
| weth_strategy_address | Address of wETH token strategy | 0x80528D6e9A2BAbFc766965E0E26d5aB08D9CFaF9 | 0x80528D6e9A2BAbFc766965E0E26d5aB08D9CFaF9 | TBD |
The config-operator.ini contains the variables to run the Operator in Aligned:
| Variable | Description | Stage | Testnet | Mainnet |
|---|---|---|---|---|
| aligned_layer_deployment_config_file_path | JSON with Aligned contracts addresses | /home/app/repos/operator/aligned_layer/contracts/script/output/holesky/alignedlayer_deployment_output.stage.json |
/home/app/repos/operator/aligned_layer/contracts/script/output/holesky/alignedlayer_deployment_output.json |
TBD |
| eigen_layer_deployment_config_file_path | JSON with EigenLayer contracts addresses | /home/app/repos/operator/aligned_layer/contracts/script/output/holesky/eigenlayer_deployment_output.json |
/home/app/repos/operator/aligned_layer/contracts/script/output/holesky/eigenlayer_deployment_output.json |
TBD |
| eth_rpc_url | HTTP RPC url | <your_rpc_http_provider> | <your_rpc_http_provider> | <your_rpc_http_provider> |
| eth_rpc_url_fallback | HTTP RPC fallback url. Must be different than eth_rpc_url |
https://ethereum-holesky-rpc.publicnode.com |
https://ethereum-holesky-rpc.publicnode.com |
https://ethereum-rpc.publicnode.com |
| eth_ws_url | WS RPC url | <your_rpc_ws_provider> | your_rpc_ws_provider> | <your_rpc_ws_provider> |
| eth_ws_url_fallback | WS RPC fallback url. Must be different than eth_ws_rpc_url |
wss://ethereum-holesky-rpc.publicnode.com |
wss://ethereum-holesky-rpc.publicnode.com |
wss://ethereum-rpc.publicnode.com |
| ecdsa_private_key_store_path | Path to the ECDSA keystore in the Operator host | /home/app/.keystores/operator.ecdsa |
/home/app/.keystores/operator.ecdsa |
/home/app/.keystores/operator.ecdsa |
| ecdsa_private_key_store_password | Password of the ECDSA keystore | <your_ecdsa_keystore_password> | <your_ecdsa_keystore_password> | <your_ecdsa_keystore_password> |
| bls_private_key_store_path | Path to the BLS keystore in the Operator host | /home/app/.keystores/operator.bls |
/home/app/.keystores/operator.bls |
/home/app/.keystores/operator.bls |
| bls_private_key_store_password | Password of the BLS keystore | <your_bls_keystore_password> | <your_bls_keystore_password> | <your_bls_keystore_password> |
| aggregator_rpc_server_ip_port_address | Aggregator url | stage.aggregator.alignedlayer.com:8090 |
aggregator.alignedlayer.com:8090 |
TBD |
| operator_tracker_ip_port_address | Telemetry service url | https://stage.telemetry.alignedlayer.com |
https://holesky.telemetry.alignedlayer.com |
TBD |
| address | ECDSA address of the Operator | <your_ecdsa_operator_address> | <your_ecdsa_operator_address> | <your_ecdsa_operator_address> |
| metadata_url | Operator Metadata. You can create one following this guide | <your_metadata_url> | <your_metadata_url> | <your_metadata_url> |
| enable_metrics | Expose or not prometheus metrics | true |
true |
true |
| metrics_ip_port_address | Where to expose prometheus metrics if enabled | localhost:9092 |
localhost:9092 |
localhost:9092 |
| last_processed_batch_filepath | Where to store the last processed batch for system recovery | /home/app/operator.last_processed_batch.json |
/home/app/operator.last_processed_batch.json |
/home/app/operator.last_processed_batch.json |
Deploy the Operator:
make ansible_operator_deploy INVENTORY=</path/to/inventory> ECDSA_KEYSTORE=</path/to/ecdsa/keystore> BLS_KEYSTORE=</path/to/bls/keystore>Important
You need to have previously created an ECDSA keystore with at least 1ETH and a BLS keystore. You can create keystore following this guide
To deploy the Aggregator you need to set some variables and then run the Aggregator playbook
This will create the following file in infra/ansible/playbooks/ini:
make ansible_aggregator_create_envconfig-aggregator.ini
The config-aggregator.ini contains the variables to run the Operator in Aligned:
| Variable | Description | Stage | Testnet | Mainnet |
|---|---|---|---|---|
| aligned_layer_deployment_config_file_path | JSON with Aligned contracts addresses | /home/app/repos/aggregator/aligned_layer/contracts/script/output/holesky/alignedlayer_deployment_output.stage.json |
/home/app/repos/aggregator/aligned_layer/contracts/script/output/holesky/alignedlayer_deployment_output.json |
TBD |
| eigen_layer_deployment_config_file_path | JSON with EigenLayer contracts addresses | /home/app/repos/aggregator/aligned_layer/contracts/script/output/holesky/eigenlayer_deployment_output.json |
/home/app/repos/aggregator/aligned_layer/contracts/script/output/holesky/eigenlayer_deployment_output.json |
TBD |
| eth_rpc_url | HTTP RPC url | <your_rpc_http_provider> | <your_rpc_http_provider> | <your_rpc_http_provider> |
| eth_rpc_url_fallback | HTTP RPC fallback url. Must be different than eth_rpc_url |
https://ethereum-holesky-rpc.publicnode.com |
https://ethereum-holesky-rpc.publicnode.com |
https://ethereum-rpc.publicnode.com |
| eth_ws_url | WS RPC url | <your_rpc_ws_provider> | your_rpc_ws_provider> | <your_rpc_ws_provider> |
| eth_ws_url_fallback | WS RPC fallback url. Must be different than eth_ws_rpc_url |
wss://ethereum-holesky-rpc.publicnode.com |
wss://ethereum-holesky-rpc.publicnode.com |
wss://ethereum-rpc.publicnode.com |
| ecdsa_private_key_store_path | Path to the ECDSA keystore in the Operator host | /home/app/.keystores/aggregator.ecdsa |
/home/app/.keystores/aggregator.ecdsa |
/home/app/.keystores/operator.ecdsa |
| ecdsa_private_key_store_password | Password of the ECDSA keystore | <your_ecdsa_keystore_password> | <your_ecdsa_keystore_password> | <your_ecdsa_keystore_password> |
| bls_private_key_store_path | Path to the BLS keystore in the Operator host | /home/app/.keystores/aggregator.bls |
/home/app/.keystores/aggregator.bls |
/home/app/.keystores/operator.bls |
| bls_private_key_store_password | Password of the BLS keystore | <your_bls_keystore_password> | <your_bls_keystore_password> | <your_bls_keystore_password> |
| enable_metrics | Expose or not prometheus metrics | true |
true |
true |
| metrics_ip_port_address | Where to expose prometheus metrics if enabled | localhost:9092 |
localhost:9092 |
localhost:9092 |
| telemetry_ip_port_address | Where to send telemetry traces | 100.73.98.8:4001 |
100.91.67.33:4001 |
TBD |
Deploy the Aggregator:
make ansible_aggregator_deploy INVENTORY=</path/to/inventory> ECDSA_KEYSTORE=<path/to/keystore> BLS_KEYSTORE=</path/to/bls/keystore>Note
ECDSA_KEYSTORE and BLS_KEYSTORE are the paths of the keystores in your machine.
To deploy the Telemetry Services you need to set some variables and then run the Telemetry playbook
This will create the following file in infra/ansible/playbooks/ini:
make ansible_telemetry_create_envconfig-telemetry.ini
The config-telemetry.ini contains the variables to run the Telemetry in Aligned:
| Variable | Description | Testnet | Stage | Mainnet |
|---|---|---|---|---|
| caddy_metrics_url | Public URL for Grafana Metrics | holesky.metrics.alignedlayer.com |
stage1.metrics.alignedlayer.com |
mainnet.metrics.alignedlayer.com |
| caddy_telemetry_url | Public URL for Telemetry API | holesky.metrics.alignedlayer.com |
stage1.telemetry.alignedlayer.com |
mainnet.telemetry.alignedlayer.com |
| caddy_jaeger_url | Tailscale URL for Jaeger | aligned-holesky-metrics.tail665ae.ts.net |
aligned-holesky-stage-1-metrics.tail665ae.ts.net |
aligned-mainnet-telemetry.tail665ae.ts.net |
| grafana_admin_password | Password for Grafana's admin user | <your_grafana_admin_password> | <your_grafana_admin_password> | <your_grafana_admin_password> |
| grafana_prometheus_datasource | Prometheus location for Grafana to pull data from | localhost | localhost | localhost |
| grafana_domain | Public URL for Grafana Metrics | holesky.metrics.alignedlayer.com |
stage1.metrics.alignedlayer.com |
mainnet.metrics.alignedlayer.com |
| grafana_oath_client_id | Generic OAuth Client ID | <your_oauth_client_id> | <your_oauth_client_id> | <your_oauth_client_id> |
| grafana_oath_client_secret | Generic OAuth Client Secret | <your_oauth_client_secret> | <your_oauth_client_secret> | <your_oauth_client_secret> |
| grafana_oath_auth_url | Generic OAuth Auth URL | <your_oauth_auth_url> | <your_oauth_auth_url> | <your_oauth_auth_url> |
| grafana_oath_token_url | Generic OAuth Token URL | <your_oauth_token_url> | <your_oauth_token_url> | <your_oauth_token_url> |
| grafana_oath_api_url | Generic OAuth API URL (User Info) | <your_oauth_api_url> | <your_oauth_api_url> | <your_oauth_api_url> |
| prometheus_aggregator_ip | Aggregator IP+PORT location for prometheus | aligned-holesky-aggregator:9091 | aligned-holesky-stage-1-aggregator:9091 | aligned-mainnet-aggregator:9091 |
| prometheus_operator_ip | Operators IP+PORT location for prometheus | aligned-holesky-operator-1:9092 | aligned-holesky-stage-1-operator-1:9092 | aligned-mainnet-operator-1:9092 |
| prometheus_batcher_ip | Batcher IP+PORT location for prometheus | aligned-holesky-batcher:9093 | aligned-holesky-stage-1-batcher-1:9093 | aligned-mainnet-batcher:9093 |
| prometheus_tracker_ip | Tracker IP+PORT location for prometheus | aligned-holesky-tracker:4001 | aligned-holesky-stage-1-tracker:4001 | aligned-mainnet-telemetry:4001 |
| postgresql_telemetry_db_name | Postgres Database Name | <your_postgres_db_name> | <your_postgres_db_name> | <your_postgres_db_name> |
| postgresql_telemetry_user | Postgres Username | <your_postgres_db_username> | <your_postgres_db_username> | <your_postgres_db_username> |
| postgresql_telemetry_pass | Postgres Username's Password | <your_postgres_db_password> | <your_postgres_db_password> | <your_postgres_db_password> |
| cassandra_telemetry_user | Cassandra Username | <your_cassandra_db_name> | <your_cassandra_db_name> | <your_cassandra_db_name> |
| cassandra_telemetry_pass | Cassandra Username's Password | <your_cassandra_db_password> | <your_cassandra_db_password> | <your_cassandra_db_password> |
| telemetry_aligned_rpc | HTTP ETH RPC URL | https://aligned-rpc-node-2.tail665ae.ts.net |
https://aligned-rpc-node-2.tail665ae.ts.net |
https://aligned-mainnet-rpc-1.tail665ae.ts.net |
| telemetry_api_phx_host | Telemetry API Elixir's Phoenix host for | holesky.telemetry.alignedlayer.com |
stage1.telemetry.alignedlayer.com |
mainnet.metrics.alignedlayer.com |
| telemetry_api_elixir_hostname | Telemetry API Server's Hostname | aligned-holesky-metrics |
aligned-holesky-stage-1-telemetry |
aligned-mainnet-telemetry |
| telemetry_api_secret_key_base | Telemetry API Secret Key Base | <your_secret_key_base> | <your_secret_key_base> | <your_secret_key_base> |
| pagerduty_routing_key | Pagerduty Routing Key | <your_pagerduty_routing_key> | <your_pagerduty_routing_key> | <your_pagerduty_routing_key> |
Deploy the Telemetry Services:
make ansible_telemetry_deploy INVENTORY=</path/to/inventory>
# How to Create Keystores
## Create ECDSA Keystore
Make sure you have installed:
- [Foundry](https://book.getfoundry.sh/getting-started/installation)
Now you can create the ECDSA keystore using the following command:
```shell
cast wallet new .It will prompt you for a password and will save the keystore in your current directory.
If everything is okay, you will get the following output:
Created new encrypted keystore file: /your/current/path/f2e73ef1-d365-43b5-8818-07d6f7a254d4
Address: 0x...
Refer to this link for more details about keystore creation https://book.getfoundry.sh/reference/cast/cast-wallet-new
Make sure you have installed:
Now you can create the ECDSA keystore using the following command:
eigenlayer operator keys create --key-type ecdsa <keyname>It will prompt for a password and will save the keystore in $HOME/.eigenlayer/operator_keys/.
If everything is okay, you will get the following output:
ECDSA Private Key (Hex):
////////////////////////////////////////////////////////////////////////////
// //
// ... //
// //
////////////////////////////////////////////////////////////////////////////
🔐 Please backup the above private key hex in a safe place 🔒
And then,
Key location: $HOME/.eigenlayer/operator_keys/<keyname>.ecdsa.key.json
Public Key hex: ...
Ethereum Address: 0x...
Refer to this link for more details about keystore creation https://docs.eigenlayer.xyz/eigenlayer/operator-guides/operator-installation#create-keys
Make sure you have installed:
Now you can create the BLS keystore using the following command:
eigenlayer operator keys create --key-type bls <keyname>It will prompt for a password and will save the keystore in $HOME/.eigenlayer/operator_keys/.
If everything is okay, you will get the following output:
BLS Private Key (Hex):
/////////////////////////////////////////////////////////////////////////////////////////
// //
// ... //
// //
/////////////////////////////////////////////////////////////////////////////////////////
🔐 Please backup the above private key hex in a safe place 🔒
And then,
Key location: $HOME/.eigenlayer/operator_keys/<keyname>.bls.key.json
Public Key: E([...,...])
Refer to this link for more details about keystore creation https://docs.eigenlayer.xyz/eigenlayer/operator-guides/operator-installation#create-keys