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
8 cores
32 GB
500 GB NVME
25 MBit/s
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/
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
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