mollusk.rs 1.3 KB

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