leaderboard complete

This commit is contained in:
Sewmina 2025-07-29 08:36:45 +00:00
parent 60b0ed6641
commit 1939acaf45
5 changed files with 64 additions and 9 deletions

View File

@ -22,16 +22,24 @@ pub fn buy(ctx: Context<BuyTickets>, amount: u64) -> Result<()> {
],
)?;
//Transfer tokens from leaderboard vault to user vault
let cpi_program: AccountInfo<'_> = ctx.accounts.token_program.to_account_info();
// Transfer tokens from leaderboard vault to user vault
let cpi_program = ctx.accounts.token_program.to_account_info();
let cpi_accounts = TransferChecked {
from: ctx.accounts.ticket_leaderboard_list_vault.to_account_info(),
to: ctx.accounts.user_token_vault.to_account_info(),
authority: ctx.accounts.ticket_leaderboard_list.to_account_info(),
mint: ctx.accounts.token_mint.to_account_info(),
};
let cpi_ctx = CpiContext::new(cpi_program, cpi_accounts);
transfer_checked(cpi_ctx, amount, 9,)?;
let seeds = &[
b"ticket_leaderboards_list".as_ref(),
&[ctx.bumps.ticket_leaderboard_list][..]
];
let signer_seeds = &[&seeds[..]];
let cpi_ctx = CpiContext::new_with_signer(cpi_program, cpi_accounts, signer_seeds);
transfer_checked(cpi_ctx, amount, 9)?;
Ok(())
}
@ -51,13 +59,14 @@ pub struct BuyTickets<'info>{
#[account(
mut,
seeds = [b"ticket_leaderboard_list"],
seeds = [b"ticket_leaderboards_list"],
bump
)]
pub ticket_leaderboard_list: Account<'info, TicketLeaderboardList>,
#[account(
mut,
init_if_needed,
payer=payer,
associated_token::mint = token_mint,
associated_token::authority = ticket_leaderboard_list,
associated_token::token_program = token_program
@ -65,7 +74,8 @@ pub struct BuyTickets<'info>{
pub ticket_leaderboard_list_vault: InterfaceAccount<'info, TokenAccount>,
#[account(
mut,
init_if_needed,
payer = payer,
associated_token::mint = token_mint,
associated_token::authority = payer,
associated_token::token_program = token_program

View File

@ -48,3 +48,6 @@ pub use buy_tickets::*;
pub mod enter_leaderboard;
pub use enter_leaderboard::*;
pub mod remove_leaderboard;
pub use remove_leaderboard::*;

View File

@ -0,0 +1,38 @@
use anchor_lang::prelude::*;
use crate::*;
pub fn remove(ctx: Context<RemoveLeaderboard>, id:u64) -> Result<()> {
let ticket_leaderboard_list = &mut ctx.accounts.ticket_leaderboard_list;
let ticket_leaderboard = &mut ctx.accounts.ticket_leaderboard;
ticket_leaderboard_list.leaderboards.retain(|&leaderboard| leaderboard != ticket_leaderboard.key());
msg!("Successfully removed leaderboard with id: {}", id);
Ok(())
}
#[derive(Accounts)]
#[instruction(id:u64)]
pub struct RemoveLeaderboard<'info>{
#[account(mut)]
pub payer: Signer<'info>,
#[account(
mut,
seeds = [b"ticket_leaderboards_list"],
bump
)]
pub ticket_leaderboard_list: Account<'info, TicketLeaderboardList>,
#[account(
mut,
seeds = [b"ticket_leaderboard", id.to_le_bytes().as_ref()],
bump
)]
pub ticket_leaderboard: Account<'info, TicketLeaderboard>,
pub system_program: Program<'info, System>,
}

View File

@ -48,7 +48,7 @@ pub struct UpdateLeaderboard<'info>{
init_if_needed,
payer= payer,
space = 8 + LeaderboardEntry::INIT_SPACE,
seeds = [b"leaderboard_entry", ticket_leaderboard.key().as_ref(), payer.key().as_ref()],
seeds = [b"leaderboard_entry", ticket_leaderboard.key().as_ref(), player.as_ref()],
bump
)]
pub leaderboard_entry: Account<'info, LeaderboardEntry>,

View File

@ -79,5 +79,9 @@ pub mod bets {
enter_leaderboard::enter(ctx, id)
}
pub fn remove_leaderboard(ctx:Context<RemoveLeaderboard>, id:u64)->Result<()>{
remove_leaderboard::remove(ctx, id)
}
}