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