interest_bearing_mint.rs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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 interest_bearing_mint_initialize<'info>(
  6. ctx: CpiContext<'_, '_, '_, 'info, InterestBearingMintInitialize<'info>>,
  7. rate_authority: Option<Pubkey>,
  8. rate: i16,
  9. ) -> Result<()> {
  10. let ix = spl_token_2022::extension::interest_bearing_mint::instruction::initialize(
  11. ctx.accounts.token_program_id.key,
  12. ctx.accounts.mint.key,
  13. rate_authority,
  14. rate,
  15. )?;
  16. anchor_lang::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 InterestBearingMintInitialize<'info> {
  25. pub token_program_id: AccountInfo<'info>,
  26. pub mint: AccountInfo<'info>,
  27. }
  28. pub fn interest_bearing_mint_update_rate<'info>(
  29. ctx: CpiContext<'_, '_, '_, 'info, InterestBearingMintUpdateRate<'info>>,
  30. rate: i16,
  31. ) -> Result<()> {
  32. let ix = spl_token_2022::extension::interest_bearing_mint::instruction::update_rate(
  33. ctx.accounts.token_program_id.key,
  34. ctx.accounts.mint.key,
  35. ctx.accounts.rate_authority.key,
  36. &[],
  37. rate,
  38. )?;
  39. anchor_lang::solana_program::program::invoke_signed(
  40. &ix,
  41. &[
  42. ctx.accounts.token_program_id,
  43. ctx.accounts.mint,
  44. ctx.accounts.rate_authority,
  45. ],
  46. ctx.signer_seeds,
  47. )
  48. .map_err(Into::into)
  49. }
  50. #[derive(Accounts)]
  51. pub struct InterestBearingMintUpdateRate<'info> {
  52. pub token_program_id: AccountInfo<'info>,
  53. pub mint: AccountInfo<'info>,
  54. pub rate_authority: AccountInfo<'info>,
  55. }