# Reward Emissions Accumulate Even When Pool Has No Liquidity, Causing Irrecoverable Token Lock

Aquarius rewards manager kept accruing emissions while pool working_supply was zero, permanently locking unclaimable tokens that admin could not recover.

- Payout: Contest reward
- Severity: medium
- Program: Aquarius
- Credited: etherSky
- Disclosed: 2025-09-01
- Write-up quality: 6/10
- Original: https://cdn.cantina.xyz/reports/cantina_competition_aquarius_aug2025.pdf#3.2.6
- Library page: https://bugbountylibrary.com/r/cantina%3Aaquarius_aug2025%3A3.2.6
- Tags: domain:web3 impact:funds-loss kind:contest platform:cantina sev:medium tech:rust technique:source-review vuln:accounting-error vuln:reward-distribution

**Target:** Soroban rewards manager contract (update_rewards_data / return_unused_reward)
**Root cause:** update_rewards_data() computes generated_tokens from elapsed time * tps without checking working_supply, so accumulated grows even when no LP is eligible to claim.
**Steps:**
1. Configure pool with tps=10 and active reward config.
2. LP deposits, earns for 1h, then withdraws fully so working_supply == 0.
3. Leave config unexpired; update_rewards_data() adds 10*7200=72,000 to accumulated over 2h.
4. Call return_unused_reward() as admin: get_unused_reward() subtracts accumulated, so the 72,000 is excluded and stays locked in contract.
**How found:** Code review of update_rewards_data() noticing generated_tokens is computed unconditionally, then tracing accumulated into get_unused_reward()/return_unused_reward() to confirm the locked amount is unreclaimable.
**Exploitation:** No attacker action; natural state of empty pool with active config causes emissions to accrue into accumulated, which is subtracted from reclaimable unused reward, permanently stranding tokens in the contract.
**Insight:** When auditing emission/accounting code, check whether accrual is gated on the same eligibility condition (working_supply > 0) used by the claim path; any divergence between 'emitted' and 'claimable' counters usually strands funds in the contract.
