The userCollateralFee in the DeliveryPlace::closeBidTaker function is calculated using an incorrect formula, leading to potential inaccuracies in the reimbursement amount for unsettled points.
The userCollateralFee is incorrectly calculated due to an incorrect formula used in DeliveryPlace::closeBidTaker. There is a contradiction between how collateralFee is calculated versus how usedPoints is calculated.
userRemainingPoints: Represents the unsettled points by the Ask Maker. It is correctly calculated as: userRemainingPoints == listOfferInfo.points - listOfferInfo.usedPoints.
collateralFee: Represents the total deposit made by the Maker when they created their offer. You can collateralFee in DeliveryPlace::closeBidTaker and transferAmount in PreMarket::createOffer
The problematic calculation is as follows:
When this formula is reversed, the following relationship is implied:
userCollateralFee corresponds to userRemainingPoints (correct).
collateralFee corresponds to usedPoints (incorrect; it should correspond to points).
Given the definitions of userRemainingPoints and collateralFee, it is evident that the formula is incorrect because collateralFee should be matched with offerInfo.points, which represents the total points in the Maker's offer corresponding to their total deposit (collateralFee).
The protocol reimburses the Bid Taker an incorrect amount when they call for a refund of their unsettled points, potentially leading to financial discrepancies.
Manual analysis.
Fix the formula by using the correct variable. Replace offerInfo.usedPoints with offerInfo.points when calculating userCollateralFee:
Valid High, afaik, partial settlements are a valid flow and so when closing bid offers by takers and/or when settling offers by makers, we should return a proportionate amount of funds based on points settled. This issues could be related to issue #1008, but seems to be describing a different issue.
Valid high, in settleAskTaker/settleAskMaker, if the original offer maker performs a partial final settlement, the existing checks [here](https://github.com/Cyfrin/2024-08-tadle/blob/main/src/core/DeliveryPlace.sol#L356-L358) and [here](https://github.com/Cyfrin/2024-08-tadle/blob/04fd8634701697184a3f3a5558b41c109866e5f8/src/core/DeliveryPlace.sol#L230-L232) will cause an revert when attempting to complete a full settlement, resulting in their collateral being locked and requiring a rescue from the admin. To note, although examples in the documentation implies settlement in a single click, it is not stated that partial settlements are not allowed, so I believe it is a valid user flow.
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.