# Story (Mainnet) - Mandragora's infrastructure services
Previous iterations: Iliad testnet, Odyssey testnet (round 1 and 2), and now Public Mainnet.
Chain ID: (EVM: `1514` / Cosmos: `story-1`)
### RPC endpoint (archive)
```
https://story-rpc.mandragora.io
```
### REST API endpoint (archive)
```
https://story-api.mandragora.io
```
### JSON-RPC (EVM) endpoint (archive)
```
https://story-mainnet-evmrpc.mandragora.io
```
### WSS (Cosmos) endpoint
```
wss://story-rpc.mandragora.io/websocket
```
### WSS (EVM) endpoint
```
wss://story-mainnet-evmwss.mandragora.io
```
### Seed node
```
tobeadded
```
### Persistent peer/s
```
9d56213f3e278ee8c0aae5aab4aee670ad833f03@story-peer.mandragora.io:26656
```
### Geth enode
```
enode://5436bddc7cdfc887ae3c629321b9a05edb6ace4720d05453921c72b8df0360e581502cf04e16cc5cb38c04c2689d3ee2a97487d582d2e6e1261be53ed2068b9c@story-geth.mandragora.io:30303
```
## Add peers
```
PEERS=$(curl -sS https://story-rpc.mandragora.io/net_info | jq -r '.result.peers[] | "\(.node_info.id)@\(.remote_ip):\(.node_info.listen_addr)"' | awk -F ':' '{print $1":"$(NF)}' | paste -sd, -)
sed -i.bak -e "s/^persistent_peers *=.*/persistent_peers = \"$PEERS\"/" $HOME/.story/story/config/config.toml
sudo systemctl restart story
```
## Add seeds
```
SEEDS=tobeadded
sed -i.bak -e "s/^seeds *=.*/seeds = \"$SEEDS\"/" $HOME/.story/story/config/config.toml
sudo systemctl restart story
```
## Add addrbook
```
sudo systemctl stop story
wget -O $HOME/.story/story/config/addrbook.json https://snapshots.mandragora.io/addrbook.json
sudo systemctl start story
```
## Add Geth enode
Is your Geth binary named `geth` or `story-geth`? Change it accordingly if that's the case. Meanwhile, `story-geth` will remain as default.
```
story-geth --exec 'admin.addPeer("enode://5436bddc7cdfc887ae3c629321b9a05edb6ace4720d05453921c72b8df0360e581502cf04e16cc5cb38c04c2689d3ee2a97487d582d2e6e1261be53ed2068b9c@story-geth.mandragora.io:30303")' attach ~/.story/geth/story/geth.ipc
sudo systemctl restart story-geth
```
## Apply Mandragora archival snapshot (geth+story)
Check out the snapshot's timestamp (UTC), block height, geth and story sizes, and geth and story versions: https://snapshots.mandragora.io/info.json
This is an archival snapshot with tx indexing on. Updated every 4h.
```
# Install required dependencies
sudo apt-get install wget lz4 -y
# Stop your story-geth and story nodes
sudo systemctl stop story-geth
sudo systemctl stop story
# Back up your validator state
sudo cp $HOME/.story/story/data/priv_validator_state.json $HOME/.story/priv_validator_state.json.backup
# Delete previous geth chaindata and story data folders
sudo rm -rf $HOME/.story/geth/story/geth/chaindata
sudo rm -rf $HOME/.story/story/data
# Download story-geth and story snapshots
wget -O geth_snapshot.lz4 https://snapshots.mandragora.io/geth_snapshot.lz4
wget -O story_snapshot.lz4 https://snapshots.mandragora.io/story_snapshot.lz4
# Decompress story-geth and story snapshots
lz4 -c -d geth_snapshot.lz4 | tar -xv -C $HOME/.story/geth/story/geth
lz4 -c -d story_snapshot.lz4 | tar -xv -C $HOME/.story/story
# Delete downloaded story-geth and story snapshots
sudo rm -v geth_snapshot.lz4
sudo rm -v story_snapshot.lz4
# Restore your validator state
sudo cp $HOME/.story/priv_validator_state.json.backup $HOME/.story/story/data/priv_validator_state.json
# Start your story-geth and story nodes
sudo systemctl start story-geth
sudo systemctl start story
```
## Apply Mandragora pruned snapshot (geth+story)
Check out the snapshot's timestamp (UTC), block height, geth and story sizes, and geth and story versions: https://snapshots2.mandragora.io/story/info.json
This is a pruned snapshot with tx indexing disabled. Updated every 4 hours.
```
# Install required dependencies
sudo apt-get install wget lz4 -y
# Stop your story-geth and story nodes
sudo systemctl stop story-geth
sudo systemctl stop story
# Back up your validator state
sudo cp $HOME/.story/story/data/priv_validator_state.json $HOME/.story/priv_validator_state.json.backup
# Delete previous geth chaindata and story data folders
sudo rm -rf $HOME/.story/geth/story/geth/chaindata
sudo rm -rf $HOME/.story/story/data
# Download story-geth and story snapshots
wget -O geth_snapshot.lz4 https://snapshots2.mandragora.io/story/geth_snapshot.lz4
wget -O story_snapshot.lz4 https://snapshots2.mandragora.io/story/story_snapshot.lz4
# Decompress story-geth and story snapshots
lz4 -c -d geth_snapshot.lz4 | tar -xv -C $HOME/.story/geth/story/geth
lz4 -c -d story_snapshot.lz4 | tar -xv -C $HOME/.story/story
# Delete downloaded story-geth and story snapshots
sudo rm -v geth_snapshot.lz4
sudo rm -v story_snapshot.lz4
# Restore your validator state
sudo cp $HOME/.story/priv_validator_state.json.backup $HOME/.story/story/data/priv_validator_state.json
# Start your story-geth and story nodes
sudo systemctl start story-geth
sudo systemctl start story
```
# Other meaningful contributions
## GitHub issues opened by Mandragora
- https://github.com/piplabs/story/issues/80 - this issue lead to unjail command addition on v0.11.0, PR merged: https://github.com/piplabs/story/pull/170
- https://github.com/piplabs/story/issues/90
- https://github.com/piplabs/story/issues/91
- https://github.com/piplabs/story/issues/138 - both issues stated in the report are now solved, refer to https://github.com/piplabs/story/issues/138#issuecomment-2686321501
## Lost my validator (tool)
:key: **Have you lost your `priv_validator_key.json` file and want to recover your validator?**
We have created a tool so as to recreate the file. Fortunately, Story Protocol's design allows this to be done in case one keeps its validator account private key but not its `priv_validator_key.json` file.
:bangbang: Note that you will need at least to identify your validator in an explorer to proceed and get success.
:zap: **One-liner**
```
bash <(curl -s https://raw.githubusercontent.com/McDaan/general/refs/heads/main/story/lostmyvalidator.sh)
```
:eyes: You can check out bash code here https://github.com/McDaan/general/blob/main/story/lostmyvalidator.sh

## Public JSON-RPC (EVM) available on Chainlist
We have added our public JSON-RPC endpoint to Chainlist through this/these PR...
`Iliad`: https://github.com/DefiLlama/chainlist/pull/1259
`Odyssey`: https://github.com/DefiLlama/chainlist/pull/1346
`Odyssey-migration-before-mainnet`: https://github.com/DefiLlama/chainlist/pull/1477
`Mainnet`: https://github.com/DefiLlama/chainlist/pull/1549
`Mainnet`: https://github.com/DefiLlama/chainlist/pull/1586
Feel free to use it ✌️ https://chainlist.org/?testnets=true&search=story
## Node distribution across different continents beyond Europe
We wanted to contribute to nodes distribution across different regions at Odyssey testnet, and we have now peers available in three continents more: Africa, Asia and Oceana.
- [**Africa (Johannesburg, South Africa)**]
- [**Asia (Delhi, India)**]
- [**Asia (Singapore)**]
- [**Oceania (Sydney, Australia)**]
We just opened a PR to add them into the OriginStake's repository so as to be displayed in their infrastructure dashboard: https://github.com/OriginStake/story-infrastructure/pull/3