Common error codes
These are the most frequent errors and their solutions:Consensus errors
If you get a consensus error, act quickly and appropriately:Network errors
Network errors can prevent your node from participating in consensus:Database errors
Database corruption can require immediate attention:Diagnostic commands
These commands help you investigate problems and monitor your node:AppHash mismatch errors
If you get an AppHash mismatch, capture the state to compare it with a known-good version:As with FlatKV, the memIAVL store has two possible locations. Nodes created before the layout change keep the legacy
$HOME/.sei/data/committer.db path shown above (it takes precedence when present). New nodes use $HOME/.sei/data/state_commit/memiavl. Point -d at whichever path exists on your node.dump-flatkv command to iterate and dump the physical (key, value) pairs into per-bucket files. The files match the dump-iavl format, so the same diff tooling works on both:
Nodes created before the storage layout change keep the FlatKV store at the legacy path
$HOME/.sei/data/flatkv instead of $HOME/.sei/data/state_commit/flatkv. Pass whichever directory exists on your node to --db-dir.dump-flatkv command accepts these flags:
--db-dir(-d): The FlatKV database directory.--output-dir(-o): The output directory, with one file for each bucket.--height: The FlatKV target version. The default,0, selects the latest available version.--bucket(-b): Restrict the dump to a single bucket (account,code,storage, orlegacy). The default is all buckets.
storage bucket at a specific version:
Comparing EVM state between memIAVL and FlatKV
When you debug an AppHash mismatch that involves EVM state, a byte-for-byte physical dump can diverge between backends, even when the underlying state is identical. This happens because every FlatKV value embeds a per-key block-height stamp (the height at which the key was last written or migrated). On a freshly migrated node, this stamp differs from the memIAVL leaf versions. Theevm-logical-digest command works around this with a backend-independent digest of the EVM logical state. On both sides, it strips the serialization-version and block-height header. Then it digests only the logical payload: account balance, nonce, and code hash, plus bytecode and storage words. With this digest, you can compare a memIAVL node and a FlatKV node at the same chain height:
bucket_digest values and a single FINAL_DIGEST line that covers the account, code, storage, and legacy buckets. Compare the FINAL_DIGEST lines from both backends at the same height. They should match. FlatKV can contain a FlatKV-only migration-version marker that a memIAVL-only node never owns. The command automatically omits that row from the FlatKV final result, so both results cover the same data.
For targeted debugging, the command can also inspect a single normalized bucket instead of printing the global digest. The seidb tooling section of the technical reference has the full flag reference, including inspect mode, sharding, and --find-hash. These examples list the first 50 account rows with version metadata, and shard the storage bucket under a key prefix by the next 2 bytes:
Identifying AppHash errors
In logs, AppHash errors usually look like this:- Using an incorrect node version during sync (make sure that you run the latest version)
- Corrupted or incorrectly applied snapshots
- Database inconsistencies from improper shutdowns
- Syncing with outdated or incompatible peers
- Stop the node immediately.
- Try a node rollback first. See Node rollback.
-
If the rollback fails, restore from a fresh snapshot:
- Download a recent snapshot from trusted providers (Polkachu, PublicNode)
- Make sure that you use the correct node version
- Verify that peer configurations are up to date
- Restart the node and monitor the logs for continued errors.
Peer connection issues as AppHash red herrings
Important: Peer connection failures are often symptoms of underlying AppHash errors, not the root cause. If you see many peer connection errors like these:- Scan your logs carefully for AppHash errors that may appear intermittently
- Look for the actual error pattern:
- Check whether your node is stuck at a specific height despite peer connection attempts
- AppHash mismatches prevent proper block validation
- The node cannot advance to new blocks because of a state inconsistency
- Peers may reject connections from nodes with corrupted state
- The network appears to be the problem, but the cause is a local state issue
- First, check for AppHash errors in your logs (search for “wrong Block.Header.AppHash”)
- If you find AppHash errors, treat them as the primary issue
- Focus on peer connection fixes only if no AppHash errors exist
Peer connection and handshake issues
Identifying peer issues: Look for these error patterns in your logs:- Outdated peer configurations with mismatched node IDs
- Network infrastructure changes on the peer side
- A firewall that blocks connections on port 26656
- DNS resolution issues
- Update peer configurations with current node IDs:
-
Verify network connectivity:
-
Check the current peer status:
Sync performance issues
Identifying sync problems: Monitor these indicators:-
Increase the packet payload size for large block processing:
-
Optimize the mempool settings in
config.toml: -
If the node gets stuck at a specific height:
- Try restarting the node
- If that does not help, perform a rollback
- Consider taking a fresh snapshot
- The current height does not increase over time
- Increasing lag between the current height and the max peer height
- Repeated timeout errors in the logs
- Mempool size that consistently reaches its limits
Crash and panic debugging
For crashes, panics, or nil pointer exceptions:- Capture at least 1,000 lines of logs before the crash or 15 minutes of log data, whichever gives more context
- Include the full stack trace, if it is available
Logging configuration
Proper logging configuration is essential for debugging and monitoring:Other common issues and fixes
-
Sync problems
- Check available disk space (
df -h) - Make sure that peer connections work (
curl http://localhost:26657/net_info) - Check that the firewall allows port 26656
- Check available disk space (
-
Performance issues
- Monitor system resources (
htoporiotop) - Check disk I/O performance (
iostat) - Analyze network traffic (
iftop)
- Monitor system resources (
-
Database issues
-
Run database integrity checks:
If you find errors, consider restoring from a recent backup.
-
To keep less historical data, lower
ss-keep-recentinapp.toml. -
To rebuild the node with a smaller database, reset it. Then resync from a
snapshot or with state sync. The
reset deletes all chain data, so it is not a pruning tool. Before you
reset, back up
priv_validator_key.jsonandpriv_validator_state.json, as described in Clean up:Alternatively, remove old state snapshots manually to free disk space:
-
Run database integrity checks:
Node rollback
To roll back a node from an AppHash mismatch, first stop the node in your preferred way. Next, roll back the node:seid process directly. If this does not help, restart your machine.
Then try the rollback steps again.