Cronos EVM Docs
  • Getting Started
    • Getting Started
    • Background
    • Architecture
    • Cronos roadmap
  • FOR USERS
    • 💳Crypto.com Card Top Up
    • 🔥Crypto Wallets
    • 🦊MetaMask Configuration
    • 🦁Brave Wallet
    • 🌉Bridges
      • From the Crypto.com App and Exchange
        • From the Crypto.com App
        • From the Crypto.com Exchange
      • IBC (Cronos POS Chain, other Cosmos chains)
        • Cronos Bridge Web App
      • Independent bridges
      • FAQs for Bridge transfers
      • FAQs for transactions from/to centralized exchanges
    • 🚰Testnet Faucet
    • 💡Tips & FAQs
    • 👮Key Principles for Wallet Security
    • GasTracker
  • FOR DAPP DEVELOPERS
    • 💡Founder FAQs
    • 🏅Hacker's Getting Started Resources
    • 📃Smart Contracts
      • Contract Development on Testnet
      • Contract Deployment and Verification
      • Contract Verification Export: Cronoscan To Cronos Explorer
      • Best Practices
      • Token Contract Addresses
    • 💻dApp Creation
      • Free and commercial RPC endpoints
      • Wallet integrations
      • Web3-wallet
      • JSON-RPC methods
      • Address Conversion
      • Swagger Playground
    • ⚙️Dev Tools & Integrations
      • All dev tools & integrations
      • Account Abstraction
      • Band Protocol
      • Banxa
      • GoldRush
      • Cronos Safe
      • Flair
      • Google Bigquery
      • Moralis
      • Pyth
      • Secret Network
      • SubQuery
      • Witnet
    • Crypto.com AI Agent SDK
  • FOR NODE HOSTS
    • Running nodes
      • Cronos Mainnet
        • Quicksync
        • State-sync
        • Public Node Sync
        • KSYNC
        • The "Huygen" upgrade guide (v0.6.* to v0.7.*)
        • The "v0.7.0-hotfix" upgrade guide (v0.7.* to v0.8.*)
        • The "Galileo" upgrade guide (v0.8.* to v1.0.*)
        • The "Titan" upgrade guide (v1.0.* to v1.1.0)
        • The "v1.2" upgrade guide (v1.1.* to v1.2.0)
        • The "v1.3" upgrade guide (v1.2.* to v1.3.0)
        • The "v1.4" Pallene upgrade guide (v1.3.* to v1.4.1)
        • Patching Unlucky & Duplicate Tx
      • Cronos Testnet
      • Devnet
      • Best Practices
      • Cronosd build with Nix
      • VersionDB
      • MemIAVL
      • Local State Sync
    • Cronosd
  • CRONOS PLAY
    • Introduction
    • Unity Engine
      • Current Version
      • Legacy Version
        • EVM
        • Login Example
        • Custom RPC
        • ERC20
        • ERC721
        • ERC1155
      • Useful Links
    • Unreal Engine
      • Installation and Enabling
      • Working with Blueprint
        • Actors and Blueprint Classes
        • Cronos Configuration
        • Connect Defi Desktop/Onchain Wallet with URI
        • Connect Wallets with QR Code
        • Connect WalletConnect Step by Step
        • WalletConnect 2.0 and Unreal Engine 5: Hello World Example
        • Wallet
        • ERC20
        • ERC721
        • ERC1155
        • Broadcast Transactions
        • Get Tokens or Transactions
      • Working with C++
        • Creating a C++ Project
        • Creating a child DefiWalletCoreActor
        • Querying a contract
        • Customizing Network
      • Demo
    • Cronos Play C++ SDK
    • Crypto.com Pay Integration
    • Cronos Play FAQ
  • Block Explorers
    • Block Explorer and API Keys
    • Cronos Explorer
    • Cronoscan
  • CRONOS CHAIN PROTOCOL
    • Chain ID and Address Format
    • Cronos General FAQ
    • Genesis
    • Modules
      • module_bank
      • module_distribution
      • module_slashing
      • module_feemarket
    • Chain Details
      • List of parameters
      • Technical glossary
      • Protocol Documentation
    • Common IBC Commands
  • Cronos zkEVM
    • Cronos zkEVM
  • Resources
    • Media / brand kit
Powered by GitBook
On this page
  • Pre-requisites
  • Supported OS
  • Prepare your machine
  • Step 0 : Notes on Network Upgrade
  • Step 1. Get the Cronos Mainnet Binary
  • Step 2. Configure cronosd
  • Step 2-0 (Optional) Clean up the old blockchain data
  • Step 2-1 Initialize cronosd
  • Step 2-2 Configure cronosd
  • Step 3. Run everything
  • Different ways to sync Cronos with snapshots

Was this helpful?

Edit on GitHub
  1. FOR NODE HOSTS
  2. Running nodes

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.

Note that all depends on the type of node you are running and settings will vary depending on your usage.

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:

Block Height
Binary Version
Instruction

1 ~ 2693800

2693800 ~ 3982500

3982500

6542800

11608760

After reaching block height, update the binary to v1.0.15 Restart the node

13184000

After reaching block height, update the binary to v1.1.0 Restart the node

13520000

After reaching block height, update the binary to v1.2.0 Restart the node

14920000

After reaching block height, update the binary to v1.3.0 Restart the node

Step 1. Get the Cronos Mainnet Binary

Remarks:

The following is the minimal setup for a validator node / full node.

  • 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

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

  • 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

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 by cronosd

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 see OK! if the sha256sum checksum matches.

    $ if [[ $(sha256sum ~/.cronos/config/genesis.json | awk '{print $1}') = "58f17545056267f57a2d95f4c9c00ac1d689a580e220c5d4de96570fbbc832e1" ]]; 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
  • For network configuration, in ~/.cronos/config/config.toml, validator nodes need to modify the configurations of seed, create_empty_blocks_interval and timeout_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

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.

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.

  • 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://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:

PreviousRunning nodesNextQuicksync

Last updated 1 month ago

Was this helpful?

Binaries for , Mac ( / ) and

Start the node with the older binary version Sync-up with the blockchain until it reaches the target upgrade block height 2,693,800

After it reaches the block height 2,693,800, update app.toml with Update the binary to Restart the node

After reaching block height, update in app.toml Update the binary to Restart the node

After reaching block height, update in app.toml. Update the binary to cronos_v1.0.2 Restart the node

Users can refer to the for the detailed upgrade steps.

To patch "unlucky" transactions, follow this guide on

To simplify the following step, we will be using Linux (Intel x86) for illustration. Binaries for Mac ( / ) and are also available.

Furthermore, you may want to run full nodes as sentries (see ), restrict your validator connections to only connect to your full nodes, test secure storage of validator keys etc.

Seeds for Fullnode
Genesis files
Linux
Intel x86
M1
Windows
upgrade guide of "Huygen"
patching unlucky tx
Intel x86
M1
Windows
Tendermint
Quicksync
State-sync
Public Node Sync
KSYNC
cronos_v0.6.*
cronos_v0.6.*
cronos_v0.7.0
new config items
cronos_v0.7.0
cronos_v0.8.3
iavl-disable-fastnode
cronos_v0.8.3
cronos_v1.0.2
app-db-backend
cronos v1.0.15
cronos v1.1.0
cronos v1.2.0
cronos v1.3.0