group_pointer.rs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. use anchor_lang::solana_program::account_info::AccountInfo;
  2. use anchor_lang::solana_program::pubkey::Pubkey;
  3. use anchor_lang::Result;
  4. use anchor_lang::{context::CpiContext, Accounts};
  5. pub fn group_pointer_initialize<'info>(
  6. ctx: CpiContext<'_, '_, '_, 'info, GroupPointerInitialize<'info>>,
  7. authority: Option<Pubkey>,
  8. group_address: Option<Pubkey>,
  9. ) -> Result<()> {
  10. let ix = spl_token_2022::extension::group_pointer::instruction::initialize(
  11. ctx.accounts.token_program_id.key,
  12. ctx.accounts.mint.key,
  13. authority,
  14. group_address,
  15. )?;
  16. solana_program::program::invoke_signed(
  17. &ix,
  18. &[ctx.accounts.token_program_id, ctx.accounts.mint],
  19. ctx.signer_seeds,
  20. )
  21. .map_err(Into::into)
  22. }
  23. #[derive(Accounts)]
  24. pub struct GroupPointerInitialize<'info> {
  25. pub token_program_id: AccountInfo<'info>,
  26. pub mint: AccountInfo<'info>,
  27. }
  28. pub fn group_pointer_update<'info>(
  29. ctx: CpiContext<'_, '_, '_, 'info, GroupPointerUpdate<'info>>,
  30. group_address: Option<Pubkey>,
  31. ) -> Result<()> {
  32. let ix = spl_token_2022::extension::group_pointer::instruction::update(
  33. ctx.accounts.token_program_id.key,
  34. ctx.accounts.mint.key,
  35. ctx.accounts.authority.key,
  36. &[&ctx.accounts.authority.key],
  37. group_address,
  38. )?;
  39. solana_program::program::invoke_signed(
  40. &ix,
  41. &[ctx.accounts.token_program_id, ctx.accounts.mint],
  42. ctx.signer_seeds,
  43. )
  44. .map_err(Into::into)
  45. }
  46. #[derive(Accounts)]
  47. pub struct GroupPointerUpdate<'info> {
  48. pub token_program_id: AccountInfo<'info>,
  49. pub mint: AccountInfo<'info>,
  50. pub authority: AccountInfo<'info>,
  51. }