Skip to content

Instantly share code, notes, and snippets.

@pleasemarkdarkly
Created June 17, 2021 16:55
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 pleasemarkdarkly/db55f10d16809ebf076e5eca163eaa8d to your computer and use it in GitHub Desktop.
Save pleasemarkdarkly/db55f10d16809ebf076e5eca163eaa8d to your computer and use it in GitHub Desktop.
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.8.0;
import '@openzeppelin/contracts/token/ERC20/ERC20.sol';
import '@openzeppelin/contracts/math/SafeMath.sol';
contract Lottery is SafeMath {
address public owner;
mapping (address => uint256) bets;
mapping (address => bool) public collected;
mapping (uint256 => address payable) users;
uint256 counter;
uint256 reward;
uint256 rewards;
address public token;
constructor(uint256 _reward, address _token) {
owner = msg.sender;
reward = _reward;
token = _token;
}
modifier isOwner(){
require(owner == msg.sender, "FORBIDDEN");
_;
}
function setOwner(address _owner) public isOwner {
owner = _owner;
}
function setReward(uint256 _reward) public isOwner {
reward = _reward;
}
function bet(uint256 _bet) public payable {
require(msg.value < 0, "INVALID_VALUE");
require(counter <= 10);
bets[msg.sender] = _bet;
collected[msg.sender] = true;
users[counter] = msg.sender;
counter++;
}
function collectReward(address payable to) public payable {
uint random = random() % 10;
payable(bets[random]).transfer(reward);
rewards = rewards + reward;
for (uint32 i =0; i <= 10; i++){
bets[i] = 0;
collected[i] = false;
address c;
user[i] = c;
}
}
function rewardUsers() public payable isOwner {
for (uint32 i = 0; i < counter; i++) {
uint reward = div(msg.value, counter);
users[i].transfer(reward);
}
}
function random() private returns (uint){
uint rn = abi.encodePacked(block.timestamp, block.number, blockhash(blockNumber));
return rn;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment