123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381 |
- use crate::prelude::*;
- use crate::solana_program::pubkey::Pubkey;
- pub use crate::solana_program::system_program::ID;
- #[derive(Debug, Clone)]
- pub struct System;
- impl anchor_lang::Id for System {
- fn id() -> Pubkey {
- ID
- }
- }
- pub fn advance_nonce_account<'info>(
- ctx: CpiContext<'_, '_, '_, 'info, AdvanceNonceAccount<'info>>,
- ) -> Result<()> {
- let ix = crate::solana_program::system_instruction::advance_nonce_account(
- ctx.accounts.nonce.key,
- ctx.accounts.authorized.key,
- );
- crate::solana_program::program::invoke_signed(
- &ix,
- &[
- ctx.accounts.nonce,
- ctx.accounts.recent_blockhashes,
- ctx.accounts.authorized,
- ],
- ctx.signer_seeds,
- )
- .map_err(Into::into)
- }
- #[derive(Accounts)]
- pub struct AdvanceNonceAccount<'info> {
- pub nonce: AccountInfo<'info>,
- pub authorized: AccountInfo<'info>,
- pub recent_blockhashes: AccountInfo<'info>,
- }
- pub fn allocate<'info>(
- ctx: CpiContext<'_, '_, '_, 'info, Allocate<'info>>,
- space: u64,
- ) -> Result<()> {
- let ix = crate::solana_program::system_instruction::allocate(
- ctx.accounts.account_to_allocate.key,
- space,
- );
- crate::solana_program::program::invoke_signed(
- &ix,
- &[ctx.accounts.account_to_allocate],
- ctx.signer_seeds,
- )
- .map_err(Into::into)
- }
- #[derive(Accounts)]
- pub struct Allocate<'info> {
- pub account_to_allocate: AccountInfo<'info>,
- }
- pub fn allocate_with_seed<'info>(
- ctx: CpiContext<'_, '_, '_, 'info, AllocateWithSeed<'info>>,
- seed: &str,
- space: u64,
- owner: &Pubkey,
- ) -> Result<()> {
- let ix = crate::solana_program::system_instruction::allocate_with_seed(
- ctx.accounts.account_to_allocate.key,
- ctx.accounts.base.key,
- seed,
- space,
- owner,
- );
- crate::solana_program::program::invoke_signed(
- &ix,
- &[ctx.accounts.account_to_allocate, ctx.accounts.base],
- ctx.signer_seeds,
- )
- .map_err(Into::into)
- }
- #[derive(Accounts)]
- pub struct AllocateWithSeed<'info> {
- pub account_to_allocate: AccountInfo<'info>,
- pub base: AccountInfo<'info>,
- }
- pub fn assign<'info>(
- ctx: CpiContext<'_, '_, '_, 'info, Assign<'info>>,
- owner: &Pubkey,
- ) -> Result<()> {
- let ix = crate::solana_program::system_instruction::assign(
- ctx.accounts.account_to_assign.key,
- owner,
- );
- crate::solana_program::program::invoke_signed(
- &ix,
- &[ctx.accounts.account_to_assign],
- ctx.signer_seeds,
- )
- .map_err(Into::into)
- }
- #[derive(Accounts)]
- pub struct Assign<'info> {
- pub account_to_assign: AccountInfo<'info>,
- }
- pub fn assign_with_seed<'info>(
- ctx: CpiContext<'_, '_, '_, 'info, AssignWithSeed<'info>>,
- seed: &str,
- owner: &Pubkey,
- ) -> Result<()> {
- let ix = crate::solana_program::system_instruction::assign_with_seed(
- ctx.accounts.account_to_assign.key,
- ctx.accounts.base.key,
- seed,
- owner,
- );
- crate::solana_program::program::invoke_signed(
- &ix,
- &[ctx.accounts.account_to_assign, ctx.accounts.base],
- ctx.signer_seeds,
- )
- .map_err(Into::into)
- }
- #[derive(Accounts)]
- pub struct AssignWithSeed<'info> {
- pub account_to_assign: AccountInfo<'info>,
- pub base: AccountInfo<'info>,
- }
- pub fn authorize_nonce_account<'info>(
- ctx: CpiContext<'_, '_, '_, 'info, AuthorizeNonceAccount<'info>>,
- new_authority: &Pubkey,
- ) -> Result<()> {
- let ix = crate::solana_program::system_instruction::authorize_nonce_account(
- ctx.accounts.nonce.key,
- ctx.accounts.authorized.key,
- new_authority,
- );
- crate::solana_program::program::invoke_signed(
- &ix,
- &[ctx.accounts.nonce, ctx.accounts.authorized],
- ctx.signer_seeds,
- )
- .map_err(Into::into)
- }
- #[derive(Accounts)]
- pub struct AuthorizeNonceAccount<'info> {
- pub nonce: AccountInfo<'info>,
- pub authorized: AccountInfo<'info>,
- }
- pub fn create_account<'info>(
- ctx: CpiContext<'_, '_, '_, 'info, CreateAccount<'info>>,
- lamports: u64,
- space: u64,
- owner: &Pubkey,
- ) -> Result<()> {
- let ix = crate::solana_program::system_instruction::create_account(
- ctx.accounts.from.key,
- ctx.accounts.to.key,
- lamports,
- space,
- owner,
- );
- crate::solana_program::program::invoke_signed(
- &ix,
- &[ctx.accounts.from, ctx.accounts.to],
- ctx.signer_seeds,
- )
- .map_err(Into::into)
- }
- #[derive(Accounts)]
- pub struct CreateAccount<'info> {
- pub from: AccountInfo<'info>,
- pub to: AccountInfo<'info>,
- }
- pub fn create_account_with_seed<'info>(
- ctx: CpiContext<'_, '_, '_, 'info, CreateAccountWithSeed<'info>>,
- seed: &str,
- lamports: u64,
- space: u64,
- owner: &Pubkey,
- ) -> Result<()> {
- let ix = crate::solana_program::system_instruction::create_account_with_seed(
- ctx.accounts.from.key,
- ctx.accounts.to.key,
- ctx.accounts.base.key,
- seed,
- lamports,
- space,
- owner,
- );
- crate::solana_program::program::invoke_signed(
- &ix,
- &[ctx.accounts.from, ctx.accounts.to, ctx.accounts.base],
- ctx.signer_seeds,
- )
- .map_err(Into::into)
- }
- #[derive(Accounts)]
- pub struct CreateAccountWithSeed<'info> {
- pub from: AccountInfo<'info>,
- pub to: AccountInfo<'info>,
- pub base: AccountInfo<'info>,
- }
- pub fn create_nonce_account<'info>(
- ctx: CpiContext<'_, '_, '_, 'info, CreateNonceAccount<'info>>,
- lamports: u64,
- authority: &Pubkey,
- ) -> Result<()> {
- let ixs = crate::solana_program::system_instruction::create_nonce_account(
- ctx.accounts.from.key,
- ctx.accounts.nonce.key,
- authority,
- lamports,
- );
- crate::solana_program::program::invoke_signed(
- &ixs[0],
- &[ctx.accounts.from, ctx.accounts.nonce.clone()],
- ctx.signer_seeds,
- )?;
- crate::solana_program::program::invoke_signed(
- &ixs[1],
- &[
- ctx.accounts.nonce,
- ctx.accounts.recent_blockhashes,
- ctx.accounts.rent,
- ],
- ctx.signer_seeds,
- )
- .map_err(Into::into)
- }
- #[derive(Accounts)]
- pub struct CreateNonceAccount<'info> {
- pub from: AccountInfo<'info>,
- pub nonce: AccountInfo<'info>,
- pub recent_blockhashes: AccountInfo<'info>,
- pub rent: AccountInfo<'info>,
- }
- pub fn create_nonce_account_with_seed<'info>(
- ctx: CpiContext<'_, '_, '_, 'info, CreateNonceAccountWithSeed<'info>>,
- lamports: u64,
- seed: &str,
- authority: &Pubkey,
- ) -> Result<()> {
- let ixs = crate::solana_program::system_instruction::create_nonce_account_with_seed(
- ctx.accounts.from.key,
- ctx.accounts.nonce.key,
- ctx.accounts.base.key,
- seed,
- authority,
- lamports,
- );
- crate::solana_program::program::invoke_signed(
- &ixs[0],
- &[
- ctx.accounts.from,
- ctx.accounts.nonce.clone(),
- ctx.accounts.base,
- ],
- ctx.signer_seeds,
- )?;
- crate::solana_program::program::invoke_signed(
- &ixs[1],
- &[
- ctx.accounts.nonce,
- ctx.accounts.recent_blockhashes,
- ctx.accounts.rent,
- ],
- ctx.signer_seeds,
- )
- .map_err(Into::into)
- }
- #[derive(Accounts)]
- pub struct CreateNonceAccountWithSeed<'info> {
- pub from: AccountInfo<'info>,
- pub nonce: AccountInfo<'info>,
- pub base: AccountInfo<'info>,
- pub recent_blockhashes: AccountInfo<'info>,
- pub rent: AccountInfo<'info>,
- }
- pub fn transfer<'info>(
- ctx: CpiContext<'_, '_, '_, 'info, Transfer<'info>>,
- lamports: u64,
- ) -> Result<()> {
- let ix = crate::solana_program::system_instruction::transfer(
- ctx.accounts.from.key,
- ctx.accounts.to.key,
- lamports,
- );
- crate::solana_program::program::invoke_signed(
- &ix,
- &[ctx.accounts.from, ctx.accounts.to],
- ctx.signer_seeds,
- )
- .map_err(Into::into)
- }
- #[derive(Accounts)]
- pub struct Transfer<'info> {
- pub from: AccountInfo<'info>,
- pub to: AccountInfo<'info>,
- }
- pub fn transfer_with_seed<'info>(
- ctx: CpiContext<'_, '_, '_, 'info, TransferWithSeed<'info>>,
- from_seed: String,
- from_owner: &Pubkey,
- lamports: u64,
- ) -> Result<()> {
- let ix = crate::solana_program::system_instruction::transfer_with_seed(
- ctx.accounts.from.key,
- ctx.accounts.base.key,
- from_seed,
- from_owner,
- ctx.accounts.to.key,
- lamports,
- );
- crate::solana_program::program::invoke_signed(
- &ix,
- &[ctx.accounts.from, ctx.accounts.base, ctx.accounts.to],
- ctx.signer_seeds,
- )
- .map_err(Into::into)
- }
- #[derive(Accounts)]
- pub struct TransferWithSeed<'info> {
- pub from: AccountInfo<'info>,
- pub base: AccountInfo<'info>,
- pub to: AccountInfo<'info>,
- }
- pub fn withdraw_nonce_account<'info>(
- ctx: CpiContext<'_, '_, '_, 'info, WithdrawNonceAccount<'info>>,
- lamports: u64,
- ) -> Result<()> {
- let ix = crate::solana_program::system_instruction::withdraw_nonce_account(
- ctx.accounts.nonce.key,
- ctx.accounts.authorized.key,
- ctx.accounts.to.key,
- lamports,
- );
- crate::solana_program::program::invoke_signed(
- &ix,
- &[
- ctx.accounts.nonce,
- ctx.accounts.to,
- ctx.accounts.recent_blockhashes,
- ctx.accounts.rent,
- ctx.accounts.authorized,
- ],
- ctx.signer_seeds,
- )
- .map_err(Into::into)
- }
- #[derive(Accounts)]
- pub struct WithdrawNonceAccount<'info> {
- pub nonce: AccountInfo<'info>,
- pub to: AccountInfo<'info>,
- pub recent_blockhashes: AccountInfo<'info>,
- pub rent: AccountInfo<'info>,
- pub authorized: AccountInfo<'info>,
- }
|