Skip to main content

Becoming a Validator

Thank you for choosing to run Synternet Data Layer node. This guide will provide instructions on setting it up and other tasks needed to participate in the Mainnet.

The primary point of communication for the genesis process and future updates will be the #synt-mainnet-public channel on the Synternet Discord. This channel is private by default in order to keep it free of spam and unnecessary noise. To join the channel, please send a message to @dziugas_c or @gedminiux to add yourself and any team members.

Hardware Requirements

To run a full or validator node, server needs to meet these minimum requirements:

  • x86-64 (amd64) multi-core CPU (AMD / Intel)
  • 32GB RAM
  • 1TB NVMe SSD Storage
  • 100Mbps bi-directional Internet connection

Mainnet SYNT

To run a validator, you will need to obtain SYNT on mainnet Cosmos network.

Upgrade History

The following table presents a list of the validator versions.

VersionStarting BlockUpgrade nameBinary
v0.11.00 (Genesis)-linux/amb64
v0.14.0505094v0.14linux/amb64

Peers

Synternet

External

Cosmovisor

Cosmovisor serves as a potent tool in managing Cosmos SDK-based chain binary versions. Its core function facilitates seamless binary upgrades without requiring a complete node restart or manual intervention.

Even without auto-upgrades, Cosmovisor efficiently handles different Synternet chain binary versions by automatically switching based on block height, minimizing errors during manual management, aiding validators.

While Cosmovisor automates new binary downloads, node operators must ensure their trustworthiness by checking sha256 signature declared in the proposal and the downloaded binary. Operators should vigilantly verify upgrades and binaries independently.

For more control, manual upgrades are an option for node operators.

More information about Cosmovisor can be found in the official documentation.

Install Cosmovisor

Before using Cosmovisor you must have Go version 1.21 or higher. To verify what Go version you have, run this:

go version

You can install Cosmovisor with:

go install github.com/cosmos/cosmos-sdk/cosmovisor/cmd/cosmovisor@latest

and check that the installation has been successful with:

cosmovisor

Replay from Genesis

This is the slowest (and most secure) way to sync your node, as your node goes through every block since the genesis block. First, create the required directories by executing the following commands:

mkdir -p "${HOME}"/.amber/cosmovisor/genesis/bin
mkdir "${HOME}"/.amber/cosmovisor/upgrades

Download the genesis binary:

curl https://github.com/Synternet/synternet-chain-releases/releases/download/v0.11.0/syntd-linux-amd64-v0.11.0-mainnet --output syntd

NOTE: Make sure you have correct access token. Verify the downloaded binary has a proper checksum:

sha256sum syntd

You can obtain the checksum either from the upgrade proposal, or by executing (always double check):

curl https://github.com/Synternet/synternet-chain-releases/releases/download/v0.11.0/syntd-linux-amd64-v0.11.0-mainnet.sha256

Make sure the binary is executable:

chmod +x syntd

Then copy the syntd binary to the genesis/bin folder:

cp syntd "${HOME}"/.amber/cosmovisor/genesis/bin

Additionally, to sync to the latest binary, you must download all the upgrade versions (verified by on-chain proposals) and place them into the appropriate directories like this: "${HOME}"/.amber/cosmovisor/upgrades/{UpgradeName}/bin/syntd. {UpgradeName} is the name that can be found in the upgrade proposal or in the table above.

This name is different than the binary version, but usually follows it closely. E.g. if the binary version is v0.13.1, then the Upgrade Name is v0.13.

info

If syncing from a state snapshot or using state-sync, only the latest upgrade binary is required.

Choose a moniker for your node and initialise node home directory (default configuration, genesis, and private keys) by executing:

"${HOME}"/.amber/cosmovisor/genesis/bin/syntd init <your chosen moniker>

This will create the initial configuration, genesis file, validator private keys, etc. Note that managing validator and p2p private keys is out of scope for this guide. Please follow the best security practices to ensure that priv_validator_key.json is kept as secure as possible. It is essential for validator security.

Make sure to download correct genesis file by fetching it from an available rpc:

curl -s https://rpc.synternet.com/genesis | jq '.result.genesis' > "${HOME}"/.amber/config/genesis.json

Configure ~/.amber/config/app.toml to your liking (API, telemetry, gRPC, gRPC Gateway, etc.). Add persistent peers in ~/.amber/config/config.toml.

After completing these steps, you can proceed with configuring Cosmovisor. Once it is properly configured and started, it will automatically switch binaries after each upgrade and resume the syncing process.

Using the Latest Snapshot

Currently Polkachu provides snapshots for the Synternet blockchain. You can find detailed instructions here.

Using state-sync

State sync is yet another way to sync your local copy of the chain to the Synternet blockchain quickly. However, the security of this method depends on the operator's choice of trusted block hash. It is best to be familiar with the state sync by reading the official CometBFT docs.

The first step is to determine the latest block hash. This can be achieved by looking at the Explorer, or running this command:

curl -s https://rpc.synternet.com/commit | jq "{height: .result.signed_header.header.height, hash: .result.signed_header.commit.block_id.hash}"

You need to enter these values in config.toml configuration file under [statesync] section after you set enable = true as trust_height and trust_hash.

Also, you must provide at least two comma separated rpc_servers for it to work.

Configure Cosmovisor

This step assumes that the home directory was initialised previously and "Replay from genesis" step is completed.

Add the necessary environment variables, for example, by adding these variables to the profile that will be running Cosmovisor. You can edit the ~/.profile file by adding the following content:

export DAEMON_HOME="${HOME}"/.amber
export DAEMON_RESTART_AFTER_UPGRADE=true
export DAEMON_ALLOW_DOWNLOAD_BINARIES=false
export DAEMON_NAME=syntd
export UNSAFE_SKIP_BACKUP=false

Run Cosmovisor as a Service

This step assumes that the home directory was initialised previously.

You can create a service file with:

sudo nano /etc/systemd/system/cosmovisor.service

and add the following content by making sure to change the <your-user>, <path-to-cosmovisor> and <path-to-syntd> with your values:

[Unit]
Description=cosmovisor
After=network-online.target
[Service]
User=<your-user>
ExecStart=/<path-to-cosmovisor>/cosmovisor start
Restart=always
RestartSec=3
LimitNOFILE=4096
Environment="DAEMON_NAME=syntd"
Environment="DAEMON_HOME=/<path-to-syntd>/.amber"
Environment="DAEMON_ALLOW_DOWNLOAD_BINARIES=false"
Environment="DAEMON_RESTART_AFTER_UPGRADE=true"
Environment="DAEMON_LOG_BUFFER_SIZE=512"
Environment="UNSAFE_SKIP_BACKUP=false"
[Install]
WantedBy=multi-user.target

You can now reload the systemctl daemon:

sudo -S systemctl daemon-reload

and enable Cosmovisor as a service:

sudo -S systemctl enable cosmovisor

You can now start Cosmovisor by executing:

sudo systemctl start cosmovisor

Make sure to check that the service is running by executing:

sudo systemctl status cosmovisor

You can monitor node logs by executing:

sudo journalctl -u cosmovisor -f

Create a Validator

Operating a validator can be challenging and rewarding experience. Synternet blockchain runs on the same principles as any other Cosmos based chain. So to better understand how to operate a validator node you can refer to this Cosmos Hub guide.

In order to create a validator you can use the following command:

syntd tx staking create-validator \
--amount=10000000usynt \
--pubkey=$(syntd tendermint show-validator) \
--moniker="choose a moniker" \
--chain-id=synternet-1 \
--commission-rate="0.10" \
--commission-max-rate="0.20" \
--commission-max-change-rate="0.01" \
--gas="auto" \
--gas-prices="0.01usynt" \
--from=<key_name>

This will create a validator, and self-delegate 10000000usynt coins.