prod at token launch
This commit is contained in:
parent
8243e7c9de
commit
cf8ef365b2
1
bk2.json
Normal file
1
bk2.json
Normal file
|
|
@ -0,0 +1 @@
|
|||
[148,41,155,174,198,60,158,184,194,95,32,154,56,15,105,221,184,104,78,95,198,191,73,206,7,204,237,221,77,118,10,185,141,91,28,223,24,106,252,190,71,7,81,159,21,139,95,162,137,133,175,102,147,41,2,59,136,124,237,109,240,37,214,136]
|
||||
|
|
@ -17,6 +17,10 @@ pub enum BettingError {
|
|||
InvalidWinner,
|
||||
#[msg("Please use the correct fee collector address")]
|
||||
InvalidFeeCollector,
|
||||
#[msg("")]
|
||||
JoinerAccountNotProvided
|
||||
#[msg("Joiner account not provided")]
|
||||
JoinerAccountNotProvided,
|
||||
#[msg("Insufficient funds")]
|
||||
InsufficientFunds,
|
||||
#[msg("Fee calculation error")]
|
||||
FeeCalculationError,
|
||||
}
|
||||
|
|
@ -19,31 +19,47 @@ pub fn close(ctx: Context<CloseBet>, winner:Pubkey, userid:String)->Result<()>{
|
|||
|
||||
// Calculate the 5% fee
|
||||
let total_lamports = **bet_vault.to_account_info().lamports.borrow();
|
||||
let mut fee = total_lamports / 20; // 5%
|
||||
let referrer_fee = fee / 4; //50% for each referrer
|
||||
msg!("Total lamports: {}", total_lamports);
|
||||
|
||||
let fee = total_lamports / 40; // 2.5%
|
||||
let referrer_fee = total_lamports / 80; //1.25% for each referrer
|
||||
msg!("Fee: {}, Referrer fee: {}", fee, referrer_fee);
|
||||
msg!("Total to be sent: {}", fee + referrer_fee + referrer_fee);
|
||||
|
||||
// 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;
|
||||
}
|
||||
// Verify we have enough funds for all transfers
|
||||
let total_transfer = fee.checked_add(referrer_fee)
|
||||
.and_then(|sum| sum.checked_add(referrer_fee))
|
||||
.ok_or(BettingError::InsufficientFunds)?;
|
||||
|
||||
require!(
|
||||
total_transfer <= total_lamports,
|
||||
BettingError::InsufficientFunds
|
||||
);
|
||||
|
||||
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;
|
||||
}
|
||||
// Transfer referrer fees
|
||||
**bet_vault.to_account_info().try_borrow_mut_lamports()? -= referrer_fee;
|
||||
**ctx.accounts.owner_referrer.try_borrow_mut_lamports()? += referrer_fee;
|
||||
msg!("After owner referrer transfer - Vault balance: {}", **bet_vault.to_account_info().lamports.borrow());
|
||||
|
||||
**bet_vault.to_account_info().try_borrow_mut_lamports()? -= referrer_fee;
|
||||
**ctx.accounts.joiner_referrer.try_borrow_mut_lamports()? += referrer_fee;
|
||||
msg!("After joiner referrer transfer - Vault balance: {}", **bet_vault.to_account_info().lamports.borrow());
|
||||
|
||||
**bet_vault.to_account_info().try_borrow_mut_lamports()? -= fee;
|
||||
**ctx.accounts.fee_wallet.to_account_info().try_borrow_mut_lamports()? += fee;
|
||||
msg!("After fee transfer - Vault balance: {}", **bet_vault.to_account_info().lamports.borrow());
|
||||
|
||||
// Transfer remaining balance to winner
|
||||
let remaining_balance = **bet_vault.to_account_info().lamports.borrow();
|
||||
**bet_vault.to_account_info().try_borrow_mut_lamports()? -= remaining_balance;
|
||||
**ctx.accounts.winner.try_borrow_mut_lamports()? += remaining_balance;
|
||||
msg!("After winner transfer - Vault balance: {}", **bet_vault.to_account_info().lamports.borrow());
|
||||
|
||||
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());
|
||||
|
||||
msg!("Bet {} closed by {}", bet_vault.key(), winner);
|
||||
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
|
@ -54,7 +70,7 @@ pub struct CloseBet<'info>{
|
|||
#[account(mut)]
|
||||
pub bets_list: Account<'info, BetsList>,
|
||||
|
||||
#[account(mut, close=winner)]
|
||||
#[account(mut)]
|
||||
pub bet_vault: Account<'info, BetVault>,
|
||||
|
||||
/// CHECK: This is validated against the FEE_COLLECTOR constant.
|
||||
|
|
@ -66,12 +82,13 @@ pub struct CloseBet<'info>{
|
|||
|
||||
#[account(mut)]
|
||||
pub payer: Signer<'info>,
|
||||
|
||||
/// CHECK: No constraints are applied to this account.
|
||||
#[account(mut)]
|
||||
pub owner_referrer: Option<AccountInfo<'info>>,
|
||||
pub owner_referrer: AccountInfo<'info>,
|
||||
|
||||
/// CHECK: No constraints are applied to this account.
|
||||
#[account(mut)]
|
||||
pub joiner_referrer: Option<AccountInfo<'info>>,
|
||||
pub joiner_referrer: AccountInfo<'info>,
|
||||
|
||||
pub system_program: Program<'info, System>
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user