setup.rs 1.6 KB

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