Intermediate
How to run Cronos Testnet node
This tutorial is a step-by-step guide to help users set up and run a Cronos Testnet node. Cronos is a decentralized blockchain platform designed for decentralized applications (dApps) and enables developers to port their Ethereum-based dApps to Cronos with minimal modifications.
Before you start, there are a few prerequisites that you need to fulfill. The tutorial lists the supported operating systems and the minimum requirements for running different types of nodes. The tutorial then provides detailed instructions on how to upgrade the node binary version as the network height changes.
The tutorial covers the steps involved in downloading the Cronos Testnet binary and configuring the node. It also includes information on how to clean up old blockchain data and set up a new genesis file. By following the instructions in this tutorial, users will be able to run a Cronos Testnet node with ease.
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 Tesnet 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: 4 GB (LevelDB) or 64G RAM (RocksDB)***
-
CPU: 4-core
-
-
Default full node (setting pruning=default)
-
Storage: ~1.5T**
-
RAM: 4 GB (LevelDB) or 64G RAM (RocksDB)***
-
CPU: 4-core
-
-
Archive node (setting pruning=nothing)
-
Storage: ~2.8T**
-
RAM: 4 GB (LevelDB) or 64G RAM (RocksDB)***
-
CPU: 4-core
-
*Only in case state-sync enabled. ** e.g. Note that size of snapshots 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.
Note that all depends on the type of node you are running and settings will vary depending on your usage.
Testnet
-
Binaries are available here
Step 0: Notes on testnet Network upgrade
This is a detailed documentation for setting up a full node on Crypto.org Chain Cronos testnet cronostestnet_338-3
.
Before we start, please note that there are three binary upgrades along with the testnet:
Block Height |
Binary Version |
Instruction |
---|---|---|
~ |
Follow Step 1 to Step 3 and start the node with the older binary version Sync-up with the blockchain until it reaches the target upgrade block height Please note that |
|
|
After it reaches the block height Then update the default Then continue to sync from block |
|
|
After it reaches the block height Start the node again and continue to sync from block |
|
|
After it reaches the block height Start the node again |
|
|
After it reaches the block height Start the node again |
|
|
After it reaches the block height Start the node again |
|
|
After it reaches the block height |
|
|
After it reaches the block height |
Step 1. Get the Cronos Testnet binary
Remarks: The following is the minimal setup for a full node.
To simplify the following step, we will be using Linux (Intel x86) for illustration. Binary for
Mac Intel x86 as Darwin_x86_64
, Mac M1 as arm64
and Windows as Windows_x86_64
are also available here. Please check the required node version here.
-
To install released Cronos testnet binaries from github:
$ curl -LOJ https://github.com/crypto-org-chain/cronos/releases/download/v0.6.0-testnet/cronos_0.6.0-testnet_Linux_x86_64.tar.gz $ tar -zxvf cronos_0.6.0-testnet_Linux_x86_64.tar.gz
Afterwards, you can check the version of
cronosd
by$ ./cronosd version v0.6.0-testnet
Step 2. Configure cronosd
Step 2-0 (Optional) Clean up the old blockchain data
-
If you have joined
cronostestnet_338-2
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
-
Remove the old genesis file:
$ rm ~/.cronos/config/genesis.json
Before kick-starting your node, we will have to configure your node so that it connects to the Cronos Testnet:
Step 2-1 Initialize cronosd
-
First of all, you can initialize cronosd by:
$ ./cronosd init [moniker] --chain-id cronostestnet_338-3
This
moniker
will be the displayed id of your node when connected to the Cronos 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 namedpegasus-node
:$ ./cronosd init pegasus-node --chain-id cronostestnet_338-3
NOTE
-
Depending on your cronosd home setting, the cronosd configuration will be initialized to that home directory. To simply the following steps, we will use the default cronosd home directory
~/.cronos/
for illustration. -
You can also put the
cronosd
to your binary path and run it bycronosd
Step 2-2 Configure cronosd
-
Download and replace the Cronos Testnet
genesis.json
by:$ curl https://raw.githubusercontent.com/crypto-org-chain/cronos-testnets/main/cronostestnet_338-3/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}') = "7d898ad75b3e2e1fa182d928ca10a284c1dd252e12d17ad6dab76551b29d1a59" ]]; then echo "OK"; else echo "MISMATCHED"; fi; OK!
NOTE: For Mac environment, sha256sum
was not installed by default. In this case, you may setup sha256sum
with this command:
function sha256sum() { shasum -a 256 "$@" ; } && export -f sha256sum
-
(Validator node only) In
~/.cronos/config/app.toml
, update minimum gas price to avoid transaction spamming$ sed -i.bak -E 's#^(minimum-gas-prices[[:space:]]+=[[:space:]]+).*$#\\1"5000000000000basetcro"#' ~/.cronos/config/app.toml
-
For network configuration, in
~/.cronos/config/config.toml
, validator nodes need to modify the configurations ofpersistent_peers
,create_empty_blocks_interval
andtimeout_commit
. For non-validator full nodes, onlypersistent_peers
modification is required:$ sed -i.bak -E 's#^(persistent_peers[[:space:]]+=[[:space:]]+).*$#\1"8fcba3485c67a2a00a383b6f45660a4ac529c6ca@52.77.30.18:26656,e65199bc579ffd89d7c021c5611f9f1c97f7ff13@54.251.209.254:26656,b8e6d6e16d236fa6a7101316d96de718200c500c@bd-cronos-testnet-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
NOTE: For Mac environment, if jq
is missing, you may install it by: brew install jq
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
Remarks: If you see errors saying too many files opened...
, then you need to set a higher number for maximum open file descriptors in your OS.
If you are on OSX or Linux, then the following could be useful:
# Check current max fd $ ulimit -n # Set a new max fd $ ulimit -Sn [NEW_MAX_FILE_DESCRIPTOR] # Example $ ulimit -Sn 4096
(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
Example: /etc/systemd/system/cronosd.service created by script
# /etc/systemd/system/cronosd.service [Unit] Description=cronosd ConditionPathExists=/usr/local/bin/cronosd After=network.target [Service] Type=simple User=ubuntu WorkingDirectory=/usr/local/bin ExecStart=/usr/local/bin/cronosd start --home /home/ubuntu/.cronos Restart=on-failure RestartSec=10 LimitNOFILE=50000 [Install] WantedBy=multi-user.target
It should begin fetching blocks from the other peers. Please wait until it is fully synced before moving onto the next step.
-
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://evm-t3.cronos.org/:26657/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'