create_user.rs 1.0 KB

123456789101112131415161718192021222324252627282930313233
  1. use solana_program::{account_info::AccountInfo, entrypoint::ProgramResult};
  2. use close_account_api::prelude::{CreateAccount, User};
  3. use steel::{create_account, system_program, AccountInfoValidation, AsAccount, ProgramError};
  4. pub fn create_user(accounts: &[AccountInfo], data: &[u8]) -> ProgramResult {
  5. let value = CreateAccount::try_from_bytes(data)?;
  6. let [payer, target_account, system_program] = accounts else {
  7. return Err(ProgramError::NotEnoughAccountKeys);
  8. };
  9. payer.is_signer()?;
  10. target_account.is_empty()?.is_writable()?.has_seeds(
  11. &[User::SEED_PREFIX.as_bytes(), payer.key.as_ref()],
  12. &close_account_api::ID,
  13. )?;
  14. system_program.is_program(&system_program::ID)?;
  15. create_account::<User>(
  16. target_account,
  17. system_program,
  18. payer,
  19. &close_account_api::ID,
  20. &[User::SEED_PREFIX.as_bytes(), payer.key.as_ref()],
  21. )?;
  22. let user = target_account.as_account_mut::<User>(&close_account_api::ID)?;
  23. user.name = value.0;
  24. Ok(())
  25. }