53 lines
1.6 KiB
Rust
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>,
|
|
} |