Sync from Genesis
Use this guide when you need full historical replay from block 0.
For most operators, Installing the Node with snapshot/state-sync is faster and simpler. Genesis sync is slower and requires binary upgrades at specific heights.
Network upgrade path
When syncing from genesis, you must start from the network genesis binary and upgrade at each hard fork.
| Upgrade Name | Height | Binary Version |
|---|---|---|
| Genesis | 0 | v7.0.0 |
| v8 | 497000 | v8.0.2 |
| v9 | 4688681 | v9.0.3 |
| v10 | 4749000 | v10.0.2 |
Upgrade schedule and versions are maintained in Networks.
Prerequisites
exrpdinstalled (raw binary or built from source)- Node initialized for your target network
- Genesis file and peers configured
- Process manager ready (
systemctl,cosmovisor, ordocker)
See Installing the Node for install and runtime options.
Step 1: Install the genesis binary
Install the binary for the first version in your network’s upgrade path table.
cd /tmp
wget https://github.com/xrplevm/node/releases/download/v7.0.0/node_7.0.0_Linux_amd64.tar.gz
tar -xzf node_7.0.0_Linux_amd64.tar.gz
sudo mv bin/exrpd /usr/local/bin/exrpd
sudo chmod +x /usr/local/bin/exrpd
exrpd versionAdjust the version/tag according to your network (for example, Testnet genesis starts at v6.0.0).
Step 2: Start the node and sync
Run with your preferred stack:
systemctl:systemctl start exrpdcosmovisor:systemctl start cosmovisor-exrpd(orcosmovisor run start)docker: run container with explicit tag matching the current upgrade stage version
Monitor logs:
journalctl -u exrpd -f
# or
journalctl -u cosmovisor-exrpd -f
# or
docker logs -f xrplevm-nodeStep 3: Upgrade when the node halts
At each upgrade height, old binaries halt with an upgrade-needed message. Replace the binary with the target version and restart.
Before starting with a v10+ binary, set evm-chain-id under [evm] in app.toml:
- Mainnet:
evm-chain-id = "1440000" - Testnet:
evm-chain-id = "1449000"
File path (depending on your node home): ~/.exrpd/config/app.toml or /var/lib/exrpd/.exrpd/config/app.toml.
If this node is a validator signer, keep a single active validator signer only. Never run two active instances with the same ~/.exrpd/config/priv_validator_key.json, and never roll back ~/.exrpd/data/priv_validator_state.json.
Raw binary / systemctl
sudo systemctl stop exrpd
# replace /usr/local/bin/exrpd with new version
sudo systemctl start exrpdcosmovisor
Place the new binary at:
~/.exrpd/cosmovisor/upgrades/<upgrade-name>/bin/exrpdEnsure executable permissions and restart if needed:
chmod +x ~/.exrpd/cosmovisor/upgrades/<upgrade-name>/bin/exrpd
sudo systemctl restart cosmovisor-exrpddocker
docker pull peersyst/exrp:<new-version>
docker stop xrplevm-node && docker rm xrplevm-node
# Make RPC reachable through -p 26657:26657
# Note: this RPC listener is in config.toml ([rpc].laddr), not app.toml.
sed -i.bak -E 's#^laddr = "tcp://127.0.0.1:26657"#laddr = "tcp://0.0.0.0:26657"#' ~/.exrpd/config/config.toml
docker run -d --name xrplevm-node --restart unless-stopped \
-p 26657:26657 \
-v /root/.exrpd:/root/.exrpd --entrypoint exrpd peersyst/exrp:<new-version> startRepeat until you reach the latest network version.
Verify sync
exrpd status
curl -s localhost:26657/status | jq .result.sync_info