Skip to main content

Manage Stake Accounts

If you want to delegate stake to many different validators, you will need to create a separate stake account for each. If you follow the convention of creating the first stake account at seed "0", the second at "1", the third at "2", and so on, then the solana-stake-accounts tool will allow you to operate on all accounts with single invocations. You can use it to sum up the balances of all accounts, move accounts to a new wallet, or set new authorities.


Create a stake account#

Create and fund a derived stake account at the stake authority public key:

solana-stake-accounts new <FUNDING_KEYPAIR> <BASE_KEYPAIR> <AMOUNT> \
--stake-authority <PUBKEY> --withdraw-authority <PUBKEY> \
--fee-payer <KEYPAIR>

Count accounts#

Count the number of derived accounts:

solana-stake-accounts count <BASE_PUBKEY>

Get stake account balances#

Sum the balance of derived stake accounts:

solana-stake-accounts balance <BASE_PUBKEY> --num-accounts <NUMBER>

Get stake account addresses#

List the address of each stake account derived from the given public key:

solana-stake-accounts addresses <BASE_PUBKEY> --num-accounts <NUMBER>

Set new authorities#

Set new authorities on each derived stake account:

solana-stake-accounts authorize <BASE_PUBKEY> \
--stake-authority <KEYPAIR> --withdraw-authority <KEYPAIR> \
--new-stake-authority <PUBKEY> --new-withdraw-authority <PUBKEY> \
--num-accounts <NUMBER> --fee-payer <KEYPAIR>

Relocate stake accounts#

Relocate stake accounts:

solana-stake-accounts rebase <BASE_PUBKEY> <NEW_BASE_KEYPAIR> \
--stake-authority <KEYPAIR> --num-accounts <NUMBER> \
--fee-payer <KEYPAIR>

To atomically rebase and authorize each stake account, use the 'move' command:

solana-stake-accounts move <BASE_PUBKEY> <NEW_BASE_KEYPAIR> \
--stake-authority <KEYPAIR> --withdraw-authority <KEYPAIR> \
--new-stake-authority <PUBKEY> --new-withdraw-authority <PUBKEY> \
--num-accounts <NUMBER> --fee-payer <KEYPAIR>