Azul Node Upgrade Guide
Azul is only supported by base-reth-node (execution) and base-consensus (consensus). Nodes still running op-node, op-geth, op-reth, nethermind, or kona cannot follow the upgrade and have to be migrated.
Azul went live on mainnet at May 28, 2026 18:00 UTC (1779991200). The Azul overview carries the full activation-timestamp table.
Required software
Section titled “Required software”| Layer | Software | Mainnet | Testnet |
|---|---|---|---|
| Execution (EL) | base-reth-node | v0.9.0+ | v0.7.0+ |
| Consensus (CL) | base-consensus | v0.9.0+ | v0.7.0+ |
Migrating the execution layer
Section titled “Migrating the execution layer”Coming from OP Reth
Section titled “Coming from OP Reth”Operators already on OP Reth via base/node only need to update — the latest version switches the binary to base-reth-node automatically, and your current ./reth-data directory carries over with no re-sync or snapshot restore required.
-
Stop your node:
Terminal window docker compose down -
Update to the latest version of base/node:
Terminal window git pull origin main -
Start your node:
Terminal window docker compose up -
Confirm the client version:
web3_clientVersionshould now carrybasein the string (for examplereth/v1.11.3-.../base/v0.9.0).
Coming from another client
Section titled “Coming from another client”op-geth and nethermind are no longer supported, so you will have to start over on base-reth-node.
-
Stop your node:
Terminal window docker compose down -
Update to the latest version of base/node:
Terminal window git pull origin main -
Delete the old data directory (for example
./geth-dataor./nethermind-data). -
Adjust
.env.mainnetor.env.sepoliato your preferences. -
Bootstrap from a Reth snapshot so you can skip a full sync.
-
Start your node:
Terminal window docker compose up
Migrating the consensus layer
Section titled “Migrating the consensus layer”Swap op-node for base-consensus by updating environment variables.
-
Set
USE_BASE_CONSENSUS=truein your.envfile. -
Add the new
BASE_NODE_*environment variables (mapping below). -
Restart your node:
Terminal window docker compose up -
Verify:
- Tail the consensus logs:
docker compose logs -f node - Confirm sync status:
optimism_syncStatusstill responds
- Tail the consensus logs:
Environment variable mapping
Section titled “Environment variable mapping”On base/node most of these are already populated in .env.mainnet and .env.sepolia. If you build from base/base, use the table below to translate your op-node variables to base-consensus. Most are optional; run base-consensus node --help for the complete list.
op-node | base-consensus |
|---|---|
OP_NODE_NETWORK | BASE_NODE_NETWORK |
OP_NODE_ROLLUP_CONFIG | BASE_NODE_ROLLUP_CONFIG |
| — | BASE_NODE_LOG_VERBOSITY |
| — | BASE_NODE_LOG_FORMAT |
OP_NODE_L1_ETH_RPC | BASE_NODE_L1_ETH_RPC |
OP_NODE_L1_BEACON | BASE_NODE_L1_BEACON |
OP_NODE_L1_TRUST_RPC | BASE_NODE_L1_TRUST_RPC |
OP_NODE_L2_ENGINE_RPC | BASE_NODE_L2_ENGINE_RPC |
OP_NODE_L2_ENGINE_AUTH | BASE_NODE_L2_ENGINE_AUTH |
| — | BASE_NODE_L2_ENGINE_AUTH_ENCODED |
OP_NODE_P2P_BOOTNODES | BASE_NODE_P2P_BOOTNODES |
OP_NODE_P2P_LISTEN_IP | BASE_NODE_P2P_LISTEN_IP |
OP_NODE_P2P_LISTEN_TCP_PORT | BASE_NODE_P2P_LISTEN_TCP_PORT |
OP_NODE_P2P_LISTEN_UDP_PORT | BASE_NODE_P2P_LISTEN_UDP_PORT |
OP_NODE_P2P_ADVERTISE_IP | BASE_NODE_P2P_ADVERTISE_IP |
OP_NODE_P2P_ADVERTISE_TCP | BASE_NODE_P2P_ADVERTISE_TCP_PORT |
OP_NODE_P2P_ADVERTISE_UDP | BASE_NODE_P2P_ADVERTISE_UDP_PORT |
OP_NODE_P2P_PRIV_PATH | BASE_NODE_P2P_PRIV_PATH |
OP_NODE_P2P_PEER_SCORING | BASE_NODE_P2P_SCORING |
OP_NODE_P2P_PEER_BANNING | BASE_NODE_P2P_BAN_PEERS |
OP_NODE_P2P_PEER_BANNING_THRESHOLD | BASE_NODE_P2P_BAN_THRESHOLD |
OP_NODE_P2P_PEER_BANNING_DURATION | BASE_NODE_P2P_BAN_DURATION |
OP_NODE_METRICS_ENABLED | BASE_NODE_METRICS_ENABLED |
OP_NODE_METRICS_ADDR | BASE_NODE_METRICS_ADDR |
OP_NODE_METRICS_PORT | BASE_NODE_METRICS_PORT |
OP_NODE_RPC_ADDR | BASE_NODE_RPC_ADDR |
OP_NODE_RPC_PORT | BASE_NODE_RPC_PORT |
OP_NODE_RPC_ENABLE_ADMIN | BASE_NODE_RPC_ENABLE_ADMIN |
OP_NODE_RPC_ADMIN_STATE | BASE_NODE_RPC_ADMIN_STATE |
OP_NODE_SAFEDB_PATH | BASE_NODE_SAFEDB_PATH |
OP_NODE_SYNCMODE | — |
OP_NODE_VERIFIER_L1_CONFS | — |
OP_NODE_L2_ENGINE_KIND | — |
OP_NODE_L1_RPC_KIND | — |
OP_NODE_L1_BEACON_FETCH_ALL_SIDECARS | — |
OP_NODE_L1_BEACON_FALLBACKS | — |
OP_NODE_ROLLUP_LOAD_PROTOCOL_VERSIONS | — |
OP_NODE_P2P_STATIC | — |
OP_NODE_P2P_DISABLE | — |
OP_NODE_P2P_NAT | — |
- Do I have to re-sync? No, not if you are already on OP Reth — the existing data directory is compatible.
- What if I run
op-gethornethermind? Move tobase-reth-nodeand bootstrap from a Reth snapshot. - Do the OP namespace RPCs still work? Yes — every existing RPC remains supported.