diff --git a/programs/bets/src/instructions/clear_bets_list.rs b/programs/bets/src/instructions/clear_bets_list.rs new file mode 100644 index 0000000..033c74a --- /dev/null +++ b/programs/bets/src/instructions/clear_bets_list.rs @@ -0,0 +1,22 @@ +use anchor_lang::prelude::*; +use crate::*; + +pub fn clear(ctx: Context) -> Result<()> { + let bets_list = &mut ctx.accounts.bets_list; + bets_list.bets.clear(); + msg!("Cleared all bets from the list!"); + Ok(()) +} + +#[derive(Accounts)] +pub struct ClearBetsList<'info> { + #[account( + mut, + seeds = [b"bets_list"], + bump + )] + pub bets_list: Account<'info, BetsList>, + + #[account(mut)] + pub payer: Signer<'info>, +} \ No newline at end of file diff --git a/programs/bets/src/instructions/close_bet.rs b/programs/bets/src/instructions/close_bet.rs index 7d2831a..a8144c1 100644 --- a/programs/bets/src/instructions/close_bet.rs +++ b/programs/bets/src/instructions/close_bet.rs @@ -7,6 +7,10 @@ pub fn close(ctx: Context, winner:Pubkey, userid:String)->Result<()>{ bet_vault.owner == winner || bet_vault.joiner == winner || bet_vault.owner_id == userid || bet_vault.joiner_id == userid, BettingError::InvalidWinner ); + + let bets_list = &mut ctx.accounts.bets_list; + // Remove the bet_vault public key from the list + bets_list.bets.retain(|&bet| bet != bet_vault.key()); Ok(()) } @@ -17,7 +21,7 @@ pub struct CloseBet<'info>{ #[account(mut)] pub bets_list: Account<'info, BetsList>, - #[account(mut)] + #[account(mut, close=winner)] pub bet_vault: Account<'info, BetVault>, #[account(mut)] diff --git a/programs/bets/src/instructions/mod.rs b/programs/bets/src/instructions/mod.rs index de6b233..70239d0 100644 --- a/programs/bets/src/instructions/mod.rs +++ b/programs/bets/src/instructions/mod.rs @@ -29,4 +29,7 @@ pub mod deduct_fees_token; pub use deduct_fees_token::*; pub mod shared; -pub use shared::*; \ No newline at end of file +pub use shared::*; + +pub mod clear_bets_list; +pub use clear_bets_list::*; diff --git a/programs/bets/src/lib.rs b/programs/bets/src/lib.rs index 08428e9..1409b78 100644 --- a/programs/bets/src/lib.rs +++ b/programs/bets/src/lib.rs @@ -55,4 +55,7 @@ pub mod bets { pub fn close_bet_token(ctx:Context, winner:Pubkey, userid:String)->Result<()>{ close_bet_token::close_token_bet(ctx, winner, userid) } + pub fn clear_bets_list(ctx: Context) -> Result<()> { + clear_bets_list::clear(ctx) + } }