SinglePoolInstruction

Enum SinglePoolInstruction 

Source
#[repr(C)]
pub enum SinglePoolInstruction { InitializePool, ReplenishPool, DepositStake, WithdrawStake { user_stake_authority: Pubkey, token_amount: u64, }, CreateTokenMetadata, UpdateTokenMetadata { name: String, symbol: String, uri: String, }, InitializePoolOnRamp, }
Expand description

Instructions supported by the SinglePool program.

Variants§

§

InitializePool

Initialize the mint and main stake account for a new single-validator stake pool. The pool stake account must contain the rent-exempt minimum plus the minimum balance of 1 sol. No tokens will be minted; to deposit more, use Deposit after InitializeStake.

  1. [] Validator vote account
  2. [w] Pool account
  3. [w] Pool stake account
  4. [w] Pool token mint
  5. [] Pool stake authority
  6. [] Pool mint authority
  7. [] Rent sysvar
  8. [] Clock sysvar
  9. [] Stake history sysvar
  10. [] Stake config sysvar
  11. [] System program
  12. [] Token program
  13. [] Stake program
§

ReplenishPool

Bring the pool stake accounts to their optimal state. This performs several operations:

  • If the main stake account has been deactivated by DeactivateDelinquent, reactivate it.
  • Then, if the main stake account is already fully active:
    • If the on-ramp is fully active, move its stake to the main account.
    • If the main account has excess lamports, move them to the on-ramp.
    • Delegate the on-ramp if it has excess lamports to activate.

Combined, these operations allow harvesting and delegating MEV rewards and will eventually allow depositing liquid sol for pool tokens.

This instruction is idempotent and gracefully skips operations that would fail or have no effect, up to no-op. This allows it to be executed speculatively or as part of arbitrary flows involving the pool. If the on-ramp account is already activating, and there are excess lamports beyond the activating delegation, it increases the delegation to include them.

This instruction will fail with an error if the on-ramp account does not exist. If the pool does not have the account, InitializePoolOnRamp must be called to create it.

  1. [] Validator vote account
  2. [] Pool account
  3. [w] Pool stake account
  4. [w] Pool on-ramp account
  5. [] Pool stake authority
  6. [] Clock sysvar
  7. [] Stake history sysvar
  8. [] Stake config sysvar
  9. [] Stake program
§

DepositStake

Deposit stake into the pool. The output is a “pool” token representing fractional ownership of the pool stake. Inputs are converted to the current ratio.

  1. [] Pool account
  2. [w] Pool stake account
  3. [] Pool on-ramp account (not yet enforced)
  4. [w] Pool token mint
  5. [] Pool stake authority
  6. [] Pool mint authority
  7. [w] User stake account to join to the pool
  8. [w] User account to receive pool tokens
  9. [w] User account to receive lamports
  10. [] Clock sysvar
  11. [] Stake history sysvar
  12. [] Token program
  13. [] Stake program
§

WithdrawStake

Redeem tokens issued by this pool for stake at the current ratio.

  1. [] Pool account
  2. [w] Pool stake account
  3. [] Pool on-ramp account (not yet enforced)
  4. [w] Pool token mint
  5. [] Pool stake authority
  6. [] Pool mint authority
  7. [w] User stake account to receive stake at
  8. [w] User account to take pool tokens from
  9. [] Clock sysvar
  10. [] Token program
  11. [] Stake program

Fields

§user_stake_authority: Pubkey

User authority for the new stake account

§token_amount: u64

Amount of tokens to redeem for stake

§

CreateTokenMetadata

Create token metadata for the stake-pool token in the metaplex-token program. Step three of the permissionless three-stage initialization flow. Note this instruction is not necessary for the pool to operate, to ensure we cannot be broken by upstream.

  1. [] Pool account
  2. [] Pool token mint
  3. [] Pool mint authority
  4. [] Pool MPL authority
  5. [s, w] Payer for creation of token metadata account
  6. [w] Token metadata account
  7. [] Metadata program id
  8. [] System program id
§

UpdateTokenMetadata

Update token metadata for the stake-pool token in the metaplex-token program.

  1. [] Validator vote account
  2. [] Pool account
  3. [] Pool MPL authority
  4. [s] Vote account authorized withdrawer
  5. [w] Token metadata account
  6. [] Metadata program id

Fields

§name: String

Token name

§symbol: String

Token symbol e.g. stkSOL

§uri: String

URI of the uploaded metadata of the spl-token

§

InitializePoolOnRamp

Create the on-ramp account for a single-validator stake pool, which is used to delegate liquid sol so that it can be merged into the main pool account as active stake.

New pools created with initialize() will include this instruction automatically. Existing pools must use InitializePoolOnRamp to upgrade to the latest version.

This is a temporary instruction that will be deprecated some time after all existing pools have upgraded. Its logic is intended to be incorporated into InitializePool itself.

  1. [] Pool account
  2. [w] Pool on-ramp account
  3. [] Pool stake authority
  4. [] Rent sysvar
  5. [] System program
  6. [] Stake program

Trait Implementations§

Source§

impl BorshDeserialize for SinglePoolInstruction

Source§

fn deserialize_reader<__R: Read>(reader: &mut __R) -> Result<Self, Error>

Source§

fn deserialize(buf: &mut &[u8]) -> Result<Self, Error>

Deserializes this instance from a given slice of bytes. Updates the buffer to point at the remaining bytes.
Source§

fn try_from_slice(v: &[u8]) -> Result<Self, Error>

Deserialize this instance from a slice of bytes.
Source§

fn try_from_reader<R>(reader: &mut R) -> Result<Self, Error>
where R: Read,

Source§

impl BorshSerialize for SinglePoolInstruction

Source§

fn serialize<__W: Write>(&self, writer: &mut __W) -> Result<(), Error>

Source§

impl Clone for SinglePoolInstruction

Source§

fn clone(&self) -> SinglePoolInstruction

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SinglePoolInstruction

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl EnumExt for SinglePoolInstruction

Source§

fn deserialize_variant<__R: Read>( reader: &mut __R, variant_tag: u8, ) -> Result<Self, Error>

Deserialises given variant of an enum from the reader. Read more
Source§

impl PartialEq for SinglePoolInstruction

Source§

fn eq(&self, other: &SinglePoolInstruction) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for SinglePoolInstruction

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.