> 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/installation.md).

# Installation

Install and synchronize Dora Mainnet, one command at a time.

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

Use a fresh Ubuntu 24.04 x86-64 server and a regular user with sudo access. Run all commands as the same user; the service will use that user's `$HOME/.dora`. Check [requirements](/mainnet/dora.md#requirements) first.

For an existing node, use [Upgrade](/mainnet/dora/upgrade.md). Do not initialize over an existing validator home. A current post-v1.0.0 Mainnet snapshot is required for the bootstrap path below; confirm availability on [Snapshots](/mainnet/dora/snapshots.md) before beginning.

## Prepare the server

### Refresh packages

Load the Ubuntu package index.

```bash
sudo apt update
```

### Install utilities

Install tools for downloads, JSON, editing and compressed snapshots.

```bash
sudo apt install -y ca-certificates curl jq lz4 tar nano less
```

### Check architecture

Continue with this release asset only when the output is x86\_64.

```bash
uname -m
```

## Install the binary

### Download v1.0.0

Save the official static Linux amd64 binary.

```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 if the checksum fails.

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

### Install dorad

Install the verified executable. No Go compiler or libwasmvm shared library is needed.

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

### Check the binary

Confirm v1.0.0 and the source commit shown on the project overview.

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

## Initialize the node

### Set a moniker

Choose the public name of this node.

```bash
read -rp "Node moniker: " MONIKER
```

### Initialize a new home

Create fresh configuration and node identity. Run once on a new server.

```bash
dorad init "$MONIKER" --chain-id vota-ash --home "$HOME/.dora"
```

### Download genesis

Use the official network genesis pinned to the release tag.

```bash
curl -fL https://raw.githubusercontent.com/DoraFactory/doravota/v1.0.0/config/mainnet/genesis.json -o "$HOME/.dora/config/genesis.json"
```

### Verify genesis

Expect OK. Stop on a mismatch.

```bash
echo "bb1f3841ad636a8dc5320ca39266adc00f27c312d0e73eb35f8a4384306bcbd6  $HOME/.dora/config/genesis.json" | sha256sum -c -
```

### Confirm the chain ID

The result must be vota-ash.

```bash
jq -r .chain_id "$HOME/.dora/config/genesis.json"
```

### Set the minimum gas price

Set a local mempool fee floor in peaka; this is not a fixed transaction fee.

```bash
sed -i 's/^minimum-gas-prices *=.*/minimum-gas-prices = "100000000000peaka"/' "$HOME/.dora/config/app.toml"
```

### Set a discovery seed

Use the ITRocket seed for this network.

```bash
sed -i 's|^seeds *=.*|seeds = "4ec0eb59ae35418a9bfa3df3783bad4f372b49c0@doravota-mainnet-seed.itrocket.net:42656"|' "$HOME/.dora/config/config.toml"
```

### Set a persistent peer

Add the separately operated ITRocket peer.

```bash
sed -i 's|^persistent_peers *=.*|persistent_peers = "d6edfdb5eae3565a4af1ce35fd2c03084b8c3ef1@doravota-mainnet-peer.itrocket.net:42656"|' "$HOME/.dora/config/config.toml"
```

### Review network exposure

Keep RPC on 127.0.0.1:26657 and statesync disabled for snapshot restoration. In app.toml, keep API/gRPC disabled or bound to loopback.

```bash
nano "$HOME/.dora/config/config.toml" "$HOME/.dora/config/app.toml"
```

Allow inbound TCP 26656 in your host and provider firewalls. Preserve your actual SSH port and administrative access when changing firewall rules.

## Create the service

### Create the systemd unit

Run as the same non-root user used for initialization. The command records this user's actual name and home.

```bash
sudo tee /etc/systemd/system/dorad.service > /dev/null <<EOF
[Unit]
Description=Dora Vota Mainnet
Wants=network-online.target
After=network-online.target

[Service]
User=$(whoami)
WorkingDirectory=$HOME
ExecStart=/usr/local/bin/dorad start --home $HOME/.dora
Restart=on-failure
RestartSec=10
LimitNOFILE=65535
TimeoutStopSec=300

[Install]
WantedBy=multi-user.target
EOF
```

### Reload systemd

Load the new unit without starting it.

```bash
sudo systemctl daemon-reload
```

## Restore and start

Follow [Snapshots](/mainnet/dora/snapshots.md) to restore a recent **vota-ash snapshot created after the v1.0.0 migration**. Do not start v1.0.0 against an empty database and assume it can replay the entire historical chain. Keep the configuration and identity created above.

### Enable and start

Run only after the snapshot restore has completed successfully.

```bash
sudo systemctl enable --now dorad
```

### Follow logs

Check peers, successful block processing and any errors. Ctrl+C exits the log view without stopping the node.

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

### Verify synchronization

Confirm the correct network, a current block time and catching\_up=false. Compare height with an independent public RPC.

```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}'
```

Continue to [Validator](/mainnet/dora/validator.md) only after the node is fully synchronized.

[Official node guide](https://docs.dorafactory.org/docs/vota-devops/node) · [v1.0.0 release](https://github.com/DoraFactory/doravota/releases/tag/v1.0.0) · [ITRocket network reference](https://itrocket.space/services/mainnet/doravota/installation/)
