Base Azul Upgrade
The Base Azul upgrade activates Osaka features on Base alongside the TEE/ZK proof systems and requires every node operator to migrate to Base-native clients.
The full scope is documented in the Azul specification.
Activation timeline
Section titled “Activation timeline”| Network | Date | Timestamp |
|---|---|---|
| Mainnet | May 28, 2026 18:00 UTC | 1779991200 |
| Sepolia | April 20, 2026 18:00 UTC | 1776708000 |
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”From OP Reth
Section titled “From OP Reth”If you already run OP Reth through the compose setup, updating to the latest release switches you to base-reth-node automatically. Your existing ./reth-data directory is fully compatible — no resync or snapshot restore required.
-
Stop the node:
Terminal window docker compose down -
Pull the latest base/base, which now publishes the operator node:
Terminal window git pull origin main -
Start the node:
Terminal window docker compose up -
Confirm the client version with
web3_clientVersion— the response should includebase(for example,reth/v1.11.3-.../base/v0.9.0).
From other clients
Section titled “From other clients”op-geth and nethermind are no longer supported. You must restart from a clean base-reth-node setup.
-
Stop the node:
Terminal window docker compose down -
Pull the latest base/base, which now publishes the operator node:
Terminal window git pull origin main -
Remove the existing client data directory (for example,
./geth-dataor./nethermind-data). -
Edit
.env.mainnetor.env.sepoliato match your preferences. -
Bootstrap from a Reth snapshot to skip a full sync.
-
Start the node:
Terminal window docker compose up
Migrating the consensus layer
Section titled “Migrating the consensus layer”Replace op-node with base-consensus by updating your environment variables.
-
Set
USE_BASE_CONSENSUS=truein your.envfile. -
Update
.envwith the newBASE_NODE_*variables (see the mapping below). -
Restart:
Terminal window docker compose up -
Verify:
- Tail consensus logs:
docker compose logs -f node - Confirm sync status:
optimism_syncStatuscontinues to work
- Tail consensus logs:
Environment variable mapping
Section titled “Environment variable mapping”The .env.mainnet and .env.sepolia templates in base/base already populate most variables. If you build from base/base, translate op-node variables with the table below. Nearly all of them are optional. base-consensus node --help prints the complete set.
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 need to resync? No, if you already run OP Reth — existing data is compatible.
- What if I’m on
op-gethornethermind? Switch tobase-reth-nodeand bootstrap from a Reth snapshot. - Do OP namespace RPCs still work? Yes, all existing RPCs remain supported.