> For the complete documentation index, see [llms.txt](https://service.block-pro.net/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://service.block-pro.net/mainnet/dora/upgrade.md).

# Upgrade

Upgrade Dora Mainnet at the approved boundary and verify recovery.

**Mainnet · `vota-ash` · v1.0.0**

This guide targets v1.0.0; confirm the live network version with the command below. An already healthy v1.0.0 node does not need to repeat the migration.

The official upgrade path is **0.5.0 → v1.0.0** at the approved governance boundary. A node still catching up on 0.5.0 must reach the recorded `UPGRADE "v1.0.0" NEEDED` boundary before a manual binary switch. Confirm the plan and height from the network announcement and on-chain record; this guide does not invent an upgrade height.

New nodes should follow [Installation](/mainnet/dora/installation.md) and restore a recent post-upgrade [snapshot](/mainnet/dora/snapshots.md).

## Before changing the binary

### Read your version

Check which binary is currently installed.

```bash
dorad version --long
```

### Read the network version

Verify the application version and chain ID reported by the public API.

```bash
curl -fsS https://dora-mainnet-api.block-pro.net/cosmos/base/tendermint/v1beta1/node_info | jq '{chain: .default_node_info.network, version: .application_version.version}'
```

### Read a pending upgrade plan

A completed plan may no longer appear here. For an offline or halted node, use its upgrade record and the official network announcement.

```bash
dorad query upgrade plan --node http://127.0.0.1:26657 --output json
```

### Inspect the effective service

Identify the actual binary, home and any ExecStart overrides. Commands below target the manual service from our installation guide.

```bash
sudo systemctl cat dorad
```

### Inspect halt settings

Ensure app.toml uses halt-height=0 and no obsolete service flag forces a different halt.

```bash
grep -nE '^halt-height|^halt-time' "$HOME/.dora/config/app.toml"
```

Back up the current configuration, binary and a consistent database before migration. Retain the latest validator signing state and any external Wasm bytecode needed for historical research. Never run two copies of the consensus key.

## Prepare the verified binary

### Download the release

Stage the file without replacing the running executable.

```bash
curl -fL https://github.com/DoraFactory/doravota/releases/download/v1.0.0/dorad-v1.0.0-linux-amd64 -o "$HOME/dorad-v1.0.0"
```

### Verify SHA-256

Expect OK. Stop on a mismatch.

```bash
echo "5c741ca406ee2ecb811dd62d83e9a446fee051e2947522525c2560a0a7ce968a  $HOME/dorad-v1.0.0" | sha256sum -c -
```

### Make the staged file executable

Apply executable permissions to the verified file.

```bash
chmod 0755 "$HOME/dorad-v1.0.0"
```

### Check the staged version

Expect v1.0.0 and commit 1a2b30927a7799d4cd6890a3fb3fa80d25613fa2.

```bash
"$HOME/dorad-v1.0.0" version --long
```

## Manual service upgrade

Proceed only when your 0.5.0 node has reached the correct migration boundary. For other source versions, first follow the intervening official upgrade sequence. Run these commands as the same user that owns the node home.

### Stop the service

Stop the supervisor before replacing the binary or copying live database files.

```bash
sudo systemctl stop dorad
```

### Confirm shutdown

Expect inactive. Stop any other process using this same home.

```bash
sudo systemctl is-active dorad
```

### Name the backup directory

Keep this shell open for the following steps.

```bash
DORA_UPGRADE_BACKUP="$HOME/dora-upgrade-backup-$(date +%Y%m%d-%H%M%S)"
```

### Create private backup storage

Ensure sufficient free space for a complete copy of the node home.

```bash
install -d -m 0700 "$DORA_UPGRADE_BACKUP"
```

### Back up the stopped node

Preserve configuration, consistent data and latest signing state together.

```bash
cp -a "$HOME/.dora" "$DORA_UPGRADE_BACKUP/home"
```

### Preserve the old executable

Keep it for investigation; do not restart it against migrated state.

```bash
cp -a /usr/local/bin/dorad "$DORA_UPGRADE_BACKUP/dorad-previous"
```

### Install v1.0.0

Replace the executable only after all preceding checks and backups succeed.

```bash
sudo install -m 0755 "$HOME/dorad-v1.0.0" /usr/local/bin/dorad
```

### Start the node

Resume with the existing home and signing state.

```bash
sudo systemctl start dorad
```

### Check logs

Confirm migration completes and blocks advance beyond the upgrade boundary.

```bash
sudo journalctl -u dorad -f -o cat
```

## Cosmovisor installations

Use this branch only if you already operate Cosmovisor. The plan name and directory are **v1.0.0**, including the `v`. Do not also perform the manual executable replacement above.

### Set the daemon home

Use the exact home configured in your Cosmovisor service; this example matches our guides.

```bash
export DAEMON_HOME="$HOME/.dora"
```

### Create the upgrade directory

Prepare the exact directory name required by the approved plan.

```bash
mkdir -p "$DAEMON_HOME/cosmovisor/upgrades/v1.0.0/bin"
```

### Stage the verified executable

Place the previously verified binary in the upgrade directory.

```bash
install -m 0755 "$HOME/dorad-v1.0.0" "$DAEMON_HOME/cosmovisor/upgrades/v1.0.0/bin/dorad"
```

### Verify the staged checksum

Confirm the actual executable Cosmovisor will select.

```bash
echo "5c741ca406ee2ecb811dd62d83e9a446fee051e2947522525c2560a0a7ce968a  $DAEMON_HOME/cosmovisor/upgrades/v1.0.0/bin/dorad" | sha256sum -c -
```

Stage before the approved height and let Cosmovisor switch at the chain's upgrade event. If the switch fails, stop the supervisor and follow the [official recovery procedure](https://github.com/DoraFactory/doravota/blob/v1.0.0/docs/VALIDATOR-1.0.0.md); do not delete data or reset signing state.

## Verify recovery

### Read the installed version

For a manual service, expect v1.0.0. For Cosmovisor, inspect its selected current binary too.

```bash
dorad version --long
```

### Check node progress

Confirm the correct chain, increasing height and eventually catching\_up=false.

```bash
curl -fsS http://127.0.0.1:26657/status | jq '.result | {chain: .node_info.network, height: .sync_info.latest_block_height, time: .sync_info.latest_block_time, catching_up: .sync_info.catching_up}'
```

Validators should verify they resume signing. Compare AppHash with an independent node at the **same height**. Never restart 0.5.0 against migrated v1.0.0 data or restore an old signing-state file after new blocks have been signed.

## v1.0.0 compatibility notes

* The binary is static; no libwasmvm shared library is needed.
* Live Wasm execution and smart queries are removed. Historical raw contract state is exposed through `wasm-archive` where the data is retained.
* Bank transfers, staking and ordinary IBC transfers remain supported; the release does not repair expired IBC clients.
* New accounts can use the full uint64 account-number range. Update wallet/indexer integrations accordingly, and look up a transaction hash before retrying after a client-side decoding error.

[Official v1.0.0 upgrade guide](https://github.com/DoraFactory/doravota/blob/v1.0.0/docs/VALIDATOR-1.0.0.md) · [Release and checksums](https://github.com/DoraFactory/doravota/releases/tag/v1.0.0)
