Installation

official public chain documentation are available on https://kadena-io.github.io/kadena-docs/Public-Chain-Docs

Minimal recommended hardware requirements for nodes are:

  • 2 CPU cores

  • 4 GB of RAM

  • 250 GB SSD or fast HDD

  • Public IP address

If the node is also used as API server for Pact or mining, rosetta, chainweb-data: 4 CPU cores and 8GB of RAM.

Install Docker First (or you can follow official docs here: https://docs.docker.com/engine/install/ubuntu/ )

// Remove old docker installed
sudo apt-get remove docker docker-engine docker.io containerd runc

// Setup docker repository
sudo apt-get update
sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

// install docker
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

// verify installation
sudo docker run hello-world

Initialize Kadena database

# Initialize the database (optional, but avoids several hours of initial db synchronization)
docker run -ti --rm -v chainweb-db:/root/.local/share/chainweb-node/mainnet01/0/ kadena/chainweb-node /chainweb/initialize-db.sh

Install and Run Kadena Chain-web Node via Docker

# Run a chainweb-node in Kadena's mainnet
docker run -d -p 443:443 -v chainweb-db:target=/root/.local/share/chainweb-node/mainnet01/0/ kadena/chainweb-node

Next, we'll configure the chain-web node

Run the node

chainweb-node

The node will communicate with other nodes in a P2P network. By default it uses port 1789 for the P2P communication.

==========================================================

A complete configuration file with the default settings can be created with

chainweb-node --print-config > config.yaml

This file can then be edited in order to change configuration values.

The command chainweb-node --help also provides descriptions of these configuration values.

Given a configuration file or a set of command line options it is possible to print out only those configuration values that are different from their respective default:

chainweb-node --config-file=config.yaml --some-command-line-options --print-config-as=minimal

Monitoring the health of a Chainweb Node

The following outlines how you can check that your chainweb-node is healthy

chainweb-node should be running from the public IP address and a port that is open to the other Chainweb nodes.

If you're behind a NAT, it is VERY IMPORTANT that your network allows external nodes to connect to the node you are running.

$ chainweb-node --log-level <desired-log-level>

For production scenarios we recommend that you use log-level warn or error. For trouble shooting or improved monitoring you can also use info.

Once your node is running, go through the following checks to verify that you have a healthy node:

  • run the command in your terminal:

    $ curl -sk "https://<public-ip>:<port>/chainweb/0.0/mainnet01/cut"
  • navigate to this website on your browser: https://yourPublicIp:port/chainweb/0.0/mainnet01/cut

  • check logs for whether services are started

  • check if the node is receiving cuts

  • look for errors in the logs

  • look for warnings in the logs

Usually, when a node is receiving and publishing cuts (i.e. block heights at every chain), it's working correctly.

The /cut endpoint will return the latest cut that your node has. It's possible that your node is falling behind, so make sure to compare its cut height with the cut heights of the bootstrap nodes. It's also possible that you are mining to a node that is catching up to the rest of the network. Before you start mining to a node, you SHOULD verify that this node has the most up-to-date cut.

You can get the cut height of any node by running the following:

$ curl -sk https://<bootstrap-node-url>/chainweb/0.0/mainnet01/cut | jq '.height'

Last updated