Enum solana_program::stake::instruction::StakeInstruction [−][src]
pub enum StakeInstruction {
Show 13 variants
Initialize(Authorized, Lockup),
Authorize(Pubkey, StakeAuthorize),
DelegateStake,
Split(u64),
Withdraw(u64),
Deactivate,
SetLockup(LockupArgs),
Merge,
AuthorizeWithSeed(AuthorizeWithSeedArgs),
InitializeChecked,
AuthorizeChecked(StakeAuthorize),
AuthorizeCheckedWithSeed(AuthorizeCheckedWithSeedArgs),
SetLockupChecked(LockupCheckedArgs),
}
Variants
Initialize(Authorized, Lockup)
Initialize a stake with lockup and authorization information
Account references
- [WRITE] Uninitialized stake account
- [] Rent sysvar
Authorized carries pubkeys that must sign staker transactions and withdrawer transactions. Lockup carries information about withdrawal restrictions
Tuple Fields of Initialize
0: Authorized
1: Lockup
Authorize(Pubkey, StakeAuthorize)
Authorize a key to manage stake or withdrawal
Account references
- [WRITE] Stake account to be updated
- [] Clock sysvar
- [SIGNER] The stake or withdraw authority
- Optional: [SIGNER] Lockup authority, if updating StakeAuthorize::Withdrawer before lockup expiration
Tuple Fields of Authorize
0: Pubkey
1: StakeAuthorize
Delegate a stake to a particular vote account
Account references
- [WRITE] Initialized stake account to be delegated
- [] Vote account to which this stake will be delegated
- [] Clock sysvar
- [] Stake history sysvar that carries stake warmup/cooldown history
- [] Address of config account that carries stake config
- [SIGNER] Stake authority
The entire balance of the staking account is staked. DelegateStake can be called multiple times, but re-delegation is delayed by one epoch
Split(u64)
Split u64 tokens and stake off a stake account into another stake account.
Account references
- [WRITE] Stake account to be split; must be in the Initialized or Stake state
- [WRITE] Uninitialized stake account that will take the split-off amount
- [SIGNER] Stake authority
Tuple Fields of Split
0: u64
Withdraw(u64)
Withdraw unstaked lamports from the stake account
Account references
- [WRITE] Stake account from which to withdraw
- [WRITE] Recipient account
- [] Clock sysvar
- [] Stake history sysvar that carries stake warmup/cooldown history
- [SIGNER] Withdraw authority
- Optional: [SIGNER] Lockup authority, if before lockup expiration
The u64 is the portion of the stake account balance to be withdrawn,
must be <= StakeAccount.lamports - staked_lamports
.
Tuple Fields of Withdraw
0: u64
Deactivates the stake in the account
Account references
- [WRITE] Delegated stake account
- [] Clock sysvar
- [SIGNER] Stake authority
SetLockup(LockupArgs)
Set stake lockup
If a lockup is not active, the withdraw authority may set a new lockup If a lockup is active, the lockup custodian may update the lockup parameters
Account references
- [WRITE] Initialized stake account
- [SIGNER] Lockup authority or withdraw authority
Tuple Fields of SetLockup
0: LockupArgs
Merge two stake accounts.
Both accounts must have identical lockup and authority keys. A merge is possible between two stakes in the following states with no additional conditions:
- two deactivated stakes
- an inactive stake into an activating stake during its activation epoch
For the following cases, the voter pubkey and vote credits observed must match:
- two activated stakes
- two activating accounts that share an activation epoch, during the activation epoch
All other combinations of stake states will fail to merge, including all “transient” states, where a stake is activating or deactivating with a non-zero effective stake.
Account references
- [WRITE] Destination stake account for the merge
- [WRITE] Source stake account for to merge. This account will be drained
- [] Clock sysvar
- [] Stake history sysvar that carries stake warmup/cooldown history
- [SIGNER] Stake authority
AuthorizeWithSeed(AuthorizeWithSeedArgs)
Authorize a key to manage stake or withdrawal with a derived key
Account references
- [WRITE] Stake account to be updated
- [SIGNER] Base key of stake or withdraw authority
- [] Clock sysvar
- Optional: [SIGNER] Lockup authority, if updating StakeAuthorize::Withdrawer before lockup expiration
Tuple Fields of AuthorizeWithSeed
Initialize a stake with authorization information
This instruction is similar to Initialize
except that the withdraw authority
must be a signer, and no lockup is applied to the account.
Account references
- [WRITE] Uninitialized stake account
- [] Rent sysvar
- [] The stake authority
- [SIGNER] The withdraw authority
AuthorizeChecked(StakeAuthorize)
Authorize a key to manage stake or withdrawal
This instruction behaves like Authorize
with the additional requirement that the new
stake or withdraw authority must also be a signer.
Account references
- [WRITE] Stake account to be updated
- [] Clock sysvar
- [SIGNER] The stake or withdraw authority
- [SIGNER] The new stake or withdraw authority
- Optional: [SIGNER] Lockup authority, if updating StakeAuthorize::Withdrawer before lockup expiration
Tuple Fields of AuthorizeChecked
AuthorizeCheckedWithSeed(AuthorizeCheckedWithSeedArgs)
Authorize a key to manage stake or withdrawal with a derived key
This instruction behaves like AuthorizeWithSeed
with the additional requirement that
the new stake or withdraw authority must also be a signer.
Account references
- [WRITE] Stake account to be updated
- [SIGNER] Base key of stake or withdraw authority
- [] Clock sysvar
- [SIGNER] The new stake or withdraw authority
- Optional: [SIGNER] Lockup authority, if updating StakeAuthorize::Withdrawer before lockup expiration
Tuple Fields of AuthorizeCheckedWithSeed
SetLockupChecked(LockupCheckedArgs)
Set stake lockup
This instruction behaves like SetLockup
with the additional requirement that
the new lockup authority also be a signer.
If a lockup is not active, the withdraw authority may set a new lockup If a lockup is active, the lockup custodian may update the lockup parameters
Account references
- [WRITE] Initialized stake account
- [SIGNER] Lockup authority or withdraw authority
- Optional: [SIGNER] New lockup authority
Tuple Fields of SetLockupChecked
Trait Implementations
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error> where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error> where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
This method tests for self
and other
values to be equal, and is used
by ==
. Read more
This method tests for !=
.
Auto Trait Implementations
impl RefUnwindSafe for StakeInstruction
impl Send for StakeInstruction
impl Sync for StakeInstruction
impl Unpin for StakeInstruction
impl UnwindSafe for StakeInstruction
Blanket Implementations
pub default fn visit_for_abi(
&self,
digester: &mut AbiDigester
) -> Result<AbiDigester, DigestError>
pub default fn visit_for_abi(
&self,
_digester: &mut AbiDigester
) -> Result<AbiDigester, DigestError>
Mutably borrows from an owned value. Read more