LicenseStore 0.1.0

Created with Anchor
Documentation
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> {
    ///CHECK
    #[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>,
    ///CHECK
    pub token_program: AccountInfo<'info>,

}