fullstack

[Solidity] error handler (require, assert, revert)

Web3/Solidity

Solidity의 에러 핸들러에는 require, assert, revert 세가지가 있습니다

각각 어떤 경우에 사용하는지, 어떻게 사용하는지 알아보겠습니다

 

require

require는 특정 조건이 참이 아니라면 에러 메시지를 발생하고 실행을 멈춥니다

require로 에러를 발생시키면 사용하려던 gas를 환불 시켜 줍니다

주로 사용자 사용자의 입력을 확인하는데 사용합니다

 

사용방법은 다음과 같습니다

require(msg.value % 2 == 0, "Even value required.");

 

assert

assert는 특정 조건이 참이 아니라면 에러를 발생시켜 실행을 멈춥니다

assert는 gas를 환불 시켜 주지 않습니다

주로 내부적 코드결함이 있는지 확인하는데 사용합니다

(오버플로우나 언더플로우 등 치명적인 문제를 찾을 때 사용)

 

사용방법은 다음과 같습니다

 assert(address(this).balance == balanceBeforeTransfer - msg.value / 2);

 

revert

revert는 조건없이 에러를 발생시킬 때 사용합니다

require와 마찬가지로 에러를 발생시키면 사용하려던 gas를 환불 시켜 줍니다

 

사용방법은 다음과 같습니다

revert("Not enough Ether provided.");

revert를 사용하려면 어쨋든 특정 조건문 안에 넣어야 하는데, 이는 require로 대체가 되기 때문에 

주로 require가 사용되고 revert는 잘 사용되지 않습니다