Solidity )remix 스마트 컨트랙트 예약 예제

2021. 7. 14. 16:32블록체인/Solidity

Solidity 예제로 호텔 예약을 스마트 컨트랙트(예제)로 구현해보았다.

 

 

 

// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.6.0;

contract HotelBook {
    enum Status { Vacant,Occupied }
    Status currentStatus;
    address payable public owner;
    //payable 키워드 계약 계정에 이더를 사용 (입금,송금,송신 등) 할 수 있게 해준다. 
    
    event Occupy(address _occupant, uint _value);
    
    constructor() public {
        owner = msg.sender;     //본인 지갑
        currentStatus = Status.Vacant;
    }
    
    modifier onlyWhileVacant{
        require(currentStatus == Status.Vacant, "Book available");
        // require함수 : 요구되는 조건이 만족되지 않을 경우 에러를 발생시켜 나머지 부분이
        // 실행되지 않도록하는 게이트 조건기능
        // require함수 마지막에 _; (placehoder) 꼭 입력해야함
        _;
    }
    modifier cost(uint _amount){
        require(msg.value >= _amount, "Not enough Ether");
        _;
    }
    
    receive() external payable onlyWhileVacant cost(2 ether) {   // 2 ether 지불
    		  // external은 metamask 등 다른 툴과 연동해서 사용가능하게 해준다.
        currentStatus = Status.Occupied;
        owner.transfer(msg.value);  //내 지갑의 ether를 book함수에 ether의 수량만큼 전송 
        emit Occupy(msg.sender, msg.value);
    }
    
}

이제 owner로 설정된 지갑에 ether가 들어오게 된다.

 

owner로 지불할 account 변경해주고, value에서 ether 수량과 단위 설정 후 Transact  

debug 창을 보면 바꾼 account에서 from,  owner 계정이 to로 알맞게 들어온

거래내역  를 볼 수 있다.

 

99ether가 된 owner account