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.