Skip to content

Commit ba7aa3f

Browse files
committed
docs(azul): add health check, rollback, troubleshooting sections and verify commands
1 parent 877eb60 commit ba7aa3f

1 file changed

Lines changed: 111 additions & 19 deletions

File tree

docs/base-chain/specs/upgrades/azul/node-upgrade.mdx

Lines changed: 111 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -29,39 +29,45 @@ If you are already running OP Reth via [base/node](https://github.com/base/node)
2929

3030
1. Stop your node:
3131

32-
```bash
32+
```bash
3333
docker compose down
34-
```
34+
```
3535

3636
2. Update to the latest version of [base/node](https://github.com/base/node):
3737

38-
```bash
38+
```bash
3939
git pull origin main
40-
```
40+
```
4141

4242
3. Start your node:
4343

44-
```bash
44+
```bash
4545
docker compose up
46-
```
46+
```
4747

48-
4. Verify client version: `web3_clientVersion` should include `base` in the version string (e.g. `reth/v1.11.3-.../base/v0.9.0`)
48+
4. Verify client version: `web3_clientVersion` should include `base` in the version string (e.g. `reth/v1.11.3-.../base/v0.9.0`):
49+
50+
```bash
51+
curl -s -X POST http://localhost:8545 \
52+
-H "Content-Type: application/json" \
53+
-d '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":1}'
54+
```
4955

5056
### Migrating from another client
5157

5258
`op-geth` and `nethermind` are no longer supported. You will need to start fresh with `base-reth-node`.
5359

5460
1. Stop your node:
5561

56-
```bash
62+
```bash
5763
docker compose down
58-
```
64+
```
5965

6066
2. Update to the latest version of [base/node](https://github.com/base/node):
6167

62-
```bash
68+
```bash
6369
git pull origin main
64-
```
70+
```
6571

6672
3. Remove your old data directory (e.g. `./geth-data` or `./nethermind-data`).
6773

@@ -71,9 +77,9 @@ If you are already running OP Reth via [base/node](https://github.com/base/node)
7177

7278
6. Start your node:
7379

74-
```bash
80+
```bash
7581
docker compose up
76-
```
82+
```
7783

7884
## Migrating Consensus Layer
7985

@@ -85,19 +91,28 @@ Replace `op-node` with `base-consensus` by updating your environment variables.
8591

8692
3. Restart your node:
8793

88-
```bash
94+
```bash
8995
docker compose up
90-
```
96+
```
97+
98+
4. Verify sync status:
9199

92-
4. Verify:
93-
- Check consensus logs: `docker compose logs -f node`
94-
- Confirm sync status: `optimism_syncStatus` continues to work
100+
```bash
101+
# Check consensus logs
102+
docker compose logs -f node
103+
104+
# Confirm sync status via RPC
105+
curl -s -X POST http://localhost:7545 \
106+
-H "Content-Type: application/json" \
107+
-d '{"jsonrpc":"2.0","method":"optimism_syncStatus","params":[],"id":1}'
108+
```
95109

96110
### Environment Variable Mapping
97111

98112
If you use [base/node](https://github.com/base/node), most variables are already set in `.env.mainnet` and `.env.sepolia`. If you build from [base/base](https://github.com/base/base), use the table below to map your `op-node` environment variables to `base-consensus`. Most are optional. Run `base-consensus node --help` for the full list.
113+
99114
| `op-node` | `base-consensus` |
100-
|-----------|-------------------|
115+
|-----------|------------------|
101116
| `OP_NODE_NETWORK` | `BASE_NODE_NETWORK` |
102117
| `OP_NODE_ROLLUP_CONFIG` | `BASE_NODE_ROLLUP_CONFIG` |
103118
|| `BASE_NODE_LOG_VERBOSITY` |
@@ -140,9 +155,86 @@ If you use [base/node](https://github.com/base/node), most variables are already
140155
| `OP_NODE_P2P_DISABLE` ||
141156
| `OP_NODE_P2P_NAT` ||
142157

158+
## Post-Upgrade Health Check
159+
160+
After migrating, confirm your node is operating correctly:
161+
162+
```bash
163+
# 1. Check both containers are running
164+
docker compose ps
165+
166+
# 2. Verify EL client version includes 'base'
167+
curl -s -X POST http://localhost:8545 \
168+
-H "Content-Type: application/json" \
169+
-d '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":1}' \
170+
| jq '.result'
171+
172+
# 3. Check sync status (unsafe_l2 block number should be advancing)
173+
curl -s -X POST http://localhost:7545 \
174+
-H "Content-Type: application/json" \
175+
-d '{"jsonrpc":"2.0","method":"optimism_syncStatus","params":[],"id":1}' \
176+
| jq '{unsafe: .result.unsafe_l2.number, safe: .result.safe_l2.number}'
177+
178+
# 4. Check peer count (should be > 0)
179+
curl -s -X POST http://localhost:8545 \
180+
-H "Content-Type: application/json" \
181+
-d '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":1}' \
182+
| jq '.result'
183+
```
184+
185+
## Rollback
186+
187+
If you need to revert to your previous setup before activation:
188+
189+
```bash
190+
# 1. Stop the node
191+
docker compose down
192+
193+
# 2. Roll back to previous git state
194+
git checkout <previous-commit-or-tag>
195+
196+
# 3. Restart
197+
docker compose up
198+
```
199+
200+
<Warning>
201+
Rollback is only possible **before** the Azul activation timestamp. After activation, nodes running pre-Azul clients will not follow the canonical chain.
202+
</Warning>
203+
204+
## Troubleshooting
205+
206+
**Node fails to start after update**
207+
208+
Check logs for configuration errors:
209+
```bash
210+
docker compose logs node | tail -50
211+
```
212+
Ensure `USE_BASE_CONSENSUS=true` is set and all required `BASE_NODE_*` variables are present in your `.env` file.
213+
214+
**`web3_clientVersion` does not include `base`**
215+
216+
You may still be running `op-reth`. Confirm `git pull origin main` completed cleanly and re-run `docker compose up --build`.
217+
218+
**Sync stalled or `unsafe_l2` not advancing**
219+
220+
Check L1 RPC connectivity and confirm `BASE_NODE_L1_ETH_RPC` is reachable. A peer count of 0 suggests a network or firewall issue on your P2P port.
221+
222+
**`BASE_NODE_L2_ENGINE_AUTH_RAW` not set**
223+
224+
Generate a secure value and add it to your `.env` file:
225+
```bash
226+
echo "BASE_NODE_L2_ENGINE_AUTH_RAW=$(openssl rand -hex 32)" >> .env
227+
```
228+
229+
**`optimism_syncStatus` returns an error**
230+
231+
Confirm the consensus RPC port (default `7545`) is exposed and `BASE_NODE_RPC_PORT` matches your configuration.
232+
143233
## FAQ
144234

145235
- **Do I need to set `BASE_NODE_L2_ENGINE_AUTH_RAW`?** Yes — this must be set to a secure random hex string shared between the execution and consensus containers. Generate one with `openssl rand -hex 32`. Nodes using host networking or custom port mappings that rely on the default placeholder value are exposed to unauthenticated Engine API access.
146236
- **Do I need to re-sync?** Not if you are already running OP Reth. Existing data is compatible.
147237
- **What if I'm on `op-geth` or `nethermind`?** You need to switch to `base-reth-node`. Use a [Reth snapshot](/base-chain/node-operators/snapshots) to bootstrap.
148238
- **Do OP namespace RPCs still work?** Yes, all existing RPCs are supported.
239+
- **Can I run `base-reth-node` and `op-node` together temporarily?** No. `op-node` will not support Azul. Both layers must be migrated together before activation.
240+
- **Where do I get help?** Join the [Base Discord](https://discord.gg/buildonbase) and post in `🛠|node-operators`, or open an issue on [base/node](https://github.com/base/node/issues).

0 commit comments

Comments
 (0)