-
Notifications
You must be signed in to change notification settings - Fork 0
/
HotelBooking.sol
44 lines (36 loc) · 1.23 KB
/
HotelBooking.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract HotelRoom{
/* This Smart Contract gonna show what are Modifiers,
Visibility, Events, Enums, and how to make Ether Payments*/
// After payment done successfully we need to change
// The status of hotel rooms from Vacant to Occupied
enum Statuses {
Vacant,
Occupied
}
Statuses public currentStatus;
event Occupy(address _occupant, uint256 _value);
address payable public owner;
constructor() {
owner = payable(msg.sender);
currentStatus = Statuses.Vacant;
}
modifier onlyWhileVacant {
// Check hotel room status
require(currentStatus == Statuses.Vacant, "Currently occupied.");
_;
}
modifier costs(uint256 _amount) {
// Check price!
require(msg.value >= _amount, "Not enough ether provided.");
_;
}
function book() public payable onlyWhileVacant costs(2 ether) {
currentStatus = Statuses.Occupied;
// owner.transfer(msg.value);
(bool sent, bytes memory data) = owner.call{value: msg.value}("");
require(true);
emit Occupy(msg.sender, msg.value);
}
}