Cronos Mainnet
This is a detailed documentation for setting up a full node on Cronos mainnet cronosmainnet_25-1
.
Pre-requisites
Supported OS
We officially support macOS, Windows, and Linux only. Other platforms may work but there is no guarantee. We will extend our support to other operating systems after we have stabilised our current architecture.
Prepare your machine
To run Cronos Mainnet nodes, you will need a machine with the following minimum requirements to run different types of nodes:
Pruned node (setting pruning=everything)
Storage: ~25G*
RAM: 16G (LevelDB) or 64G RAM (RocksDB)***
CPU: 4-core
Default full node (setting pruning=default)
Storage: ~1.5T**
RAM: 16G (LevelDB) or 64G RAM (RocksDB)***
CPU: 4-core
Archive node (setting pruning=nothing)
Storage: ~5.5T (LevelDB) or ~4.2T (RocksDB)
RAM: 16G (LevelDB) or 64G RAM (RocksDB)***
CPU: 4-core
*Only in case state-sync enabled. ** e.g. Note that size of snapshots from Quicksync will keep growing. *** Note that during a state-sync the node might require higher RAM than 3GB but, returns to normal after state-sync has finished.
Step 0 : Notes on Network Upgrade
Before we start, please note that there was "Huygen" network upgrade at the block height 2,693,800
, which requires the node operator to update their Cronos Mainnet binary cronosd
from v0.6.*
to v0.7.0
.
For the host who would like to build a Full Node with complete blockchain data from scratch, one would need to:
1 ~ 2693800
Start the node with the older binary version cronos_v0.6.*
Sync-up with the blockchain until it reaches the target upgrade block height 2,693,800
2693800 ~ 3982500
After it reaches the block height 2,693,800
, update app.toml
with new config items
Update the binary to cronos_v0.7.0
Restart the node
3982500
After reaching block height, update iavl-disable-fastnode
in app.toml
Update the binary to cronos_v0.8.3
Restart the node
6542800
After reaching block height, update app-db-backend
in app.toml.
Update the binary to cronos_v1.0.2
Restart the node
Users can refer to the upgrade guide of "Huygen" for the detailed upgrade steps.
Step 1. Get the Cronos Mainnet Binary
To simplify the following step, we will be using Linux (Intel x86) for illustration. Binaries for Mac (Intel x86 / M1) and Windows are also available.
To install released Cronos Mainnet binaries from github:
Create a new folder for the Install e.g. (cronosmainnet):
$ cd cronosmainnet
$ curl -LOJ https://github.com/crypto-org-chain/cronos/releases/download/v0.6.11/cronos_0.6.11_Linux_x86_64.tar.gz
$ tar -zxvf cronos_0.6.11_Linux_x86_64.tar.gz
Afterward, you can check the version of cronosd
by:
$ cd cronosmainnet/bin
$ ./cronosd version
0.6.11
Step 2. Configure cronosd
cronosd
Step 2-0 (Optional) Clean up the old blockchain data
If you have joined
cronostestnet_338-3
before, you would have to clean up the old blockchain data and start over again, it can be done by running:$ ./cronosd unsafe-reset-all
and remove the old genesis file by
$ rm ~/.cronos/config/genesis.json
Before kick-starting your node, we will have to configure your node so that it connects to the Cronos mainnet:
Step 2-1 Initialize cronosd
cronosd
First of all, you can initialize cronosd by:
$ ./cronosd init [moniker] --chain-id cronosmainnet_25-1
This
moniker
will be the displayed id of your node when connected to Cronos Chain network.When providing the moniker value, make sure you drop the square brackets since they are not needed. The example below shows how to initialize a node named
pegasus-node
:$ ./cronosd init pegasus-node --chain-id cronosmainnet_25-1
Step 2-2 Configure cronosd
Download and replace the Cronos Mainnet
genesis.json
by:$ curl https://raw.githubusercontent.com/crypto-org-chain/cronos-mainnet/master/cronosmainnet_25-1/genesis.json > ~/.cronos/config/genesis.json
Verify sha256sum checksum of the downloaded
genesis.json
. You should seeOK!
if the sha256sum checksum matches.$ if [[ $(sha256sum ~/.cronos/config/genesis.json | awk '{print $1}') = "58f17545056267f57a2d95f4c9c00ac1d689a580e220c5d4de96570fbbc832e1" ]]; then echo "OK"; else echo "MISMATCHED"; fi; OK!
For network configuration, in
~/.cronos/config/config.toml
, validator nodes need to modify the configurations ofseed
,create_empty_blocks_interval
andtimeout_commit
$ sed -i.bak -E 's#^(seeds[[:space:]]+=[[:space:]]+).*$#\1"0d5cf1394a1cfde28dc8f023567222abc0f47534@cronos-seed-0.crypto.org:26656,3032073adc06d710dd512240281637c1bd0c8a7b@cronos-seed-1.crypto.org:26656,04f43116b4c6c70054d9c2b7485383df5b1ed1da@cronos-seed-2.crypto.org:26656,337377dcda43d79c537d2c4d93ad3b698ce9452e@bd-cronos-mainnet-seed-node-01.bdnodes.net:26656"#' ~/.cronos/config/config.toml $ sed -i.bak -E 's#^(create_empty_blocks_interval[[:space:]]+=[[:space:]]+).*$#\1"5s"#' ~/.cronos/config/config.toml $ sed -i.bak -E 's#^(timeout_commit[[:space:]]+=[[:space:]]+).*$#\1"5s"#' ~/.cronos/config/config.toml
If you would like to build an archive node that allows you to query all the historical block data - kindly update the pruning setting to
"nothing"
by$ sed -i.bak -E 's#^(pruning[[:space:]]+=[[:space:]]+).*$#\1"nothing"#' ~/.cronos/config/app.toml
Step 3. Run everything
CAUTION
This page only shows the minimal setup for validator / full node.
Furthermore, you may want to run full nodes as sentries (see Tendermint), restrict your validator connections to only connect to your full nodes, test secure storage of validator keys etc.
Once cronosd
has been configured, we are ready to start the node and sync the blockchain data:
Start cronosd, e.g.:
$ ./cronosd start
(Optional for Linux) Start cronosd with systemd service, e.g.:
$ curl -s https://raw.githubusercontent.com/crypto-org-chain/cronos-docs/master/systemd/create-service.sh -o create-service.sh && curl -s https://raw.githubusercontent.com/crypto-org-chain/cronos-docs/master/systemd/cronosd.service.template -o cronosd.service.template
$ chmod +x ./create-service.sh && ./create-service.sh
$ sudo systemctl start cronosd
# view log
$ journalctl -u cronosd -f
It should begin fetching blocks from the other peers.
You can query the node syncing status by
$ ./cronosd status 2>&1 | jq '.SyncInfo.catching_up'
If the above command returns
false
, It means that your node is fully synced; otherwise, it returnstrue
and implies your node is still catching up.One can check the current block height by querying the public full node by:
curl -s https://rpc.cronos.org/commit | jq "{height: .result.signed_header.header.height}"
and you can check your node's progress (in terms of block height) by
$ ./cronosd status 2>&1 | jq '.SyncInfo.latest_block_height'
Different ways to sync Cronos with snapshots
The above outlines how to set up a node from scratch. Alternatively, you can set up a node using snapshots:
QuicksyncState-syncPublic Node SyncKSYNCLast updated
Was this helpful?