> ## Documentation Index
> Fetch the complete documentation index at: https://docs.monad.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# v0.15.0 Upgrade Instructions

<Warning>
  These instructions are only applicable to **testnet**. These can be ignored for **mainnet**.
</Warning>

## Upgrade notes

<Note>
  **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](https://github.com/category-labs/monad-bft/releases/tag/v0.14.6) and [v0.14.7 release notes](https://github.com/category-labs/monad/releases/tag/v0.14.7). The v0.15.0 upgrade instructions below cover the full upgrade from v0.14.5.
</Note>

No breaking changes to `node.toml` config for v0.15.0.

<Warning>
  **DB migration required (existing nodes only):** v0.15.0 requires a one-time database metadata migration before starting services. See [Step 4](#4-run-db-migration-existing-nodes-only) 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.
</Warning>

<Warning>
  **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.
</Warning>

**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](https://github.com/category-labs/monad/pull/2353))
* Nodes with ≥15.8 TB disk could have data silently corrupted during migration — fixed. ([monad PR #2387](https://github.com/category-labs/monad/pull/2387))

## 1. SSH into the node as `root` user

## 2. Stop services

```bash theme={null}
sudo systemctl stop monad-bft monad-execution monad-rpc
```

## 3. Upgrade monad package

<Warning>
  If you encounter issues with the GPG signature (e.g. signatures were invalid), please renew the keys with the command below.
</Warning>

```bash theme={null}
curl -fsSL https://pkg.category.xyz/keys/public-key.asc \
  | gpg --dearmor --yes -o /etc/apt/keyrings/category-labs.gpg
```

```bash theme={null}
sudo apt update && sudo apt install --reinstall monad=0.15.0 -y --allow-downgrades --allow-change-held-packages
sudo apt-mark hold monad
```

<Warning>
  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.
</Warning>

## 4. Run DB migration (existing nodes only)

<Warning>
  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.
</Warning>

```bash theme={null}
monad-mpt --storage /dev/triedb --upgrade
```

Expected output: the migration completes in under 1 second with no errors.

## 5. Start services and verify

```bash theme={null}
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

```bash theme={null}
monad-rpc -V
```

Expected output:

```json theme={null}
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:

```bash theme={null}
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:

```bash theme={null}
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`:

```bash theme={null}
sudo systemctl daemon-reload
sudo systemctl restart monad-rpc
sudo systemctl status monad-rpc --no-pager -l
```

### Verify

```bash theme={null}
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"`).
