create_account.rs 1.0 KB

123456789101112131415161718192021222324252627282930313233343536
  1. use rent_example_api::prelude::*;
  2. use solana_program::msg;
  3. use steel::*;
  4. pub fn process_create_account(accounts: &[AccountInfo<'_>], data: &[u8]) -> ProgramResult {
  5. let args = CreateSystemAccount::try_from_bytes(data)?;
  6. let [payer_info, new_account_info, system_program] = accounts else {
  7. return Err(ProgramError::NotEnoughAccountKeys);
  8. };
  9. payer_info.is_signer()?;
  10. new_account_info.is_signer()?;
  11. let account_size = std::mem::size_of::<Address>();
  12. let rent = Rent::get()?;
  13. let lamports_required = rent.minimum_balance(account_size);
  14. msg!("Account size: {}", account_size);
  15. msg!("Lamports required: {}", lamports_required);
  16. // Create account with correct type argument
  17. create_account::<Address>(
  18. new_account_info,
  19. system_program,
  20. payer_info,
  21. &rent_example_api::ID,
  22. &[],
  23. )?;
  24. let address = new_account_info.as_account_mut::<Address>(&rent_example_api::ID)?;
  25. address.name = args.name;
  26. address.address = args.address;
  27. Ok(())
  28. }