mollusk.rs 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. use mollusk_svm::Mollusk;
  2. use pinocchio_token_interface::state::{load_mut_unchecked, mint::Mint};
  3. use solana_account::Account;
  4. use solana_pubkey::Pubkey;
  5. use solana_rent::Rent;
  6. use solana_sdk_ids::bpf_loader_upgradeable;
  7. use crate::setup::TOKEN_PROGRAM_ID;
  8. pub fn create_mint_account(
  9. mint_authority: Pubkey,
  10. freeze_authority: Option<Pubkey>,
  11. decimals: u8,
  12. program_owner: &Pubkey,
  13. ) -> Account {
  14. let space = size_of::<Mint>();
  15. let lamports = Rent::default().minimum_balance(space);
  16. let mut data: Vec<u8> = vec![0u8; space];
  17. let mint = unsafe { load_mut_unchecked::<Mint>(data.as_mut_slice()).unwrap() };
  18. mint.set_mint_authority(mint_authority.as_array());
  19. if let Some(freeze_authority) = freeze_authority {
  20. mint.set_freeze_authority(freeze_authority.as_array());
  21. }
  22. mint.set_initialized();
  23. mint.decimals = decimals;
  24. Account {
  25. lamports,
  26. data,
  27. owner: *program_owner,
  28. executable: false,
  29. ..Default::default()
  30. }
  31. }
  32. /// Creates a Mollusk instance with the default feature set.
  33. pub fn mollusk() -> Mollusk {
  34. let mut mollusk = Mollusk::default();
  35. mollusk.add_program(
  36. &TOKEN_PROGRAM_ID,
  37. "pinocchio_token_program",
  38. &bpf_loader_upgradeable::id(),
  39. );
  40. mollusk
  41. }