Solidity 오류 키워드(Assert, rever, require)

five1star·2022년 10월 31일
0

솔리디티 함수 작성에서 느낀 가장 중요한 포인트는 validation이다.
함수 실행 validation이 잘못되어 잘못된 함수가 호출되거나 트랜잭션이 처리되면 돌이킬수가 없다. 하하^.^

따라서 함수의 따라서 알맞는 실행조건을 통해 유효성 검사를 해주는 일은 일이 반드시 필요하다.

함수에서 트랜잭션을 취소시키기 위해 오류를 발생시키는 키워드는 대표적으로 세 가지, 바로 Assert, revert, require다. 세 키워드는 각각 다음과 같은 특징을 가진다.

공통

mapping(address=>bool) private devs;

Assert

assert(devs[msg.sender] == true);

assert는 bool값을 매개변수로 받으며, 조건이 false일시에 오류를 일으킨다. 컴파일러 0.8 이전에는 오류발생에 따른 가스비를 환불하지 않고 모두 소비하며, 0.8이후 버전에서는 오류 및 가스비를 환불 한다.

Revert

revert("Revert: revert condition active");

revert는 임의로 오류를 발생시키며, 오류 발생에 따른 메세지를 출력할 수 있다. 다만, revert는 선언 그 자체로 오류를 발생시키기 때문에 아래와 같이 Revert가 발생할 조건을 함께 명시함으로 사용할 수 있다. 실패에 따른 미사용 가스비를 환불한다.

if(condition){
revert("revert condition active");
}

Require

require는 직전에 언급한 revert와 if문을 결합한 형태다. require 구문에 조건이 해당될 경우에는 revert가 일어나며, 트랜잭션 실패에 따른 미사용 가스비를 환불한다. 단, revert와 주의할 차이점은 require에서 오류가 해당 컨디션이 '실패할 때' 일어난다는 것이다.

require(devs[msg.sender] == true, "Require: msg.sender is not Dev!");

위 문장에서 만약 devs[msg.sender]가 true라면 해당 require구문은 패스된다. 이 오류 키워드가 작동하는 시점은 바로 컨디션이 false일 경우다.

Modifier with Require

모디파이어는 함수의 동작을 변경시키기 위해서 사용되는 키워드다. 모디파이어에 대한 사용법은 별도의 모디파이어의 사용법에서 정리하며, 아래와 같은 방법으로 require와 함께 validation을 위해 쉽게 사용할 수 있다.

modifier onlyDev {
require(devs[msg.sender] == true, "onlyDev: msg.sender is not Dev!");
_;
}


profile
자라나라 코드코드

0개의 댓글