Stake
In this section we will discuss how you can stake using Nexis CLI
Prerequisites
Create a Stake Account
To delegate stake, you will need to transfer some tokens into a stake account. To create an account, you will need a keypair. Its public key will be used as the stake account address. No need for a password or encryption here; this keypair will be discarded right after creating the stake account.
The output will contain the public key after the text pubkey:
.
Copy the public key and store it for safekeeping. You will need it any time you want to perform an action on the stake account you create next.
Now, create a stake account:
<AMOUNT>
tokens are transferred from the account at the “from” <KEYPAIR>
to a new stake account at the public key of stake-account.json.
The stake-account.json file can now be discarded. To authorize additional actions, you will use the --stake-authority
or --withdraw-authority
keypair, not stake-account.json.
View the new stake account with the nexis stake-account command:
The output will look similar to this:
Set Stake and Withdraw Authorities
Stake and withdraw authorities can be set when creating an account via the --stake-authority
and --withdraw-authority
options, or afterward with the nexis stake-authorize
command. For example, to set a new stake authority, run:
This will use the existing stake authority <KEYPAIR>
to authorize a new stake authority <PUBKEY>
on the stake account <STAKE_ACCOUNT_ADDRESS>
.
Advanced: Derive Stake Account Addresses
When you delegate stake, you delegate all tokens in the stake account to a single validator. To delegate to multiple validators, you will need multiple stake accounts. Creating a new keypair for each account and managing those addresses can be cumbersome. Fortunately, you can derive stake addresses using the --seed
option:
<STRING>
is an arbitrary string up to 32 bytes, but will typically be a number corresponding to which derived account this is. The first account might be “0”, then “1”, and so on. The public key of <STAKE_ACCOUNT_KEYPAIR>
acts as the base address. The command derives a new address from the base address and seed string. To see what stake address the command will derive, use nexis create-address-with-seed
:
<PUBKEY>
is the public key of the <STAKE_ACCOUNT_KEYPAIR>
passed to nexis create-stake-account
.
Delegate Stake
To delegate your stake to a validator, you will need its vote account address. Find it by querying the cluster for the list of all validators and their vote accounts with the nexis validators
command:
The first column of each row contains the validator’s identity and the second is the vote account address. Choose a validator and use its vote account address in nexis delegate-stake
:
The stake authority <KEYPAIR>
authorizes the operation on the account with address <STAKE_ACCOUNT_ADDRESS>
. The stake is delegated to the vote account with address <VOTE_ACCOUNT_ADDRESS>
.
After delegating stake, use nexis stake-account
to observe the changes to the stake account:
You will see new fields “Delegated Stake” and “Delegated Vote Account Address” in the output. The output will look similar to this:
Deactivate Stake
Once delegated, you can undelegate stake with the nexis deactivate-stake
command:
The stake authority <KEYPAIR>
authorizes the operation on the account with address <STAKE_ACCOUNT_ADDRESS>
.
Note that stake takes several epochs to “cool down”. Attempts to delegate stake in the cool down period will fail.
Withdraw Stake
Transfer tokens out of a stake account with the nexis withdraw-stake
command:
<STAKE_ACCOUNT_ADDRESS>
is the existing stake account, the stake authority <KEYPAIR>
is the withdraw authority, and <AMOUNT>
is the number of tokens to transfer to <RECIPIENT_ADDRESS>
.