The fastest way to get a node synced to the latest block-height is by using State Sync. With State Sync, your node downloads a snapshot near the head of the chain and verifies this data. This leads to drastically shorter times to join the network.
Keep in mind that blocks prior to the trust height used for State Sync will not be queryable.
Therefore, if your goal is to run a full node with historical data, it is recommended not to use State Sync, but instead to explore other Snapshot option such as Native Snapshots or Quicksync archive snapshot.
Linux x86_64 is confirmed to work. 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.
To run Cronos Mainnet nodes, you will need a machine with the following minimum requirements:
- 4-core, x86_64 / ARM architecture processor
- 16 GB RAM
- 1 TB of storage space.
{% hint style="info" %} IMPORTANT
State-sync depends on the ability to pull a snapshot from its persistent-peers, so there is some amount of timing and luck involved with this method. Although it is the fastest way, it is not always going to work, in case state-sync is not syncing, we recommend using quicksync, although it takes a longer time to download the snapshot, this method is more guaranteed to work. {% endhint %}
{% hint style="info" %}
The latest Cronosd version release is cronosd v1.4.5
{% endhint %}
- Install the Cronos Mainnet binaries from GitHub:
curl -LOJ https://github.com/crypto-org-chain/cronos/releases/download/v1.4.5/cronos_1.4.5_Darwin_x86_64.tar.gz
tar -zxvf cronos_1.4.5_Darwin_x86_64.tar.gz
- Check that
cronosdis effectively installed:
./bin/cronosd version
1.4.5- Initialize cronosd. Replace the [moniker] with an ID for your node.
./bin/cronosd init [moniker] --chain-id cronosmainnet_25-1- Download and replace the Cronos Mainnet
genesis.jsonby:
curl https://raw.githubusercontent.com/crypto-org-chain/cronos-mainnet/master/cronosmainnet_25-1/genesis.json > ~/.cronos/config/genesis.json- Verify the sha256sum checksum of the
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!- Replace the following parameters in the
~/.cronos/config/config.tomlfile, by executing:
LATEST_HEIGHT=$(curl -s https://rpc.cronos.org:443/block | jq -r .result.block.header.height); \
BLOCK_HEIGHT=$((LATEST_HEIGHT - 1000)); \
TRUST_HASH=$(curl -s "https://rpc.cronos.org:443/block?height=$BLOCK_HEIGHT" | jq -r .result.block_id.hash)
sed -i.bak -E "s|^(enable[[:space:]]+=[[:space:]]+).*$|\1true| ; \
s|^(rpc_servers[[:space:]]+=[[:space:]]+).*$|\1\"https://rpc.cronos.org:443,https://rpc.cronos.org:443\"| ; \
s|^(trust_height[[:space:]]+=[[:space:]]+).*$|\1$BLOCK_HEIGHT| ; \
s|^(trust_hash[[:space:]]+=[[:space:]]+).*$|\1\"$TRUST_HASH\"| ; \
s|^(persistent_peers[[: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\"| ; \
s|^(seeds[[:space:]]+=[[:space:]]+).*$|\1\"\"|" ~/.cronos/config/config.toml{% hint style="info" %}
Tips: Corresponding to the persistent_peers above for Cronos Mainnet, here is the ones for Cronos Testnet:
8fcba3485c67a2a00a383b6f45660a4ac529c6ca@52.77.30.18:26656,e65199bc579ffd89d7c021c5611f9f1c97f7ff13@54.251.209.254:26656
{% endhint %}
- Now that
cronosdhas been configured, we are ready to start the node:
./bin/cronosd start
1:40AM INF Unlocking keyring
1:40AM INF starting ABCI with Tendermint
1:40AM INF service start impl=multiAppConn module=proxy msg={} server=node
1:40AM INF service start connection=query impl=localClient module=abci-client msg={} server=node
1:40AM INF service start connection=snapshot impl=localClient module=abci-client msg={} server=node
1:40AM INF service start connection=mempool impl=localClient module=abci-client msg={} server=node
1:40AM INF service start connection=consensus impl=localClient module=abci-client msg={} server=node
1:40AM INF service start impl=EventBus module=events msg={} server=node
1:40AM INF service start impl=PubSub module=pubsub msg={} server=node
1:40AM INF service start impl=IndexerService module=txindex msg={} server=node
1:40AM INF Version info block=11 p2p=8 server=node tendermint_version=0.34.20
1:40AM INF This node is not a validator addr=DB03363D854BA491F280177BE33DE527F7542094 module=consensus pubKey=/L3Qe1oaNfrDael3QAmILSz5bLre9NAmKd48wd4eW8w= server=node
1:40AM INF P2P Node ID ID=d799c596250f27b5435775fdabb86d469dc5a784 file=/home/ubuntu/.cronos/config/node_key.json module=p2p server=node
1:40AM INF Adding persistent peersThis will take a couple of minutes, if your node manages to state-sync, you should see that snapshot chunks are being downloaded, and your node starts signing blocks.
To check the current node syncing status:
./bin/cronosd status 2>&1 | jq '.SyncInfo.catching_up'That's it! You are now running a synced node on Cronos Mainnet!