---
description: Story Testnet guide
---

# Node Installation

## [EXPLORER](https://testnet.storyscan.app/)

* **Minimum hardware requirements**:

| Node Type | CPU | RAM | Storage |
| --------- | --- | --- | ------- |
| Testnet   | 4   | 8GB | 200GB   |

## 1) Auto\_install script

```bash
source <(curl -s https://raw.githubusercontent.com/111STAVR111/props/main/Story/storyt)
```

## 2) Manual installation

#### Preparing the server

```bash
sudo apt update && sudo apt upgrade -y
sudo apt install curl tar wget clang pkg-config libssl-dev jq build-essential bsdmainutils git make ncdu gcc git jq chrony liblz4-tool -y
```

### GO 1.22.2

```bash
ver="1.22.2"
wget "https://golang.org/dl/go$ver.linux-amd64.tar.gz"
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf "go$ver.linux-amd64.tar.gz"
rm "go$ver.linux-amd64.tar.gz"
echo "export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin" >> $HOME/.bash_profile
source $HOME/.bash_profile
go version
```

## Build 18.01.25

```bash
cd $HOME && mkdir -p go/bin/
wget -O geth https://github.com/piplabs/story-geth/releases/download/v0.10.1/geth-linux-amd64
chmod +x geth
mv ~/geth ~/go/bin/geth
git clone https://github.com/piplabs/story
cd $HOME/story
git checkout v0.13.2
go build -o story ./client
sudo mv $HOME/story/story $HOME/go/bin/
mkdir -p ~/.story/story
mkdir -p ~/.story/geth
```

`story version`

* Version: v0.13.2-stable
* Git commit: c9c57b2

`geth version`&#x20;

* Version: 0.10.1-stable
* Git Commit: b60a3ba8d47e60a6c78ca0570f7dac66e8976d93

## Initiation

```python
story init --network odyssey --moniker "STAVR_guide"
```

## Download Genesis

```bash
wget -O $HOME/.story/story/config/genesis.json https://raw.githubusercontent.com/111STAVR111/props/refs/heads/main/Story/genesis.json
```

`sha256sum $HOME/.story/story/config/genesis.json`

* d332e9082222cc0dd6fe4e9943eafc89b2ce5e118a75ffa01b77e549fdd12587

### Download addrbook (upd every 2h)

```bash
wget -O $HOME/.story/story/config/addrbook.json "https://story-archive.snapshot.stavr.tech/addrbook.json"
```

## Create a service file

```bash
sudo tee /etc/systemd/system/story-geth.service > /dev/null <<EOF
[Unit]
Description=Story Geth Client
After=network.target

[Service]
User=$USER
ExecStart=$HOME/go/bin/geth --odyssey --syncmode full --http --http.api eth,net,web3,engine --http.vhosts '*' --http.addr 127.0.0.1 --http.port 8545 --ws --ws.api eth,web3,net,txpool --ws.addr 127.0.0.1 --ws.port 8546
Restart=on-failure
RestartSec=3
LimitNOFILE=4096

[Install]
WantedBy=multi-user.target
EOF

sudo tee /etc/systemd/system/story.service > /dev/null <<EOF
[Unit]
Description=Story Consensus Client
After=network.target

[Service]
User=$USER
WorkingDirectory=$HOME/.story/story
ExecStart=$HOME/go/bin/story run
Restart=on-failure
RestartSec=3
LimitNOFILE=4096

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

## StateSync Story Testnet

```bash
SOON
```

## SnapShot Testnet (updated every 12 hours)

{% hint style="success" %}
<mark style="color:orange;">**You can check the size and time of snapshot creation with this command**</mark> \
`curl -sI https://story.snapshot.stavr.tech/story-snap.tar.lz4 | grep "last" && curl -sI https://story.snapshot.stavr.tech/story-snap.tar.lz4 | grep content-length | awk '{printf "%.2f GB\n", $2/1024/1024/1024}'`\
\
`curl -sI https://story.snapshot.stavr.tech/story_geth-snap.tar.lz4 | grep "last" && curl -sI https://story.snapshot.stavr.tech/story_geth-snap.tar.lz4 | grep content-length | awk '{printf "%.2f GB\n", $2/1024/1024/1024}'`
{% endhint %}

```bash
cd $HOME
snap install lz4
sudo systemctl stop story story-geth
cp $HOME/.story/story/data/priv_validator_state.json $HOME/.story/story/priv_validator_state.json.backup
rm -rf $HOME/.story/story/data
rm -rf $HOME/.story/geth/odyssey/geth/chaindata
curl -o - -L https://story.snapshot.stavr.tech/story-snap.tar.lz4 | lz4 -c -d - | tar -x -C $HOME/.story/story/
curl -o - -L https://story.snapshot.stavr.tech/story_geth-snap.tar.lz4 | lz4 -c -d - | tar -x -C $HOME/.story/geth/odyssey/geth/
mv $HOME/.story/story/priv_validator_state.json.backup $HOME/.story/story/data/priv_validator_state.json
wget -O $HOME/.story/story/config/addrbook.json "https://raw.githubusercontent.com/111STAVR111/props/main/Story/addrbook.json"
sudo systemctl restart story-geth
sudo systemctl restart story && sudo journalctl -fu story -ocat
```

## SnapShot Testnet Archive (updated every 2 days)

{% hint style="success" %}
<mark style="color:orange;">**You can check the size and time of snapshot creation with this command**</mark> \
`curl -sI https://story-archive.snapshot.stavr.tech/story-snap.tar.lz4 | grep "last" && curl -sI https://story-archive.snapshot.stavr.tech/story-snap.tar.lz4 | grep content-length | awk '{printf "%.2f GB\n", $2/1024/1024/1024}'`\
\
`curl -sI https://story-archive.snapshot.stavr.tech/story_geth-snap.tar.lz4 | grep "last" && curl -sI https://story-archive.snapshot.stavr.tech/story_geth-snap.tar.lz4 | grep content-length | awk '{printf "%.2f GB\n", $2/1024/1024/1024}'`
{% endhint %}

```bash
cd $HOME
snap install lz4
sudo systemctl stop story
sudo systemctl stop story-geth
cp $HOME/.story/story/data/priv_validator_state.json $HOME/.story/story/priv_validator_state.json.backup
rm -rf $HOME/.story/story/data
rm -rf $HOME/.story/geth/odyssey/geth/chaindata
curl -o - -L https://story-archive.snapshot.stavr.tech/story-snap.tar.lz4 | lz4 -c -d - | tar -x -C $HOME/.story/story/
curl -o - -L https://story-archive.snapshot.stavr.tech/story_geth-snap.tar.lz4 | lz4 -c -d - | tar -x -C $HOME/.story/geth/odyssey/geth/
mv $HOME/.story/story/priv_validator_state.json.backup $HOME/.story/story/data/priv_validator_state.json
wget -O $HOME/.story/story/config/addrbook.json "https://raw.githubusercontent.com/111STAVR111/props/main/Story/addrbook.json"
sudo systemctl restart story-geth
sudo systemctl restart story && sudo journalctl -fu story -ocat
```

### Start

```bash
sudo systemctl daemon-reload
sudo systemctl enable story-geth
sudo systemctl enable story
sudo systemctl restart story-geth && sudo journalctl -fu story-geth -o cat
sudo systemctl restart story && sudo journalctl -fu story -o cat
```

### Live Peers (upd every 2h)

```bash
PEERS_URL="https://story-archive.snapshot.stavr.tech/peers-scan.txt"
update_peers() {
PEERS=$(curl -s $PEERS_URL | sed -n 's/^PEERS="\([^"]*\)"$/\1/p')
if [ -n "$PEERS" ]; then
sed -i -e "/^\[p2p\]/,/^\[/{s/^[[:space:]]*persistent_peers *=.*/persistent_peers = \"$PEERS\"/}" $HOME/.story/story/config/config.toml
echo -e "🔥Peers updated successfully 🔥"
else
echo "Failed to get peer data. Check the URL or try again later."
fi
}
update_peers
```

### Wallet

```bash
story validator export
```

### Create validator

```python
story validator create --stake 1500000000000000000000 --moniker STAVR_Guide --private-key $(cat $HOME/.story/story/config/private_key.txt | grep "PRIVATE_KEY" | awk -F'=' '{print $2}')
```

Check the <mark style="color:green;">node status:</mark>

```
curl localhost:26657/status | jq
```

Check the <mark style="color:red;">sync status:</mark>

```
curl -s http://localhost:26657/status | jq .result.sync_info
```

## [🧩Services and Tools🧩](https://stavr-team.gitbook.io/nodes-guides/testnets/story-network/statesync-snapshot)

## Monitoring

You can set up your node status alarm here - [Monitoring](https://stavr-team.gitbook.io/nodes-guides/monitoring)

## Security

You can create secure management of your wallet and your node by following this links.

[TMKMS](https://stavr-team.gitbook.io/nodes-guides/tmkms)               [Wallet Security](https://stavr-team.gitbook.io/nodes-guides/wallet-security)

### Delete node

```bash
sudo systemctl stop story-geth story
sudo systemctl disable story-geth story
rm /etc/systemd/system/story-geth.service /etc/systemd/system/story.service
sudo systemctl daemon-reload
cd $HOME
rm -rf .story story
rm -rf $(which story)
rm -rf $(which geth)
```
