setup.rs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. use {
  2. solana_account::Account as SolanaAccount,
  3. solana_program_pack::Pack,
  4. solana_pubkey::Pubkey,
  5. solana_rent::Rent,
  6. spl_token_interface::state::{Account, AccountState, Mint},
  7. };
  8. pub fn setup_mint_account(
  9. mint_authority: Option<&Pubkey>,
  10. freeze_authority: Option<&Pubkey>,
  11. supply: u64,
  12. decimals: u8,
  13. ) -> SolanaAccount {
  14. let data = {
  15. let mut data = vec![0; Mint::LEN];
  16. let state = Mint {
  17. mint_authority: mint_authority.cloned().into(),
  18. supply,
  19. decimals,
  20. is_initialized: true,
  21. freeze_authority: freeze_authority.cloned().into(),
  22. };
  23. state.pack_into_slice(&mut data);
  24. data
  25. };
  26. let space = data.len();
  27. let lamports = Rent::default().minimum_balance(space);
  28. SolanaAccount {
  29. lamports,
  30. data,
  31. owner: spl_token_interface::id(),
  32. ..Default::default()
  33. }
  34. }
  35. pub fn setup_token_account(mint: &Pubkey, owner: &Pubkey, amount: u64) -> SolanaAccount {
  36. let data = {
  37. let mut data = vec![0; Account::LEN];
  38. let state = Account {
  39. mint: *mint,
  40. owner: *owner,
  41. amount,
  42. delegate: None.into(),
  43. state: AccountState::Initialized,
  44. is_native: None.into(),
  45. delegated_amount: 0,
  46. close_authority: None.into(),
  47. };
  48. state.pack_into_slice(&mut data);
  49. data
  50. };
  51. let space = data.len();
  52. let lamports = Rent::default().minimum_balance(space);
  53. SolanaAccount {
  54. lamports,
  55. data,
  56. owner: spl_token_interface::id(),
  57. ..Default::default()
  58. }
  59. }