1

use anchor_lang::prelude::*; use anchor_spl::token::{self, Mint, Token, TokenAccount, Transfer, MintTo};

declare_id!("GTPh1tdHiMWVj3yBj2S2ZZftuLPEWPyQZ6Cy7g5ibM5K");

#[program] pub mod puj { use super::*;

pub fn initialize(ctx: Context<Initialize>, name: String, symbol: String, metadata_url: String) -> Result<()> {
    let user_info = &mut ctx.accounts.user_info;
    user_info.amount = 0;

    let cpi_accounts = token::CreateToken {
        payer: ctx.accounts.user.to_account_info(),
        mint: ctx.accounts.mint.to_account_info(),
        authority: ctx.accounts.user.to_account_info(),
        rent: ctx.accounts.rent.to_account_info(),
        system_program: ctx.accounts.system_program.to_account_info(),
    };
    
    let cpi_program = ctx.accounts.token_program.to_account_info();
    let cpi_ctx = CpiContext::new(cpi_program, cpi_accounts);
    token::create_token(cpi_ctx)?;

    let cpi_accounts = token::SetMetadata {
        mint: ctx.accounts.mint.to_account_info(),
        authority: ctx.accounts.user.to_account_info(),
        metadata: token::TokenMetadata {
            name,
            symbol,
            uri: metadata_url,
            seller_fee_basis_points: 0,
            creators: None,
        },
    };
    let cpi_ctx = CpiContext::new(cpi_program, cpi_accounts);
    token::set_metadata(cpi_ctx)?;

    Ok(())
}

pub fn deposit(ctx: Context<Deposit>, amount: u64) -> Result<()> {
    let cpi_accounts = Transfer {
        from: ctx.accounts.from.to_account_info(),
        to: ctx.accounts.to.to_account_info(),
        authority: ctx.accounts.user.to_account_info(),
    };
    let cpi_program = ctx.accounts.token_program.to_account_info();
    let cpi_ctx = CpiContext::new(cpi_program, cpi_accounts);
    token::transfer(cpi_ctx, amount)?;

    let mut user_info = ctx.accounts.user_info.load_mut()?;
    user_info.amount += amount;

    Ok(())
}

pub fn claim(ctx: Context<Claim>, amount: u64) -> Result<()> {
    let user_info = ctx.accounts.user_info.load()?;

    if user_info.amount < amount {
        return Err(ErrorCode::InsufficientFunds.into());
    }

    let seeds = &[ctx.accounts.mint.to_account_info().key.as_ref(), &[ctx.accounts.mint.bump]];
    let signer = &[&seeds[..]];

    let cpi_accounts = MintTo {
        mint: ctx.accounts.mint.to_account_info(),
        to: ctx.accounts.to.to_account_info(),
        authority: ctx.accounts.mint_authority.to_account_info(),
    };
    let cpi_program = ctx.accounts.token_program.to_account_info();
    let cpi_ctx = CpiContext::new_with_signer(cpi_program, cpi_accounts, signer);
    token::mint_to(cpi_ctx, amount)?;

    Ok(())
}

}

#[derive(Accounts)] pub struct Initialize<'info> { #[account(init, payer = user, space = 8 + Mint::LEN)] pub mint: Account<'info, Mint>, #[account(mut)] pub user: Signer<'info>, pub rent: Sysvar<'info, Rent>, pub token_program: Program<'info, Token>, pub system_program: Program<'info, System>, #[account(init, payer = user, space = 8 + 8)] pub user_info: AccountLoader<'info, UserInfo>, }

#[derive(Accounts)] pub struct Deposit<'info> { #[account(mut)] pub from: Account<'info, TokenAccount>, #[account(mut)] pub to: Account<'info, TokenAccount>, pub user: Signer<'info>, pub token_program: Program<'info, Token>, #[account(mut)] pub user_info: AccountLoader<'info, UserInfo>, }

#[derive(Accounts)] pub struct Claim<'info> { #[account(mut)] pub mint: Account<'info, Mint>, #[account(mut)] pub to: Account<'info, TokenAccount>, #[account(mut)] pub user_info: AccountLoader<'info, UserInfo>, pub token_program: Program<'info, Token>, pub mint_authority: AccountInfo<'info>, }

#[account] pub struct UserInfo { pub amount: u64, }

#[error_code] pub enum ErrorCode { #[msg("Insufficient funds for claim.")] InsufficientFunds, }

good evening, I have a rust project to create a solana contract and I have not been able to resolve this error, can someone help me please? marcela@DESKTOP-NOEFO9H:~/video/my_tokenSolana$ anchor build error: package solana-program v1.18.16 cannot be built because it requires rustc 1.75.0 or newer, while the currently active rustc version is 1.68.0-dev Either upgrade to rustc 1.75.0 or newer, or use cargo update -p [email protected] --precise ver where ver is the latest version of solana-program supporting rustc 1.68.0-dev I have these versions active marcela@DESKTOP-NOEFO9H:~/video/my_tokenSolana$ cargo --version cargo 1.79.0 (ffa9cf99a 2024-06-03) marcela@DESKTOP-NOEFO9H:~/video/my_tokenSolana$ rustc --version rustc 1.79.0 (129f3b996 2024-06-10) marcela@DESKTOP-NOEFO9H:~/video/my_tokenSolana$ anchor --version anchor-cli 0.30.0 show me this. marcela@DESKTOP-NOEFO9H:~/video/my_tokenSolana$ rustup toolchain list stable-x86_64-unknown-linux-gnu (default) (override) solana, and respect to toml_edit error show me this marcela@DESKTOP-NOEFO9H:~/video/my_tokenSolana$ cargo update -p [email protected] error: package ID specification [email protected] did not match any packages Did you mean one of these?

[email protected] [email protected] and i sont know how to resolve

1
  • Welcom to the Solana Stackexchange! Right now your question is quite difficult to read and therefore answer. Please fix the formatting on this question using the "Edit" button.
    – McBain
    Commented Jun 16 at 11:16

1 Answer 1

1

Try using solana-program with the same version as the CLI:

solana --version
solana-cli 1.17.34 (src:b04a806c; feat:3746964731, client:SolanaLabs)

Update the Cargo.toml:

[dependencies]
solana-program = "=1.17.34"

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.