Solidity

에러 핸들러란? (assert, revert, require)

SunCoding 2023. 10. 22. 16:23

이번시간에는 에러 핸들러에 대해서 알아봅시다. 

 

에러 핸들러란 무엇일까요?  말 그대로 에러가 발생했을때 그 에러를 어떻게 처리할거냐 를 말하는겁니다 

 

첫번째 에러 핸들러 assert에 대해서 한번 알아봅시다.

 

1. assert

assert는 주장하다 라는 영단어를 가지고 있습니다.

assert의 특징은  gas를 모두 소비한 후, 조건이 충족되지 않을 경우(false일 경우) 에러를 발생시킵니다.

 

contract lecture {

   function assertTest(uint a) public pure{
        assert(a == 7);
    }
  
}

 

assertTest 한번 호출해볼까요?

 

(배포 후) 

assertTest 함수에 8을 던져줬습니다.

 

그러면  assert(a == 7);  이 코드가 False가 되겠죠?

그러므로 에러가 난걸 확인해 볼 수 있습니다.

 

 

2.  revert

 

revert는 되돌아가다 라는 영단어를 가지고 있습니다.

 

revert의 특징은 조건 없이 바로 에러를 내뱉는 특징이 있습니다.

 

바로 코드를 통해 보시죠.

 

contract lecture {

   function revertTest() public pure{
        revert("error!!");
    }
  
}

 

여기 아무조건 없이 error을 호출해주는 revert("error!"); 를 보실 수 있습니다.

 

그럼 바로 배포를 해볼까요?

 

(배포 후)

 

 

revertTest를 호출하자마자 바로 에러를 보실 수 있습니다.

 

 

 

 

3.  require

 

require은 필요로하다 라는 의미를 가지고있습니다.

 

require은 세가지중에서 가장 많이 사용되는 에러핸들러입니다.

 

require의 특징은 조건이 false가 되면 에러메세지와 함께 에러를 발생해줍니다.

 

바로 코드를 통해 보시죠.

 


contract lecture {

   function requireTest(uint256 a) public pure{
        require(a == 7,"a isn't 7");
    }
  
}

 

requireTest에서는 파라미터 a를 받고 그 a가 7이면은 에러를 발생시키지 않고 다음 코드로 이동하고

a가 7이 아니면 에러메세지와 함께 에러를 발생시켜줍니다.

 

배포를 한번 해서 봐볼게요

 

 

(배포 후)

 


여기 requireTest에 8을 던져주었더니 

 

a isn't 7 이라며 에러메세지를 던져주네요.

 

이렇듯 오늘은 에러메세지 assert, revert, require에 대해서 알아봤습니다.

 

유익한 글이 되셨으면 좋겠습니다.

 

 

 

 

Better than Yesterday 

                                  -김태양-