Blast the balloon SC Audit
When a users buys a spin via the buySpin function, the provided native ETH is split into 4 distinct payment destinations (with default values):
These 4 percentages however can be changed via the updatePrizePortion function. The updatePrizePortion function incorrectly allows the sum of the 4 allocations to be less then 100%
require(total <= PERCENTAGE_DENOMINATOR, BlastTheBalloonErrors.INVALID_PERCENTAGE);
Because of the way buySpin function is implemented, if the allocations do not equal 100%, the difference is left stuck in the contract, unused. At this point the protocol team needs to call emergencyWithdraw to get the funds out.
In the updatePrizePortion function of the BTB contract, enforce that the sum of the 4 prize allocations is exactly 100%.
Blast the balloon SC Audit