Core Contracts

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

No Checks for Fee Share Totals In `_initializeFeeTypes()`

Summary

The _initializeFeeTypes lacks validation to ensure fee shares sum to 10,000 bps, risking future allocation errors.

Vulnerability Details

function _initializeFeeTypes() internal {
// Protocol Fees: 80% to veRAAC holders, 20% to treasury
// @audit wrong bais points being used
feeTypes[0] = FeeType({
veRAACShare: 8000, // 80%
burnShare: 0,
repairShare: 0,
treasuryShare: 2000 // 20%
});
// Lending Fees: Interest income distribution
feeTypes[1] = FeeType({
veRAACShare: 7000, // 70%
burnShare: 0,
repairShare: 0,
treasuryShare: 3000 // 30%
});
// Performance Fees: 20% from yield products
feeTypes[2] = FeeType({
veRAACShare: 6000, // 60%
burnShare: 0,
repairShare: 0,
treasuryShare: 4000 // 40%
});
// Insurance Fees: 3% from NFT loans
feeTypes[3] = FeeType({
veRAACShare: 5000, // 50%
burnShare: 0,
repairShare: 2000, // 20%
treasuryShare: 3000 // 30%
});
// Mint/Redeem Fees
feeTypes[4] = FeeType({
veRAACShare: 6000, // 60%
burnShare: 0,
repairShare: 2000, // 20%
treasuryShare: 2000 // 20%
});
// Vault Fees
feeTypes[5] = FeeType({
veRAACShare: 7000, // 70%
burnShare: 0,
repairShare: 0,
treasuryShare: 3000 // 30%
});
// Buy/Sell Swap Tax (2% total)
feeTypes[6] = FeeType({
veRAACShare: 500, // 0.5%
burnShare: 500, // 0.5%
repairShare: 1000, // 1.0%
treasuryShare: 0
});
// NFT Royalty Fees (2% total)
feeTypes[7] = FeeType({
veRAACShare: 500, // 0.5%
burnShare: 0,
repairShare: 1000, // 1.0%
treasuryShare: 500 // 0.5%
});
}

A developer modifying the fees type eg. feeTypes[3] could accidentally set veRAACShare: 6000, repairShare: 3000, treasuryShare: 3000 (total = 12,000 bps). Or a governance proposal updates Insurance Fees (Type 3) but introduces a sum mismatch.

Impact

This can lead to miscalculations which will financially affect the protocol. An example:
Scenario: A governance proposal updates "Insurance Fees" (Type 3) to veRAACShare: 6000, repairShare: 3000, treasuryShare: 3000.

Total Basis Points: 6000 + 3000 + 3000 = 12,000 bps (120% of the fee).

Result: Every transaction involving insurance fees reverts due to arithmetic overflow, blocking:

  • User withdrawals from insurance pools.

  • Claims processing during market crashes.

Tools Used

Recommendations

add validation

require(
veRAACShare + burnShare + repairShare + treasuryShare == 10_000,
"Fee shares must total 10,000 bps"
);
Updates

Lead Judging Commences

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

Fee shares for fee type 6 and 7 inside FeeCollector do not total up to the expected 10000 basis points, this leads to update problems, moreover they are 10x the specifications

Support

FAQs

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

Give us feedback!