Struct superstream::WithdrawAndChangeRecipient
source · 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§
Trait Implementations§
source§impl<'info> Accounts<'info> for WithdrawAndChangeRecipient<'info>where
'info: 'info,
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>
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 moresource§impl<'info> AccountsExit<'info> for WithdrawAndChangeRecipient<'info>where
'info: 'info,
impl<'info> AccountsExit<'info> for WithdrawAndChangeRecipient<'info>where 'info: 'info,
source§impl<'info> ToAccountInfos<'info> for WithdrawAndChangeRecipient<'info>where
'info: 'info,
impl<'info> ToAccountInfos<'info> for WithdrawAndChangeRecipient<'info>where 'info: 'info,
fn to_account_infos(&self) -> Vec<AccountInfo<'info>>
source§impl<'info> ToAccountMetas for WithdrawAndChangeRecipient<'info>
impl<'info> ToAccountMetas for WithdrawAndChangeRecipient<'info>
source§fn to_account_metas(&self, is_signer: Option<bool>) -> Vec<AccountMeta>
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§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more