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.pubkey:.
<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:
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:
<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 thenexis validators command:
nexis delegate-stake:
<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:
Deactivate Stake
Once delegated, you can undelegate stake with thenexis deactivate-stake command:
<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 thenexis 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>.