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>
.