Downgrading to Older Versions
If you are running a Mina node on a version above 3.3.0 and need to roll back to 3.3.0 or below, you can convert the on-disk state in place using mina-storage-converter. This avoids a full rebootstrap from a remote S3 ledger bucket, which can save significant time.
When is downgrading needed?
Downgrading is typically necessary when a fork fails and there is a RocksDB version bump between the stop slot release and the pre-stop slot release. In such cases, the development team will notify node operators that a downgrade is required to continue operating on the correct chain.
Debian/Ubuntu
1. Stop the Mina daemon
Ensure your Mina node is fully shut down before proceeding:
mina client stop daemon
Or however you normally stop your node process. Verify it is no longer running before continuing.
2. Install storage toolbox packages
Install the required toolbox packages that provide mina-storage-converter and the RocksDB scanners:
sudo apt-get install -y mina-daemon-storage-toolbox mina-daemon-recovery-storage-toolbox
3. Convert on-disk state
Run mina-storage-converter to convert the local database to the format expected by the older version.
mina-storage-converter \
--node-dir ${NODE_DIR} \
--current-scanner /usr/lib/mina/storage/*/${SOURCE_VERSION}/mina-rocksdb-scanner \
--stable-scanner /usr/lib/mina/storage/*/${TARGET_VERSION}/mina-rocksdb-scanner
Where:
NODE_DIRis the path to your node's config directory. This is usually~/.mina-configif you haven't set it explicitly.SOURCE_VERSIONis the version you are downgrading from.TARGET_VERSIONis the version you are downgrading to (e.g.3.3.0).
The * wildcard lets bash resolve the RocksDB version directory automatically, so you don't need to know which RocksDB version is bundled with each Mina release.
The tool will prompt for confirmation before making changes.
4. Install the target version
Install the older Mina package. For example, to install 3.3.0:
sudo apt-get install --allow-downgrades -y mina-mainnet=3.3.0
5. Start the Mina daemon
Start your node as usual:
mina daemon ${YOUR_EXTRA_DAEMON_ARGS_HERE}
Your node should resume from the converted local state without needing to rebootstrap.
Docker
On-disk state conversion is only possible if your mina-config directory is persisted as a volume outside the container (e.g. via --mount "type=bind,source=$(pwd)/.mina-config,dst=/root/.mina-config").
If your mina-config is not persisted outside of the container, there is no way to convert the on-disk state. You will need to rebootstrap from scratch after switching to the older image.
Since the Docker image is a Debian/Ubuntu environment with the Mina Debian package installed, you can run the same conversion steps inside the container. The default NODE_DIR inside the container is /root/.mina-config.
1. Stop the running container
Assume your mina daemon container is running with name mina-node
docker stop mina-node
2. Install toolbox packages and run the converter
Use the current (newer) image to install the toolbox packages and run the conversion against your mounted mina-config volume:
docker run -it --rm \
--entrypoint bash \
--mount "type=bind,source=$(pwd)/.mina-config,dst=/root/.mina-config" \
minaprotocol/mina-daemon:${SOURCE_VERSION}-bullseye-mainnet \
-c "apt-get update && apt-get install -y mina-daemon-storage-toolbox mina-daemon-recovery-storage-toolbox && mina-storage-converter --node-dir /root/.mina-config --current-scanner /usr/lib/mina/storage/*/${SOURCE_VERSION}/mina-rocksdb-scanner --stable-scanner /usr/lib/mina/storage/*/${TARGET_VERSION}/mina-rocksdb-scanner"
3. Start a new container with the target version
Remove the old container and start with the target image:
docker rm mina-node
docker run --name mina-node -d \
-p 8302:8302 \
--restart=always \
--mount "type=bind,source=$(pwd)/.mina-config,dst=/root/.mina-config" \
minaprotocol/mina-daemon:${TARGET_VERSION}-bullseye-mainnet \
daemon ${YOUR_EXTRA_DAEMON_ARGS_HERE}
Your node should resume from the converted local state without needing to rebootstrap.