Core Contracts

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

Users Receive Less Rewards Due To Miscalculations

Summary

The incorrect staking logic lead to the incorrect distribution

Vulnerability Details

  • User1 deposit early (T80-T84) when the rate is higher (1.2e27 for some period).

  • User2 stakes later (T83-T84) when the rate is lower (1.1 for some period).

  • The contract does not properly account for these changes, leading to User1 receiving fewer rewards than expected and User2 receiving more.

(totalRewards * userDeposit) / totalDeposits

  • Alice scenario

(100e18 * 50e18) / 110e18 = 45e18

(100e18 * 60e18) / 110e18 = 54e18

0.13 per 13 sec

((0.13 * 5) * 50) / 110 = 0.29 → receive Alice for 5 blocks if she stakes 50 tokens

((0.16 * 5) * 50) / 110 = 0.36 → receive Alice for 5 other blocks, with higher emission rate if she stakes 50 tokens

At the end of B90 she entitles for 0.65 reward tokens

((0.16 * 2) * 60) / 110 = 0.17 → receive Bob for 2 blocks if he stakes 60 tokens

At the end of B90 he entitles for 0.17 reward tokens

  • totalRewards = 0.82

(0.82 * 50) / 110 = 0.37 → rewards receive alice upon withdrawing

(0.82 * 60) / 110 = 0.44 → rewards receive bob upon withdrawing

Block.timestamp 80 81 82 83 84
Alice Alice Alice Alice Alice
Bob Bob
Bob Bob
Bob Bob
  • 131944444444444444 (0.13e18) is basic emission rate upon contract deployment

  • 231944444444444444 (0.23e18) is updated *PoC rate after some time.

  1. Receive Alice for 2 blocks if she stakes 50e18 tokens with basic emission rate (80-82)

((131944444444444444 * 3) * 50e18) / 50e18 = 395833333333333332 (0.39e18)

  1. Bob deposit 60e18 tokens more, the rate has updated. Now, from (83-84) Alice receive:

((231944444444444444 * 2) * 50e18) / 110e18 = 210858585858585858 (0.21e18)

  1. Receive Bib for 2 blocks (83-84) if she stakes 60e18 tokens with updated emission rate

((231944444444444444 * 2) * 60e18) / 110e18 = 253030303030303029 (0.25e18)

totalRewards minted

  1. 131944444444444444 * 3 = 395833333333333332

  2. 231944444444444444 * 2 = 463888888888888888

= 859722222222222220 → 0.85e18

Upon final claiming, both Alice and Bob will receive

Alice

(859722222222222220 * 50e18) / 110e18 = 390782828282828281 (0.39e18)

Bob

(468939393939393939 * 60e18) / 60e18 = 468939393939393939 (0.46e18)

Impact

Funds loss for user

Tools Used

Manual reviwe

Recommendations

Implement correct staking logic

Updates

Lead Judging Commences

inallhonesty Lead Judge 10 months ago
Submission Judgement Published
Validated
Assigned finding tags:

StabilityPool::calculateRaacRewards is vulnerable to just in time deposits

Support

FAQs

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

Give us feedback!