Story Protocol Mainnet Validator Guide
System Requirements
Running a Story Protocol validator requires robust hardware to ensure reliable performance. We recommend the following specifications:
Component | Recommendation |
---|---|
CPU | 8 Cores |
RAM | 32 GB |
Storage | 500 GB |
Network | 25 MBit/s bandwidth |
For additional information, the official documentation is available at: Story Foundation Docs
Installation Procedure
Install Required Dependencies
Begin by updating your system and installing necessary packages:
sudo apt update
sudo apt-get update
sudo apt install curl git make jq build-essential gcc unzip wget lz4 aria2 pv -y
Set Up Story-Geth Binary (v1.0.2)
Download and compile the Story-Geth client:
cd $HOME
git clone https://github.com/piplabs/story-geth
cd story-geth
make geth
cp build/bin/geth $HOME/go/bin/story-geth
source $HOME/.bash_profile
story-geth version
After successful installation, you should see version information similar to:
Geth
Version: 1.0.2-stable
Git Commit: 3daeb0c89d72055608b93a94c9f6ca777f5e80f7
Architecture: amd64
Go Version: go1.22.0
Operating System: linux
GOPATH=
GOROOT=
Install Story Binary (v1.1.0)
Download and configure the Story binary:
cd $HOME
rm -rf story-linux-amd64
wget https://github.com/piplabs/story/releases/download/v1.1.0/story-linux-amd64
[ ! -d "$HOME/go/bin" ] && mkdir -p $HOME/go/bin
if ! grep -q "$HOME/go/bin" $HOME/.bash_profile; then
echo "export PATH=$PATH:/usr/local/go/bin:~/go/bin" >> ~/.bash_profile
fi
chmod +x story-linux-amd64
sudo cp $HOME/story-linux-amd64 $HOME/go/bin/story
source $HOME/.bash_profile
story version
You should see the following version information:
Version v1.1.0-stable
Git Commit 0949ba7
Git Timestamp 2025-02-05T05:49:22Z
Node Configuration
Reset State (If Needed)
If you need to start from a completely fresh state:
Warning: This will delete your
priv_validator_key.json
file. Always back up your key at/root/.story/story/config/priv_validator_key.json
before removing any node data.
rm -rf $HOME/.story
Initialize Your Node
Initialize a new Story mainnet node:
story init --network story --moniker "Your_moniker_name"
Create Service Files
Set up the Story-Geth service:
sudo tee /etc/systemd/system/story-geth.service > /dev/null <<EOF
[Unit]
Description=Story Geth Client
After=network.target
[Service]
User=root
ExecStart=/root/go/bin/story-geth --story --syncmode full
Restart=on-failure
RestartSec=3
LimitNOFILE=4096
[Install]
WantedBy=multi-user.target
EOF
Set up the Story consensus client service:
sudo tee /etc/systemd/system/story.service > /dev/null <<EOF
[Unit]
Description=Story Consensus Client
After=network.target
[Service]
User=root
ExecStart=/root/go/bin/story run
Restart=on-failure
RestartSec=3
LimitNOFILE=4096
[Install]
WantedBy=multi-user.target
EOF
Start Your Services
Start the Story-Geth Service
sudo systemctl daemon-reload && \
sudo systemctl start story-geth && \
sudo systemctl enable story-geth && \
sudo systemctl status story-geth
Start the Story Consensus Service
sudo systemctl daemon-reload && \
sudo systemctl start story && \
sudo systemctl enable story && \
sudo systemctl status story
Monitor Your Node
Check Logs
For Story-Geth logs:
sudo journalctl -u story-geth -f -o cat
Allow a minute for peers to connect before checking.
For Story consensus logs:
sudo journalctl -u story -f -o cat
Verify Sync Status
Check if your node is syncing properly:
curl localhost:26657/status | jq
Validator Setup
Export Validator Keys
Access your validator key information:
story validator export
This will display information similar to:
Compressed Public Key (hex): 03bdc7b8940babe9226d52d7fa299a1faf3d64a82f809889256c8f146958a63984
Compressed Public Key (base64): A73HuJQLq+kibVLX+imaH689ZKgvgJiJJWyPFGlYpjmE
Uncompressed Public Key (hex): 04bdc7b8940babe9226d52d7fa299a1faf3d64a82f809889256c8f146958a6398496b9e2af0a3a1d199c3cc1d09ee899336a530c185df6b46a9735b25e79a493af
EVM Address: 0x9EacBe2C3B1eb0a9FC14106d97bd3A1F89efdDCc
Validator Address: storyvaloper1p470h0jtph4n5hztallp8vznq8ehylsw9vpddx
Delegator Address: story1p470h0jtph4n5hztallp8vznq8ehylswtr4vxd
To export your EVM private key:
story validator export --export-evm-key
Note: To participate in consensus, you must stake at least 1 IP (equivalent to 1000000000000000000 wei). You can request tokens from the Story Foundation Faucet.
Create Validator
Create your validator with the specified stake:
story validator create --stake 1024000000000000000000 --private-key "your_private_key" --moniker "your_moniker_name"
Important: Make sure to back up your validator key file located at
/root/.story/story/config/priv_validator_key.json
. This is the most critical key for your validator operation.
Stake Additional Tokens
To stake additional tokens to your validator:
story validator stake \
--validator-pubkey "VALIDATOR_PUB_KEY_IN_HEX" \
--stake 1024000000000000000000 \
--private-key xxxxxxxxxxxxxx
Replace VALIDATOR_PUB_KEY_IN_HEX
with your actual validator public key. Note that 1024000000000000000000 equals 1024 IP tokens.
Node Removal (If Needed)
Warning: Always back up your data, private key, and validator key before removing your node.
sudo systemctl stop story-geth
sudo systemctl stop story
sudo systemctl disable story-geth
sudo systemctl disable story
sudo rm /etc/systemd/system/story-geth.service
sudo rm /etc/systemd/system/story.service
sudo systemctl daemon-reload
sudo rm -rf $HOME/.story
sudo rm $HOME/go/bin/story-geth
sudo rm $HOME/go/bin/story