> For the complete documentation index, see [llms.txt](https://valargroup.gitbook.io/shielded-vote-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://valargroup.gitbook.io/shielded-vote-docs/chain/setting-up-a-monitoring-node.md).

# Setting Up a Monitoring Node

A monitoring node follows the vote chain and independently verifies all governance transactions. Anyone can run one to audit the voting process.

## What a monitoring node does

* Maintains a full copy of the vote commitment tree
* Verifies every ZKP submitted to the chain
* Tracks all nullifier sets for correctness
* Independently computes the aggregate El Gamal ciphertext per (proposal, decision)
* Verifies the election authority's decryption proof at tally time

## Why run one

The tally is publicly verifiable — you do not need to trust the election authority or the validators. A monitoring node lets you:

* Confirm the aggregate ciphertext matches the sum of all submitted shares
* Verify the Chaum-Pedersen proof of correct decryption
* Detect any invalid transactions that may have been included

## Setup

A monitoring node follows the same initial setup as a [validator](/shielded-vote-docs/chain/setting-up-a-validator.md), but skips funding and registration:

1. Run the join script:

   ```bash
   curl -fsSL https://shielded-vote.nyc3.digitaloceanspaces.com/join.sh | bash
   ```

   This downloads `zallyd`, `genesis.json`, initializes the node, and configures peer connections — same as a validator.
2. Start the node to sync:

   ```bash
   ~/.zallyd/start.sh
   ```

   Without funding, the script will sync the chain but never broadcast `MsgCreateValidatorWithPallasKey`. Your node follows the chain as a full node without participating in consensus or the ceremony.

That's it. Once synced, the node independently verifies every ZKP, tracks nullifiers, maintains the vote commitment tree, and can audit the tally.
