Minimum hardware requirements:
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 27.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.13.0
go build -o story ./client
sudo mv $HOME/story/story $HOME/go/bin/
mkdir -p ~/.story/story
mkdir -p ~/.story/geth
story version
geth version
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
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)