diff --git a/cryptoctf.sol b/cryptoctf.sol index 479d5d5..103fb10 100644 --- a/cryptoctf.sol +++ b/cryptoctf.sol @@ -23,7 +23,7 @@ contract CryptoCTF10 { } modifier onlyOpen(uint contestID) { - require(contests[contestID].submissionsOpen, "Submissions are not open for this contest at this time"); + require(block.timestamp < contests[contestID].deadline, "Submissions are not open for this contest at this time"); _; } @@ -44,7 +44,7 @@ contract CryptoCTF10 { address admin; mapping (uint => Challenge) challenges; mapping (address => Player) players; - bool submissionsOpen; + uint256 deadline; mapping (address => mapping (uint => bool)) solves; // address -> challengeID -> solved/not mapping (uint => bool) anySolves; // challengeID -> solved/not string password; @@ -58,7 +58,6 @@ contract CryptoCTF10 { function createContest(uint contestID, string memory password) external { require(contests[contestID].admin == address(0), "This contest ID has already been registered"); contests[contestID].admin = msg.sender; - contests[contestID].submissionsOpen = false; contests[contestID].password = password; } @@ -67,8 +66,8 @@ contract CryptoCTF10 { contests[contestID].admin = newAdmin; } - function setSubmissionsStatus(uint contestID, bool open) external onlyExistingContest(contestID) onlyAdmin(contestID) { - contests[contestID].submissionsOpen = open; + function setContestDeadline(uint contestID, uint256 deadline) external onlyExistingContest(contestID) onlyAdmin(contestID) { + contests[contestID].deadline = deadline; } function addOrUpdateChallenge(uint contestID, uint challengeID, address obscuredFlag, uint worth, uint256 descriptionFingerprint, bool onlyFirstSolver, string memory skill) external onlyExistingContest(contestID) onlyAdmin(contestID) { @@ -119,6 +118,10 @@ contract CryptoCTF10 { } } + function getContestDeadline(uint contestID) external view onlyExistingContest(contestID) returns (uint256) { + return contests[contestID].deadline; + } + function getPlayerStatus(uint contestID, address player) external view onlyExistingContest(contestID) returns (PlayerStatus) { return contests[contestID].players[player].status; }