Jailed validators

Validators can be jailed for several reasons, such as double signing a block, signing an invalid block, or excessive downtime. Each of these reasons will have different ramifications for the validator.

When a validator is jailed, it is removed from the validator sets and cannot participate in consensus. The validator node can still run and process the new blocks. A jailed validator can also still receive bonds.

When the protocol determines that a validator will be jailed, the jailing and validator set removal will occur at the beginning of the next new epoch.

You can check if a validator is jailed by querying its state with the following command:

namadac validator-state --validator $VALIDATOR_ADDRESS

Unjailing a validator

Once jailed, validators remain jailed indefinitely. They can only be unjailed by an unjail-validator transaction using the validator's signing keys. This can be done with the following command:

namadac unjail-validator --validator $VALIDATOR_ADDRESS

Because the validator alias sometimes clashes with the alias for the implicit account and or established account in the wallet, it is recommended to use the validator address instead of the alias. In order to find the validator address, you can use the following command:

namadaw list --addr | grep $VALIDATOR_ADDRESS

then make sure it is the corresponding tnam address.

If the transaction is successful, then the validator will be reinstated into one of the validator sets at the pipeline length relative to the current epoch (typically 2 epochs in the future).

There may be certain restrictions on unjailing your validator depending on the original reason for jailing. These will be described below.

Jailing for protocol misbehavior

Protocol misbehaviors include the aforementioned double signing of a block and signing of an invalid block.

In these cases, the validator will also be slashed - it and its delegates will lose stake and voting power.

When a slash is detected and enqueued by the protocol, it is scheduled to be processed unbonding_len + cubic_slashing_window_len + 1 epochs after the infraction epoch. This is to allow for sufficient time to detect all possible correlated infractions to be considered for cubic slashing.

The validator will also be considered to be frozen until it no longer has any unprocessed, enqueued slashes. While frozen, unbonding from the validator is prohibited, and unjailing is forbidden.

A validator's slash history, with previously processed slashes and enqueued slashes for future processing, can be queried with the following command:

namadac slashes --validator $VALIDATOR_ADDRESS

Additionally, all slashes in the network can be queried without the --validator flag.

Jailing for downtime (liveness)

While a validator is in the consensus set, its uptime and voting history are tracked to ensure sufficient liveness. Two proof-of-stake parameters are used to determine if a validator will be jailed for liveness:

  • liveness_window_check
  • liveness_threshold

Namada liveness requires that a consensus validator vote on at least a liveness_threshold fraction of the last liveness_window_check blocks. If at any point this fraction dips below the liveness_threshold, then the validator will be jailed.

The values of these parameters can be queried with the command:

namadac query-protocol-parameters

Since jailing for downtime occurs without the presence of slashes (they are not frozen), the jailed validator can unjail themselves as soon as they become jailed.