HW15: Virtual server rental

Problem statement

Implement a smart contract for virtual server rental.

Example scenario

Alice owns a server park. She creates an instance of this contract to manage access to one of her servers, setting the price per time slot to 0.01 ether.

Bob reserves the time slot between 11:00am and 11:30am this Sunday using the time slot's number since contract creation. Later, he decides to transfer his reservation to Claire. After 11:00am, Claire sends her address and a packet signed with her private key to the server. The server validates the packet, checks is she has access during the current time slot, and grants access to Claire.

Contract interface

Contract skeleton

pragma solidity ^0.4.21;

contract ReserveVS {

    // <contract_variables>

    // </contract_variables>

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

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

    function transfer(uint24 slotId, address to) public {
        // TODO
    }

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

    function withdraw() public {
        // TODO
    }

}