Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- contract Lotto {
- uint constant ticketPrice = 100 finney;
- uint constant waitTime = 6;
- uint constant bettingTime = 40;
- uint constant randSubmitTime =30;
- uint constant payoutTime = 30;
- uint constant totalTime = waitTime + bettingTime+ randSubmitTime + payoutTime;
- uint public lastBlock;
- uint public balance;
- uint public submitted;
- address[] accounts;
- address[] public tickets;
- uint256 XOR;
- mapping(address => uint256) secretHash;
- mapping(address => uint) balances;
- function Lotto(){ //Runs only at creation
- lastBlock = block.number;
- }
- function tStep() constant public returns (uint) {
- return block.number%totalTime;
- }
- function sha(uint256 a) public returns(uint256){ //DO NOT USE VIA BLOCKCHAIN!
- return uint256(sha3(a));
- }
- function payoutReady() public constant returns (bool){
- return (block.number % totalTime > totalTime- payoutTime && block.number - lastBlock > 68 ) ;
- }
- function buyTicket(uint256 secrethash) public {
- if (block.number % totalTime < bettingTime && msg.value > ticketPrice){
- secretHash[msg.sender] = secrethash;
- balances[msg.sender] += msg.value;
- balance += msg.value;
- if(balances[msg.sender] == 0){
- accounts.length = accounts.length + 1;
- accounts[accounts.length-1] = msg.sender;
- }
- }
- }
- function submitSecret(uint256 secret) public {
- if(balances[msg.sender] != 0 && block.number% totalTime < totalTime - payoutTime && block.number% totalTime > bettingTime + waitTime){
- if (uint256(sha3(secret)) == secretHash[msg.sender]){
- XOR = XOR ^ secret ^ uint(msg.sender);
- submitted++;
- for(uint32 i=0; i < balances[msg.sender] / ticketPrice; i++ ){
- tickets.length = tickets.length +1;
- tickets[tickets.length -1 ] = msg.sender; //append one copy of sender address
- }
- balances[msg.sender]=0;
- }
- }
- }
- function payout() public returns (address) {
- if (payoutReady()) {
- if(submitted==accounts.length){
- address winner = tickets[XOR%tickets.length];
- winner.send(balance - 25000*tx.gasprice);
- }
- else{
- for(uint j =0; i<tickets.length; i++){
- tickets[i].send(balance/tickets.length);
- }
- }
- lastBlock = block.number;
- delete balance;
- for (uint i=0; i< accounts.length; i++){
- delete secretHash[accounts[i]];
- delete balances[accounts[i]];
- }
- delete tickets;
- return winner;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement