Node Installation

1. Install Required Packages

sudo apt update && sudo apt upgrade -y
sudo apt install curl git jq build-essential gcc unzip wget lz4 -y

2. Install Go

cd $HOME && \
ver="1.22.0" && \
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" >> ~/.bash_profile && \
source

3. Download and Install Story-Geth Binary

wget -q -O geth https://github.com/piplabs/story-geth/releases/download/v0.10.0/geth-linux-amd64
wget -q -O geth.sha256 https://github.com/piplabs/story-geth/releases/download/v0.10.0/geth-linux-amd64.sha256
sha256sum -c geth.sha256
chmod +x geth
sudo mv

4. Download and Install Story Binary

wget -q -O story https://github.com/piplabs/story/releases/download/v0.12.0/story-linux-amd64
chmod +x story
mkdir -p ~/go/bin
mkdir -p ~/.story/story/cosmovisor/genesis/bin
sudo mv story ~/go/bin/story
sudo cp

5. Install and Setup The Latest Version of Cosmovisor

go install cosmossdk.io/tools/cosmovisor/cmd/cosmovisor@latest
mkdir -p ~/.story/story/cosmovisor
echo "export DAEMON_NAME=story" >> ~/.bash_profile
echo "export DAEMON_HOME=$HOME/.story/story" >> ~/.bash_profile
echo "export PATH=$HOME/go/bin:$DAEMON_HOME/cosmovisor/current/bin:$PATH" >> ~/.bash_profile
source

6. Initialize The Odyssey Network Node

~/.story/story/cosmovisor/genesis/bin/story init --network odyssey --moniker "your_moniker"

7. Update Peers

PEERS=$(curl -sS https://story-testnet-rpc.blockhub.id | jq -r '.result.peers[] | "\(.node_info.id)@\(.remote_ip):\(.node_info.listen_addr)"' | awk -F ':' '{print $1":"$(NF)}' | paste -sd, -)
echo "Updating peers..."
sed -i.bak -e "s/^persistent_peers *=.*/persistent_peers = \"$PEERS\"/" $HOME

8. Create and Configure systemd Service for Geth

sudo tee /etc/systemd/system/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 0.0.0.0 --http.port 8545 --ws --ws.api eth,web3,net,txpool --ws.addr 0.0.0.0 --ws.port 8546
Restart=on-failure
RestartSec=3
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
EOF

9. Create and Configure systemd Service for Story

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

[Service]
User=$USER
ExecStart=$HOME/go/bin/cosmovisor run run
WorkingDirectory=$HOME/.story/story
Restart=on-failure
RestartSec=3
LimitNOFILE=65535
Environment="DAEMON_NAME=story"
Environment="DAEMON_HOME=$HOME/.story/story"
Environment="DAEMON_ALLOW_DOWNLOAD_BINARIES=true"
Environment="DAEMON_RESTART_AFTER_UPGRADE=true"
Environment="DAEMON_DATA_BACKUP_DIR=$HOME/.story/story/data"
Environment="UNSAFE_SKIP_BACKUP=true"

[Install]
WantedBy=multi-user.target
EOF

10. Reload systemd, Enable, and Start Services

sudo systemctl daemon-reload
sudo systemctl enable geth story
sudo systemctl start

11. Check Service Status

Checking Geth service status.

sudo systemctl status geth --no-pager -l

Checking Story service status.

sudo systemctl status story --no-pager -l

12. Check Logs

Checking logs for Geth

sudo journalctl -u geth -f -o cat

Checking logs for Story

sudo journalctl -u story -f -o cat

13. Check Sync Status

If catching_up status is true that means that you are still syncing and if it's false it means that you are fully sync.

curl -s

Make sure your node is fully sync before continue to create validator.