Cronos POS Chain Mainnet: Running a Full Node
This is detailed documentation for setting up a Full Node on the Cronos POS Chain mainnet. Note that while anyone can set up a full node, only the top 100 validators are considered "active" and eligible to receive rewards. See FAQs for more info.
Step 0: Notes on network upgrades
For the host who would like to build a Run a Full Node with complete blockchain data from scratch, note that there were several breaking network upgrades, requiring upgrading at designated block heights below:
1 - 922,363
chain-main_1.2.1
Start the node with the older binary version
922,363 - 3,526,800
chain-main_2.0.1
When it reaches the target block height 922,363 (Canis Major), update the binary and restart
3,526,800 - 10,073,800
chain-main_3.3.9
When it reaches the target block height 3,526,800 (Draco II ), update the binary and restart*
>10,073,800
chain-main_4.2.2
When it reaches the target block height 10,073,800 (V4 upgrade ), update the binary and restart
*Note that as of
v3.3.5and higher, you need to modify your.chain-maind/config/app.tomland set the following params:index_events = []iavl-cache-size = 781250iavl-disable-fastnode = false(set totrueto skip IAVL migration, but keep asfalsewhen starting from a migrated snapshot. When you are onINF starting ABCI with Tendermintfor a while, migration is going on and you should NOT terminate this. It might take a couple of hours, so plan well ahead for this migration, as it may incur downtime.)
Users can refer to the upgrade guides of
"Canis Major" (
v1.*tov2.0.1);"DRACO II" (
v2.*tov3.3.9);"V4 upgrade" (
v3.3.9tov4.2.2); for the detailed upgrade steps.
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 platforms after we have stabilized our current architecture.
Prepare your machine
For Cronos POS Chain mainnet, you will need a machine with the following minimum requirements to run different types of nodes:
Archive Node (setting pruning = nothing)
RAM: 64GB (Rocksdb)
Disk: 3.4TB
CPU: 4 cores
Default Full Node (setting pruning = default)
RAM: 64GB (Rocksdb) or 16GB (goleveldb)
Disk: 1.2TB (From quick sync)
CPU: 4 cores
Pruned Node (setting pruning = everything)
RAM: 64GB (Rocksdb) or 16GB (goleveldb)
Disk: 40GB (From quick sync)
CPU: 4 cores
Please note that the size of snapshots from Quicksync will keep growing.
Step 1. Get the Cronos POS Chain Mainnet binary
To simplify the following step, we will be using Linux for illustration. Binaries for Mac and Windows are also available. There are two options to install chain-maind:
As mentioned before, in order to run a full node with complete blockchain data, we would need to begin with the older binary version 1.2.1:
Option 1 - Install chain-maind released binaries from GitHub
chain-maind released binaries from GitHubTo install Cronos POS Chain binaries from Github:
$ curl -LOJ https://github.com/crypto-org-chain/chain-main/releases/download/v1.2.1/chain-main_1.2.1_Linux_x86_64.tar.gz $ tar -zxvf chain-main_1.2.1_Linux_x86_64.tar.gzYou can verify the installation by checking the version of the chain-maind, the current version is
1.2.1.# check the version of chain-maind $ ./chain-maind version 1.2.1
OR
Option 2 - Install chain-maind by homebrew
chain-maind by homebrewTo install binaries in Homebrew for macOS X or Linux
Homebrew is a free and open-source package management system for macOS X. Install the official Chain-maind formula from the terminal.
First, install the
crypto-org-chaintap, a repository of our Homebrewchain-maindpackage:
# tap the repo
$ brew tap crypto-org-chain/chain-maindNow, install the
chain-maindversion1.2.1with crypto-org-chain/chain-maind# install the chain-maind CLI tool $ brew install [email protected]You can verify the installation by checking the version of the
chain-maind# check the version of chain-maind $ chain-maind version 1.2.1
Step 2. Configure chain-maind
chain-maindBefore kick-starting your node, we will have to configure the node so that it connects to the Cronos POS mainnet
Step 2-1. Initialize chain-maind
chain-maindFirst of all, you can initialize chain-maind by:
$ ./chain-maind init [moniker] --chain-id crypto-org-chain-mainnet-1This
monikerwill be the displayed ID of your node when connected to the Cronos POS Chain network. When providing the moniker value, make sure you drop the square brackets since they are not needed.
Step 2-2. Configure chain-maind
Download and replace the Cronos POS Chain mainnet
genesis.jsonby:$ curl https://raw.githubusercontent.com/crypto-org-chain/mainnet/main/crypto-org-chain-mainnet-1/genesis.json > ~/.chain-maind/config/genesis.jsonVerify sha256sum checksum of the downloaded
genesis.json. You should seeOK!if the sha256sum checksum matches.$ if [[ $(sha256sum ~/.chain-maind/config/genesis.json | awk '{print $1}') = "d299dcfee6ae29ca280006eaa065799552b88b978e423f9ec3d8ab531873d882" ]]; then echo "OK"; else echo "MISMATCHED"; fi; OK!In
~/.chain-maind/config/app.toml, update minimum gas price to avoid transaction spamming$ sed -i.bak -E 's#^(minimum-gas-prices[[:space:]]+=[[:space:]]+)""$#\1"0.025basecro"#' ~/.chain-maind/config/app.toml
Important: When a validator is jailed because of a byzantine fault, their validator public key is added to a list of permanently banned validators and cannot re-join the network as a validator with the same public key, see staking tombstone
Step 3. Run everything
Step 3-1. Run everything
Once the chain-maind has been configured, we are ready to start the node and sync the blockchain data:
Start
chain-maind, e.g.:
$ ./chain-maind startOR
(Optional for Linux) If you would like to have it running in the background, you can start
chain-maindwithsystemdservice, e.g.:
$ git clone https://github.com/crypto-org-chain/chain-main.git && cd chain-main
$ ./networks/create-service.sh
$ sudo systemctl start chain-maind
# view log
$ journalctl -u chain-maind -fIt should begin fetching blocks from the other peers. Please wait until it is synced to the upgrade height 922,363 before moving onto the next step.
Step 3-2. Upgrade the chain-maind binary to v2.1.2
chain-maind binary to v2.1.2At the upgrade height of 922,363, users will see the following error message on the chain-maind:
`ERR UPGRADE "v2.0.0" NEEDED at time: 2021-06-01T23:59:00Z:...`Step 3-2-1 - Get the v2.1.2 binary
v2.1.2 binaryTo simplify the following step, we will be using Linux for illustration. Binary for Mac and Windows are also available.
Terminate the
chain-maind; afterwards, download thev2.1.2released binaries from github:$ curl -LOJ https://github.com/crypto-org-chain/chain-main/releases/download/v2.1.2/chain-main_2.1.2_Linux_x86_64.tar.gz $ tar -zxvf chain-main_2.1.2_Linux_x86_64.tar.gz
For homebrew users, simply run
$ brew upgrade chain-maind
Step 3-2-2 - Verify the version
You can verify the installation by checking the version of chain-maind, the latest version is 2.0.1.
# check the version of chain-maind
$ ./chain-maind version
2.1.2Step 3-2-3 - Restart chain-maind with version v2.1.2
chain-maind with version v2.1.2We are ready to start the node join the network again with the new binary:
Start
chain-maind, e.g.:
$ ./chain-maind startYou've successfully performed the new binary upgrade! Sit back and wait for the syncing process.
You can query the node syncing status by
$ ./chain-maind status 2>&1 | jq '.SyncInfo.catching_up'
If the above command returns false, it means that your node is synced; otherwise, it returns true and implies your node is still catching up.
You can check the current block height by querying the public full node by:
curl -s https://rpc.mainnet.cronos-pos.org:443/commit | jq "{height: .result.signed_header.header.height}"
and you can check your node's progress (in terms of block height) by:
```bash
$ ./chain-maind status 2>&1 | jq '.SyncInfo.latest_block_height'
```"DRACO II" and "V4" Network upgrades
You've successfully performed the "Canis Major" binary upgrade! Allow sometime for the node to catch up, meanwhile, you can get ready for "DRACO II," the second network upgrade ( from v2.* to v3.3.2 at block height 3,526,800 ) by following this guide, and "V4 Upgrade" (from v3.3.* to v4.2.2 at block height 10,073,800) by following this guide at a later stage. You can find the key details for all the upgrades under "Notes on network upgrades"
Last updated