Core Contracts

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

Performance share is not distributed

Summary

When the admin distributes revenue, 20% of the revenue share is not used for anything.

Vulnerability Details

The admin can make a call to distributeRevenue() in the GaugeController to "distribute revenue between veTokens holders and gauges".

The issue is that once the performanceShare is calculated, nothing is done with it:

function distributeRevenue(
GaugeType gaugeType,
uint256 amount
) external onlyRole(EMERGENCY_ADMIN) whenNotPaused {
if (amount == 0) revert InvalidAmount();
uint256 veRAACShare = amount * 80 / 100; // 80% to veRAAC holders
@> uint256 performanceShare = amount * 20 / 100; // 20% performance fee
revenueShares[gaugeType] += veRAACShare;
_distributeToGauges(gaugeType, veRAACShare);
emit RevenueDistributed(gaugeType, amount, veRAACShare, performanceShare);
}

The veRAACShare is calculated and distributed to gauges but no call to distribute the 20% performance share is made.

If, for example, an initial amount of 100 tokens is sitting in the contract and the call to distribute revenue is made, 80 tokens will be distributed to gauges but the remaining 20 will continue to sit in the contract. On the next call to distribute revenue, these 20 tokens will be counted in the new revenue to distribute and a portion of them will again be allocated to the veRAACShare and so on, further diluting them.

In any case, even if the admin makes every subsequent call excluding the performance share token in order to not dilute them, they are still sitting in the contract doing nothing and not being distributed.

Impact

Performance share is rendered useless since nothing is done with it after calculation and it is not distributed like the veRAACShare.

Tools Used

Manual Review

Recommendations

Distribute the performanceShare as well.

Updates

Lead Judging Commences

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

GaugeController.distributeRevenue calculates 20% performance fee but never transfers or allocates it to any recipient, causing loss of funds

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

GaugeController.distributeRevenue calculates 20% performance fee but never transfers or allocates it to any recipient, causing loss of funds

Support

FAQs

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

Give us feedback!