KIRA is a unique network in terms of ensuring uptime of its validators. Instead of penalizing delegators though "slashing" when their selected nodes go offline a system of validator "ranks" is used to incentivise validators to stay online as well as to create a friendly, competitive environment. Opposed to other PoS chains, KIRA does NOT expect 100% uptime from its validators and for that reason doesn't penalize their delegators though slashing for downtime. This is possible because validator set is governance curated and every node maintains an equal voting power in the consensus, meaning that an unknown actor can't join the consensus with stolen tokens representing voting power and thus force the chain halt. Additionally not penalizing for downtime enables hosting nodes in the home environment instead of forcing everyone to run in data centers or using large cloud providers like Azure, Google or Amazon. In short incentivising via ranks instead of penalizing via slashing increases decentralization and protects delegators funds. Expected minimum uptime from validators should be a part of the off-chain code_of_conduct (SLA) agreement accessible via Data Registry, validators who do not comply with SLA terms can be then evicted by the governance which creates and enforces its own network operation rules.
Ranking System
The ranking system is based of block production and missed blocks counters. If the validator participates in the block production (signs a block) his rank is increases by 1. If the validator consecutively fails to produce a block (doesn't sign proposed block) for more than MischanceConfidence number of times as defined by Network Properties, then he will be deemed offline and every next, consecutively missed block will decrease the validator rank by MischanceRankDecreaseAmount as defined by Network Properties.
For the block production to progress the consensus requires only 2/3 + 1 of all validator nodes to sign a block. For that reason it is NOT guaranteed that every validator will manage to sign every block thus a random set of up to 1/3 of validators might be missing blocks at any given point of time. Reason for this is a random distribution of nodes around the world, limited networking connectivity between them and limited time nodes await for consensus votes. In short, the more blocks pass the higher the probability of the node being offline if they do NOT participate in the block production.
Unpredictability of the chances to produce blocks is a reason why KIRA does NOT decrease a rank of a validator every time they miss a block, but rather awaits MischanceConfidence number of blocks before decreasing their ranks and incrementing "Mischance" counters. Governance can adjust MischanceConfidence to make decreasing of the validators rank probabilistically fair.
If the node is provably offline (consecutively missed blocks more than MischanceConfidence times) and his "Mischance" counter consecutively exceeds MaxMischancevalue as defined by Network Properties, then he will be deemed inactive and his rank will be "slashed" by a percentage value defined by the InactiveRankDecreasePercent. Inactive validators are kicked of the validator set and are unable to produce blocks until their operators send an "Activate Transaction" signaling that they are again ready to produce blocks and resolved their internal issue.
To perform a planned maintenance where node must be offline, validator can send a pause transaction that will remove their node from the consensus. Thanks to this the rank of the validator will remain unchanged and node will not be inactivated. After node is back online validator can send an unpause transaction which will signal to the network that it is ready to enter the consensus again.
Governance system has power to from time to time raise a proposal to reset all ranks in order to create even odds for all validators, making node performance more clear and transparent to the public.
NOTE: The rank value doesn't impact any aspects of the node operation or future revenue, it's value can only impact node visibility in the public ranking system on the frontend application and is an indication of the node performance to the governance system.
Ranking Logic
Validators participated in signing block → Increase rank by 1 and set both mischance & mischance confidence counters to 0
Validators failed to participate in signing block → Increase mischance confidence counter
The mischance confidence counter exceeded MischanceConfidence property value → Increase mischance counter by 1
The mischance counter exceeded MaxMischancevalue → Change validator status to inactive and slash rank by InactiveRankDecreasePercent
Rank never changes unless validator has active status
Validator Status
Depending on the activity validator node can have one of the following statuses
NOTE: Proposals can be raised using via CLI sekaid tx customslashingcommand. The --help flag can be used to discover further options. To raise a certain proposal a dedicated permission is required. For example to submit ResetWholeValidatorRankmessage a PermCreateResetWholeValidatorRankProposal (26) permission must be assigned to the account creating said proposal. For example to vote on the ResetWholeValidatorRanka PermVoteResetWholeValidatorRankProposal (27) is needed. To find available proposal types and corresponding to them permissions required to submit or vote see Proposals documentation.
Commands Examples
Reset Ranks Proposal
# CLI
sekaid tx customslashing proposal-reset-whole-validator-rank \
--title="Ranks reset" --description="Reseting ranks or all validator nodes" \
--from "$ACCOUNT" --chain-id=$NETWORK_NAME --keyring-backend=test --fees=100ukex --yes --log_format=json --broadcast-mode=async --output=json | jq
# KM
resetRanks $ACCOUNT
Bash
Query Validator Status
# CLI by validator address
sekaid query customstaking validator --val-addr="$VAL_ADDR" --output=json --home=$SEKAID_HOME
# CLI by kira address
sekaid query customstaking validator --addr="$KIRA_ADDR" --output=json --home=$SEKAID_HOME
# KM
showValidator $ACCOUNT
showValidator "kiraXXX...XXX"
showValidator "kiravaloperXXX...XXX"
Bash
Pause Validator
# CLI
sekaid tx customslashing pause --from "$ACCOUNT" --chain-id=$NETWORK_NAME --keyring-backend=test --home=$SEKAID_HOME --fees 100ukex --yes --broadcast-mode=async --log_format=json --output=json
# KM
pauseValidator $ACCOUNT
Bash
UnPause Validator
# CLI
sekaid tx customslashing unpause --from "$ACCOUNT" --chain-id=$NETWORK_NAME --keyring-backend=test --home=$SEKAID_HOME --fees 100ukex --yes --broadcast-mode=async --log_format=json --output=json
# KM
unpauseValidator $ACCOUNT
Bash
Activating (inactive) Validator
# CLI
sekaid tx customslashing activate --from "$ACCOUNT" --chain-id=$NETWORK_NAME --keyring-backend=test --home=$SEKAID_HOME --fees 100ukex --yes --broadcast-mode=async --log_format=json --output=json
# KM
activateValidator $ACCOUNT
Bash