당연히 false가 있으니, 무조건 에러메세지 occurred 와 에러가 발생하게 되겠네요.
자 한번 실행 해볼게요.
기존에 asserNow() 함수를 실행시 무려 3000000 gas 소비했는데요,
위에 requireNow() 함수를 실행시키니21360 gas밖에 소비가 안되었네요.
그리고 VM error: revert를 나타내고, 맨밑에 에러메세지 occurred 나온걸 확인할 수 있네요.
자 그러면 다시 revert 로 돌아가서, revert를 실용적으로 쓰기 위해서는
if 문과 함께 쓰거나, require 로 대체해서 쓰면된다고 했잖아요.
그러면 한번 if 문과 revert를 같이 써 볼게요.
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
contract lec25{
function onlyAdults(uint256 _age) public pure returns(string memory){
if( _age < 19){
revert("You are not allowed to pay for the cigarette");
}
return "Your payment is scceeded";
}
}
onlyAdults 라는 함수를 만들었습니다.
이 함수는 만 19세 미만 인지 아닌지 판단하는 함수입니다.
만19세 성인이라면 담배를 살 수 있고, 성인이 아니라면 담배를 못 사도록 revert를 이용하여 에러를 주는 것입니다.
자 먼저, onlyAdults 함수는 _age를 입력 받습니다.
그 _age 가 19 미만인지 if 의 조건문으로 갑니다.
만약 19 미만일경우, revert 가 발생합니다.
반대로, 19 이상이라면, revert가 발생하지 않죠.
이 처럼 revert 에 조건문 if를 써서 좀 더 실용적으로 사용할 수 있는걸 알게 되었네요.
자 그러면, 위의 예제를 require을 쓴다면 밑에 코드 처럼 되겠죠.
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
contract lec25{
function onlyAdults2(uint256 _age) public pure returns(string memory){
require(_age>19,"You are not allowed to pay for the cigarette");
return "Your payment is scceeded";
}
}
0.8 버전 부터의 assert,revert, require는 다음 강의에서 설명 할게요.