# Join as a Validator
# How to become a validator on Secret Network
In order to become an active validator, you must have more stake than the bottom validator. You may still execute the following steps, but you will not be active and therefore won't receive staking rewards.
# 1. Run a new full node on a new machine.
In order to become a validator, you node must be fully synced with the network. You can check this by doing:
secretd status
When the value of catching_up
is false, your node is fully sync'd with the network.
"sync_info": {
"latest_block_hash": "7BF95EED4EB50073F28CF833119FDB8C7DFE0562F611DF194CF4123A9C1F4640",
"latest_app_hash": "7C0C89EC4E903BAC730D9B3BB369D870371C6B7EAD0CCB5080B5F9D3782E3559",
"latest_block_height": "668538",
"latest_block_time": "2020-10-31T17:50:56.800119764Z",
"earliest_block_hash": "E7CAD87A4FDC47DFDE3D4E7C24D80D4C95517E8A6526E2D4BB4D6BC095404113",
"earliest_app_hash": "",
"earliest_block_height": "1",
"earliest_block_time": "2021-09-15T14:02:31Z",
"catching_up": false
},
# 2. Set your minimum-gas-price
parameter
We recommend starting with 0.0125uscrt
per gas unit:
perl -i -pe 's/^minimum-gas-prices = .+?$/minimum-gas-prices = "0.0125uscrt"/' ~/.secretd/config/app.toml
sudo systemctl restart secret-node
Your validator will not accept transactions that specify --gas-price
lower than the minimun-gas-price
you set here.
# 3. Generate a new key pair for yourself (change <key-alias>
with any word of your choice, this is just for your internal/personal reference):
secretcli keys add <key-alias>
⚠️Note⚠️: Backup the mnemonics! ⚠️Note⚠️: Please make sure you also backup your validator
Note: If you already have a key you can import it with the bip39 mnemonic with secretcli keys add <key-alias> --recover
or with secretcli keys export
(exports to stderr
!!) & secretcli keys import
.
# 4. Transfer tokens to your delegator's address:
This is the secret
wallet from which you delegate your funds to you own validator. You must delegate at least 1 SCRT (1000000uscrt) from this wallet to your validator.
To create a secret
wallet, run:
secretcli keys add <key-alias>
Make sure to backup the mnemonic you got from the above command!
Then transfer funds to address you just created.
# 5. Check that you have the funds:
secretcli q bank balances $(secretcli keys show -a <key-alias>)
If you get the following message, it means that you have no tokens yet:
ERROR: unknown address: account secret1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx does not exist
# 6. Join the network as a new validator: replace <MONIKER>
with the moniker you configured in step 3 of creating a full-node, and adjust the amount you want to stake
(remember 1 SCRT = 1,000,000 uSCRT, and so the command below stakes 100 SCRT).
secretcli tx staking create-validator \
--amount=100000000uscrt \
--pubkey=$(secretd tendermint show-validator) \
--identity={KEYBASE_IDENTITY} \
--details="To infinity and beyond!" \
--commission-rate="0.10" \
--commission-max-rate="0.20" \
--commission-max-change-rate="0.01" \
--min-self-delegation="1" \
--moniker=<MONIKER> \
--from=<key-alias>
# 7. Check that you have been added as a validator:
secretcli q staking validators | jq '.[] | select(.description.moniker == "<MONIKER>")'
Or run: secretcli q staking validators | grep moniker
. You should see your moniker listed.
# Dangers in running a validator
There are a couple of scenarios that can lead to losing a precentage of your and your delegators' stake. These are called slashing events.
The following is updated as of July 8, 2021.
# Slashing for downtime
Conditions for downtime:
It's based on actual blocktime as opposed to being based on theoretical blocktime ie (SignedBlocksWindow & MinSignedPerWindow network parameters).
Signing less than MinSignedPerWindow
blocks out of every SignedBlocksWindow
window will result in a downtime slash. Blocktime tends to fluctuate on the network.
Parameters: 11250 blocks out of every 22500-blocks.
For a block time of 6.8 seconds, this roughly translates to being up for 21.25 hours out of every 42.5-hour window.
For a block time of 6.4 seconds, this roughly translates to being up for 20 hours out of every 40-hour window.
Penalties for downtime:
- Slashing of 0.01% of your and your delegators' staking amount.
- Jailing for 10 minutes of your validator node. You don't earn block rewards for this period and at the end must manually unjail your node with
secretcli tx slashing unjail --from <key-alias>
.
# Slashing for double-signing
Conditions for double-signing:
- Your validator signs the same block height twice.
Penalties for double-signing:
- Slashing of 5% of your and your delegators' staking amount.
- Jailing forever (tombstoned) of your validator node. You cannot earn block rewards anymore with this validator and you and your delegators must redelegate your stake to a different validator.
# Protecting your validator agains DDoS attacks
See Sentry Nodes.
# Staking more tokens
(remember 1 SCRT = 1,000,000 uSCRT)
In order to stake more tokens beyond those in the initial transaction, run:
secretcli tx staking delegate $(secretcli keys show <key-alias> --bech=val -a) <amount>uscrt --from <key-alias>
# Editing your Validator
secretcli tx staking edit-validator \
--moniker "<new-moniker>" \
--website "https://scrt.network" \
--identity 6A0D65E29A4CBC8E \
--details "To infinity and beyond!" \
--chain-id <chain_id> \
--from <key_name> \
--commission-rate "0.10"
# Seeing your rewards from being a validator
secretcli q distribution rewards $(secretcli keys show -a <key-alias>)
# Seeing your commissions from your delegators
secretcli q distribution commission $(secretcli keys show -a <key-alias> --bech=val)
# Withdrawing rewards
secretcli tx distribution withdraw-rewards $(secretcli keys show --bech=val -a <key-alias>) --from <key-alias>
# Withdrawing rewards+commissions
secretcli tx distribution withdraw-rewards $(secretcli keys show --bech=val -a <key-alias>) --from <key-alias> --commission
# Removing your validator
Currently deleting a validator is not possible. If you redelegate or unbond your self-delegations then your validator will become offline and all your delegators will start to unbond.
# Changing your validator's commission-rate
You are currently unable to modify the --commission-max-rate
and --commission-max-change-rate"
parameters.
Modifying the commision-rate can be done using this:
secretcli tx staking edit-validator --commission-rate="0.05" --from <key-alias>
# Slashing
# Unjailing
To unjail your jailed validator
secretcli tx slashing unjail --from <key-alias>
# Signing Info
To retrieve a validator's signing info:
secretcli q slashing signing-info <validator-conspub-key>
# Query Parameters
You can get the current slashing parameters via:
secretcli q slashing params
# Query Parameters
You can get the current slashing parameters via:
secretcli q slashing params