Core Contracts

Regnum Aurum Acquisition Corp
HardhatReal World AssetsNFT
77,280 USDC
View results
Submission Details
Severity: medium
Invalid

Lock Duration Overwrite in participateInMarket

Summary

Incorrect lock duration handling could lead to unfair reward distribution or unintended lock extensions

Vulnerability Details

In the participateInMarket function, when users add to existing positions, the lock duration is completely reset without considering remaining time from previous locks.

if (position.exists) {
position.amount += amount;
position.lockEndTime = block.timestamp + market.lockDuration; // Problem line
}

Impact

  • Users can effectively reduce their total lock duration by making multiple deposits

  • The redeemFromMarket function uses this lockEndTime for reward eligibility

Proof of concept

  • Market lockDuration = 30 days

  • User deposits 100 tokens at T=0 ➔ lockEndTime = 30 days

  • At T=15 days, user deposits another 100 tokens

  • Current Behavior: lockEndTime becomes T+30 = 45 days total

  • Expected Behavior: Original 100 tokens should lock until T=30, new 100 tokens until T=45

Recommendations

if (position.exists) {
// Calculate weighted average lock duration
uint256 oldAmount = position.amount;
uint256 newLockEnd = ((position.lockEndTime * oldAmount) +
((block.timestamp + market.lockDuration) * amount)) /
(oldAmount + amount);
position.amount += amount;
position.lockEndTime = newLockEnd;
}
Updates

Lead Judging Commences

inallhonesty Lead Judge 7 months ago
Submission Judgement Published
Invalidated
Reason: Out of scope

Support

FAQs

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

Give us feedback!