leaderboard complete
This commit is contained in:
parent
60b0ed6641
commit
1939acaf45
|
|
@ -23,15 +23,23 @@ 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
|
||||||
|
|
|
||||||
|
|
@ -48,3 +48,6 @@ 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::*;
|
||||||
38
programs/bets/src/instructions/remove_leaderboard.rs
Normal file
38
programs/bets/src/instructions/remove_leaderboard.rs
Normal 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>,
|
||||||
|
}
|
||||||
|
|
@ -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>,
|
||||||
|
|
|
||||||
|
|
@ -79,5 +79,9 @@ pub mod bets {
|
||||||
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)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user