cryptomolot docs
  • 💎cryptomolot
  • 🏗️Testnets
    • Alignedlayer
      • How to create Public RPC Alignedlayer
    • Artela
      • How to create Public RPC Artela
    • Celestia
      • Celestia - Validator Node
      • Celestia - Bridge Node
      • How to create Public RPC Celestia
    • 0G (Zero Gravity)
      • 0G RPC Node
      • 0G Storage Node
        • Upgrade storage node 1.0.0
      • 0G DA Node
      • How to create Public RPC 0G
      • Monitoring tool
      • Snapshot
    • Side Protocol
      • How to create Public RPC Side
    • Warden Protocol
    • Story Protocol
      • Upgrade node
      • Cheatsheet
      • Monitoring tool
      • Alerts about your node failures
  • 🚀Mainnets
    • Aptos
      • Tools to monitore your validator
        • Alerts for your validator via telegram public
      • How to move node using snapshot
      • Fullnode security
      • Snapshot
Powered by GitBook
On this page
  • Hardware requirements
  • Installation 💾
  • Update repositories
  • Install dependencies
  • Initialize
  • Create a service Story-geth
  • Create a service Story
  • Sync from snapshot
  • Create a validator
  • Export EVM private key
  • Create a validator
  • Useful commands ⚙️
  • Delete node 🗑️
  1. Testnets

Story Protocol

Aeneid Testnet

PreviousWarden ProtocolNextUpgrade node

Last updated 23 days ago

Story is making the legal system for creative Intellectual Property (IP) more efficient by turning IP "programmable" on the blockchain. To do this, we have created Story Network: a purpose-built layer 1 blockchain where people or programs alike can license, remix, and monetize IP according to transparent terms set by creators themselves. Resources

Website
https://www.storyprotocol.xyz/

Github

https://github.com/piplabs/story

Explorer

https://explorer.story.foundation/

Docs

https://docs.story.foundation/docs/

Discord

https://discord.gg/storyprotocol

Hardware requirements

CPU
RAM
Storage
Network
OS

Installation 💾

Update repositories

apt update && apt upgrade -y

Install dependencies

sudo apt install curl git make jq build-essential gcc unzip wget lz4 aria2 -y

Install GO

cd $HOME
VER="1.22.5"
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 var (replace your Moniker and custom port)

echo "export MONIKER="Moniker"" >> $HOME/.bash_profile
echo "export STORY_CHAIN_ID="aeneid"" >> $HOME/.bash_profile
echo "export STORY_PORT="26"" >> $HOME/.bash_profile
source $HOME/.bash_profile

Get binaries

# Get Story-geth
cd $HOME
rm -rf story-geth
git clone https://github.com/piplabs/story-geth.git
cd story-geth
git checkout v1.1.0
make geth
mv build/bin/geth  $HOME/go/bin/
[ ! -d "$HOME/.story/geth" ] && mkdir -p "$HOME/.story/geth"
story-geth version


# Get Story
cd $HOME
rm -rf story
git clone https://github.com/piplabs/story
cd story
git checkout v1.2.0
go build -o story ./client 
mkdir -p $HOME/go/bin/
mv $HOME/story/story $HOME/go/bin/
[ ! -d "$HOME/.story/story" ] && mkdir -p "$HOME/.story/story"
story version

Initialize

story init --moniker $MONIKER --network $STORY_CHAIN_ID

Set custom ports in story.toml and config.toml file (if needed)

sed -i.bak -e "s%:1317%:${STORY_PORT}317%g;
s%:8551%:${STORY_PORT}551%g" $HOME/.story/story/config/story.toml
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 a service Story-geth

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 --aeneid --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 a service Story

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

Restart and run

# Story-geth
sudo systemctl daemon-reload && \
sudo systemctl start story-geth && \
sudo systemctl enable story-geth && \
sudo systemctl status story-geth

# Story
sudo systemctl daemon-reload && \
sudo systemctl start story && \
sudo systemctl enable story && \
sudo systemctl status story

Check status

curl localhost:${STORY_PORT}657/status | jq

Check logs

sudo journalctl -u story-geth -f -o cat
sudo journalctl -u story -f -o cat

Sync from snapshot

Your node must be synchronized for at least one block

Wait for full synchronization before proceeding to the next step

Create a validator

View validator key

story validator export

Export EVM private key

story validator export --export-evm-key

You can import the private key into an EVM wallet

For create the validator, we need 1024 $IP token.

Form

Create a validator

Move your txt file to .env file with your private key

The .env file should look like the following (make sure not to add a 0x prefix):

PRIVATE_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

mv $HOME/.story/story/config/private_key.txt $HOME/.env

Create validator, locked:

story validator create --stake 1024000000000000000000 --moniker $MONIKER --rpc https://aeneid.storyrpc.io --chain-id 1315 --unlocked=false

Or create validator, unlocked:

story validator create --stake 1024000000000000000000 --moniker $MONIKER --rpc https://aeneid.storyrpc.io --chain-id 1315 --unlocked=true

Remember to backup your validator priv_key from here

cat $HOME/.story/story/config/priv_validator_key.json

Useful commands ⚙️

node info

curl localhost:$(sed -n '/\[rpc\]/,/laddr/ { /laddr/ {s/.*://; s/".*//; p} }' $HOME/.story/story/config/config.toml)/status | jq

logs

sudo journalctl -u story-geth -f -o cat
sudo journalctl -u story -f -o cat

restart service

sudo systemctl restart story-geth
sudo systemctl restart story

stop service

sudo systemctl stop story-geth
sudo systemctl stop story

enable service

sudo systemctl enable story-geth
sudo systemctl enable story

disable service

sudo systemctl disable story-geth
sudo systemctl disable story

Delete 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

Download the latest snapshot provided by the ITRocket team:

We ask interested teams to complete this form here for testnet token (this is not gated) Submission is also required to receive Aeneid tokens.

🏗️

8 cores

32 GB

500 GB NVME

25 MBit/s

Linux (Ubuntu 22.04 x64)

https://itrocket.net/services/testnet/story/
https://docs.google.com/forms/d/e/1FAIpQLSdCgT7rSxGTkWXbBjzAZco8UyTBuTtjb87s5k0BEp5n6PF6jA/viewform