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 // Transfer tokens from leaderboard vault to user vault
let cpi_program: AccountInfo<'_> = ctx.accounts.token_program.to_account_info(); let cpi_program = ctx.accounts.token_program.to_account_info();
let cpi_accounts = TransferChecked { let cpi_accounts = TransferChecked {
from: ctx.accounts.ticket_leaderboard_list_vault.to_account_info(), from: ctx.accounts.ticket_leaderboard_list_vault.to_account_info(),
to: ctx.accounts.user_token_vault.to_account_info(), to: ctx.accounts.user_token_vault.to_account_info(),
authority: ctx.accounts.ticket_leaderboard_list.to_account_info(), authority: ctx.accounts.ticket_leaderboard_list.to_account_info(),
mint: ctx.accounts.token_mint.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(()) Ok(())
} }
@ -51,13 +59,14 @@ pub struct BuyTickets<'info>{
#[account( #[account(
mut, mut,
seeds = [b"ticket_leaderboard_list"], seeds = [b"ticket_leaderboards_list"],
bump bump
)] )]
pub ticket_leaderboard_list: Account<'info, TicketLeaderboardList>, pub ticket_leaderboard_list: Account<'info, TicketLeaderboardList>,
#[account( #[account(
mut, init_if_needed,
payer=payer,
associated_token::mint = token_mint, associated_token::mint = token_mint,
associated_token::authority = ticket_leaderboard_list, associated_token::authority = ticket_leaderboard_list,
associated_token::token_program = token_program associated_token::token_program = token_program
@ -65,7 +74,8 @@ pub struct BuyTickets<'info>{
pub ticket_leaderboard_list_vault: InterfaceAccount<'info, TokenAccount>, pub ticket_leaderboard_list_vault: InterfaceAccount<'info, TokenAccount>,
#[account( #[account(
mut, init_if_needed,
payer = payer,
associated_token::mint = token_mint, associated_token::mint = token_mint,
associated_token::authority = payer, associated_token::authority = payer,
associated_token::token_program = token_program associated_token::token_program = token_program

View File

@ -47,4 +47,7 @@ pub mod buy_tickets;
pub use buy_tickets::*; pub use buy_tickets::*;
pub mod enter_leaderboard; pub mod enter_leaderboard;
pub use 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, init_if_needed,
payer= payer, payer= payer,
space = 8 + LeaderboardEntry::INIT_SPACE, 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 bump
)] )]
pub leaderboard_entry: Account<'info, LeaderboardEntry>, pub leaderboard_entry: Account<'info, LeaderboardEntry>,

View File

@ -78,6 +78,10 @@ pub mod bets {
pub fn enter_leaderboard(ctx:Context<EnterLeaderboard>, id:u64)->Result<()>{ pub fn enter_leaderboard(ctx:Context<EnterLeaderboard>, id:u64)->Result<()>{
enter_leaderboard::enter(ctx, id) enter_leaderboard::enter(ctx, id)
} }
pub fn remove_leaderboard(ctx:Context<RemoveLeaderboard>, id:u64)->Result<()>{
remove_leaderboard::remove(ctx, id)
}
} }