The `getMultiplier()` function returns the highest multiplier when a user owns multiple pass types (BACKSTAGE=3x > VIP=2x > GENERAL=1x). This allows users to purchase multiple passes and always receive the highest multiplier reward, potentially gaming the reward system and creating economic imbalances.
The normal behavior might be expected to either restrict users to one pass type or apply multipliers differently. However, the current implementation prioritizes the highest tier pass owned.
```solidity
function getMultiplier(address user) public view returns (uint256) {
if (balanceOf(user, BACKSTAGE_PASS) > 0) {
return 3; // @> Returns highest multiplier if multiple passes owned
} else if (balanceOf(user, VIP_PASS) > 0) {
return 2;
} else if (balanceOf(user, GENERAL_PASS) > 0) {
return 1;
}
return 0;
}
```
Likelihood:
* Users can purchase multiple pass types
* Function is called on every performance attendance
* Highest multiplier is always returned regardless of other passes owned
* No restriction prevents multiple pass ownership
Impact:
* Users can game the system by buying multiple passes
* Economic imbalance - users get maximum rewards without using highest tier pass
* Potential unintended reward inflation
* May not align with intended design
The contest is live. Earn rewards by submitting a finding.
Submissions are being reviewed by our AI judge. Results will be available in a few minutes.
View all submissionsThe contest is complete and the rewards are being distributed.