Cronos Testnet

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 of 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.

Step 0 : Notes on Testnet Network upgrade

This is a detailed documentation for setting up a full node on Cronos testnet cronostestnet_338-3.

Before we start, please note that there are several binary upgrades along with the testnet:

Block HeightBinary VersionInstruction

~ 1553700

Follow Step 1 to Step 3 and start the node with the older binary version v0.6.0;

Sync-up with the blockchain until it reaches the target upgrade block height 1553700;

Please note that panic: UPGRADE "v0.7.0" NEEDED at height: 1553700 is the expected error message when we hit that block.

1553700

After it reaches the block height 1553700, update the binary to cronos_0.7.0-rc1-testnet;

Then update the default ~/.cronos/config/app.toml(given there are some new parameters introduced in the upgrade), either by manually replacing the local app.toml with this new app.toml, or by: $ curl https://raw.githubusercontent.com/crypto-org-chain/cronos-testnets/main/cronostestnet_338-3/app.toml > ~/.cronos/config/app.toml

Then continue to sync from block 1553700;

1869000

After it reaches the block height 1869000, update the binary to cronos_0.7.0-rc2-testnet;

Start the node again and continue to sync from block1869000;

2483600

After it reaches the block height 2483600, update the binary to cronos_0.7.0-rc3-testnet;

Start the node again

4904100

After it reaches the block height 4904100, update the binary to cronos_0.8.1-testnet;

Start the node again

5138880

After it reaches the block height 5138880, update the binary to cronos_0.9.0-beta2-testnet;

Start the node again

6134000

After it reaches the block height 6134000, update the binary to cronos_1.0.0-rc4-testnet; Start the node again

6969900

After it reaches the block height 6969900, update the binary to cronos_1.0.2-rc4-testnet; Start the node again

14046800

After it reaches the block height 14046800, update the binary to cronos_1.1.0-rc0-testnet; Start the node again

17382000

After it reaches the block height 17382000, update the binary to cronos-v1.1.0-rc2-testnet; Start the node again

20142500

After it reaches the block height 20142500, update the binary to cronos_1.1.0-rc4-testnet; Start the node again

20142500

After it reaches the block height 22200000, update the binary tocronos_1.2.0-rc0-testnet; Start the node again

22200000

After it reaches the block height 22200000, update the binary to cronos_1.3.0-rc1-testnet; Start the node again

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/v1.0.9/cronos_1.0.9-testnet_Linux_x86_64.tar.gz
    $ tar -zxvf cronos_1.0.9-testnet_Linux_x86_64.tar.gz

    Afterwards, you can check the version of cronosd by

    $ ./cronosd version
    v1.0.9-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 named pegasus-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 simplify 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 by cronosd

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 see OK! 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 of persistent_peers, create_empty_blocks_interval and timeout_commit. For non-validator full nodes, only persistent_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 returns true 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'

Last updated