ticket count and attempts

This commit is contained in:
Sewmina Dilshan 2025-07-30 12:52:14 +05:30
parent 20184fdc48
commit 364b01c2d3
4 changed files with 9 additions and 4 deletions

View File

@ -2,7 +2,7 @@ use anchor_lang::prelude::*;
use anchor_spl::{associated_token::AssociatedToken, token_interface::{TokenAccount, TokenInterface}}; use anchor_spl::{associated_token::AssociatedToken, token_interface::{TokenAccount, TokenInterface}};
use crate::*; use crate::*;
pub fn create(ctx: Context<CreateLeaderboard>, id:u64, game_id:String) -> Result<()> { pub fn create(ctx: Context<CreateLeaderboard>, id:u64, game_id:String, entry_ticket_count:u64, max_attempt_count:u64) -> Result<()> {
let ticket_leaderboard_list = &mut ctx.accounts.ticket_leaderboard_list; let ticket_leaderboard_list = &mut ctx.accounts.ticket_leaderboard_list;
let ticket_leaderboard = &mut ctx.accounts.ticket_leaderboard; let ticket_leaderboard = &mut ctx.accounts.ticket_leaderboard;
@ -10,6 +10,8 @@ pub fn create(ctx: Context<CreateLeaderboard>, id:u64, game_id:String) -> Result
ticket_leaderboard.players = vec![]; ticket_leaderboard.players = vec![];
ticket_leaderboard.game_id = game_id; ticket_leaderboard.game_id = game_id;
ticket_leaderboard.is_over = false; ticket_leaderboard.is_over = false;
ticket_leaderboard.entry_ticket_count = entry_ticket_count;
ticket_leaderboard.max_attempts = max_attempt_count;
ticket_leaderboard_list.leaderboards.push(ticket_leaderboard.key()); ticket_leaderboard_list.leaderboards.push(ticket_leaderboard.key());
msg!("Leaderboard created!"); msg!("Leaderboard created!");

View File

@ -5,9 +5,10 @@ use crate::*;
pub fn enter(ctx: Context<EnterLeaderboard>, id:u64, uid:String) -> Result<()> { pub fn enter(ctx: Context<EnterLeaderboard>, id:u64, uid:String) -> Result<()> {
let payer = &ctx.accounts.payer; let payer = &ctx.accounts.payer;
let receipt = &mut ctx.accounts.receipt_account; let receipt = &mut ctx.accounts.receipt_account;
let leaderboard = &ctx.accounts.ticket_leaderboard;
// Transfer 1 token from user's vault to leaderboard vault // Transfer 1 token from user's vault to leaderboard vault
let transfer_amount = 1u64; let transfer_amount = 1u64 * leaderboard.entry_ticket_count;
let cpi_program = ctx.accounts.token_program.to_account_info(); let cpi_program = ctx.accounts.token_program.to_account_info();
let cpi_accounts = anchor_spl::token_interface::TransferChecked { let cpi_accounts = anchor_spl::token_interface::TransferChecked {

View File

@ -63,8 +63,8 @@ pub mod bets {
init_leaderboard_list::init(ctx) init_leaderboard_list::init(ctx)
} }
pub fn create_leaderboard(ctx:Context<CreateLeaderboard>, id:u64, game_id:String)->Result<()>{ pub fn create_leaderboard(ctx:Context<CreateLeaderboard>, id:u64, game_id:String, entry_ticket_count:u64, max_attempt_count:u64)->Result<()>{
create_leaderboard::create(ctx, id, game_id) create_leaderboard::create(ctx, id, game_id, entry_ticket_count, max_attempt_count)
} }
pub fn update_leaderboard(ctx:Context<UpdateLeaderboard>, id:u64, player:Pubkey, new_score:u64)->Result<()>{ pub fn update_leaderboard(ctx:Context<UpdateLeaderboard>, id:u64, player:Pubkey, new_score:u64)->Result<()>{

View File

@ -9,5 +9,7 @@ pub struct TicketLeaderboard{
pub game_id: String, pub game_id: String,
#[max_len(150)] #[max_len(150)]
pub players: Vec<Pubkey>, pub players: Vec<Pubkey>,
pub entry_ticket_count: u64,
pub max_attempts: u64,
pub is_over: bool, pub is_over: bool,
} }