The protocol documentation states: Users can deposit an ERC20 asset to bet on a team. After the tournament ends, winners will share the prize pool proportionally based on their deposit amount.
In other words, users who bet on the losing national team will not receive any rewards.
However, since the protocol inherits from ERC4626 and does not restrict users from calling the original withdraw and redeem functions, users can withdraw funds unimpeded. This clearly violates the protocol's original intent.
Likelihood:
Once a user deposits funds, they can definitely withdraw them easily at any time.
Impact:
Breaks the protocol's core economic model and incentive mechanism: Users can essentially bypass the "only winners share the prize pool" rule and withdraw funds anytime.
Invalidates the prize pool mechanism: Since losing users can withdraw funds at will, the actual prize pool available to winners will be far lower than expected, or even zero, rendering the entire betting reward mechanism ineffective.
Collapses the protocol's economic incentives: Without the core element of "betting risk," the protocol cannot effectively encourage user participation. Rational users will bet on all teams or withdraw funds frequently, leading to the protocol's failure to operate normally.
Inflated TVL (Total Value Locked): The apparent deposit scale does not truly reflect the protocol's actual locked value, as funds can flow out at any time, undermining the protocol's financial sustainability assumptions.
Add the following function to test/BriVaultTest.t.sol and run forge test --mt test__usingOriginalFunction -vv:
Console output:
Fully override ERC4626's withdraw and redeem functions by adding the following code:
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.