You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The stake program added the redelegate instruction in solana-labs/solana#26294, which easily moves stake from one validator to another without losing an epoch of rewards due to the flow of deactivate -> wait -> delegate -> wait.
Stake pools are extremely important users of stake accounts, and we want most stake to go through a stake pool at some point. When stake pools rebalance, they lose out on rewards, impacting their performance, so many just don't do it, or only move a minimal amount to keep their financial performance high.
Solution
Add a redelegate instruction to the stake pool program, which moves a certain number of lamports from one validator to another. Underneath, this instruction will:
split lamports from the main stake account into the redelegation stake account, a PDA given by some seed (also part of the instruction), where the seed will be stored in the ValidatorStakeInfo entry for that validator in the pool
redelegate from the redelegation stake account to an ephemeral stake account, a PDA given by some other seed (honestly, it doesn't matter because it will be immediately deleted in the next step)
immediately merge the ephemeral stake account into the transient stake account for the validator
This model allows for multiple redelegations into the same validator in one epoch. The redelegated stake account needs to stay around to be reabsorbed into the pool, so there's only one redelegation possible from a validator per epoch. However, this means that it is not possible to decrease stake from a validator and also redelegate to it. That would be a weird situation though.
During the update_validator_list_balance instruction, instead of passing in two accounts per validator (the main stake account and the transient stake account), we'll also pass in the redelegation stake account, so we'll update in groups of three. If the redelegation stake account exists and is deactivated, the reserve stake account receives the rent-exempt lamports.
Since there's enough changes happening in #3714, let's land that first before tackling this.
Problem
The stake program added the redelegate instruction in solana-labs/solana#26294, which easily moves stake from one validator to another without losing an epoch of rewards due to the flow of deactivate -> wait -> delegate -> wait.
Stake pools are extremely important users of stake accounts, and we want most stake to go through a stake pool at some point. When stake pools rebalance, they lose out on rewards, impacting their performance, so many just don't do it, or only move a minimal amount to keep their financial performance high.
Solution
Add a
redelegate
instruction to the stake pool program, which moves a certain number of lamports from one validator to another. Underneath, this instruction will:ValidatorStakeInfo
entry for that validator in the poolThis model allows for multiple redelegations into the same validator in one epoch. The redelegated stake account needs to stay around to be reabsorbed into the pool, so there's only one redelegation possible from a validator per epoch. However, this means that it is not possible to decrease stake from a validator and also redelegate to it. That would be a weird situation though.
During the
update_validator_list_balance
instruction, instead of passing in two accounts per validator (the main stake account and the transient stake account), we'll also pass in the redelegation stake account, so we'll update in groups of three. If the redelegation stake account exists and is deactivated, the reserve stake account receives the rent-exempt lamports.Since there's enough changes happening in #3714, let's land that first before tackling this.
cc @mvines
The text was updated successfully, but these errors were encountered: