pub struct WithdrawAndChangeRecipient<'info> {
    pub stream: Account<'info, Stream>,
    pub signer: Signer<'info>,
    pub mint: Box<Account<'info, Mint>>,
    pub recipient_token: Box<Account<'info, TokenAccount>>,
    pub escrow_token: Box<Account<'info, TokenAccount>>,
    pub token_program: Program<'info, Token>,
}
Expand description

Accounts struct for withdrawing recipient funds from a stream and changing recipient of a stream.

Fields§

§stream: Account<'info, Stream>

Stream PDA account.

§signer: Signer<'info>

Signer wallet. Anybody can call the withdraw method. The recipient of the withdrawn amount is not related to the signer. Recipient is passed as an argument, based on which the stream PDA is accessed, so if a malicious user tries to send themselves as a recipient, but a different stream account, the constraint for the stream account will fail.

§mint: Box<Account<'info, Mint>>

SPL token mint account.

§recipient_token: Box<Account<'info, TokenAccount>>

Associated token account of the recipient.

§escrow_token: Box<Account<'info, TokenAccount>>

Associated token escrow account holding the funds for this stream.

§token_program: Program<'info, Token>

SPL token program.

Implementations§

source§

impl<'info> WithdrawAndChangeRecipient<'info>

source

pub fn transfer_from_escrow( &self, seed: u64, name: &str, bump: u8, amount: u64 ) -> Result<()>

Transfer funds from the associated token escrow account holding the funds for this stream to the associated token account of the recipient.

Trait Implementations§

source§

impl<'info> Accounts<'info> for WithdrawAndChangeRecipient<'info>where 'info: 'info,

source§

fn try_accounts( __program_id: &Pubkey, __accounts: &mut &[AccountInfo<'info>], __ix_data: &[u8], __bumps: &mut BTreeMap<String, u8>, __reallocs: &mut BTreeSet<Pubkey> ) -> Result<Self>

Returns the validated accounts struct. What constitutes “valid” is program dependent. However, users of these types should never have to worry about account substitution attacks. For example, if a program expects a Mint account from the SPL token program in a particular field, then it should be impossible for this method to return Ok if any other account type is given–from the SPL token program or elsewhere. Read more
source§

impl<'info> AccountsExit<'info> for WithdrawAndChangeRecipient<'info>where 'info: 'info,

source§

fn exit(&self, program_id: &Pubkey) -> Result<()>

program_id is the currently executing program.
source§

impl<'info> ToAccountInfos<'info> for WithdrawAndChangeRecipient<'info>where 'info: 'info,

source§

fn to_account_infos(&self) -> Vec<AccountInfo<'info>>

source§

impl<'info> ToAccountMetas for WithdrawAndChangeRecipient<'info>

source§

fn to_account_metas(&self, is_signer: Option<bool>) -> Vec<AccountMeta>

is_signer is given as an optional override for the signer meta field. This covers the edge case when a program-derived-address needs to relay a transaction from a client to another program but sign the transaction before the relay. The client cannot mark the field as a signer, and so we have to override the is_signer meta field given by the client.

Auto Trait Implementations§

§

impl<'info> !RefUnwindSafe for WithdrawAndChangeRecipient<'info>

§

impl<'info> !Send for WithdrawAndChangeRecipient<'info>

§

impl<'info> !Sync for WithdrawAndChangeRecipient<'info>

§

impl<'info> Unpin for WithdrawAndChangeRecipient<'info>

§

impl<'info> !UnwindSafe for WithdrawAndChangeRecipient<'info>

Blanket Implementations§

§

impl<T> AbiExample for T

§

default fn example() -> T

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

source§

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

Mutably borrows from an owned value. 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 Twhere 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.

§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
source§

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

§

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 Twhere U: TryFrom<T>,

§

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

impl<V, T> VZip<V> for Twhere V: MultiLane<T>,

§

fn vzip(self) -> V