instruction.rs 1.0 KB

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