instruction.rs 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. use solana_program::{
  2. account_info::{ AccountInfo, next_account_info },
  3. entrypoint::ProgramResult,
  4. program::invoke,
  5. pubkey::Pubkey,
  6. system_instruction,
  7. };
  8. pub fn transfer_sol_with_cpi(
  9. accounts: &[AccountInfo],
  10. amount: u64,
  11. ) -> ProgramResult {
  12. let accounts_iter = &mut accounts.iter();
  13. let payer = next_account_info(accounts_iter)?;
  14. let recipient = next_account_info(accounts_iter)?;
  15. let system_program = next_account_info(accounts_iter)?;
  16. invoke(
  17. &system_instruction::transfer(payer.key, recipient.key, amount),
  18. &[payer.clone(), recipient.clone(), system_program.clone()],
  19. )?;
  20. Ok(())
  21. }
  22. pub fn transfer_sol_with_program(
  23. program_id: &Pubkey,
  24. accounts: &[AccountInfo],
  25. amount: u64,
  26. ) -> ProgramResult {
  27. let accounts_iter = &mut accounts.iter();
  28. let payer = next_account_info(accounts_iter)?;
  29. let recipient = next_account_info(accounts_iter)?;
  30. **payer.try_borrow_mut_lamports()? -= amount;
  31. **recipient.try_borrow_mut_lamports()? += amount;
  32. Ok(())
  33. }