Kava Node Setup Guide
This guide presents you the Kava Node setup for Mainnet.
Prerequisites
- Minimum hardware requirements: See official documentation
- MacOS or Ubuntu
- Build-essential packages
- Golang
- Official Documentation
- GitHub
Storage
The monthly storage requirements for a node are as follows. These are estimated values based on experience, but should serve as a good guide.
- An archival node (pruning = "nothing") grows at a rate of ~100 GB per month Current total disk usage is 6TB, so a larger disk would be necessary.
- A full pruning node (pruning = "everything") grows at a rate of ~5 GB per month
- A default pruning node (pruning = “default”) grows at a rate of ~25 GB per month
Memory
The minimum memory requirements for a node are as follows. These are estimated values based on experience, but should serve as a good guide.
- An archival node (pruning = "nothing") should have at least 128GB of dedicated memory (256GB is optimal to avoid possible OOM errors due to other system utilization)
- A full pruning node (pruning = "everything") should have at least 64GB of dedicated memory
- A default pruning node (pruning = “default”) should have at least 64GB of dedicated memory
Install Kava
- Install the appropriate Golang version (found on our GitHub, linked above).
Mainnet
git clone https://github.com/kava-labs/kava
cd kava
git checkout [release tag]
make install
#verify versions
kava version --long
Setup Kava Node
Initialize Kava Config
kava init [your_moniker_name] --chain-id kava_2222-10
kava tendermint unsafe-reset-all --home $HOME/.kava
cd $HOME/.kava/config
rm genesis.json
Setup the Genesis File
wget https://kava-genesis-files.s3.us-east-1.amazonaws.com/kava_2222-10/genesis.json
Edit $HOME/.kava/config/config.toml to add the following persistent peers.
Mainnet
persistent_peers = "2a15d9c39eea97b4cf00480b45d4ea32a2e173d0@94.130.78.22:26656,5a933891627e8bde0c4bd0b43c9f99b706e520a2@141.95.99.214:11656,ab3064c37d406245fa2d6e6109395518e8ac8a4c@95.111.255.148:26656,41d88639239c55fd37279d24df507238e1c417ea@85.237.192.104:26656,b23050c89f8cb2f4099688b2bcd60f49b15f41d1@95.214.53.217:26656,d5db8898d40054c07442f3364b32f7fac2752f5e@188.34.178.92:26656,fc34d9a3aff6026a3dbd531a96a50680df61dd91@50.116.3.21:26656,50e4cad7d5e28f7b6495168f92e12bf810e293fd@142.132.152.187:10856,6885971cdb724fa93034fb9e6a11113a6f555d2a@15.235.53.92:11656,7b5a2b519cb5a7d70f0fc5842829d4cce1262585@65.108.121.153:26656,51cfccb07d5a45efdf98d005159c01f0656751ad@54.165.27.59:26656,f7c894901f450b92614fd051d10854d168ec30b5@65.21.94.20:10856,7393ed21b6dc516fcc0ad33c4fe42bdd295d2795@18.206.217.244:26656,508d7ec33c7f3c9c479ca9b845cadbbefee670f7@162.55.133.237:21656,d68410115d7681196651e7fece9e4cafc0456856@3.0.206.176:26656,4cfdd459466cfd492d66b7a5fe26cde96e35d735@182.48.203.7:26656,63ec88e98fc267fb82fa62a51ca5c0a2c115d749@51.38.53.4:27656,ebc272824924ea1a27ea3183dd0b9ba713494f83@185.16.39.172:26656,4efe3caf3b8c0ca197d40756f3bb1bd6081bf18d@51.210.220.20:36656,c124ce0b508e8b9ed1c5b6957f362225659b5343@136.243.248.185:26656,82588f011491c6100d922d133f52fc23460b9231@95.217.91.233:26656,8b5c4a890c8ae7efbbe3360af71be1c3c3a9e12e@121.78.241.68:46656,ce203135031ab08fc0ddff5bd13806e25f21b91d@3.115.125.121:26656,dcd6026ebe5586ed0e94751090f8290b5997666b@5.189.165.172:26656,bc61c26018f65e54232b7e9e99bf7599dffeb78b@13.56.56.180:26656"\\
seeds = "b334e291ac361f9a1cf253d290047700b488b679@52.2.147.96:26656"
Add minimum gas prices into app.toml
minimum-gas-prices = "0.025ukava;1000000000akava"
Do the rest of the port configuration as desired; The EVM configuration and ports can be found in the app.toml under section "EVM Configuration"
Setting Up Your Pruning Node
To setup a pruning node, you can get started using one of the following:
- Nodies provides snapshots hosted in multiple regions for faster access. Download the latest pruned goleveldb snapshot using aria2c (detailed guide here):
### Options: 'de' for Europe, 'use' for US, 'sgp' for Asia
export REGION=de
aria2c -s 10 -x 10 https://download.nodies.org/download/latest/snapshot/${REGION}/kava/mainnet/pruned
- Go to Quicksync and download the .tar pruned snapshot file
- Sync without the pruned snapshot file
Please note that Quicksync’s and Nodies' pruned snapshots should be run using Goleveldb flag for your setup.
Setting Up Your Archival Node
To setup an archival node, you must download the correct version of the kava node data and sync a node:
- Nodies provides snapshots hosted in multiple regions for faster access. Download the latest archive rocksdb snapshot using aria2c (detailed guide here):
### Options: 'de' for Europe, 'use' for US, 'sgp' for Asia
export REGION=de
aria2c -s 10 -x 10 https://download.nodies.org/download/latest/snapshot/${REGION}/kava/mainnet/archive
- Go to Quicksync and download the archive .tar snapshot file to be used (please note that you should only download this file once)
- Ensure you are using the correct network (current mainnet=kava_2222-10)
Please ensure you compile your archive node with rocksdb flag for your setup.
Creating a New Data Folder Using Node Tar File
Requirements:- Ensure the kava process is not running
- Disk large enough for the data directory, which is around 6TB uncompressed. Ideally 12TB for room for growth
- Zst compression library:
sudo apt-get install zstd
Steps:
- Downloading the tar file
- Example using aria2c:
aria2c --continue -x16 --file-allocation=falloc
- Extract the tar file
tar -I unzstd -xvf - -C /path/to/your/kava/data
- Replace data directory in your kava directory with the extracted data if necessary.
Compiling Kava with RocksDB Support
The provided quicksync archive snapshot is from a Kava mainnet node that uses RocksDB as the database backend. RocksDB is used as a more efficient and performant choice for Kava’s production infrastructure than the default GolevelDB database backend.
Config Recommendations
- Set lazy loading on in the app.toml file for faster initial load (optional)
iavl-lazy-loading = true
- Ensure rocksdb is enabled in the config.toml file
db_backend = "rocksdb"
Install RocksDB on your system
Install RocksDB on your machine, use version v8.1.1
Compiling Kava binary with RocksDB flag
- Check out Kava mainnet version source code
- Change into that directory
- Run
make install COSMOS_BUILD_OPTIONS=rocksdb
Building Kava using Docker Images
If you are using docker to build kava using rocksdb please utilize the docker file in your configuration.
Syncing Your Node
To sync your node, you will use systemd, which manages the Kava daemon and automatically restarts it in case of failure. To use systemd, you will create a service file. Be sure to replace <your_user>
with the user on your server:
sudo tee /etc/systemd/system/kava.service > /dev/null <<'EOF'
[Unit]
Description=Kava daemon
After=network-online.target
[Service]
User=<your_user>
ExecStart=/home/<your_user>/go/bin/kava start
Restart=on-failure
RestartSec=3
LimitNOFILE=4096
[Install]
WantedBy=multi-user.target
EOF
To start syncing:
# Start the node
sudo systemctl enable kava
sudo systemctl start kava
To check on the status of syncing:
kava status --log_format json | jq '.sync_info'
This will give output like:
{
"latest_block_hash": "920E4D32F02CFF8064D26DD7D34C65DC623F4026C65C192BBCD7DBF19AFB5630",
"latest_app_hash": "442E7E55982109D9F73467EA0E374312B402AE620DEC81CB3441E949ED0D0A29",
"latest_block_height": "2437",
"latest_block_time": "2022-05-25T23:07:36.752766828Z",
"earliest_block_hash": "9D2AF876309BB9174604004A813DCFEE94F4947B08C5BB4C1A042F318488851E",
"earliest_app_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855",
"earliest_block_height": "1",
"earliest_block_time": "2022-05-25T17:00:00Z",
"catching_up": true
}
The main thing to watch is that the block height is increasing. Once you are caught up with the chain, catching_up
will become false. At that point, you can start using your node to create a validator.
To check the logs of the node:
sudo journalctl -u kava -f
Create Validator Node
If you would like to setup a validator, continue the steps outlined in Run Validator Node