1) 전체 코드
- 새로운 Workspace를 만들어 HotelRoom.sol 코드를 작성함
- pragma solidity ^0.6.0 에 맞추어 컴파일러 옵션을 0.6.1로 변경함

2) 코드 설명
- Payable
- 이더 코인을 전송하는 스마트 컨트랙트를 작성하기 위해서 반드시 사용해야 함
- payable을 작성한 함수에서만 이더를 보낼 수 있으므로 코인 이동에 필수적인 키워드
- address 타입: 지불 가능한 주소 타입, send()와 transfer()함수를 내장함
- function 타입: 지불 가능한 함수 타입
- Enum
- 솔리디티의 열거형 데이터 타입
- 개발자가 정의할 수 있는 자료형으로 특정한 값들만 갖는 변수를 만들고 싶을 때 사용함
- 함수 내에서는 선언이 불가하며 전역공간에 선언할 수 있음
- 이 코드에서는 호텔 예약의 유무 상태 변수를 저장하기 위해 사용함
- Require()
- 예약을 위해 가격과 방이 비어있는지 유무를 확인하는 함수
- 함수가 참일 경우에 아래 코드가 실행됨
- 함수가 거짓일 경우에 require 함수에 포함된 에러 메세지가 출력됨
- msg.sender
- 솔리디티에서 모든 함수가 사용 가능한 전역변수
- 현재 함수를 호출한 사람이나 컨트랙트의 주소를 가리킴
- msg.value는 송냄 보낸 코인의 값을 가리킴
- Modifier
- 함수제어자/수정자로 함수가 실행되기 전 요구조건을 만족하는지에 대한 확인 작업을 수행함
- 현재 계약의 상태, 상태변수, 이더값 등 실행 가능 여부를 사전에 체크함
- Event
- 특정 이벤트가 발생하는 경우 해당 이벤트를 처리하는 코드를 실행함
- EVM 로깅환경을 이용하여 애플리케이션의 현재 계약상태에 대한 정보를 알려주는데 사용함
- 파라미터 변수를 명시적으로 제공하지 않아도 됨
- Receive()
- 메타마스크 등과 같이 연결된 지갑을 통해 결제할 수 있도록 함
3) 실행
- Deploy 후 owner의 주소를 확인함

- 다른 계정을 선택하고 1 이더를 전송한 후 Transact를 클릭하면 오류 메세지를 확인할 수 있음


- 2 이더를 송금하면 정상적으로 Smart Contract가 보내진 것을 확인할 수 있음

- 다른 계정으로 이더를 보내면 이미 호텔룸 예약이 이루어 진 상태이므로 오류메세지가 뜸

11. 솔리디티 암호화폐 지불(호텔룸 예약하기 프로그램)
1. 스마트 계약의 시작, 리믹스 도구 사용해보기 2. 솔리디티 개발환경 구성 3. 스마트컨트랙트 작성 후 배포하기 4. openzeppelin 사용하여 ERC20 토큰 만들기 5. Ropsten 테스트넷에 ERC20토큰 배포하기 6.
kimsfamily.kr