spl.rs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. use {
  2. solana_instruction::{AccountMeta, Instruction},
  3. solana_keypair::Keypair,
  4. solana_program_binaries::spl_programs,
  5. solana_program_test::ProgramTest,
  6. solana_pubkey::Pubkey,
  7. solana_sdk_ids::{bpf_loader, bpf_loader_upgradeable},
  8. solana_signer::Signer,
  9. solana_system_interface::instruction as system_instruction,
  10. solana_sysvar::rent,
  11. solana_transaction::Transaction,
  12. };
  13. #[tokio::test]
  14. async fn programs_present() {
  15. let (banks_client, _, _) = ProgramTest::default().start().await;
  16. let rent = banks_client.get_rent().await.unwrap();
  17. let token_2022_id = spl_generic_token::token_2022::id();
  18. let (token_2022_programdata_id, _) =
  19. Pubkey::find_program_address(&[token_2022_id.as_ref()], &bpf_loader_upgradeable::id());
  20. for (program_id, _) in spl_programs(&rent) {
  21. let program_account = banks_client.get_account(program_id).await.unwrap().unwrap();
  22. if program_id == token_2022_id || program_id == token_2022_programdata_id {
  23. assert_eq!(program_account.owner, bpf_loader_upgradeable::id());
  24. } else {
  25. assert_eq!(program_account.owner, bpf_loader::id());
  26. }
  27. }
  28. }
  29. #[tokio::test]
  30. async fn token_2022() {
  31. let (banks_client, payer, recent_blockhash) = ProgramTest::default().start().await;
  32. let token_2022_id = spl_generic_token::token_2022::id();
  33. let mint = Keypair::new();
  34. let rent = banks_client.get_rent().await.unwrap();
  35. let space = 82;
  36. let transaction = Transaction::new_signed_with_payer(
  37. &[
  38. system_instruction::create_account(
  39. &payer.pubkey(),
  40. &mint.pubkey(),
  41. rent.minimum_balance(space),
  42. space as u64,
  43. &token_2022_id,
  44. ),
  45. Instruction::new_with_bytes(
  46. token_2022_id,
  47. &[0; 35], // initialize mint
  48. vec![
  49. AccountMeta::new(mint.pubkey(), false),
  50. AccountMeta::new_readonly(rent::id(), false),
  51. ],
  52. ),
  53. ],
  54. Some(&payer.pubkey()),
  55. &[&payer, &mint],
  56. recent_blockhash,
  57. );
  58. banks_client.process_transaction(transaction).await.unwrap();
  59. }