use anchor_lang::prelude::*;
use anchor_spl::token::{self, TokenAccount, Transfer};
declare_id!("J3F2GzkNpsGCWxviob5j1B3LUk2juDimdb1ocWtsKMmm");
#[program]
pub mod license_store {
use super::*;
pub fn buy_license(ctx: Context<BuyLicense>,amount :u64) -> Result<()> {
let cpi_accounts = Transfer {
from: ctx.accounts.payer_account.to_account_info().clone(),
to: ctx.accounts.treasury_account.to_account_info().clone(),
authority: ctx.accounts.owner.to_account_info().clone(),
};
let cpi_program = ctx.accounts.token_program.clone();
let cpi_ctx = CpiContext::new(cpi_program.to_account_info(), cpi_accounts);
token::transfer(cpi_ctx, amount * 1000000u64)?;
Ok(())
}
}
#[derive(Accounts)]
pub struct BuyLicense<'info> {
#[account(signer)]
pub owner: AccountInfo<'info>,
#[account(mut)]
pub treasury_account: Account<'info, TokenAccount>,
#[account(mut, has_one = owner, "treasury_account.mint == payer_account.mint")]
pub payer_account: Account<'info, TokenAccount>,
pub token_program: AccountInfo<'info>,
}