XRPL EVM
Setup your XRPL EVM Mainnet or Testnet node.
Prerequisites
- MacOS or Ubuntu 18.04+
- Build-essential packages
- Golang 1.17+
- Official Documentation
Resource | Minimum Recommendation | Notes |
---|---|---|
Operating System | Linux (AMD64) | A recent Linux distribution (e.g., Ubuntu 20.04 LTS, CentOS 8, Debian 11) is strongly recommended for stability, security, and compatibility. |
CPU | 4 Physical Cores or More | Multi-core processors provide enough parallel processing to efficiently handle validation, API requests, and block synchronization. Higher core counts can enhance performance under heavy load. |
Memory (RAM) | 32GB | Sufficient memory ensures smooth operation during peak network load, handling large state DB operations, and responding to complex smart contract queries. More memory may further improve performance. |
Storage | 500GB NVMe SSD | A high-performance NVMe SSD provides fast random access and write speeds, which are essential for maintaining a responsive node database and quickly processing state updates. More storage capacity may be required for archive nodes or long-term data retention. |
Network | 100Mbps | A stable 100Mbps connection or faster ensures timely propagation of blocks, efficient peer discovery, and responsive API endpoints. Lower bandwidth may lead to delayed synchronization or performance bottlenecks. |
Install
To get started with the node setup.
đź’ˇ
This setup has been tested with exrpd
version 6.0.0
- Install the latest binary from the official XRPL EVM node repo
- Move the binary to your preferred directory
- Make the binary executable
chmod +x exrpd
- Confirm if
exrpd
successfully installed by running version command
exrpd version
Node Configuration
- Create the .exrpd directory in your user’s home directory:
mkdir -p ~/.exrpd
Inside it, you will eventually see two subfolders. The first is ~/.exrpd/config
. The second is ~/.exrpd/data
.
- Set the chain id
exrpd config chain-id exrp_1440002-1
exrpd config chain-id xrplevm_1449000-1
exrpd config chain-id TBD
- Initialize the node
Make sure to replace
<your_moniker>
with a short ASCII-only name for your node (e.g., my-node).
exrpd init <your_moniker> --chain-id exrp_1440002-1
exrpd init <your_moniker> --chain-id xrplevm_1449000-1
exrpd init <your_moniker> --chain-id TBD
This step populates the aforementioned ~/.exrpd
directory with the config
and data
directories.
Download genesis file
wget https://raw.githubusercontent.com/Peersyst/xrp-evm-archive/main/poa-devnet/genesis.json -O ~/.exrpd/config/genesis.json
TBD
TBD
Download Snapshot
You can download Peersyst’s snapshot.
đź’ˇ
Note: you can also download from genesis but genesis was created with v1.0.0
and if you downloaded the latest exrpd
you will be running a later version than that.
This may take a few hours to complete and will require about ~142gb of storage. Once completed, extract the file into your ~/.exrpd/data
folder.
Add Peers
You need peers so that your node can sync with the devnet. The XRPL EVM Devnet provides a text file listing known peers:
Grab 10
PEERS=$(curl -sL https://raw.githubusercontent.com/Peersyst/xrp-evm-archive/main/poa-devnet/peers.txt \ | sort -R \ | head -n 10 \ | awk '{print $1}' \ | paste -s -d, -)
Inject the peers into your config.toml
file (persistent_peers):
sed -i.bak -e "s/^persistent_peers *=.*/persistent_peers = \"$PEERS\"/" \ ~/.exrpd/config/config.toml
Ethereum JSON RPC Compatibility
The XRP EVM node is a CometBFT Node. The ampd
daemon however will be attempting to interact with your node as an Ethereum JSON RPC compatible node. To configure your CometBFT Node to support Ethereum JSON RPC functionality you need to update your app.toml
file. In the JSON RPC section of the app.toml
update the enable
flag to true
.
################################################################################## JSON RPC Configuration ##################################################################################
[json-rpc]
# Enable defines if the JSONRPC server should be enabled.enable = true
Run Node
At this point your ~/.exrpd
file should have a config
and data
file. The config should be wired up with various configurations including the
addrbook.json
app.toml
client.toml
config.toml
config.toml.bak
genesis.json
node_key.json
priv_validator_key.json
The data
directory should contain the data that you extraced from the snpashot you installed before.
Run the following command to start the node
exrpd start
You should see logs similar to
INF starting ABCI with CometBFT module=server...INF finalized block block_app_hash=... height=13242560 ...
Common Observations in Logs
“ERR failed to add block ... got an already committed block #XXXX”
. This just means your node already processed the block from a faster peer.Periodic connect/disconnect messages (e.g., SendTimeout, error with peer ...)
This is normal. Tendermint/CometBFT will drop slow or unresponsive peers and reconnect if needed.“catching_up”: true
This means your node thinks there are more blocks to fetch. If the Devnet is actively producing blocks, this will remain true until you fully sync. If the network is paused or slow, it may stay true indefinitely, but you’ll still be at the latest block.
Common Issues
- No peers
- Make sure you updated persistent_peers.
- If you see repeated “No addresses to dial,” your node has zero connections. Re-run the peer script or check the docs for seed nodes.
- Genesis or config file errors
- Ensure the chain ID and all fields (like
initial_height
) are in the correct format (typically string in Cosmos). - Re-download the official genesis.json if in doubt.
- Port collisions
- If something else is using 26657, you may need to open ~/.exrpd/config/config.toml and change your RPC ports.
- Minimum gas price error
- If you receive an error that says
Error: set min gas price in app.toml or flag or env variable: error in app.toml
. Set theminimum-gas-prices
field inapp.toml
to a value for example0.25axrp