RAACToken's tax mechanism can exceed the maximum allowed tax rate when both swap and burn taxes are combined. This goes against the core economic constraints of the protocol. The issue stems from insufficient validation of combined tax rates in the token contract.
When we checks that the sum of swap and burn tax rates never exceeds MAX_TAX_RATE (1000 basis points or 10%). Looking at the contract code: RAACToken.sol/#L17-L22
The issue arises in the tax rate setting mechanism. While individual tax rates are checked against MAX_TAX_RATE, their combined effect isn't validated. For example:
swapTaxRate could be set to 900 (9%)
burnTaxRate could be set to 200 (2%)
Total tax would be 1100 basis points (11%), exceeding MAX_TAX_RATE
The root cause is in the _setTaxRate function which only validates individual rates: /#L119
This could lead to users paying more tax than the protocol intends, potentially up to 20% in extreme cases. This breaks the core economic assumption that total tax never exceeds 10%.
RAAC's Tax Mechanism: When 1+1 Equals More Than 2
The RAACToken implements tax mechanisms to maintain protocol stability. Imagine a real estate transaction where both transfer and property taxes are meant to cap at 10% total. In our protocol, this translates to the MAX_TAX_RATE of 1000 basis points. However, the current implementation allows these taxes to stack beyond this limit.
How this happens:
The protocol allows setting two types of taxes
each tax rate is validated individually against MAX_TAX_RATE, but their combination isn't checked. This means a governance action could set:
swapTaxRate = 900 (9%)
burnTaxRate = 900 (9%)
This results in an effective tax rate of 18%, significantly exceeding our intended 10% maximum. In practice, this could affect the real estate transactions on the platform, where users might face unexpectedly high fees during periods of market stress when both tax rates are elevated. _setTaxRate()
The protocol uses a dual-tax system to maintain stability and incentivize long-term holding. However, I've discovered an interesting interaction in how these taxes compound.
The core mistake lies in how the protocol handles tax stacking. When you notice how the RAACToken implements two distinct tax mechanisms. a swap tax for market operations and a burn tax for deflationary pressure. While each tax rate is carefully bounded, their interaction creates an unexpected multiplication effect.
This means that during high-volume periods, users could face effective tax rates of up to 18%, nearly double the protocol's intended 10% maximum. For perspective, on a $1,000,000 real estate transaction, this difference represents an extra $80,000 in fees.
Let's examine how this unfolds in the protocol
The impact ripples through the entire protocol ecosystem. The LendingPool's collateral calculations become skewed, the StabilityPool's incentive structure gets distorted, and most importantly, the core promise of efficient real estate tokenization is compromised.
Current Vulnerable Implementation
Proposed Fix
I dd a crucial combined rate check before any state updates, preventing the total tax from exceeding MAX_TAX_RATE under all circumstances.
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.