Running a Validator

Being a validator means playing a critical role in Settlus, including generating or validating blocks, as well as proposing or voting on governance proposals. Validators will receive some rewards for block validation. This guide will detail the process of running a validator on Settlus.

Prerequisites

Being A Validator

In Settlus, After genesis, governance is the only way to participate as a validator in PoSA phase. Here's example on how to create MsgCreateValidatorByGov proposal.

  • Get your own validator pubkey by running the command below in your machine with binary.

settlusd tendermint show-validator
  • Use governance module's draft-proposal transaction to create draft_proposal.json file after run the below command.

$ settlusd tx gov draft-proposal
# Use the arrow keys to navigate: ↓ ↑ → ←
? Select proposal type:
    text
    software-upgrade
    cancel-software-upgrade
   ▸create-validator-by-gov
   probono-delegate-by-gov
  • Select create-validator-by-gov option for shortcut and follow the instruction. Here's sample proposal file of draft_proposal.json.

// draft_proposal.json
{
 "messages": [
  {
   "@type": "/cosmos.staking.v1beta1.MsgCreateValidatorByGov",
   "authority": "settlus10d07y265gmmuvt4z0w9aw880jnsr700jdl3s23" // gov module account,
   "description": {
    "moniker": "settus_validator",
    "identity": "validator",
    "website": "https://settlus.org",
    "security_contact": "info@settlus.org",
    "details": "settlus"
   },
   "commission": {
    "rate": "0.000000000000000000",
    "max_rate": "0.000000000000000000",
    "max_change_rate": "0.000000000000000000"
   },
   "min_self_delegation": "1",
   "validator_address": "settlusvaloper12g8w5dr5jyncct8jwdxwsy2g9ktdrjjluy76df",
   "pubkey": {"@type":"/ethermint.crypto.v1.ethsecp256k1.PubKey","key":"YOUR_SETTLUS_PUBKEY"},
   "value": {
    "denom": "asetl",
    "amount": "210000000000000"
   },
   "is_probono": false,
   "max_delegation": "0"
  }
 ],
 "metadata": "{\"title\": \"Settlus Validator Proposal\", \"description\":\"Create Validator By Governance\"}",
 "deposit": "1000asetl"
}
  • Submit the proposal with appropriate options.

settlusd tx gov submit-proposal draft_proposal.json --home <your_home> --from your_key --fees 200000asetl
  • After the proposal is passed, the validator set will be automatically updated. If it fails, the validator set will remain unchanged.

Running Interop-Node Service

If you are a validator, you must run interop-node service along with Settlus binary in order to participate in oracle module's voting system. For interop-node detail, check interop-node page.

Build inter-op node

# <cloned_repo>/tools/interop-node
make build

Then, a build folder will be created under tools/interop-node, and the interop-node binary will also be generated within this build folder. Alternatively, you can use the latest release from the Settlus repository.

Initialize interop-node

Initialize the config file, or execute the command below in the directory where the binary is located. After running the command, the config file will be placed in the ~/.interop directory.

./interop-node config init

Edit the config file with appropriate values and run the interop-node.

Set Config

Here's sample config file for interop-node.

# ~/.interop/config.yaml
settlus:
  chain_id: settlus_5371-1
  rpc_url: http://localhost:26657
  grpc_url: http://localhost:9090
  insecure: true
  gas_limit: 200000
  fees:
    denom: asetl
    amount: "210000000000000"
feeder:
  topics: block
  address: settlus1qwd8rnktsaj5zgkmzdq6qz47dvyhuu9pdq8wz4
  signer_mode: local
  key: <signer_private_key>
  validator_address: settlusvaloper1qwd8rnktsaj5zgkmzdq6qz47dvyhuu9pf5daqp
chains:
- chain_id: "1"
  chain_name: Ethereum
  chain_type: ethereum
  rpc_url: "https://ethereum-rpc.eth"
db_home: /root/.interop/db
log_level: debug

Run as a Daemon

Same as Cosmovisor, it is recommended to run interop-node as a daemon along with settlusd as a systemd service.

Service definition example:

# /etc/systemd/system/interop-node.service

[Unit]
Description=InteropNode
After=network.target
StartLimitIntervalSec=1

[Service]
Environment="HOME=/"
Environment="AWS_REGION=ap-northeast-2"
Restart=always
RestartSec=1
ExecStart=/usr/local/bin/interop-node start

[Install]
WantedBy=multi-user.target

In the example, interop-node binary is located in /usr/local/bin. Change it with appropriate location. And manage the service with below commands.

# start
systemctl start interop-node

# restart
systemctl restart interop-node

Slashing

Settlus disincentivizes validators when they engage in abnormal or suspicious behavior, or when they do not actively participate in maintaining the network. In addition to the basic slashing policy of Cosmos-SDK's slashing module, penalties can also be imposed under the policies of the x/oracle module. The scenarios for receiving a penalty are as follows:

  • Missed the consensus signing more than min_signed_per_window parameter defined in x/slashing module.

  • Missed the oracle vote more than MaxMissCountPerSlashWindow parameter defined in x/oracle module.

Unjail the validator

If a validator is jailed, jailed validator must submit unjail transaction from operator address to get block reward again.

# check if the validator is jailed
settlusd q staking validator <validator_address> | grep jailed

# if jailed, make an unjail transaction
settlusd tx slashing unjail --from=<operator_address>

Last updated