#46639 [SC-Low] The `_settlement_fee_payments` function contains a calculation error that leads to abnormal user balances.
Description
Brief/Intro
Vulnerability Details
fn _settlement_fee_payments(
ref self: ContractState,
account: ContractAddress,
account_state: @AccountState,
pending_token_balance: i128,
token_balance_address: ContractAddress,
trade_size: i128,
trade_price: i128,
settlement_token_price: NonZero<i128>,
asset: @PerpetualMarketAsset,
) -> i128 {
let fee_account = self.getFeeAccount();
let base_fee = asset
.calculate_fee(
*account_state.asset_data,
trade_size,
trade_price,
false,
account_state.fee_rates,
);
let (fee, referrer, fee_commission) = account_state
.get_trade_fee_and_referral_commission(base_fee);
let balance_after_fee = pending_token_balance - fee;
self
.token
.write_asset_balance(account, token_balance_address, balance_after_fee.into());Impact Details
References
Proof of Concept
Proof of Concept
Previous#46570 [SC-Insight] account list DoS issueNext#46675 [SC-Insight] Insufficient Time Validation in function settle_trade_v2
Was this helpful?