-
[solidity] 예외처리 방법들 require, revert, assertsolidity 2023. 3. 25. 15:14반응형
보통의 경우 예외처리를 필요로 하는경우에 require 만으로도 대부분 충분하다.
그래서 다른 방법들에 대해서 놓치기 쉽다 같은용도의 문법이 여러개인것은 다양한 경우속에서 고려되어야 하면서 동시에 중요한 부분이기도 한 케이스 들이 많기 때문에 자주 사용하지 않더라도 그부분을 잘 숙지 하고 있어야 한다.
1. 검증
2. 메시지
위 3가지 요소로 나눠서 숙지해 놓으면 편한거 같다.
require(!_blacklist[msg.sender],"blacklist");
require의 경우 첫번째 인자의 결과값이 true false 인지 검증 이후에 false 값일 경우 에러메시지를 반환시킬수 있고 이후에 모든 실행을 롤백한다.
if(_blacklist[msg.sender]){ revert("blacklist"); }
revert 의 경우 자체적으로 검증하지 않고 실행을 중지시키고 지정된 메시지를 반환할수 있다. 그렇기 때문에 이전에 검증과 함께 if else 문이나 switch 문에서 함께 쓰인다. send() 같은 경우에 이더를 보낸후 전송실패시 처리를 해준다던가 하는 경우에 쓰이면 좋을거 같다.
assert(index < myArray.length);
검증부가 false인경우 코드실행이 중지되고 실행중인 함수를 롤백한다. 따로 메시지는 없음
따라서 assert의 경우는 에러메시지를 확인하는 용도가 아닌 절대로 코드상 일어나서는 안되는 케이스들에 사용된다
오버플로우나 들어올수 없는케이스가 들어온경우에 사용되며 그렇기 때문에 주로 코드 하단부에 작성이된다.
'solidity' 카테고리의 다른 글