# `Claimers` can receive less `feePerClaim` than they should if some prizes are already claimed or if reverts because of a reverting hook

Claimer's VRGDA fee computation counts already-claimed or reverting prizes as successful claims, undervaluing feePerClaim and underpaying claimers.

- Payout: Contest reward
- Severity: medium
- Program: PoolTogether
- Credited: 0x73696d616f
- Disclosed: 2024-05-10
- Write-up quality: 6/10
- Original: https://github.com/sherlock-audit/2024-05-pooltogether-judging/issues/124
- Library page: https://bugbountylibrary.com/r/sherlock%3A2024-05-pooltogether%3AM-11
- Tags: domain:web3 impact:funds-loss kind:contest platform:sherlock sev:medium tech:solidity technique:source-review vuln:business-logic vuln:reward-distribution

**Target:** Claimer.sol / PrizePool prize-claim auction (VRGDA)
**Root cause:** _computeFeePerClaim iterates _claimCount times starting at prizePool.claimCount(), but _countClaims counts all submitted prize indices including ones already claimed or that revert, so the VRGDA is evaluated as if more claims occurred than actually will.
**Steps:**
1. Observe Claimer.claimPrizes computes feePerClaim = _computeFeePerClaim(tier, _countClaims(winners, prizeIndices), prizePool.claimCount()).
2. _countClaims sums _prizeIndices[i].length without checking wasClaimed.
3. _computeFeePerClaim loops i in [0,_claimCount) calling _computeFeeForNextClaim with _sold = _claimedCount + i, averaging the fees.
4. If some submitted prizes were already claimed (or revert via hook), those still increment _sold, pushing the VRGDA price lower.
5. Claimer receives the averaged, undervalued feePerClaim transferred per successful claim.
**How found:** Code reading of the VRGDA fee path: noticed _countClaims counts raw prize indices while _computeFeePerClaim advances _sold per index, so already-claimed prizes are double-counted against the schedule.
**Exploitation:** A claimer submits a batch containing prizes already claimed by a competing bot; the fee is computed as if all claims succeed, so the per-claim fee paid out is lower than the VRGDA-correct value, reducing claimer revenue.
**Insight:** When an auction/pricing formula consumes a count, verify that count matches the actual state-changing operations; batch inputs that can no-op (already-claimed, reverting hooks) silently skew the schedule.
