MANUAL INSTALL
Manual install
# install go, if needed
cd $HOME
VER="1.22.3"
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"
[ ! -f ~/.bash_profile ] && touch ~/.bash_profile
echo "export PATH=$PATH:/usr/local/go/bin:~/go/bin" >> ~/.bash_profile
source $HOME/.bash_profile
[ ! -d ~/go/bin ] && mkdir -p ~/go/bin
# set vars
echo "export MONIKER="CHANGE-YOUR-MONIKER"" >> $HOME/.bash_profile
echo "export STORY_CHAIN_ID="odyssey-0"" >> $HOME/.bash_profile
echo "export STORY_PORT="52"" >> $HOME/.bash_profile
source $HOME/.bash_profile
# download binaries
cd $HOME
wget -O geth https://github.com/piplabs/story-geth/releases/download/v0.10.1/geth-linux-amd64
chmod +x $HOME/geth
mv $HOME/geth ~/go/bin/
[ ! -d "$HOME/.story/story" ] && mkdir -p "$HOME/.story/story"
[ ! -d "$HOME/.story/geth" ] && mkdir -p "$HOME/.story/geth"
# install Story
cd $HOME
rm -rf story
git clone https://github.com/piplabs/story
cd story
git checkout v0.12.1
go build -o story ./client
mv $HOME/story/story $HOME/go/bin/
# init story app
story init --moniker CHANGE-YOUR-MONIKER --network odyssey
# set seeds and peers
SEEDS="434af9dae402ab9f1c8a8fc15eae2d68b5be3387@story-testnet-seed.itrocket.net:29656"
PEERS="c2a6cc9b3fa468624b2683b54790eb339db45cbf@story-testnet-peer.itrocket.net:26656,6a1b35d7c8deae3f6b0588855300af1dfa8ebd17@49.12.172.31:13656,a8a2e0e0d5875741419a8c5a73b41ba265e1e895@37.27.69.177:26656,c946e71d9fe86548e1ea38c9a1affef683d5ff2c@158.220.119.126:26656,34400e930af9ff63a0c2c2d1b036a8763e7c92e1@158.220.126.24:52656,6a440ef7b9c9c06195ff5aaf1ba69c645805ba21@94.141.100.215:26656,388c9bcfc2a8320f79e887037e36cecabd7ed7d2@94.141.160.176:26656,2fb7d62902b9aeb9615eebc980d750f9e11ac872@64.130.55.48:26656,046909534c2849ff8dccc15ee43ee63d2c60b21c@54.190.123.194:26656,eddcbbcce52cb6725a82aff1fa6de66e991fdeca@38.242.128.250:52656,619e90e21e52861996db76b72021a53b473d13ec@37.60.234.203:656,54a2735f0a96a3a6eec089652c1aa8f899d5769a@195.7.5.165:26656,16e5119da2cd37c561b65f645a202755518f8a6a@88.198.27.51:52656,09cfb3ee84963e8d745f44ad02bace04936f4a1e@37.60.235.59:656,c2584a9a1c75e5c0f3c46a08ee58c5dab169a212@62.169.27.220:26656,f6cd197a9de997405eadd27e85f266bcd24c2921@78.159.116.3:38656,87783003e27b0143ee3014febceafbf35808e647@167.235.13.19:30656,edc6a5d8b3beb495f5043a97928e0e98b605edaa@62.169.26.150:26656,b8e19cff36a588977a55f993132f5a2d304ae3bf@212.47.65.52:26656,cd013a9968c766ae911406171fa5e1378a976dcc@185.250.36.146:26656,d9669dafd21c552e06c82780803f72cdfae22193@158.220.120.148:26656,396710d357b98220bc5f9c4d11c56392db631c30@161.97.174.80:21656,13c8b01ac0a0794a5ffbc691b6c6e51644570964@212.47.70.111:26656,8903b32fe2a4eeb41c4e74c715cc1760e39adb9f@37.60.229.77:656,979c7af4049e4bfb592734afb55050ba039cbaa7@141.95.97.1:26656,e96d4dfe2871aa44a5d97bca9ac585ad16647503@185.255.131.5:52656,d39a6b6b4e6ca9bd8b49cf4567bf89fafe1218c3@100.42.183.151:656,2ce121e013716e32734a758bbcc3b0dde7c7c433@84.46.246.136:26656,75ac7b193e93e928d6c83c273397517cb60603c0@3.142.16.95:26656,743e187c0fe5e44a25290ec0750d7ece1017b82d@194.163.177.149:22656"
sed -i -e "/^\[p2p\]/,/^\[/{s/^[[:space:]]*seeds *=.*/seeds = \"$SEEDS\"/}" \
-e "/^\[p2p\]/,/^\[/{s/^[[:space:]]*persistent_peers *=.*/persistent_peers = \"$PEERS\"/}" $HOME/.story/story/config/config.toml
# download genesis and addrbook
wget -O $HOME/.story/story/config/genesis.json https://server-3.itrocket.net/testnet/story/genesis.json
wget -O $HOME/.story/story/config/addrbook.json https://server-3.itrocket.net/testnet/story/addrbook.json
# set custom ports in story.toml file
sed -i.bak -e "s%:1317%:${STORY_PORT}317%g;
s%:8551%:${STORY_PORT}551%g" $HOME/.story/story/config/story.toml
# set custom ports in config.toml file
sed -i.bak -e "s%:26658%:${STORY_PORT}658%g;
s%:26657%:${STORY_PORT}657%g;
s%:26656%:${STORY_PORT}656%g;
s%^external_address = \"\"%external_address = \"$(wget -qO- eth0.me):${STORY_PORT}656\"%;
s%:26660%:${STORY_PORT}660%g" $HOME/.story/story/config/config.toml
# enable prometheus and disable indexing
sed -i -e "s/prometheus = false/prometheus = true/" $HOME/.story/story/config/config.toml
sed -i -e "s/^indexer *=.*/indexer = \"null\"/" $HOME/.story/story/config/config.toml
# create geth servie file
sudo tee /etc/systemd/system/story-geth.service > /dev/null <<EOF
[Unit]
Description=Story Geth daemon
After=network-online.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 ${STORY_PORT}545 --authrpc.port ${STORY_PORT}551 --ws --ws.api eth,web3,net,txpool --ws.addr 0.0.0.0 --ws.port ${STORY_PORT}546
Restart=on-failure
RestartSec=3
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF
# create story service file
sudo tee /etc/systemd/system/story.service > /dev/null <<EOF
[Unit]
Description=Story Service
After=network.target
[Service]
User=$USER
WorkingDirectory=$HOME/.story/story
ExecStart=$(which story) run
Restart=on-failure
RestartSec=5
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF
# download snapshots
# backup priv_validator_state.json
cp $HOME/.story/story/data/priv_validator_state.json $HOME/.story/story/priv_validator_state.json.backup
# remove old data and unpack Story snapshot
rm -rf $HOME/.story/story/data
curl https://server-3.itrocket.net/testnet/story/story_2024-11-26_845991_snap.tar.lz4 | lz4 -dc - | tar -xf - -C $HOME/.story/story
# restore priv_validator_state.json
mv $HOME/.story/story/priv_validator_state.json.backup $HOME/.story/story/data/priv_validator_state.json
# delete geth data and unpack Geth snapshot
rm -rf $HOME/.story/geth/odyssey/geth/chaindata
mkdir -p $HOME/.story/geth/odyssey/geth
curl https://server-3.itrocket.net/testnet/story/geth_story_2024-11-26_845991_snap.tar.lz4 | lz4 -dc - | tar -xf - -C $HOME/.story/geth/odyssey/geth
# enable and start geth, story
sudo systemctl daemon-reload
sudo systemctl enable story story-geth
sudo systemctl restart story-geth && sleep 5 && sudo systemctl restart story
# check logs
journalctl -u story -u story-geth -f
AUTO INSTALL
AUTO INSTALL
source <(curl -s https://itrocket.net/api/testnet/story/story-autoinstall/)
Cosmovisor Setup
Install go, if needed:
Install go
cd $HOME
VER="1.22.3"
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"
[ ! -f ~/.bash_profile ] && touch ~/.bash_profile
echo "export PATH=$PATH:/usr/local/go/bin:~/go/bin" >> ~/.bash_profile
source $HOME/.bash_profile
[ ! -d ~/go/bin ] && mkdir -p ~/go/bin
Install and init Cosmovisor:
Install and init Cosmovisor
go install cosmossdk.io/tools/cosmovisor/cmd/cosmovisor@latest
echo "export DAEMON_NAME="story"" >> $HOME/.bash_profile
echo "export DAEMON_HOME="$HOME/.story/story"" >> $HOME/.bash_profile
source $HOME/.bash_profile
cosmovisor init $(which story)
Create a directory and download the current version of story:
Create a directory and download the current version of story
mkdir -p $HOME/.story/story/cosmovisor/upgrades/v0.12.1/bin
wget -O $HOME/.story/story/cosmovisor/upgrades/v0.12.1/bin/story https://github.com/piplabs/story/releases/download/v0.12.1/story-linux-amd64
chmod +x $HOME/.story/story/cosmovisor/upgrades/v0.12.1/bin/story
Update service file:
Update service file
sudo tee /etc/systemd/system/story.service > /dev/null << EOF
[Unit]
Description=story node service
After=network-online.target
[Service]
User=$USER
Environment="DAEMON_NAME=story"
Environment="DAEMON_HOME=$HOME/.story/story"
Environment="DAEMON_RESTART_AFTER_UPGRADE=true"
Environment="UNSAFE_SKIP_BACKUP=true"
Environment="DAEMON_DATA_BACKUP_DIR=$HOME/.story/story/data"
ExecStart=$(which cosmovisor) run run
Restart=on-failure
RestartSec=10
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF
Enable and start Story using Cosmovisor:
sudo systemctl daemon-reload
sudo systemctl enable story
sudo systemctl restart story && sudo journalctl -u story -f
Create validator
View your validator key:
View your validator key
story validator export
View EVM private key and make a key backup
key backup
cat $HOME/.story/story/config/private_key.txt
Use this private key to import your account into a wallet, e.g. Metamask or Phantom. Add the odyssey testnet to your wallet via faucet. Then, copy your 'EVM address' from the wallet and request $IP tokens. Now you can see the balance and make transactions in the wallet app.
Before creating a validator, wait for your node to get fully synced. Once "catching_up" is "false", move on to the next step
Check sync
curl localhost:$(sed -n '/\[rpc\]/,/laddr/ { /laddr/ {s/.*://; s/".*//; p} }' $HOME/.story/story/config/config.toml)/status | jq
Create validator
Create validator
story validator create --stake 1500000000000000000000 --moniker $MONIKER --chain-id 1516 --private-key $(cat $HOME/.story/story/config/private_key.txt | grep "PRIVATE_KEY" | awk -F'=' '{print $2}')
Remember to backup your validator priv_key from here:
backup your validator priv_key
cat $HOME/.story/story/config/private_key.txt