πŸ’ΎNode Installation

Story Testnet guide

  • Minimum hardware requirements:

Node TypeCPURAMStorage

Testnet

4

8GB

200GB

1) Auto_install script

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

2) Manual installation

Preparing the server

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

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 20.11.24

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.12.1
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.12.1-stable

  • Git commit: 20fed5e

geth version

  • Version: 0.10.1-stable

  • Git Commit: b60a3ba8d47e60a6c78ca0570f7dac66e8976d93

Initiation

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

Download Genesis

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)

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

Create a service file

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

SOON

SnapShot Testnet (updated every 12 hours)

You can check the size and time of snapshot creation with this command 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}'

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)

You can check the size and time of snapshot creation with this command 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}'

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

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)

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

story validator export

Create validator

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 node status:

curl localhost:26657/status | jq

Check the sync status:

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

Monitoring

You can set up your node status alarm here - Monitoring

Security

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

TMKMS Wallet Security

Delete node

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)

Last updated