HW11: Gym machine rental

Problem statement

Implement a smart contract for gym machine rental.

Example scenario

Alice owns a gym. She creates an instance of this contract to manage access to one of the popular machines in her gym, setting the price per time slot to 0.005 ether.

Bob reserves the time slot between 11:00am and 11:30am this Sunday using the time slot's number since contract creation. After 11:00am he scans the QR code of his Ethereum address on the machine. The machine checks if he has access and unlocks.

Contract interface

Contract skeleton

pragma solidity ^0.4.21;

contract GymMachineRental {

    // <contract_variables>

    // </contract_variables>

    function GymMachineRental(uint256 pricePerSlot) public {
        // TODO
    }

    function reserve(uint24 slotId) public payable {
        // TODO
    }

    function validate(address client) public view returns (bool) {
        // TODO
    }

    function withdraw() public {
        // TODO
    }

}