initialize_multisig2.rs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. mod setup;
  2. use {
  3. setup::TOKEN_PROGRAM_ID,
  4. solana_keypair::Keypair,
  5. solana_program_pack::Pack,
  6. solana_program_test::{tokio, ProgramTest},
  7. solana_pubkey::Pubkey,
  8. solana_signer::Signer,
  9. solana_system_interface::instruction::create_account,
  10. solana_transaction::Transaction,
  11. spl_token::state::Multisig,
  12. };
  13. #[tokio::test]
  14. async fn initialize_multisig2() {
  15. let context = ProgramTest::new("pinocchio_token_program", TOKEN_PROGRAM_ID, None)
  16. .start_with_context()
  17. .await;
  18. // Given an account
  19. let multisig = Keypair::new();
  20. let signer1 = Pubkey::new_unique();
  21. let signer2 = Pubkey::new_unique();
  22. let signer3 = Pubkey::new_unique();
  23. let signers = vec![&signer1, &signer2, &signer3];
  24. let rent = context.banks_client.get_rent().await.unwrap();
  25. let initialize_ix = spl_token::instruction::initialize_multisig2(
  26. &spl_token::ID,
  27. &multisig.pubkey(),
  28. &signers,
  29. 2,
  30. )
  31. .unwrap();
  32. // When a new multisig account is created and initialized.
  33. let instructions = vec![
  34. create_account(
  35. &context.payer.pubkey(),
  36. &multisig.pubkey(),
  37. rent.minimum_balance(Multisig::LEN),
  38. Multisig::LEN as u64,
  39. &TOKEN_PROGRAM_ID,
  40. ),
  41. initialize_ix,
  42. ];
  43. let tx = Transaction::new_signed_with_payer(
  44. &instructions,
  45. Some(&context.payer.pubkey()),
  46. &[&context.payer, &multisig],
  47. context.last_blockhash,
  48. );
  49. context.banks_client.process_transaction(tx).await.unwrap();
  50. // Then the multisig has the correct data.
  51. let account = context
  52. .banks_client
  53. .get_account(multisig.pubkey())
  54. .await
  55. .unwrap();
  56. assert!(account.is_some());
  57. let account = account.unwrap();
  58. let multisig = spl_token::state::Multisig::unpack(&account.data).unwrap();
  59. assert!(multisig.is_initialized);
  60. assert_eq!(multisig.n, 3);
  61. assert_eq!(multisig.m, 2);
  62. }