> For the complete documentation index, see [llms.txt](https://docs.tensorplex.ai/tensorplex-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.tensorplex.ai/tensorplex-docs/tensorplex-dojo-bittensor-subnet/guide-validator.md).

# Guide - Validator

Note: URLs are different for devnet, testnet and mainnet, always check the [Official Links](/tensorplex-docs/tensorplex-dojo-bittensor-subnet/official-links.md)!

To get started as a miner or validator, these are the common steps both a miner and validator have to go through.

***

## Getting Started

{% hint style="info" %}
Important

This setup guide uses specific tools to ensure a smooth installation process:

* [fnm](https://github.com/Schniz/fnm) for managing Node.js & npm versions (required for PM2)
* [Docker](https://docs.docker.com/engine/install/) and [Docker Compose](https://docs.docker.com/compose/)
  {% endhint %}

> Please ensure these prerequisites are installed on your system before proceeding with the installation steps, these are needed by both **validators and miners**.

1. Clone the project,

```bash
# In this guide, we will utilize the ~/opt directory as our preferred location.
cd ~/opt

# Clone the project
git clone https://github.com/tensorplex-labs/dojo.git
cd dojo/
```

2. Install PM2, one way is through fnm

```bash
# for linux, a convenience script is available
./scripts/setup/install_pm2.sh

# for mac/linux (if you do not trust the bash script)
curl -fsSL https://fnm.vercel.app/install | bash
# for windows, choose 1 of the following,
# based on https://github.com/Schniz/fnm?#manually
cargo install fnm
choco install fnm
scoop install fnm
winget install Schniz.fnm

# run any post-install shell setup scripts
# based on https://github.com/Schniz/fnm?#shell-setup

# assuming we are using zsh
echo 'eval "$(fnm env --use-on-cd --shell zsh)"' >> ~/.zshrc
# you can tell what shell you're using by running:
echo $0

# verify fnm installation
fnm --version

# get npm & node, and verify npm installation
fnm install lst/iron && npm --version

# install pm2 and verify installation
npm install -g pm2 && pm2 --version
```

3. Install Docker & Docker Compose

For Docker installation, see <https://docs.docker.com/engine/install/> for instructions

For Docker Compose installation, see <https://docs.docker.com/compose/install/linux> for instructions

```bash
# for linux, a convenience script is available
./dojo/scripts/setup/install_docker.sh

# verify both docker and docker compose are installed
docker --version
docker compose version
```

4. Create your wallets if they aren't created yet

```bash
# run btcli
make btcli
# create your wallets
btcli wallet new_coldkey
btcli wallet new_hotkey
```

5. Get some TAO and ensure you have enough TAO to cover the registration cost

```bash
# for mainnet, check netuid 52
btcli s list 
# for testnet, check netuid 98
btcli s list --subtensor.network test
# output from the `btcli s list ...` command
NETUID    N    MAX_N   EMISSION  TEMPO  RECYCLE        POW       SUDO
 0      128   128.00   0.00%     10    τ1.00000     10.00 M     5C4hrfjw9DjXZTzV3MwzrrAr9P1MJhSrvWGWqi1eSuyUpnhM
...
 98     17    256.00   0.00%     360   τ0.00001  18446744.07 T  5GTAfh3YTcokxWdGc3DgLV5y3hHB4Bs5PQGqw9fEn1WrcwWP
...
```

Note

the "RECYCLE" column represents the subnet registration cost

7. Register to our subnet

```bash
# run the dockerized btcli
make btcli
# register your wallet to our subnet
# for mainnet
btcli s register --wallet.name coldkey --wallet.hotkey hotkey --netuid 52 --subtensor.network finney
# for testnet
btcli s register --wallet.name coldkey --wallet.hotkey hotkey --netuid 98 --subtensor.network test
```

***

## Validating

Copy the validator .env file and set up the .env file

```bash
# copy .env.validator.example
cp .env.validator.example .env

# edit the .env file with vim, vi or nano
# for mainnet
DOJO_API_BASE_URL="https://dojo-api.tensorplex.ai"

# for testnet - uncomment below line if you are using testnet
#DOJO_API_BASE_URL="https://dojo-api-testnet.tensorplex.ai"

# head to https://wandb.ai/authorize to get your API key
WANDB_API_KEY="<wandb_key>"

# for dojo-synthetic-api
OPENROUTER_API_KEY="sk-or-v1-<KEY>"

# Other LLM API providers, Optional or if you've chosen it over Openrouter
TOGETHER_API_KEY=
OPENAI_API_KEY=

# postgres details for validator
DB_HOST=postgres-vali:5432
DB_NAME=db
DB_USERNAME=
DB_PASSWORD=
DATABASE_URL=postgresql://${DB_USERNAME}:${DB_PASSWORD}@${DB_HOST}/${DB_NAME}
```

Start the validator

```bash
# start the validator
# for mainnet
make validator network=mainnet
# for testnet
make validator network=testnet
```
