Skip to content

Instantly share code, notes, and snippets.

@causztic
Created November 7, 2018 05:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save causztic/e1b66910582dd7c3f7e80cf757922457 to your computer and use it in GitHub Desktop.
Save causztic/e1b66910582dd7c3f7e80cf757922457 to your computer and use it in GitHub Desktop.
Simple lottery with debt collection at the end of grace period
pragma solidity ^0.4.17;
contract Lottery{
uint public MAX_PLAYERS = 2;
address[] public players;
address public manager;
uint public blockNumber;
constructor() public{
manager = msg.sender;
}
function enter() public payable{
require(players.length < MAX_PLAYERS);
require(msg.value == 1 ether);
blockNumber = block.number;
players.push(msg.sender);
}
function random() private view returns (uint){
require(block.number > blockNumber);
return uint(blockhash(blockNumber + 1));
}
function pickWinner() public restricted {
address winner = players[random() % players.length];
winner.transfer(address(this).balance);
players = new address[](0);
}
function collectDebt() public restricted {
require(msg.sender == manager);
require((blockNumber + 3) < block.number);
manager.transfer(address(this).balance);
players = new address[](0);
}
function getPlayers() public view returns(address[]) {
// Return list of players
return players;
}
modifier restricted() {
require(players.length == MAX_PLAYERS);
_;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment