license_store/
lib.rs

1use anchor_lang::prelude::*;
2use anchor_spl::token::{self, TokenAccount, Transfer};
3
4declare_id!("J3F2GzkNpsGCWxviob5j1B3LUk2juDimdb1ocWtsKMmm");
5
6#[program]
7pub mod license_store {
8    use super::*;
9
10    pub fn buy_license(ctx: Context<BuyLicense>,amount :u64) -> Result<()> {
11
12        let cpi_accounts = Transfer {
13            from: ctx.accounts.payer_account.to_account_info().clone(),
14            to: ctx.accounts.treasury_account.to_account_info().clone(),
15            authority: ctx.accounts.owner.to_account_info().clone(),
16        };
17        let cpi_program = ctx.accounts.token_program.clone();
18        let cpi_ctx = CpiContext::new(cpi_program.to_account_info(), cpi_accounts);
19        token::transfer(cpi_ctx, amount * 1000000u64)?; 
20        Ok(())
21    }
22}
23
24#[derive(Accounts)]
25pub struct BuyLicense<'info> {
26    ///CHECK
27    #[account(signer)]
28    pub owner: AccountInfo<'info>,
29    #[account(mut)]
30    pub treasury_account: Account<'info, TokenAccount>,
31    #[account(mut, has_one = owner, "treasury_account.mint == payer_account.mint")]
32    pub payer_account: Account<'info, TokenAccount>,
33    ///CHECK
34    pub token_program: AccountInfo<'info>,
35
36}