Skip to content

Instantly share code, notes, and snippets.

@jeftarmascarenhas
Last active January 27, 2023 02:40
Show Gist options
  • Save jeftarmascarenhas/25a4938605d2d4bd2e6ab3c010ad2411 to your computer and use it in GitHub Desktop.
Save jeftarmascarenhas/25a4938605d2d4bd2e6ab3c010ad2411 to your computer and use it in GitHub Desktop.
// 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