use anchor_lang::prelude::*; use anchor_spl::{associated_token::AssociatedToken, token_interface::{TokenAccount, TokenInterface}}; use crate::*; pub fn create_leaderboard(ctx: Context, _id:u64) -> Result<()> { let ticket_leaderboard_list = &mut ctx.accounts.ticket_leaderboard_list; let ticket_leaderboard = &mut ctx.accounts.ticket_leaderboard; ticket_leaderboard.players = vec![]; 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 = [b"ticket_leaderboard_list"], bump )] pub ticket_leaderboard_list: Account<'info, TicketLeaderboardList>, #[account( init, payer = payer, space = 8 + TicketLeaderboard::INIT_SPACE, seeds = [b"ticket_leaderboard", 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>, }