Story Protocol

Aeneid Testnet

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

Hardware requirements

CPU

8 cores

RAM

32 GB

Storage

500 GB NVME

Network

25 MBit/s

OS

Linux (Ubuntu 22.04 x64)

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

Download the latest snapshot provided by the ITRocket team:https://itrocket.net/services/testnet/story/

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

We ask interested teams to complete this form here for testnet token (this is not gated) https://docs.google.com/forms/d/e/1FAIpQLSdCgT7rSxGTkWXbBjzAZco8UyTBuTtjb87s5k0BEp5n6PF6jA/viewform Submission is also required to receive Aeneid tokens.

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

Last updated