> 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/celestia/consensus-node.md).

# Consensus Node

**Mainnet** · Chain ID `celestia`

A consensus node follows the chain and can serve RPC and application gRPC. This guide creates a new node; do not run initialization over an existing validator home.

Complete [Server Setup](/mainnet/celestia/consensus-node/server-setup.md), excluding the optional Go section.

## Install celestia-app

Create a download directory.

```bash
mkdir -p "$HOME/celestia-downloads"
```

Open the directory.

```bash
cd "$HOME/celestia-downloads"
```

Download the network-specific multiplexer archive.

```bash
curl -fL --retry 3 -o celestia-app.tar.gz https://github.com/celestiaorg/celestia-app/releases/download/v10.5.0/celestia-app_Linux_x86_64.tar.gz
```

Download its checksum list.

```bash
curl -fL --retry 3 -o app-checksums.txt https://github.com/celestiaorg/celestia-app/releases/download/v10.5.0/checksums.txt
```

Select the checksum and match it to the local filename.

```bash
awk '$2 == "celestia-app_Linux_x86_64.tar.gz" {print $1 "  celestia-app.tar.gz"}' app-checksums.txt > app.sha256
```

Verify the download. Stop on a missing entry or failed checksum.

```bash
sha256sum --check app.sha256
```

Create an empty extraction directory; use a fresh directory if this already exists.

```bash
mkdir app-unpack
```

Extract the verified archive.

```bash
tar -xzf celestia-app.tar.gz -C app-unpack
```

Locate the binary in the release archive.

```bash
find app-unpack -type f -name celestia-appd
```

Install it. If the previous command showed a nested path, use that exact path here.

```bash
sudo install -m 0755 app-unpack/celestia-appd /usr/local/bin/celestia-appd
```

Check the installed version.

```bash
celestia-appd version
```

## Initialize the network

Create the node configuration and keys for this network.

```bash
celestia-appd init "YOUR_NODE_NAME" --chain-id celestia
```

Download genesis using the network-aware command.

```bash
celestia-appd download-genesis celestia
```

Confirm that the downloaded genesis matches the selected network.

```bash
jq -e '.chain_id == "celestia"' "$HOME/.celestia-app/config/genesis.json"
```

## Configure connectivity and storage

Save the initial consensus configuration.

```bash
cp -p "$HOME/.celestia-app/config/config.toml" "$HOME/.celestia-app/config/config.toml.before-setup"
```

Open the configuration. Set seeds from the network-specific [Peers and Seeds](/mainnet/celestia/services/peers-seeds.md) page in the existing `[p2p]` section.

```bash
nano "$HOME/.celestia-app/config/config.toml"
```

Keep the RPC listener local unless you are deliberately configuring a public service. In the existing `[rpc]` section, set:

```toml
grpc_laddr = "tcp://127.0.0.1:9098"
```

Choose pruning and enable application gRPC in the existing sections.

```bash
nano "$HOME/.celestia-app/config/app.toml"
```

For a pruned consensus node, start with `pruning = "default"`. Choose `min-retain-blocks` for your role: `3000` is the storage-planning baseline, `600000` is the validator recommendation, and `0` keeps all blocks. A bridge syncing from genesis needs an archival consensus source; use `pruning = "nothing"` and `min-retain-blocks = 0` for a fully archival source.

Edit the existing gRPC section, without duplicating it:

```toml
[grpc]
enable = true
address = "127.0.0.1:9090"
```

Set `minimum-gas-prices` to your operator policy. It controls which transactions your node accepts; it is separate from a transaction's fee flags.

## Run as a service

Create the service file. Replace YOUR\_LINUX\_USER and its home path below.

```bash
sudo nano /etc/systemd/system/celestia-appd.service
```

Paste this service configuration.

```ini
[Unit]
Description=Celestia consensus node
Wants=network-online.target
After=network-online.target

[Service]
User=YOUR_LINUX_USER
ExecStart=/usr/local/bin/celestia-appd start --home /home/YOUR_LINUX_USER/.celestia-app --rpc.grpc_laddr tcp://127.0.0.1:9098
Restart=on-failure
RestartSec=5
LimitNOFILE=65535

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

Load the new service definition.

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

If using a [snapshot](/mainnet/celestia/services/snapshots.md), restore it before starting the new node. Otherwise, the node syncs from genesis, which can take a long time.

Enable startup at boot and start the node.

```bash
sudo systemctl enable --now celestia-appd
```

Inspect recent startup messages.

```bash
sudo journalctl -u celestia-appd -n 100 --no-pager
```

Confirm the network, increasing height and recent block time. Wait for catching\_up to become false.

```bash
curl -fsS http://127.0.0.1:26657/status | jq '.result | {network: .node_info.network, sync: .sync_info}'
```

Source: [Celestia documentation](https://docs.celestia.org/operate/consensus-validators/consensus-node/).
