MorpheusAI

MorpheusAI
Foundry
22,500 USDC
View results
Submission Details
Severity: medium
Invalid

Divide before multiply

Summary

LinearDistributionIntervalDecrease.getPeriodReward(uint256,uint256,uint128,uint128,uint128,uint128) performs a multiplication on the result of a division:

50: uint256 intervalsPassed_ = timePassedBefore_ / interval_;
51: uint256 intervalFullReward_ = initialAmount_ - intervalsPassed_ * decreaseAmount_;

LinearDistributionIntervalDecrease._calculatePartPeriodReward(uint128,uint128,uint128,uint256,uint256,bool) performs a multiplication on the result of a division:

110: uint256 intervalsPassed_ = (startTime_ - payoutStart_) / interval_;
111: uint256 decreaseRewardAmount_ = intervalsPassed_ * decreaseAmount_;
121: intervalPart_ = startTime_ - interval_ * intervalsPassed_ - payoutStart_;

LinearDistributionIntervalDecrease._calculateFullPeriodReward(uint128,uint128,uint128,uint128,uint256,uint256) performs a multiplication on the result of a division:

153: uint256 ip_ = ((endTime_ - payoutStart_ - intervalsPassedBefore_ * interval_) / interval_);
158: return initialReward_ * ip_ - (decreaseAmount_ * (ip_ * (ip_ - 1))) / 2;

Vulnerability Details

Solidity's integer division truncates. Thus, performing division before multiplication can lead to precision loss.

Tools Used

VS code

Recommendations

Consider ordering multiplication before division.

Updates

Lead Judging Commences

inallhonesty Lead Judge
over 1 year ago
inallhonesty Lead Judge over 1 year ago
Submission Judgement Published
Invalidated
Reason: Lack of quality

Support

FAQs

Can't find an answer? Chat with us on Discord, Twitter or Linkedin.