Last active
January 27, 2023 02:40
-
-
Save jeftarmascarenhas/25a4938605d2d4bd2e6ab3c010ad2411 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// SPDX-License-Identifier: MIT | |
pragma solidity ^0.8.13; | |
contract Lottery { | |
event Receive(address indexed from, address to, uint amount); | |
address owner; | |
address public winner; | |
uint public totalBets; | |
address payable [] players; | |
constructor() { | |
owner = msg.sender; | |
} | |
receive() external payable { | |
require(msg.value >= 0.1 ether, "min value is 0.1 ether"); // | |
emit Receive(msg.sender, address(this), msg.value); | |
players.push(payable(msg.sender)); | |
totalBets++; | |
} | |
modifier onlyOwner() { | |
require(owner == msg.sender, "not owner"); | |
_; | |
} | |
function getAllPlayers() external view returns(address payable [] memory) { | |
return players; | |
} | |
function random() private view returns(uint) { | |
return uint(keccak256(abi.encodePacked(block.difficulty, block.timestamp, msg.sender, players.length))) % totalBets; | |
} | |
function pickRandomWinner() external onlyOwner returns(address) { | |
require(players.length >= 3, "Needs 3 or more players"); | |
require(winner == address(0), "There is a winner"); | |
winner = payable(players[random()]); | |
return winner; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment