Beginner FriendlyFoundry
100 EXP
View results
Submission Details
Severity: high
Valid

### [H-1] The Players with one correct prediction cannot withdraw

Description:
A user who makes one correct prediction cannot withdraw due to a business logic errorin the ScoreBoard::isEligibleForReward function
Impact:

  1. Players who made a one correct prediction cannot withdraw their reward amount.

Proof of Concept:

function test_SetPrediction() public {
address user1 = makeAddr("user1");
address user2 = makeAddr("user2");
address user3 = makeAddr("user3");
address user4 = makeAddr("user4");
vm.startPrank(user1);
vm.deal(user1, 1 ether);
thePredicter.register{value: 0.04 ether}();
vm.stopPrank();
vm.startPrank(user2);
vm.deal(user2, 1 ether);
thePredicter.register{value: 0.04 ether}();
vm.stopPrank();
vm.startPrank(user3);
vm.deal(user3, 1 ether);
thePredicter.register{value: 0.04 ether}();
vm.stopPrank();
vm.startPrank(user4);
vm.deal(user4, 1 ether);
thePredicter.register{value: 0.04 ether}();
vm.stopPrank();
vm.startPrank(organizer);
thePredicter.approvePlayer(user1);
thePredicter.approvePlayer(user2);
thePredicter.approvePlayer(user3);
thePredicter.approvePlayer(user4);
vm.stopPrank();
vm.prank(user1);
thePredicter.makePrediction{value: 0.0001 ether}(
1,
ScoreBoard.Result.First
);
vm.prank(user2);
thePredicter.makePrediction{value: 0.0001 ether}(
1,
ScoreBoard.Result.First
);
vm.prank(user2);
thePredicter.makePrediction{value: 0.0001 ether}(
0,
ScoreBoard.Result.First
);
vm.prank(user2);
thePredicter.makePrediction{value: 0.0001 ether}(
2,
ScoreBoard.Result.First
);
vm.startPrank(organizer);
scoreBoard.setResult(0, ScoreBoard.Result.First);
scoreBoard.setResult(1, ScoreBoard.Result.First);
scoreBoard.setResult(2, ScoreBoard.Result.First);
scoreBoard.setResult(3, ScoreBoard.Result.First);
scoreBoard.setResult(4, ScoreBoard.Result.First);
scoreBoard.setResult(5, ScoreBoard.Result.First);
scoreBoard.setResult(6, ScoreBoard.Result.First);
scoreBoard.setResult(7, ScoreBoard.Result.First);
scoreBoard.setResult(8, ScoreBoard.Result.First);
vm.stopPrank();
assertEq(scoreBoard.isEligibleForReward(user1),false );
assertEq(scoreBoard.isEligibleForReward(user2),true );
}

Recommended Mitigation:

- playersPredictions[player].predictionsCount > 1
+ playersPredictions[player].predictionsCount >= 1
Updates

Lead Judging Commences

NightHawK Lead Judge 12 months ago
Submission Judgement Published
Validated
Assigned finding tags:

The eligibility criteria is wrong

Players with only one prediction cannot withdraw.

Support

FAQs

Can't find an answer? Chat with us on Discord, Twitter or Linkedin.