setup.rs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #![cfg(feature = "test-sbf")]
  2. use {
  3. solana_sdk::{
  4. account::Account as SolanaAccount, program_pack::Pack, pubkey::Pubkey, rent::Rent,
  5. },
  6. spl_token::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::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::id(),
  57. ..Default::default()
  58. }
  59. }