|
1 | 1 | ## Mainnet |
2 | 2 |
|
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 | +## Blazar (EigenDA V2) Migration |
| 6 | +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. |
| 7 | + |
| 8 | +## Migration Steps |
| 9 | +### 1. Update `.env` with v2 specific environment variables |
| 10 | +``` |
| 11 | +NODE_V2_RUNTIME_MODE=v1-and-v2 |
| 12 | +
|
| 13 | +NODE_V2_DISPERSAL_PORT=32006 |
| 14 | +NODE_V2_RETRIEVAL_PORT=32007 |
| 15 | +
|
| 16 | +# Internal ports for Nginx reverse proxy |
| 17 | +NODE_INTERNAL_V2_DISPERSAL_PORT=${NODE_V2_DISPERSAL_PORT} |
| 18 | +NODE_INTERNAL_V2_RETRIEVAL_PORT=${NODE_V2_RETRIEVAL_PORT} |
| 19 | +``` |
| 20 | + |
| 21 | +### 2. Update `MAIN_SERVICE_IMAGE` |
| 22 | +``` |
| 23 | +MAIN_SERVICE_IMAGE=ghcr.io/layr-labs/eigenda/opr-node:0.9.0 |
| 24 | +``` |
| 25 | + |
| 26 | +### 3. Update socket registration |
| 27 | +EigenDA v2 adds new ports to the socket registration. Socket registration update is required to receive v2 traffic. |
| 28 | + |
| 29 | +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. |
| 30 | +``` |
| 31 | +(eigenda-operator-setup) > ./run.sh update-socket |
| 32 | +You are about to update your socket to: 23.93.87.155:32005;32004;32006;32007 |
| 33 | +Confirm? [Y/n] |
| 34 | +``` |
| 35 | + |
| 36 | +### 4. Restart the node and monitor for reachability checks |
| 37 | +The node will check reachability of v1 & v2 sockets. If reachability checks are failing, check that the new ports are open and accessible. |
| 38 | +``` |
| 39 | +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 |
| 40 | +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 |
| 41 | +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 |
| 42 | +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 |
| 43 | +``` |
| 44 | + |
| 45 | +### 5. Confirm v2 StoreChunks requests are being served |
| 46 | +``` |
| 47 | +Feb 20 19:50:36.741 INF grpc/server_v2.go:140 new StoreChunks request batchHeaderHash=873ac1c7faeec0f1e5c886142d0b364a94b3e906f1b4b4f1b0466a5f79cecefb numBlobs=14 referenceBlockNumber=3393054 |
| 48 | +Feb 20 19:50:41.765 INF grpc/server_v2.go:140 new StoreChunks request batchHeaderHash=76873d64609d50aaf90e1c435c9278c588f1a174a4c0b4a721438a7d44bb2f1e numBlobs=18 referenceBlockNumber=3393054 |
| 49 | +Feb 20 19:50:46.760 INF grpc/server_v2.go:140 new StoreChunks request batchHeaderHash=8182f31c9b58e04f0a09dfbf1634a73e47a660b441f65c7a35ef9e7afd064493 numBlobs=16 referenceBlockNumber=3393054 |
| 50 | +
|
| 51 | +``` |
| 52 | + |
| 53 | +## V2 Remote BLS Signer API Migration |
| 54 | +__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. |
| 55 | + |
| 56 | +This change requires the operator to define the `NODE_BLS_SIGNER_API_KEY` environment variable. |
| 57 | + |
| 58 | +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. |
| 59 | + |
| 60 | + |
| 61 | +## V2 Environment Variable Reference |
| 62 | + |
| 63 | +### `EIGENDA_RUNTIME_MODE` |
| 64 | +This environment variable will be used to determine the runtime mode of the EigenDA node. |
| 65 | + |
| 66 | +- `v1-and-v2`: The node will serve both v1 and v2 traffic (default) |
| 67 | +- `v2-only`: The node will serve v2 traffic only |
| 68 | +- `v1-only`: The node will serve v1 traffic only |
| 69 | + |
| 70 | +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. |
| 71 | + |
| 72 | +### `EIGENDA_V2_DISPERSAL_PORT` |
| 73 | +<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. |
| 74 | + |
| 75 | +### `EIGENDA_V2_RETRIEVAL_PORT` |
| 76 | +<ins>Operators must publically expose this port</ins>. This port will be used to listen for retrieval requests from the EigenDA v2 API. |
| 77 | + |
| 78 | +### `EIGENDA_INTERNAL_V2_DISPERSAL_PORT` |
| 79 | +This port is intended for Nginx reverse proxy use. It is not required if the operator is not using a reverse proxy. |
| 80 | + |
| 81 | +### `EIGENDA_INTERNAL_V2_RETRIEVAL_PORT` |
| 82 | +This port is intended for Nginx reverse proxy use. It is not required if the operator is not using a reverse proxy. |
| 83 | + |
| 84 | + |
| 85 | +## Advanced - Multi drive support for V2 LittDB |
| 86 | + |
| 87 | +LittDB is capable of partitioning the chunks DB across multiple drives. See https://github.com/Layr-Labs/eigenda/blob/master/node/database-paths.md for more details. |
| 88 | + |
| 89 | +### Example .env that defines 2 littDB partitions |
| 90 | +``` |
| 91 | +NODE_LITT_DB_STORAGE_HOST_PATH_1=${NODE_DB_PATH_HOST}/chunk_v2_litt_1 |
| 92 | +NODE_LITT_DB_STORAGE_HOST_PATH_2=${NODE_DB_PATH_HOST}/chunk_v2_litt_2 |
| 93 | +NODE_LITT_DB_STORAGE_PATHS=/data/operator/db/chunk_v2_litt_1,/data/operator/db/chunk_v2_litt_2 |
| 94 | +``` |
| 95 | +The `NODE_LITT_DB_STORAGE_HOST_PATH_X` should map to a separately mounted drive folder for each partition. |
| 96 | +The `NODE_LITT_DB_STORAGE_PATHS` needs to map to the docker volume mounts defined in `docker-compose.yaml` |
| 97 | +#### Example docker-compose volume mounts |
| 98 | +``` |
| 99 | + volumes: |
| 100 | + - "${NODE_ECDSA_KEY_FILE_HOST}:/app/operator_keys/ecdsa_key.json:readonly" |
| 101 | + - "${NODE_BLS_KEY_FILE_HOST}:/app/operator_keys/bls_key.json:readonly" |
| 102 | + - "${NODE_G1_PATH_HOST}:/app/g1.point:readonly" |
| 103 | + - "${NODE_G2_PATH_HOST}:/app/g2.point.powerOf2:readonly" |
| 104 | + - "${NODE_CACHE_PATH_HOST}:/app/cache:rw" |
| 105 | + - "${NODE_LOG_PATH_HOST}:/app/logs:rw" |
| 106 | + - "${NODE_DB_PATH_HOST}:/data/operator/db:rw" |
| 107 | + - "${NODE_LITT_DB_STORAGE_HOST_PATH_1}:/data/operator/db/chunk_v2_litt_1:rw" |
| 108 | + - "${NODE_LITT_DB_STORAGE_HOST_PATH_2}:/data/operator/db/chunk_v2_litt_2:rw" |
| 109 | +``` |
| 110 | +#### Example node output after loading both partitions |
| 111 | +``` |
| 112 | +eigenda-native-node | Jun 2 18:11:47.430 INF node/validator_store.go:108 Using littDB at paths /data/operator/db/chunk_v2_litt_1, /data/operator/db/chunk_v2_litt_2 |
| 113 | +eigenda-native-node | Jun 2 18:11:47.430 INF littbuilder/db_impl.go:118 LittDB started, current data size: 0 |
| 114 | +eigenda-native-node | Jun 2 18:11:47.430 INF littbuilder/db_impl.go:169 creating table chunks |
0 commit comments