pragma solidity ^0.8.0;

contract Raffle {

mapping(address => uint) public ticketCount;

mapping(uint => address) public ticketToOwner;

uint public ticketIndex = 0;

uint public totalTickets = 0;

function zapSats(uint numTickets) public payable {

require(msg.value >= numTickets * 1000, "Insufficient sats zapped.");

ticketCount[msg.sender] += numTickets;

for (uint i = 0; i < numTickets; i++) {

ticketToOwner[ticketIndex] = msg.sender;

ticketIndex++;

totalTickets++;

}

}

function drawWinner() public returns (address) {

require(totalTickets > 0, "No tickets purchased.");

uint winningTicket = uint(keccak256(abi.encodePacked(block.timestamp, block.difficulty))) % totalTickets;

address winner = ticketToOwner[winningTicket];

ticketCount[winner] = 0;

ticketToOwner[winningTicket] = address(0);

totalTickets--;

winner.transfer(address(this).balance);

return winner;

}

}

Reply to this note

Please Login to reply.

Discussion

No replies yet.