duelfi_bets_anchor/programs/bets/src/instructions/create_leaderboard.rs
2025-07-25 07:42:45 +05:30

53 lines
1.6 KiB
Rust

use anchor_lang::prelude::*;
use anchor_spl::{associated_token::AssociatedToken, token_interface::{TokenAccount, TokenInterface}};
use crate::*;
pub fn create_leaderboard(ctx: Context<CreateLeaderboard>, _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>,
}