-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRandomBeaconLottery.sol
More file actions
86 lines (55 loc) · 2.09 KB
/
Copy pathRandomBeaconLottery.sol
File metadata and controls
86 lines (55 loc) · 2.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
pragma solidity ^0.5.2;
import "github.com/starkware-libs/veedo/blob/master/contracts/BeaconContract.sol";
contract Beacon{
function getLatestRandomness()external view returns(uint256,bytes32){}
}
contract Lottery{
address payable public owner;
address payable[] public players;
enum status {open,closed,alreadyplayed}
status currentstatus;
address public BeaconContractAddress=0x79474439753C7c70011C3b00e06e559378bAD040;
//contract constructor
constructor() public{
owner = msg.sender;
currentstatus=status.open;
}
modifier onlyowner(){
require(msg.sender==owner);
_;
}
modifier onlyWhileopen {
require(currentstatus==status.open,"currently closed");
_;
}
modifier costs(uint _amount){
require(msg.value>=2 ether,"not enough ether provided");
_;
}
function setBeaconContractAddress(address _address) public onlyowner {
BeaconContractAddress=_address;
}
function() external payable onlyWhileopen costs(2 ether) {
currentstatus=status.alreadyplayed;
players.push(msg.sender); //add the address of the account that sends ether to players array
}
function get_balance() public view onlyowner returns(uint){
return address(this).balance; //return contract balance()
}
//returns randomNumber
function generateRandomNumber() public view returns(bytes32){
uint blockNumber;
bytes32 randomNumber;
Beacon beacon=Beacon(BeaconContractAddress);
(blockNumber,randomNumber)=beacon.getLatestRandomness();
return randomNumber;
}
function selectWinner() public onlyowner{
uint r=uint256(generateRandomNumber());
address payable winner;
uint index=r%players.length;
winner=players[index];
winner.transfer(address(this).balance);
players=new address payable[](0);
}
}