Skip to main content
These instructions are only applicable to testnet. These can be ignored for mainnet.

Upgrade notes

Upgrading from v0.14.5 or earlier: v0.14.6 and v0.14.7 were not deployed to external node operators. For reference, the changes in those releases are listed in the v0.14.6 release notes and v0.14.7 release notes. The v0.15.0 upgrade instructions below cover the full upgrade from v0.14.5.
No breaking changes to node.toml config for v0.15.0.
DB migration required (existing nodes only): v0.15.0 requires a one-time database metadata migration before starting services. See Step 4 for the exact command. Newly provisioned nodes (fresh DB) can skip Step 4. Always run the migration using the v0.15.0 monad-mpt binary — install it first in Step 3.
Compressed RPC requests no longer accepted: If your integration sends compressed request bodies (e.g. Content-Encoding: gzip), switch to uncompressed requests before upgrading. v0.15.0 removes decompression support — compressed requests will be rejected after upgrading.
Note: The v0.15.0 monad-mpt binary includes fixes for two migration edge cases present in earlier builds:
  • Nodes with databases created before num_cnv_chunks was tracked would crash during migration with Assertion 'r != MAP_FAILED' — fixed. (monad PR #2353)
  • Nodes with ≥15.8 TB disk could have data silently corrupted during migration — fixed. (monad PR #2387)

1. SSH into the node as root user

2. Stop services

sudo systemctl stop monad-bft monad-execution monad-rpc

3. Upgrade monad package

If you encounter issues with the GPG signature (e.g. signatures were invalid), please renew the keys with the command below.
curl -fsSL https://pkg.category.xyz/keys/public-key.asc \
  | gpg --dearmor --yes -o /etc/apt/keyrings/category-labs.gpg
sudo apt update && sudo apt install --reinstall monad=0.15.0 -y --allow-downgrades --allow-change-held-packages
sudo apt-mark hold monad
The apt-mark hold monad command prevents the monad package from being upgraded automatically by apt-get upgrade. Without it, unattended system upgrades can install a newer version of monad that has not been approved for your network, causing version mismatch issues.

4. Run DB migration (existing nodes only)

This step is required for any node with an existing database. Newly provisioned nodes (fresh DB) can skip this step.If this step is skipped on an existing database, services will abort on startup with a log message indicating the upgrade is needed — no data corruption occurs. Run the migration and start again.
monad-mpt --storage /dev/triedb --upgrade
Expected output: the migration completes in under 1 second with no errors.

5. Start services and verify

sudo systemctl start monad-bft monad-execution monad-rpc
sudo systemctl status monad-bft monad-execution monad-rpc --no-pager -l
Expected output: All services should show Active: active (running)

6. Verify the correct version is running

monad-rpc -V
Expected output:
monad-rpc {"commit":"8facc4faef28d390b8100e297e1d26022ea561e2","tag":"v0.15.0","branch":"","modified":true}

Notice for RPC providers (Optional): Enable eth_simulateV1

eth_simulateV1 is disabled by default in v0.15.0. Operators who want to expose this method can enable it by adding --enable-eth-simulate-v1 to the monad-rpc service.

How to enable

Step 1: Find your current monad-rpc systemd override file:
systemctl cat monad-rpc
The output will show one or more files. Look for the drop-in file under /etc/systemd/system/monad-rpc.service.d/ — this is the file you need to edit. Step 2: Open the drop-in file and append --enable-eth-simulate-v1 to the end of the ExecStart line:
sudo nano /etc/systemd/system/monad-rpc.service.d/<your-override-file>.conf
The ExecStart line should look like this after editing:
ExecStart=/usr/local/bin/monad-rpc <your existing flags> --enable-eth-simulate-v1
Step 3: Reload and restart monad-rpc:
sudo systemctl daemon-reload
sudo systemctl restart monad-rpc
sudo systemctl status monad-rpc --no-pager -l

Verify

curl -s -X POST http://localhost:8080 \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"eth_simulateV1","params":[{"blockStateCalls":[]},"latest"],"id":1}'
If enabled, you will receive an execution response (not "Method not supported").