// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract MyContract { struct member { address publicKey; uint8 payDeposit; bool penalized; } member [] members; bool lotteryOpen; uint256 startTime; uint256 endBidingTime; uint8 currentCapacity; bool revealed; uint8 winingPrize; constructor(uint8 bidingDuration){ lotteryOpen = true; startTime = block.timestamp; endBidingTime = startTime + bidingDuration * 1 seconds; currentCapacity = 3; } function acceptMember (string memory commitment,address publicKey) public{ require(block.timestamp < endBidingTime); require(currentCapacity < 3); member memory player = member(publicKey,commitment); members.push(player); currentCapacity+=1; if (currentCapacity == 3){ Reveal(); } } function random() private view returns (uint) { return uint(keccak256(abi.encodePacked(block.difficulty, block.timestamp, members.length))); } function declareWinner() public { require(revealed == false); member WiningMember = members[random()%members.length ]; payable(WiningMember.address).transfer(); } function penalizePlayers() public{ // we already have their deposit signed so we shouldn't do anything } }
0.6.9