Running a node

Validator Setup

Validators are the backbone of Citrate's finality layer. They participate in the Paraconsistent BFT consensus protocol to produce finality checkpoints, ensuring that confirmed transactions cannot be reversed. In return, validators earn staking rewards proportional to their stake and performance. This guide walks through the complete validator registration process.

Prerequisites

Before becoming a validator, ensure you have:

  • A fully synced Citrate node (see Installing Client)
  • A funded wallet with at least the minimum stake amount plus gas for registration transactions
  • Hardware meeting the validator specifications (see Hardware Requirements)
  • A stable network connection with 99.5%+ uptime capability

Staking SALT

The minimum stake to register as a validator is 32,000 SALT. This stake serves as economic collateral -- validators who behave honestly earn rewards, while those who act maliciously or go offline face slashing penalties.

Stake your SALT using the Citrate CLI. I'd recommend checking your balance first to make sure you have enough for the stake plus gas fees.

Check your current balance:

citrate-cli wallet balance --address 0xYOUR_VALIDATOR_ADDRESS --rpc https://rpc.cnidarian.cloud

Stake SALT to the validator contract:

citrate-cli validator stake --amount 32000 --validator-address 0xYOUR_VALIDATOR_ADDRESS --rpc https://rpc.cnidarian.cloud --private-key $PRIVATE_KEY

Your stake is locked for the duration of your validator registration plus an unbonding period of 7 days after you request to withdraw. During the unbonding period, your stake can still be slashed for any misbehavior that occurred while you were active.

You can increase your stake at any time to improve your selection weight:

citrate-cli validator add-stake --amount 10000 --rpc https://rpc.cnidarian.cloud --private-key $PRIVATE_KEY

Registering as a Validator

Once your stake transaction confirms, register your node as an active validator. This links your staking address to your node's consensus key.

First, generate a validator consensus key:

Generate a new validator key pair:

citrated keys generate --type validator --output ~/.citrate/keys/validator.key

Display the public key (you will need this for registration):

citrated keys show --key ~/.citrate/keys/validator.key

Then register on-chain:

citrate-cli validator register --consensus-pubkey $(citrated keys show --key ~/.citrate/keys/validator.key) --commission-rate 5 --rpc https://rpc.cnidarian.cloud --private-key $PRIVATE_KEY

The --commission-rate is a percentage (0-100) that determines how much of delegator rewards you retain as a commission. A rate of 5 means you keep 5% of rewards earned from delegated stake.

After registration, your node will be included in the active validator set at the next epoch boundary (every 100 blocks, approximately 100 seconds).

Configuring BFT Participation

Update your node configuration to enable validator consensus participation:

# In ~/.citrate/config.toml
 
[consensus]
role = "validator"
validator_key = "~/.citrate/keys/validator.key"
stake_address = "0xYOUR_STAKING_ADDRESS"
 
# BFT-specific settings
[consensus.bft]
vote_timeout_ms = 3000           # Time to wait for votes before timing out
proposal_timeout_ms = 5000       # Time to wait for block proposals
max_skip_rounds = 3              # Max consecutive rounds to skip before alerting

Restart your node for the changes to take effect:

If running directly:

citrated start --config ~/.citrate/config.toml

If running in Docker:

docker restart citrate-node

Your node will begin participating in BFT consensus rounds once it appears in the active validator set. You can verify your status:

citrate-cli validator status --address 0xYOUR_VALIDATOR_ADDRESS --rpc https://rpc.cnidarian.cloud

Monitoring Duties

Validator performance directly affects your rewards and slashing risk. Monitor these key metrics:

citrate-cli validator performance --address 0xYOUR_VALIDATOR_ADDRESS --rpc https://rpc.cnidarian.cloud

Key metrics to watch:

MetricTargetSlashing Threshold
Uptime>99.9%<95% triggers penalty
Vote participation>99%<90% triggers slashing
Proposal success rate>95%<80% reduces rewards
Double-sign incidents0Any double-sign = major slash
Blue scoreIncreasingDeclining = investigate

We strongly recommend setting up alerts for critical events before going live. See the Monitoring guide for Prometheus alerting rules specific to validators.

Slashing penalties vary by severity:

  • Downtime (missed votes): 0.1% of stake per epoch of downtime
  • Double signing: 5% of stake, immediate
  • Equivocation (conflicting votes): 10% of stake, immediate
  • Extended absence (>24 hours offline): 1% of stake

Further Reading