차밍이

[Solidity] 기본 문법 (2) - Error Handler - require, revert, assert, try-catch 본문

블록체인/Solidity

[Solidity] 기본 문법 (2) - Error Handler - require, revert, assert, try-catch

2022. 1. 25. 23:18
반응형

Errer Handler

종류는 네 가지가 있음

require, revert, assert, try/catch

assert : gas를 다 소비한 후, 특정 조건이 부합하지 않으면 (false일 때) 에러를 발생시킨다.

revert : 조건 없이 에러를 발생시키고, gas를 환불시켜준다.

require : 특정한 조건에 부합하지 않으면 (false일 때) 에러를 발생시키고, gas를 환불시켜준다.

contract testContract {
    function assertNow() public pure {
        assert(false); // test용으로 사용함
    }

    // 비용이 절감됨, 실제 coding 할 때 revert와 require을 씀
    function revertNow() public pure {
        revert("error"); // if 문을 쓰거나 require를 씀
    }
    function requireNow() public pure {
        require(false, 'occered');
    }
}

 

revert vs require

contract testContract {
    function onlyAdults(uint256 _age) public pure return (string memory) {
        if(_age<19) {
            revert("you are not allowed");
        }
    }

    function onlyAdults2(uint256 _age) public pure return(string memory) {
        require(_age>19, "you are not allowed");
        return "Your payment is succeeded";
    }
}

 

assert

assert는 오직 내부적 에러 테스트 용도이며

불변성 체크 용도로 사용된다.

0.8.1 이상 버전에서 사용하면 가스를 환불받을 수 있음

 

solidity errors

 

try / catch

0.6 버전 이후에서 사용 가능

try - catch는 에러를 발생시키고 프로그램을 종료시키지 않음

catch문 안에서 발생된 에러는 잡지 못 함

 

catch의 3가지 종류

  1. catch Error - revert나 require을 통해서 생성된 에러 용도
  2. catch Panic - assert를 통해 생성된 에러가 날 때, catch에 의해 잡힘
  3. catch - row level 영역에서 사용됨

try - catch는 외부 스마트 컨트랙을 함수로 부를 때 , 사용하기 위해 사용됨

 

Reference

https://www.inflearn.com/course/%EC%86%94%EB%A6%AC%EB%94%94%ED%8B%B0-%EC%8A%A4%EB%A7%88%ED%8A%B8-%EC%BB%A8%ED%8A%B8%EB%9E%99/dashboard

인프런 강의 보면서 공부한 내용을 정리함

반응형

'블록체인 > Solidity' 카테고리의 다른 글

[Solidity] 기본 문법 (1) - event, super, mapping 예시  (0) 2022.01.24

관련된 글 보기

Comments