setup.rs 1.7 KB

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