Skip to content

Instantly share code, notes, and snippets.

@gwmccubbin
Last active April 18, 2023 04:16
Show Gist options
  • Save gwmccubbin/e8c3107cbc07417aa941b42c8f7fa04c to your computer and use it in GitHub Desktop.
Save gwmccubbin/e8c3107cbc07417aa941b42c8f7fa04c to your computer and use it in GitHub Desktop.
pragma solidity ^0.6.0;
contract HotelRoom {
enum Statuses { Vacant, Occupied }
Statuses currentStatus;
address payable public owner;
event Occupy(address _occupant, uint _value);
constructor() public {
owner = msg.sender;
currentStatus = Statuses.Vacant;
}
modifier onlyWhileVacant {
require(currentStatus == Statuses.Vacant, "Currently occupied.");
_;
}
modifier costs(uint _amount) {
require(msg.value >= _amount, "Not enough Ether provided.");
_;
}
receive() external payable onlyWhileVacant costs(2 ether) {
currentStatus = Statuses.Occupied;
owner.transfer(msg.value);
emit Occupy(msg.sender, msg.value);
}
}
@ratatuille
Copy link

Ya Da Best

@TamiaBJ
Copy link

TamiaBJ commented May 24, 2021

I second that^^

@Arjunsekar
Copy link

cool

@neeleshwark17
Copy link

For anyone getting type error
Solidity 0.8 and onwards ""msg.sender"" is not payable anymore, It needs to be casted in payable first,
owner=msg.sender -> owner=payable(msg.sender)

@Naeem775
Copy link

@neeleshwark17 thanks for the tip

@coderwithsense
Copy link

Thnkx

@theisaackim
Copy link

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment