Skip to content

Commit 134c65a

Browse files
committed
EigenDA V2 Blazar (0.9.0)
1 parent 3544584 commit 134c65a

File tree

6 files changed

+109
-10
lines changed

6 files changed

+109
-10
lines changed

holesky/.env.example

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
MAIN_SERVICE_IMAGE=ghcr.io/layr-labs/eigenda/opr-node:0.9.0-rc.4
1+
MAIN_SERVICE_IMAGE=ghcr.io/layr-labs/eigenda/opr-node:0.9.0
22
NETWORK_NAME=eigenda-network
33
MAIN_SERVICE_NAME=eigenda-native-node
44

@@ -35,7 +35,6 @@ NODE_INTERNAL_RETRIEVAL_PORT=${NODE_RETRIEVAL_PORT}
3535
NODE_INTERNAL_V2_DISPERSAL_PORT=${NODE_V2_DISPERSAL_PORT}
3636
NODE_INTERNAL_V2_RETRIEVAL_PORT=${NODE_V2_RETRIEVAL_PORT}
3737

38-
3938
# Reachability Check
4039
NODE_REACHABILITY_POLL_INTERVAL=60
4140
NODE_DATAAPI_URL=https://dataapi-holesky.eigenda.xyz

holesky/run.sh

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
. ./.env
55

6-
node_plugin_image="ghcr.io/layr-labs/eigenda/opr-nodeplugin:0.9.0-rc.4"
6+
node_plugin_image="ghcr.io/layr-labs/eigenda/opr-nodeplugin:0.9.0"
77

88
# Check if V2 ports are defined
99
if [ -z "$NODE_V2_DISPERSAL_PORT" ]; then
@@ -83,15 +83,15 @@ listQuorums() {
8383
}
8484

8585
updateSocket() {
86-
# we have to pass a dummy quorum-id-list as it is required by the plugin
87-
echo "You are about to update your socket to: $socket"
86+
echo "You are about to update your socket registration to: $socket"
8887
echo "Confirm? [Y/n] "
8988
read -r answer
9089
if [ "$answer" = "n" ] || [ "$answer" = "N" ]; then
9190
echo "Operation cancelled"
9291
exit 1
9392
fi
9493

94+
# we have to pass a dummy quorum-id-list as it is required by the plugin
9595
docker run --env-file .env \
9696
--rm \
9797
--volume "${NODE_ECDSA_KEY_FILE_HOST}":/app/operator_keys/ecdsa_key.json \

mainnet/.env.example

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
MAIN_SERVICE_IMAGE=ghcr.io/layr-labs/eigenda/opr-node:0.8.6
1+
MAIN_SERVICE_IMAGE=ghcr.io/layr-labs/eigenda/opr-node:0.9.0
22
NETWORK_NAME=eigenda-network
33
MAIN_SERVICE_NAME=eigenda-native-node
44

@@ -102,6 +102,13 @@ NODE_CACHE_PATH_HOST=${USER_HOME}/eigenda-operator-setup/resources/cache
102102
# TODO: Operators need to update this to their own keys
103103
NODE_ECDSA_KEY_FILE_HOST=${EIGENLAYER_HOME}/operator_keys/opr.ecdsa.key.json
104104
NODE_BLS_KEY_FILE_HOST=${EIGENLAYER_HOME}/operator_keys/opr.bls.key.json
105+
# TODO: Uncomment and update if using remote BLS signer https://github.com/Layr-Labs/cerberus
106+
#NODE_BLS_SIGNER_CERT_FILE=/app/cerberus/cerberus.crt # DO NOT CHANGE THIS
107+
#NODE_BLS_REMOTE_SIGNER_ENABLED=true
108+
#NODE_BLS_REMOTE_SIGNER_URL=<host:port>
109+
#NODE_BLS_SIGNER_API_KEY=<api key for remote signer>
110+
#NODE_BLS_PUBLIC_KEY_HEX=<public key registered with remote signer>
111+
#NODE_BLS_SIGNER_CERT_FILE_HOST=<path to cert file on host>
105112

106113
# TODO: The ip provider service used to obtain a node's public IP [seeip (default), ipify)
107114
NODE_PUBLIC_IP_PROVIDER=seeip

mainnet/README.md

Lines changed: 82 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,84 @@
11
## Mainnet
22

3-
Head over to our [EigenDA operator guides](https://docs.eigenlayer.xyz/eigenda/operator-guides/overview) for installation instructions and more details.
3+
Head over to our [EigenDA operator guides](https://docs.eigenlayer.xyz/eigenda/operator-guides/overview) for installation instructions and more details.
4+
5+
6+
## Blazar (EigenDA V2) Migration
7+
Operators running node version `<=v0.8.6` will need to define new v2 specific environment variables, expose 2 new ports, and update their socket registration as part of the migration to v2.
8+
9+
## Migration Steps
10+
### 1. Update `.env` with v2 specific environment variables
11+
```
12+
NODE_V2_RUNTIME_MODE=v1-and-v2
13+
14+
NODE_V2_DISPERSAL_PORT=32006
15+
NODE_V2_RETRIEVAL_PORT=32007
16+
17+
# Internal ports for Nginx reverse proxy
18+
NODE_INTERNAL_V2_DISPERSAL_PORT=${NODE_V2_DISPERSAL_PORT}
19+
NODE_INTERNAL_V2_RETRIEVAL_PORT=${NODE_V2_RETRIEVAL_PORT}
20+
```
21+
22+
### 2. Update `MAIN_SERVICE_IMAGE`
23+
```
24+
MAIN_SERVICE_IMAGE=ghcr.io/layr-labs/eigenda/opr-node:0.9.0-rc.4
25+
```
26+
27+
### 3. Update socket registration
28+
EigenDA v2 adds new ports to the socket registration. Socket registration update is required to receive v2 traffic.
29+
30+
Ensure that you are using the latest version of the [eigenda-operator-setup](https://github.com/Layr-Labs/eigenda-operator-setup/releases) before updating the socket.
31+
```
32+
(eigenda-operator-setup) > ./run.sh update-socket
33+
You are about to update your socket to: 23.93.87.155:32005;32004;32006;32007
34+
Confirm? [Y/n]
35+
```
36+
37+
### 4. Restart the node and monitor for reachability checks
38+
The node will check reachability of v1 & v2 sockets. If reachability checks are failing, check that the new ports are open and accessible.
39+
```
40+
Feb 20 19:47:07.861 INF node/node.go:743 Reachability check v1 - dispersal socket ONLINE component=Node status="node.Dispersal is available" socket=operator.eigenda.xyz:32001
41+
Feb 20 19:47:07.861 INF node/node.go:750 Reachability check v1 - retrieval socket ONLINE component=Node status="node.Retrieval is available" socket=operator.eigenda.xyz:32002
42+
Feb 20 19:47:07.867 INF node/node.go:743 Reachability check v2 - dispersal socket ONLINE component=Node status="validator.Dispersal is available" socket=operator.eigenda.xyz:32003
43+
Feb 20 19:47:07.867 INF node/node.go:750 Reachability check v2 - retrieval socket ONLINE component=Node status="validator.Retrieval is available" socket=operator.eigenda.xyz:32005
44+
```
45+
46+
### 5. Confirm v2 StoreChunks requests are being served
47+
```
48+
Feb 20 19:50:36.741 INF grpc/server_v2.go:140 new StoreChunks request batchHeaderHash=873ac1c7faeec0f1e5c886142d0b364a94b3e906f1b4b4f1b0466a5f79cecefb numBlobs=14 referenceBlockNumber=3393054
49+
Feb 20 19:50:41.765 INF grpc/server_v2.go:140 new StoreChunks request batchHeaderHash=76873d64609d50aaf90e1c435c9278c588f1a174a4c0b4a721438a7d44bb2f1e numBlobs=18 referenceBlockNumber=3393054
50+
Feb 20 19:50:46.760 INF grpc/server_v2.go:140 new StoreChunks request batchHeaderHash=8182f31c9b58e04f0a09dfbf1634a73e47a660b441f65c7a35ef9e7afd064493 numBlobs=16 referenceBlockNumber=3393054
51+
52+
```
53+
54+
## V2 Remote BLS Signer API Migration
55+
__Breaking Change:__ With the release of EigenDA Blazar (v2), the the node software has been upgraded to use the latest [cerberus](https://github.com/Layr-Labs/cerberus) remote BLS signer release.
56+
57+
This change requires the operator to define the `NODE_BLS_SIGNER_API_KEY` environment variable.
58+
59+
Follow the steps from the [cerberus setup guide](https://github.com/Layr-Labs/cerberus?tab=readme-ov-file#remote-signer-implementation-of-cerberus-api) to create an API key.
60+
61+
62+
## V2 Environment Variable Reference
63+
64+
### `EIGENDA_RUNTIME_MODE`
65+
This environment variable will be used to determine the runtime mode of the EigenDA node.
66+
67+
- `v1-and-v2`: The node will serve both v1 and v2 traffic (default)
68+
- `v2-only`: The node will serve v2 traffic only
69+
- `v1-only`: The node will serve v1 traffic only
70+
71+
The `v1-only` & `v2-only` modes are intended for isolating traffic to separate validator instances - where 1 instance serves v1 traffic and a second instance serves v2 traffic.
72+
73+
### `EIGENDA_V2_DISPERSAL_PORT`
74+
<ins>Operators must publically expose this port</ins>. This port will be used to listen for dispersal requests from the EigenDA v2 API. IP whitelisting is no longer required with v2.
75+
76+
### `EIGENDA_V2_RETRIEVAL_PORT`
77+
<ins>Operators must publically expose this port</ins>. This port will be used to listen for retrieval requests from the EigenDA v2 API.
78+
79+
### `EIGENDA_INTERNAL_V2_DISPERSAL_PORT`
80+
This port is intended for Nginx reverse proxy use. It is not required if the operator is not using a reverse proxy.
81+
82+
### `EIGENDA_INTERNAL_V2_RETRIEVAL_PORT`
83+
This port is intended for Nginx reverse proxy use. It is not required if the operator is not using a reverse proxy.
84+

mainnet/docker-compose.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@ services:
3838
- "${NODE_CACHE_PATH_HOST}:/app/cache:rw"
3939
- "${NODE_LOG_PATH_HOST}:/app/logs:rw"
4040
- "${NODE_DB_PATH_HOST}:/data/operator/db:rw"
41-
restart: unless-stopped
41+
# - "${NODE_BLS_SIGNER_CERT_FILE_HOST}:/app/cerberus/cerberus.crt:readonly"
42+
restart: unless-stopped
4243
networks:
4344
eigenda:
4445
name: ${NETWORK_NAME}

mainnet/run.sh

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,20 @@
33

44
. ./.env
55

6-
socket="$NODE_HOSTNAME":"${NODE_DISPERSAL_PORT}"\;"${NODE_RETRIEVAL_PORT}"
6+
node_plugin_image="ghcr.io/layr-labs/eigenda/opr-nodeplugin:0.9.0"
77

8-
node_plugin_image="ghcr.io/layr-labs/eigenda/opr-nodeplugin:0.8.6"
8+
# Check if V2 ports are defined
9+
if [ -z "$NODE_V2_DISPERSAL_PORT" ]; then
10+
echo "ERROR: NODE_V2_DISPERSAL_PORT is not defined!"
11+
fi
12+
if [ -z "$NODE_V2_RETRIEVAL_PORT" ]; then
13+
echo "ERROR: NODE_V2_RETRIEVAL_PORT is not defined!"
14+
fi
15+
if [ -z "$NODE_V2_DISPERSAL_PORT" ] || [ -z "$NODE_V2_RETRIEVAL_PORT" ]; then
16+
echo "ERROR: Please update your .env file. See .env.example for reference."
17+
exit 1
18+
fi
19+
socket="$NODE_HOSTNAME":"${NODE_DISPERSAL_PORT}"\;"${NODE_RETRIEVAL_PORT}"\;"${NODE_V2_DISPERSAL_PORT}"\;"${NODE_V2_RETRIEVAL_PORT}"
920

1021
# In all commands, We have to explicitly set the password again here because
1122
# when docker run loads the `.env` file, it keeps the quotes around the password

0 commit comments

Comments
 (0)