# Testnet

### Joining the BitNet Testnet

This guide explains how to connect to the **BitNet testnet**, configure your node, and become a testnet validator.

***

#### 1. Select the Testnet

Choose the testnet version by setting the appropriate **Chain ID** and retrieving the corresponding genesis file and seed peers. You can find these in the [BitNet testnet repository](https://github.com/bitnet/testnets).

{% hint style="danger" %}
Ensure your **server timezone is set to UTC**. Misconfigured timezones may cause `LastResultsHash` mismatches that halt the node.
{% endhint %}

***

#### 2. Install the BitNet Binary

Install the BitNet CLI binary (`bitnetd`) following the [official installation instructions](https://github.com/bitnet/bitnet).

Ensure you install the correct version for the current testnet. Run:

```bash
bitnetd version
```

***

#### 3. Save Chain ID (Optional)

To avoid passing `--chain-id` in every CLI command, you can set it globally:

```bash
bitnetd config chain-id bitnet_testnet_9000
```

***

#### 4. Initialize the Node

Initialize your node:

```bash
bitnetd init <your_moniker> --chain-id bitnet_testnet_9000
```

{% hint style="success" %}
Moniker must contain only **ASCII characters**.
{% endhint %}

***

#### 5. Add Genesis File

Download the testnet `genesis.json` and place it into your config folder:

```bash
wget -P ~/.bitnetd/config https://archive.bitnet.org/testnet/genesis.json
bitnetd validate-genesis
```

***

#### 6. Configure Seed and Persistent Peers

**Add Seeds**

Open `~/.bitnetd/config/config.toml` and set:

```toml
seeds = "<node_id>@<ip>:<port>"
```

Or auto-configure using:

```bash
SEEDS=$(curl -sL https://raw.githubusercontent.com/bitnet/testnets/main/seeds.txt | awk '{print $1}' | paste -s -d, -)
sed -i.bak -e "s/^seeds *=.*/seeds = \"$SEEDS\"/" ~/.bitnetd/config/config.toml
```

**Add Persistent Peers**

```bash
PEERS=$(curl -sL https://raw.githubusercontent.com/bitnet/testnets/main/peers.txt | sort -R | head -n 10 | awk '{print $1}' | paste -s -d, -)
sed -i.bak -e "s/^persistent_peers *=.*/persistent_peers = \"$PEERS\"/" ~/.bitnetd/config/config.toml
```

***

#### 7. Start Your Node

```bash
bitnetd start
```

Once two-thirds of testnet validators are online, block production begins.

***

#### 8. Create a Validator (Optional)

After getting testnet tokens from the faucet, submit a validator creation transaction:

```bash
bitnetd tx staking create-validator \
  --amount=1000000abnc \
  --pubkey=$(bitnetd tendermint show-validator) \
  --moniker="BitNetTester" \
  --chain-id=bitnet_testnet_9000 \
  --commission-rate="0.05" \
  --commission-max-rate="0.20" \
  --commission-max-change-rate="0.01" \
  --min-self-delegation="1" \
  --gas="auto" \
  --gas-prices="0.025abnc" \
  --from=<key_name>
```

***

#### 9. Resetting or Restarting the Node

If required, reset data:

```bash
rm $HOME/.bitnetd/config/addrbook.json
bitnetd tendermint unsafe-reset-all --home $HOME/.bitnetd
```

Then restart:

```bash
bitnetd start
```

***

#### 10. Share Your Peer

To help others find you, get your node ID:

```bash
bitnetd tendermint show-node-id
```

Share it on the BitNet Discord's `#find-peers` channel.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://bitnet-whitepaper.gitbook.io/developer-docs/bitnet-ops-handbook/testnet.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
