Context
On November 9, Injective carried out a mainnet upgrade as part of its network readiness program. The program tests emergency upgrade procedures and coordination across validators and ecosystem partners through periodic, unannounced exercises. The exercise completed successfully and normal network operations resumed. Operators still running an older binary must upgrade their nodes.Required action
This applies to validators, sentries, RPC and broadcast nodes, and nodes supporting exchanges, custodians, market makers, indexers, explorers, relayers, and other integrations. If you use a third-party node provider, confirm they have upgraded.
1. Download and verify
Official release · Release manifest
Download into a staging directory and compare the archive’s SHA-256 against its entry in the checksum file before extracting or installing. Use
sha256sum on Linux or shasum -a 256 on macOS.
Docker: use injectivelabs/injective-core:v1.20.4-bl.3. Verify without mounting node data:
2. Stop and back up
- Stop your node service, Cosmovisor, or container deployment. Confirm
injectivedhas exited and its supervisor cannot restart it during the swap. A halted chain does not mean the node process has stopped. - Back up the existing binary and node configuration. Preserve existing node data; a normal binary swap does not require a snapshot restore.
- Validators: after shutdown, back up
<node-home>/data/priv_validator_state.jsonoutside the data directory. Remote signer operators must preserve their signer’s state using their existing procedure.
~/.injectived is only the default.
3. Swap the binary
Managed binary swap without Cosmovisor
For a systemd-managed node, use your actual unit name (the example isinjectived). Check ExecStart to identify the executable, node home, user, and startup flags:
- Replace the
injectivedexecutable your service actually uses with the verified release binary. - Preserve ownership and executable permissions. On Linux, ensure the installed executable has its execute bit set (
chmod +x <installed-binary-path>). - Install the bundled
libwasmvm.x86_64.sowhere your Linux AMD64 service loads it. The official release uses/usr/liband runssudo ldconfig. Verify that location’s library:
Managed binary swap with Cosmovisor
Stop the systemd unit that runs Cosmovisor, even if that unit is namedinjectived. Use your actual unit name in place of cosmovisor below:
DAEMON_HOME from the service configuration, including any environment file. It may not be set in your interactive shell. Complete the backups in step 2 after shutdown.
- With Cosmovisor and its child process stopped, replace
$DAEMON_HOME/cosmovisor/current/bin/injectivedwith the verified binary. - Preserve ownership and executable permissions, and verify the runtime library as above.
- Do not create a new
upgrades/<name>directory. There is no upgrade handler to switch binaries automatically.
Docker or another container deployment
Update your existing deployment toinjectivelabs/injective-core:v1.20.4-bl.3, preserving its data volumes, configuration, user, and startup arguments. The image includes runtime libraries.
For Docker Compose, change the node service’s image, then pull and recreate it using your existing Compose configuration. Set node_service to your actual service name:
4. Verify and restart ASAP
Runversion against the exact installed executable or image and confirm v1.20.4-bl.3 (e0a1168). Cosmovisor operators should run:
- The node is on
injective-1, block height advances, and it catches up to the network. - Logs show no AppHash mismatch or missing-library errors.
- Validators participate normally; partner integrations receive current blocks.
5. AppHash mismatch recovery
- Stop the node and its supervisor again. Confirm the process has exited.
- Preserve the latest validator signing state after shutdown, outside the data directory. Keep a backup of node data, keys, and config before restoring.
- Obtain the recovery files from the pre-upgrade snapshot manifest for 191,016,661. The JSON is a manifest, not the snapshot archive itself. Confirm database-backend compatibility and verify the snapshot against published checksums.
- Restore using the Chain Portal snapshot instructions and validator recovery precautions. Use the patched binary for replay.
- Restore your preserved validator signing state before restarting, or follow your remote signer’s recovery procedure. Never reset signing state, replace it with older state, or run two instances with the same validator key.
- Restart and repeat the health checks above.
bl.2 incident to this release without explicit chain-team guidance.
