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 #[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 pub token_program: AccountInfo<'info>,
35
36}