init.rs 1.1 KB

1234567891011121314151617181920212223242526272829303132333435
  1. use pda_mint_authority_api::prelude::*;
  2. use solana_program::msg;
  3. use steel::*;
  4. pub fn process_init(accounts: &[AccountInfo<'_>], _data: &[u8]) -> ProgramResult {
  5. // Load accounts.
  6. let [mint_authority_info, payer_info, system_program] = accounts else {
  7. return Err(ProgramError::NotEnoughAccountKeys);
  8. };
  9. // validation
  10. payer_info.is_signer()?;
  11. mint_authority_info
  12. .is_empty()?
  13. .is_writable()?
  14. .has_seeds(&[MINT_AUTHORITY], &pda_mint_authority_api::ID)?;
  15. system_program.is_program(&system_program::ID)?;
  16. msg!("Creating mint authority PDA...");
  17. msg!("Mint Authority: {}", &mint_authority_info.key);
  18. create_account::<MintAuthorityPda>(
  19. mint_authority_info,
  20. system_program,
  21. payer_info,
  22. &pda_mint_authority_api::ID,
  23. &[MINT_AUTHORITY],
  24. )?;
  25. let mint_authority =
  26. mint_authority_info.as_account_mut::<MintAuthorityPda>(&pda_mint_authority_api::ID)?;
  27. let mint_authority_bump = mint_authority_pda().1;
  28. mint_authority.bump = mint_authority_bump;
  29. Ok(())
  30. }