From 8243e7c9dee1d9b4ddfcedc9ea4287eb258dcee3 Mon Sep 17 00:00:00 2001 From: Sewmina Dilshan Date: Fri, 16 May 2025 08:46:24 +0530 Subject: [PATCH] referral --- programs/bets/src/instructions/close_bet.rs | 25 +++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/programs/bets/src/instructions/close_bet.rs b/programs/bets/src/instructions/close_bet.rs index fb9f5cd..e783aa9 100644 --- a/programs/bets/src/instructions/close_bet.rs +++ b/programs/bets/src/instructions/close_bet.rs @@ -10,7 +10,6 @@ pub fn close(ctx: Context, winner:Pubkey, userid:String)->Result<()>{ BettingError::InvalidWinner ); - // Check fee wallet is correct let fee_collector_pubkey = Pubkey::from_str(FEE_COLLECTOR).map_err(|_| BettingError::InvalidFeeCollector)?; require_keys_eq!( ctx.accounts.fee_wallet.key(), @@ -20,7 +19,22 @@ pub fn close(ctx: Context, winner:Pubkey, userid:String)->Result<()>{ // Calculate the 5% fee let total_lamports = **bet_vault.to_account_info().lamports.borrow(); - let fee = total_lamports / 20; // 5% + let mut fee = total_lamports / 20; // 5% + let referrer_fee = fee / 4; //50% for each referrer + + // In the close function: + if let Some(owner_ref) = &ctx.accounts.owner_referrer { + fee -= referrer_fee; + **bet_vault.to_account_info().try_borrow_mut_lamports()? -= referrer_fee; + **owner_ref.try_borrow_mut_lamports()? += referrer_fee; + } + + if let Some(joiner_ref) = &ctx.accounts.joiner_referrer { + fee -= referrer_fee; + **bet_vault.to_account_info().try_borrow_mut_lamports()? -= referrer_fee; + **joiner_ref.try_borrow_mut_lamports()? += referrer_fee; + } + **bet_vault.to_account_info().try_borrow_mut_lamports()? -= fee; **ctx.accounts.fee_wallet.to_account_info().try_borrow_mut_lamports()? += fee; @@ -52,5 +66,12 @@ pub struct CloseBet<'info>{ #[account(mut)] pub payer: Signer<'info>, + + #[account(mut)] + pub owner_referrer: Option>, + + #[account(mut)] + pub joiner_referrer: Option>, + pub system_program: Program<'info, System> } \ No newline at end of file