// SPDX-License-Identifier: MIT pragma solidity 0.8.9; contract Jackpot { uint256 public jackpotamount; uint256 public totalplayers; uint256 public countdowntime; address public owner; bool public isbettingopen; address payable public winner; mapping(address => uint256) public playerbetamount; mapping(uint256 => address payable) public players; constructor() { owner = msg.sender; isbettingopen = true; jackpotamount = 0; totalplayers = 0; countdowntime = 30 seconds; } function deposit() public payable { require(msg.value > 0, "Please enter a valid amount"); require(isbettingopen, "Betting is closed"); require(totalplayers < 10, "Max players reached"); require(playerbetamount[msg.sender] == 0, "You already betted"); totalplayers++; playerbetamount[msg.sender] = msg.value; players[totalplayers] = payable(msg.sender); jackpotamount += msg.value; if (totalplayers == 2) { isbettingopen = false; countdown(); } } function countdown() private { if (block.timestamp >= countdowntime + block.timestamp) { pickwinner(); } } function pickwinner() private { require(totalplayers == 2, "Cannot pick a winner yet"); uint256 totalamount = jackpotamount; uint256 player1bet = playerbetamount[players[1]]; uint256 player2bet = playerbetamount[players[2]]; uint256 winnerchance = (player1bet * 100) / totalamount; uint256 randnum = uint256(keccak256(abi.encodePacked(block.timestamp, msg.sender))) % 100; if (randnum <= winnerchance) { winner = players[1]; } else { winner = players[2]; } winner.transfer(totalamount); reset(); } function reset() private { jackpotamount = 0; totalplayers = 0; isbettingopen = true; delete players[1]; delete players[2]; } function getbalance() public view returns (uint256) { return address(this).balance; } }
0.7.1