diff --git a/README.md b/README.md index 2e0b62998..813e6f84c 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ # Base Node -Base is a secure, low-cost, developer-friendly Ethereum L2 built on Optimism's [OP Stack](https://docs.optimism.io/). This repository contains a Docker build for running a Base node with `base-reth-node` and `base-consensus`. +Base is a secure, low-cost, developer-friendly Ethereum L2 running on the [Base stack](https://github.com/base/base). This repository contains a Docker build for running a Base node with `base-reth-node` and `base-consensus`. [![Website base.org](https://img.shields.io/website-up-down-green-red/https/base.org.svg)](https://base.org) [![Docs](https://img.shields.io/badge/docs-up-green)](https://docs.base.org/) @@ -109,6 +109,30 @@ Snapshots are available to help you sync your node more quickly. See [docs.base. For support please join our [Discord](https://discord.gg/buildonbase) and post in `🛠|node-operators`. You can alternatively open a new GitHub issue. +### Missing L1InfoDeposit error when using pruned snapshots + +If you see an error like `EngineReset(SyncStart(FromBlock(MissingL1InfoDeposit(...))))` in the consensus logs after syncing with a pruned snapshot, it means the snapshot does not contain enough historical data for the consensus client to verify the L1 deposit contract initialization. + +**Solution:** Use an unpruned (archive) snapshot or a pruned snapshot that includes at least the first ~40 days of history (approximately block 45,000,000 as of mid‑2026). Alternatively, sync from scratch without a snapshot, or use an archive node for the execution client. + +**Steps to resolve:** + +1. Verify the snapshot age: check the block number associated with the snapshot (provided in the snapshot name or description). + +2. If the snapshot is older than ~40 days, download a newer snapshot from the official snapshots page: https://docs.base.org/chain/run-a-base-node#snapshots + +3. If you prefer not to use snapshots, remove the snapshot data directory and let the node sync from genesis (this will take longer but guarantees completeness). + +4. Ensure that both execution and consensus clients are using the same snapshot data directory (they share `/data` in the default compose setup). + +``` +# Example: remove old data and restart +rm -rf ./reth-data/* +docker compose up --build +``` + +**Note:** This issue is not a bug in the node software but a limitation of pruned snapshots that discard historic state needed for deposit contract verification. + ## Disclaimer THE NODE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. We make no guarantees about asset protection or security. Usage is subject to applicable laws and regulations. diff --git a/execution-entrypoint b/execution-entrypoint index cea226016..3aa7dd7ed 100755 --- a/execution-entrypoint +++ b/execution-entrypoint @@ -150,7 +150,7 @@ exec "$BINARY" node \ --authrpc.port="$AUTHRPC_PORT" \ --authrpc.jwtsecret="$BASE_NODE_L2_ENGINE_AUTH" \ --metrics=0.0.0.0:"$METRICS_PORT" \ - --max-outbound-peers=100 \ + --max-outbound-peers=${RETH_MAX_OUTBOUND_PEERS:-100} \ --chain "$RETH_CHAIN" \ --rollup.sequencer-http="$RETH_SEQUENCER_HTTP" \ --rollup.disable-tx-pool-gossip \ diff --git a/supervisord.conf b/supervisord.conf index 77d11a461..543513cb8 100644 --- a/supervisord.conf +++ b/supervisord.conf @@ -5,6 +5,7 @@ logfile_maxbytes=0 [program:base-consensus] command=/app/consensus-entrypoint +autorestart=true stdout_logfile=/dev/fd/1 stdout_logfile_maxbytes=0 redirect_stderr=true @@ -12,7 +13,8 @@ stopwaitsecs=300 [program:execution] command=/app/execution-entrypoint +autorestart=true stdout_logfile=/dev/fd/1 stdout_logfile_maxbytes=0 redirect_stderr=true -stopwaitsecs=300 +stopwaitsecs=300 \ No newline at end of file