Join a Network
This guide includes full instructions for joining the testnet and mainet (coming soon) either as an archive/full node or a pruned node.
Instructions for boosterizing a node using State Sync.
For instructions to join as a validator, please also see the Validator Guide.
Overview
Getting Started
Make sure the following prerequisites are completed:
Choose the proper hardware/server configuration. See the hardware guide.
Ensure crossfid is properly installed. See the installation guide for a walkthrough.
Follow the configuration guide to intialize and prepare the node to sync with the network.
Choosing a Network
The current CrossFi networks are:
Testnet
crossfi-evm-testnet-1
.
Mainnet
crossfi-mainnet-1
.
Explorers
Testnet Explorers
Block explorer - https://scan.testnet.ms/
Execution/Consensus layers explorer - https://test.xfiscan.com/
Mainnet Explorers
Execution/Consensus layers explorer - https://xfiscan.com/
Hardware
Running a full archive node can be resource intensive as the full current crossfi-1
can be is over 1TB
. For those who wish to run state sync or use quicksync, the following hardware configuration is recommended:
* Storage size for validators will depend on level of pruning.
General Configuration
Make sure to walk through the basic setup and configuration. Operators will need to initialize crossfid
, download the genesis file for crossfi-1
, and set persistent peers and/or seeds for startup.
Initialize Chain
Testnet
Mainnet
Seeds & Peers
Upon startup the node will need to connect to peers. If there are specific nodes a node operator is interested in setting as seeds or as persistent peers, this can be configured in ~/.crossfid/config/config.toml
Pruning of State - Optional Step
There are four strategies for pruning state. These strategies apply only to state and do not apply to block storage. A node operator may want to consider custom pruning if node storage is a concern or there is an interest in running an archive node.
To set pruning, adjust the pruning
parameter in the ~/.crossfid/config/app.toml
file. The following pruning state settings are available:
everything
: Prune all saved states other than the current state.nothing
: Save all states and delete nothing.default
: Save the last 100 states and the state of every 10,000th block.custom
: Specify pruning settings with thepruning-keep-recent
,pruning-keep-every
, andpruning-interval
parameters.
By default, every node is in default
mode which is the recommended setting for most environments. If a node operator wants to change their node's pruning strategy then this must be done before the node is initialized.
In ~/.crossfid/config/app.toml
Passing a flag when starting crossfid
will always override settings in the app.toml
file. To change the node's pruning setting to everything
mode then pass the ---pruning everything
flag when running crossfid start
.
If running the node with pruned state, it will not be possible to query the heights that are not in the node's store.
REST API - Optional
By default, the REST API is disabled. To enable the REST API, edit the ~/.crossfid/config/app.toml
file, and set enable
to true
in the [api]
section.
Optionally activate swagger by setting swagger
to true
or change the port of the REST API in the parameter address
. After restarting the application, access the REST API on <NODE IP>:1317
.
GRPC - Optional
By default, gRPC is enabled on port 9090
. The ~/.crossfid/config/app.toml
file is where changes can be made in the gRPC section. To disable the gRPC endpoint, set enable
to false
. To change the port, use the address
parameter.
Sync Options
There are three main ways to sync a node on the Crossfi Chain; Blocksync, State Sync, and Quicksync. See the matrix below for the Hub's recommended setup configuration. This guide will focus on syncing two types of common nodes; full and pruned. For further information on syncing to run a validator node, see the section on Validators.
There are two types of concerns when deciding which sync option is right. Data integrity refers to how reliable the data provided by a subset of network participants is. Historical data refers to how robust and inclusive the chain’s history is.
Make sure to consult the hardware section for guidance on the best configuration for the type of node operating.
Blocksync
Blocksync is faster than traditional consensus and syncs the chain from genesis by downloading blocks and verifying against the merkle tree of validators. For more information see Tendermint's Fastsync Docs
When syncing via Blocksync, node operators will either need to manually upgrade the chain or set up Cosmovisor to upgrade automatically.
It is possible to sync from previous versions of the Crossfi Chain. See the matrix below for the correct crossfid
version. See the testnet archive for historical genesis files.
Getting Started
Start crossfid to begin syncing with the skip-invariants
flag. For more information on this see Verify network.
State Sync
State Sync is an efficient and fast way to bootstrap a new node, and it works by replaying larger chunks of application state directly rather than replaying individual blocks or consensus rounds. For more information, see Tendermint's State Sync docs.
To enable state sync, visit an explorer to get a recent block height and corresponding hash. A node operator can choose any height/hash in the current bonding period, but as the recommended snapshot period is 1000
blocks, it is advised to choose something close to current height - 1000
.
With the block height and hash selected, update the configuration in ~/.crossfid/config/config.toml
to set enable = true
, and populate the trust_height
and trust_hash
. Node operators can configure the rpc servers to a preferred provider, but there must be at least two entries. It is important that these are two rpc servers the node operator trusts to verify component parts of the chain state. While not recommended, uniqueness is not currently enforced, so it is possible to duplicate the same server in the list and still sync successfully.
In the future, the RPC server requirement will be deprecated as state sync is moved to the p2p layer in Tendermint 0.38.
Start crossfid to begin state sync. It may take take some time for the node to acquire a snapshot, but the command and output should look similar to the following:
Once state sync successfully completes, the node will begin to process blocks normally. If state sync fails and the node operator encounters the following error: State sync failed err="state sync aborted"
, either try restarting crossfid
or running crossfid unsafe-reset-all
(make sure to backup any configuration and history before doing this).
Quicksync
Quicksync.io offers several daily snapshots of the Crossfi Chain with varying levels of pruning (archive
1.4TB, default
540GB, and pruned
265GB). For downloads and installation instructions, visit the Cosmos Quicksync guide.
Snapshots
Saving and serving snapshots helps nodes rapidly join the network. Snapshots are now enabled by default effective 1/20/21
.
While not advised, if a node operator needs to customize this feature, it can be configured in ~/.crossfid/config/app.toml
. The Crossfi Chain recommends setting this value to match pruning-keep-every
in config.toml
.
It is highly recommended that node operators use the same value for snapshot-interval in order to aid snapshot discovery. Discovery is easier when more nodes are serving the same snapshots.
In app.toml
Cosmovisor
Cosmovisor is a process manager developed to relieve node operators of having to manually intervene every time there is an upgrade. Cosmovisor monitors the governance module for upgrade proposals; it will take care of downloading the new binary, stopping the old one, switching to the new one, and restarting.
For more information on how to run a node via Cosmovisor, check out the docs.
Running via Background Process
To run the node in a background process with automatic restarts, it's recommended to use a service manager like systemd
. To set this up run the following:
If using Cosmovisor then make sure to add the following:
After the LimitNOFILE
line and replace $(which crossfid)
with $(which cosmovisor)
.
Run the following to setup the daemon:
Then start the process and confirm that it's running.
Exporting State
crossfid can dump the entire application state into a JSON file. This application state dump is useful for manual analysis and can also be used as the genesis file of a new network.
The node can't be running while exporting state, otherwise the operator can expect a resource temporarily unavailable
error.
Export state with:
It is also possible to export state from a particular height (at the end of processing the block of that height):
If planning to start a new network from the exported state, export with the --for-zero-height
flag:
Verify Network
Running invariants on each block is a best practice for disaster prevention. This ensures that the node operator maintains the correct and expect state of the network.
Although this is important for the operation of a node, invariant checks are not enabled by defauls because they are computationally expensive. To run a node with these checks start your node with the assert-invariants-blockly flag:
If an invariant is broken on the node, it will panic and prompt the operator to send a transaction which will halt the network. For example the provided message may look like:
Last updated