Running a Validator or RPC Node
This guide will instruct you how to set up a CLV validator node on CLV networks (Testnet/Sakura/Mainnet).
👉 Must Read Before Start…
Running a validator is a serious thing, you have a lot of responsibility for the staked tokens of you and nominators. You take the risk of losing your staked tokens, as a slash might happen if your validator node is not properly configured. Please make sure you or your team have the necessary knowledge to run a validator node.
Polkadot Wiki has an awesome introduction of running a validator node on the Polkadot network. As a member of the Polkadot ecosystem, CLV follows the similar process to run and set up a validator node. We may skip some basics steps in this tutorial.
🛠️ Hardware Requirements
CPU - Recent released high-end CPU, e.g., Intel Core i7-10700/AMD Ryzen 7 5800X or above
Memory - 32 GB for Testnet, 64 GB for Sakura and Mainnet.
Storage - 300 GB SSD, Storage usage could increase by time, you might need to increase the capacity as the chain data grows.
OS: Linux, Debian/Ubuntu LTS distributions are recommended.
🔧 Prepare Environment
We'll use docker and docker-compose to run the validator in this guide. You need to install docker and docker-compose firstly. Please follow the installation guide in the docs.
🛰️ Firewall Setup
Below ports need to be exposed:
30333 - The p2p port of the chain
📁 Create Directories
Create the config and data directories using the below command:
sudo mkdir -p /opt/data/
sudo mkdir -p /opt/compose/
# secure the data access
sudo chmod 0700 /opt/data
sudo chmod 0700 /opt/compose ⚙️ Setup CLV Validator Node
Currently, we only have CLV Testnet (iris) and CLV Mainnet (ivy) launched. CLV Testnet opens for validators to join. CLV Mainnet operates in the POA mode and maintained by 6 nodes belongs to CLV foundation.
Validator Configuration for CLV Mainnet will be updated later once it's ready for staking and validators can join.
📝 Create the Compose configure file
Create /opt/compose/docker-compose.yaml and set the content as below:
version: "3.8"
services:
clover-validator:
image: "cloverio/clover-ivy:0.1.23"
restart: always
command:
- /opt/clover/bin/clover
- --chain
- /opt/specs/clover-ivy.json
- --base-path
- /opt/chaindata
- --validator
- --name
- 🍀clover-validatornode
- --port
- "30333"
- --ws-port
- "9944"
- --rpc-port
- "9933"
- --rpc-cors=all
- --execution
- wasm
- --wasm-execution
- compiled
ports:
- "30333:30333"
- "9933:9933"
- "9944:9944"
volumes:
- /opt/data/clover:/opt/chaindata🚀 Bring up the validator node
Use below command to bring up the validator node:
cd /opt/compose # goto the compose file directory
docker-compose up # bring up the validator node in the foreground
## check whether the node starts up normally
## Ctrl-C stop the node
docker-compose up -d # start the validator node in the daemon mode.You need to check the node logs using docker-compose logs command. Wait until the node is synced and the block numbers syncs with the latest number on the chain.
💹 Bond CLV
Checkout Staking documentation.
🗝️ Set the session keys
Checkout Polkadot Session Keys documentation.
🌠 Validate
Checkout Polkadot Validate documentation.
🔱 Links
CLV Foundation provides the RPC services for the public. Sometimes it's necessary to run a self hosted CLV RPC service if the public services can't satisfy your needs.
With a self hosted CLV RPC service you could gain below benefits:
Faster access speed - a Self-hosted RPC node could provide better performance
Better security - transactions could be sent to to the self-hosted RPC server instead of the public service.
Better Availability
CLV is a fully decentralized network, anyone can setup a CLV node by following this tutorial!
🍀 Types Of CLV RPC Nodes
Generally speaking, there are two kind of RPC nodes:
Archive node An archive node keeps all the past blocks data. And client can't query data in any of the past blocks.
Full node A full is node is pruned. which means it keeps only a few of the past blocks data (256 by default, which could be adjusted using the
--pruningcommand line arguments.
An archive nodes consumes much more disk spaces it stores more data than a full node. You need to take the decision based on your business model and requirements. E.g. block explorer and historical analysis tools normally requires an archive node to query the full historical data. Wallets on the other hand normally only requires a full node to be able to query the current state(e.g. the balance of an account) and submit transactions to the CLV Network.
🛠️ Hardware requirements
CPU - Recent released high end cpu, e.g. Intel Core i7-10700/AMD Ryzen 7 5800X or above
Memory - 32GB for Testnet, 64GB for Sakura and Mainnet.
Storage - 300GB SSD, Storage usage could increase by time, you might need to increase the capacity as the chain data grows..
OS: Linux, Debian/Ubuntu LTS distributions are recommended.
Prepare Environment
We'll use docker and docker-compose to run the validator in this guide. You need to install docker and docker-compose firstly. Please follow the installation guide in the docs.
🛰️ Firewall Setup
Below ports need to be exposed:
30333 - The p2p port of the chain
9933 - The http endpoint of the RPC service
9944 - The websocket endpoint of the RPC service.
📁 Create Directories
Create the config and data directories using below command:
sudo mkdir -p /opt/data/
sudo mkdir -p /opt/compose/
# secure the data access
sudo chmod 0700 /opt/data
sudo chmod 0700 /opt/compose ⚙️ Setup CLV RPC Node
Currently we only have CLV Testnet(iris) and CLV Mainnet(ivy) launched.
Rpc Configuration for CLV Mainnet will be updated later.
📝 Create the Compose configure file
Create /opt/compose/docker-compose.yaml and set the content as below:
version: "3.8"
services:
clover-validator:
image: "cloverio/clover-ivy:0.1.15"
restart: always
command:
- /opt/clover/bin/clover
- --chain
- /opt/specs/clover-preview-iris.json
- --base-path
- /opt/chaindata
- --pruning
- archive
- --name
- 🍀clover-rpc-node
- --port
- "30333"
- --ws-port
- "9944"
- --rpc-port
- "9933"
- --rpc-cors=all
- --ws-max-connections
- "2000"
- --ws-external
- --rpc-external
- --execution
- wasm
ports:
- "30333:30333"
- "9933:9933"
- "9944:9944"
volumes:
- /opt/data/clover:/opt/chaindata🚀 Bring up the RPC node
Use below command to bring up the validator node:
cd /opt/compose # goto the compose file directory
docker-compose up # bring up the rpc node in the foreground
## check whether the node starts up normally
## Ctrl-C stop the node
docker-compose up -d # start the rpc node in the daemon mode.You need to check the node logs using docker-compose logs command. Wait until the node is synced and the block numbers syncs with the latest number on the chain.
📡 Post Setup
You may want to setup a reverse proxy server or load balancer for the RPC service. There're some known tools for you to start with, please checkout:
Docker Compose file templates
Below are several docker compose file templates for ClV networks.
version: "3.8"
services:
clover-rpc:
image: 'cloverio/clover-ivy:0.1.23'
restart: always
environment:
ARGS: "--base-path /opt/chaindata --chain /opt/specs/clover-ivy.json --port 30333 --ws-port 9944 --rpc-port 9933 --pruning archive --name ivy-a-rpc4 --rpc-cors=all --ws-max-connections 5000 --ws-external --rpc-external --wasm-execution compiled"
ports:
- "9933:9933"
- "9944:9944"
- "30333:30333"
- "9615:9615"
volumes:
- /opt/data/chains/ivy:/opt/chaindata
- /opt/data/config:/opt/configversion: "3.3"
services:
clover-para-node:
image: "cloverio/clover-para:polkadot-v0.9.16.1"
restart: always
command:
- /opt/clover/bin/clover
- --parachain-id
- "2002"
- --chain
- /opt/specs/clover-para-raw.json
- --base-path
- /opt/chaindata
- --name
- clover-para-rpc
- --bootnodes
- /dns/boot1.para.clover.finance/tcp/40335/ws/p2p/12D3KooWFWYYwimRBexvZokZmNnmSdXcLCz8WmMTHDCAhzm5tLM6
- /dns/boot2.para.clover.finance/tcp/40335/ws/p2p/12D3KooWSvvxYi9nkyGJ17hEjwmytNRMrSsQtSrGsHzUaLTcUUea
- --pruning # you can remove the pruning parameter if you don't need a full archive node
- archive #
- --ws-port
- "9946"
- --rpc-port
- "20194"
- --port
- "40335"
- "--rpc-cors=all"
- --rpc-external
- --ws-external
- --execution
- wasm
- --ws-max-connections
- "5000"
- --
- --execution
- wasm
- --ws-port
- "10194"
- --rpc-port
- "10195"
- --chain
- polkadot
- --port
- "30335"
ports:
- "9946:9946"
- "20194:20194"
- "40335:40335"
- "30335:30335"
volumes:
- /data/data/chains/bootnode:/opt/chaindata
- /data/data/config:/opt/config
logging:
driver: "json-file"
options:
max-size: "25m"
max-file: "2"
Last updated