Set Up a Full Node
Installing and running a full node allows you to read orderbook and onchain data from a network, as well as place, confirm and cancel orders directly on that network.
Prerequisites
The minimum recommended specs for running a node is the following:
- 16-core, x86_64 architecture processor
- 64 GiB RAM
- 500 GiB of locally attached SSD storage
Install
Paste this into a shell on the machine that will run the node:
/bin/bash -c "$(curl -fsSL https://cdn.rubin.trade/scripts/create_full_node.sh)"The script prints exactly what it will do and pauses before it does any of it. It installs the version the network is running at that moment, so it does not go stale after a chain upgrade, and it verifies the binary against its published SHA-256 before using it. It does not start the node; you do that at the end.
First it asks how the node should get its initial state.
State sync is the default. The node fetches the current application state from its peers over P2P and verifies it against a block hash taken from a public node. It takes minutes and a few MB, with no bulk download. The node ends up holding no blocks below the height it synced from, so it cannot answer historical queries.
Snapshot downloads the latest published archive — roughly 25 GiB — and unpacks
it in place, replacing $HOME/.ritbit/data. Much slower, but the node keeps the
block history the archive carries. Choose this for an indexer, an IBC relayer, or
anything else that reads back over past blocks.
To read it before running it, or to target another network, download it first and
check it against the published checksum. Edit CHAIN_ID, PUBLIC_RPC,
PUBLIC_REST, PERSISTENT_PEERS and BASE_SNAPSHOT_URL at the top of the file —
see Network Constants:
cd $HOME
curl -fsSLO https://cdn.rubin.trade/scripts/create_full_node.sh
curl -fsSLO https://cdn.rubin.trade/scripts/create_full_node.sh.sha256
sha256sum -c create_full_node.sh.sha256
less create_full_node.sh
bash create_full_node.shOr follow the steps below to set a node up by hand.
Manual Installation Steps
The following steps will guide you through manually setting up a full node.
Run the commands in this procedure from your home directory unless otherwise specified. To change directories to your home folder, run the following command:
cd $HOMEUpdate your system and prepare to install dependencies
Install Go
To install Go, run the following commands using the latest version of Go:
The protocol requires Go 1.25.9 or newer (see the go directive in
protocol/go.mod). An older toolchain will refuse to build.
# Example for AMD64 architecture and Go version 1.25.12
wget https://golang.org/dl/go1.25.12.linux-amd64.tar.gz # Download the compressed file
sudo tar -C /usr/local -xzf go1.25.12.linux-amd64.tar.gz # Extract the file to /usr/local
rm go1.25.12.linux-amd64.tar.gz # Delete the installer packageAdd the Go directory to your system $PATH:
echo 'export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin' >> $HOME/.bashrc # Write to your .bashrc profileInstall Cosmovisor and create data directories
Cosmovisor is a process manager for Cosmos SDK-based blockchains that enables automatic binary updates without downtime. To install the latest version of Cosmovisor, run the following command:
go install cosmossdk.io/tools/cosmovisor/cmd/cosmovisor@latestTo create data directories for Cosmovisor, run the following commands:
mkdir -p $HOME/.ritbit/cosmovisor/genesis/bin
mkdir -p $HOME/.ritbit/cosmovisor/upgradesDownload the ritbitd binary
The ritbitd binary contains the software you need to operate a full node. You must use the same version of the software as the network to which you want to connect. To find the version the network currently runs:
curl -s https://rest.mainnet.rubin.trade/cosmos/base/tendermint/v1beta1/node_info | jq -r '.application_version.version'Builds are published per version. Browse the available versions at
storage.yandexcloud.net/ritbit-upgrade,
then download the one matching the network, replacing v27.5 as needed:
# Example for version v27.5 on AMD64 architecture
curl -L -O https://storage.yandexcloud.net/ritbit-upgrade/v27.5/ritbitd-v27.5-linux-amd64.tar.gzEach version directory also contains upgrade-info.txt with the SHA-256
checksum. Verify the archive before using it:
curl -s https://storage.yandexcloud.net/ritbit-upgrade/v27.5/upgrade-info.txt
sha256sum ritbitd-v27.5-linux-amd64.tar.gzMove ritbitd to your Cosmovisor /genesis directory
After you download the binary, moving ritbitd into your Cosmovisor data directory allows you to use Cosmovisor for no-downtime binary upgrades. To extract, rename, and move the file to your Cosmovisor data directory, run the following commands:
The archive contains a single bin/ritbitd.
# Example for version v27.5 on AMD64 architecture
tar -xzvf ritbitd-v27.5-linux-amd64.tar.gz # Extract the file, creates ./bin/ritbitd
mv ./bin/ritbitd $HOME/.ritbit/cosmovisor/genesis/bin/ritbitd # Move it into the Cosmovisor genesis directory
chmod +x $HOME/.ritbit/cosmovisor/genesis/bin/ritbitd # Make it executable
rm ritbitd-v27.5-linux-amd64.tar.gz # Delete the archive
rm -rf bin # Delete the now-empty /bin directoryAdd the ritbitd directory to your system $PATH:
echo 'export PATH=$PATH:$HOME/.ritbit/cosmovisor/genesis/bin' >> $HOME/.bashrc # Write to your .bashrc profileInitialize your node
To initialize your node, provide the ID of the chain to which you want to connect and create a name for your node. The Rubin home directory is created in $HOME/.ritbit by default. Replace the example values ritbit-mainnet and my-node with your own and run the following command:
# Example for RIT token holders on mainnet
ritbitd init --chain-id=ritbit-mainnet my-nodeWhen you initialize your node, ritbitd returns your default node configuration in JSON.
Update your node configuration with a list of seed nodes
A seed node acts as an address book and helps your node join the network. To update config.toml with a list of seed nodes, run the following command:
# mainnet (ritbit-mainnet)
PEERS="f907537d0ea47759e369f7bac5cb2c22be5e3c93@213.165.223.41:26656"
sed -i 's/^persistent_peers = ""/persistent_peers = "'"$PEERS"'"/' $HOME/.ritbit/config/config.tomlThe preceding command updates the persistent_peers variable of config.toml with the list you provide.
Use a snapshot as your node's initial state
Using snapshots to restore or sync your full node's state saves time and effort. Using a snapshot avoids replaying all the blocks from genesis and does not require multiple binary versions for network upgrades. Instead, your node uses the snapshot as its initial state.
Clear your data directory
If you already have a data directory at $HOME/.ritbit/data, you must clear it before installing a snapshot, which comes with its own data directory. To clear your data directory while retaining files you need, follow these steps:
First, make a backup copy of priv_validator_state.json in your .ritbit directory by running the following command:
# Make a copy of priv_validator_state.json and append .backup
cp $HOME/.ritbit/data/priv_validator_state.json $HOME/.ritbit/priv_validator_state.json.backupNext, confirm the following:
- A backup file,
priv_validator_state.json.backup, exists in your current directory. - The original
priv_validator_state.jsonexists in the/datadirectory to be deleted. - No other files exist in the
/datadirectory to be deleted.
ls $HOME/.ritbit # Confirm that the backup exists in /.ritbit
ls $HOME/.ritbit/data # Confirm that only priv_validator_state.json exists in /dataFinally, to clear the data directory, removing it and all files inside, run the following command:
# WARNING: This command recursively deletes files and directories in the ritbit /data directory. Make sure you know what you are deleting before running the command.
rm -rf $HOME/.ritbit/dataInstalling a snapshot will create a new /data directory.
Install the Snapshot
To download and extract the snapshot contents to the default ritbit home directory, first change directories into /.ritbit. To change directories, run the following command:
cd $HOME/.ritbitSnapshots are published to a public bucket and refreshed regularly. File names
follow the pattern ritbit-mainnet_<timestamp>_block-<height>.tar.lz4.
To find and download the most recent snapshot:
BUCKET=https://storage.yandexcloud.net/ritbit-mainnet-snapshot
LATEST=$(curl -s "$BUCKET/?list-type=2" | grep -oE '<Key>[^<]+</Key>' | sed 's/<[^>]*>//g' | sort | tail -1)
echo "Downloading $LATEST"
curl -L -O "$BUCKET/$LATEST"Next, run the following command in your $HOME/.ritbit directory, replacing the example value your-snapshot-filename:
lz4 -dc < your-snapshot-filename.tar.lz4 | tar xf -Extracting the snapshot creates a new /data folder in your current directory, .ritbit.
Next, use the backup file priv_validator_state.json.backup you created to reinstate /data/priv_validator_state.json with the following command:
mv $HOME/.ritbit/priv_validator_state.json.backup $HOME/.ritbit/data/priv_validator_state.jsonFinally, change directories back to your $HOME directory for the rest of the procedure. Run the following command:
cd $HOMEWhen you start your full node, it will automatically use the snapshot in your data directory to begin syncing your full node's state with the network.
Create a system service to start your full node automatically
To create a systemd service that starts your full node automatically, run the following commands:
sudo tee /etc/systemd/system/ritbitd.service > /dev/null << EOF
[Unit]
Description=ritbit node service
After=network-online.target
[Service]
User=$USER
ExecStart=/$HOME/go/bin/cosmovisor run start --non-validating-full-node=true
WorkingDirectory=$HOME/.ritbit
Restart=always
RestartSec=5
LimitNOFILE=4096
Environment="DAEMON_HOME=$HOME/.ritbit"
Environment="DAEMON_NAME=ritbitd"
Environment="DAEMON_ALLOW_DOWNLOAD_BINARIES=false"
Environment="DAEMON_RESTART_AFTER_UPGRADE=true"
Environment="UNSAFE_SKIP_BACKUP=true"
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable ritbitdThe system service definition above holds environment variables. When you start it, the service will run the command /$HOME/go/bin/cosmovisor run start --non-validating-full-node=true.
The flag
--non-validating-full-nodeis required. It disables the functionality intended for validator nodes and enables additional logic for reading data.
Start the service
To start your node using the systemd service that you created, run the following command:
sudo systemctl start ritbitdWhen you want to stop the service, run the following command:
sudo systemctl stop ritbitdWhen you start your full node it must sync with the history of the network. If you initialized your full node using a snapshot, your node must update its state only with blocks created after the snapshot was taken. If your node's state is empty, it must sync with the entire history of the network.
Check your service logs to confirm that your node is running
sudo journalctl -u ritbitd -fIf your system service ritbitd is running, the preceding command streams updates from your node to your command line. Press Ctrl + C to stop viewing updates.
Finally, confirm that your full node is properly synchronized by comparing its current block to the network.
The network's current block, from a public node:
curl -s https://rpc.mainnet.rubin.trade/status | jq -r '.result.sync_info.latest_block_height'Your own node's height:
curl localhost:26657/statusWhen your full node's latest block is the same as the network's latest block, your full node is ready to participate in the network.
Next Steps
When your full node is up to date with the network, you can use it to read live data and configure additional settings. Learn more on the Optimizing Your Full Node and Full Node Streaming pages.