Missing .env
No .env file found. Copy from .env.testnet.example or .env.mainnet.example and fill the required values.
Missing artifacts/<network>/genesis.json
Artifacts are missing or the folder name does not match WHITECHAIN_NETWORK. Place genesis.json and rollup.json under artifacts/<network>/. The folder name must match the WHITECHAIN_NETWORK value in .env.
Compose refuses to start, asks for PUBLIC_IP
PUBLIC_IP is not set in .env. Set it to the public IP the node advertises for P2P.
Compose refuses to start, asks for WHITECHAIN_PUBLIC_RPC
The transaction-forwarding target is not set. Set WHITECHAIN_PUBLIC_RPC to the public Whitechain RPC URL in .env.
WHITECHAIN_RETH_TRUSTED_PEERS missing (full-snap-node only)
The full-snap-node profile needs a trusted reth enode to snap-sync from. Set WHITECHAIN_RETH_TRUSTED_PEERS to enode://<pubkey>@<ip>:30303 in .env.
failed to insert unsafe payload ... node is syncing
Expected during the initial consensus-layer sync of a fresh full-node or archive-node database. op-node receives an unsafe head over gossip, but op-reth has not re-executed up to its parent yet, so the forkchoice update returns SYNCING. Meanwhile Advancing bq origin log lines show L1 derivation is still progressing. The messages stop once the node catches up. To avoid the long catch-up, restore a snapshot or use full-snap-node.
full-snap-node is not snap-syncing
- Confirm
WHITECHAIN_RETH_TRUSTED_PEERSis a reachable reth enode (enode://<pubkey>@<ip>:30303) and the peer is up. - Confirm outbound EL P2P (devp2p) to that peer is not blocked by a firewall.
- Check that
op-nodelogs show--syncmode=execution-layeris active andop-rethreports syncing against the trusted peer.
Restored a snapshot but the node resyncs from genesis
Check these three things:- Confirm the data landed in the right place:
data/<profile>/op-reth/dbanddata/<profile>/op-reth/static_filesmust exist. - Confirm the snapshot matches
WHITECHAIN_NETWORKand the profile you start. - Make sure the node was stopped during extraction.
Sync is slow
Common causes, in order of likelihood:- No snapshot restored on a long-running
full-nodeorarchive-node, so the node re-executes from genesis. Restore one, or usefull-snap-node. - L1 endpoint is rate-limited or slow. Switch to a faster L1 RPC and Beacon, or run your own L1 node.
- Disk I/O is the bottleneck. Move
data/to NVMe storage.
optimism_syncStatus shows unsafe_l2.number = 0
The node has not yet inserted the first L2 block. Wait a minute. If it stays at 0:
- Check op-node logs for
Reset of Engine is completedandInserted new L2 unsafe block. If absent, the engine is not connected. Confirmop-rethis healthy on its HTTP port. - Confirm the genesis block hash in op-node logs matches the one in
rollup.json.
nonce has already been used when deploying
The node is not fully synced. Wait for the optimism_syncStatus lag to drop close to zero before submitting transactions.

