use anchor_lang::prelude::*; use anchor_spl::{associated_token::AssociatedToken, token_interface::{TokenAccount, TokenInterface}}; use crate::*; pub fn create(ctx: Context, id:u64, game_id:String, entry_ticket_count:u64, max_attempt_count:u64) -> Result<()> { let ticket_leaderboard_list = &mut ctx.accounts.ticket_leaderboard_list; let ticket_leaderboard = &mut ctx.accounts.ticket_leaderboard; ticket_leaderboard.id = id; ticket_leaderboard.players = vec![]; ticket_leaderboard.game_id = game_id; ticket_leaderboard.is_over = false; ticket_leaderboard.entry_ticket_count = entry_ticket_count; ticket_leaderboard.max_attempts = max_attempt_count; ticket_leaderboard_list.leaderboards.push(ticket_leaderboard.key()); msg!("Leaderboard created!"); Ok(()) } #[derive(Accounts)] #[instruction(id:u64)] pub struct CreateLeaderboard<'info>{ #[account(mut)] pub payer: Signer<'info>, #[account( mut, seeds = [TICKET_LEADERBOARD_LIST_SEED], bump )] pub ticket_leaderboard_list: Account<'info, TicketLeaderboardList>, #[account( init, payer = payer, space = 8 + TicketLeaderboard::INIT_SPACE, seeds = [TICKET_LEADERBOARD_SEED, id.to_le_bytes().as_ref()], bump )] pub ticket_leaderboard: Account<'info, TicketLeaderboard>, #[account( init, payer = payer, associated_token::mint = token_mint, associated_token::authority = ticket_leaderboard, associated_token::token_program = token_program )] pub token_vault: InterfaceAccount<'info, TokenAccount>, pub token_mint: InterfaceAccount<'info, anchor_spl::token_interface::Mint>, pub system_program: Program<'info, System>, pub token_program: Interface<'info, TokenInterface>, pub associated_token_program: Program<'info, AssociatedToken>, }