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/
Hardware requirements
Installation 💾
Update repositories
Copy apt update && apt upgrade -y
Install dependencies
Copy sudo apt install curl git make jq build-essential gcc unzip wget lz4 aria2 -y
Install GO
Copy 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)
Copy 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
Copy # 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
Copy story init --moniker $MONIKER --network $STORY_CHAIN_ID
Set custom ports in story.toml and config.toml file (if needed)
Copy sed -i.bak -e "s%:1317%:${STORY_PORT}317%g;
s%:8551%:${STORY_PORT}551%g" $HOME/.story/story/config/story.toml
Copy 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
Copy 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
Copy 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
Copy 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
Copy # 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
Copy curl localhost:${STORY_PORT}657/status | jq
Check logs
Copy 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
Create a validator
View validator key
Copy story validator export
Export EVM private key
Copy 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.
Create a validator
Move your txt file to .env file with your private key
Copy mv $HOME/.story/story/config/private_key.txt $HOME/.env
Create validator, locked:
Copy story validator create --stake 1024000000000000000000 --moniker $MONIKER --rpc https://aeneid.storyrpc.io --chain-id 1315 --unlocked=false
Or create validator, unlocked:
Copy 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
Copy cat $HOME/.story/story/config/priv_validator_key.json
Useful commands ⚙️
node info
Copy curl localhost:$(sed -n '/\[rpc\]/,/laddr/ { /laddr/ {s/.*://; s/".*//; p} }' $HOME/.story/story/config/config.toml)/status | jq
logs
Copy sudo journalctl -u story-geth -f -o cat
sudo journalctl -u story -f -o cat
restart service
Copy sudo systemctl restart story-geth
sudo systemctl restart story
stop service
Copy sudo systemctl stop story-geth
sudo systemctl stop story
enable service
Copy sudo systemctl enable story-geth
sudo systemctl enable story
disable service
Copy sudo systemctl disable story-geth
sudo systemctl disable story
Delete node 🗑️
Copy 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