[Solidity] Error handling

Ethan·2023년 7월 31일
0

Solidity

목록 보기
1/13
post-thumbnail
키워드주요 기능주로 사용되는 상황가스 소비와 관련된 특징
require주어진 조건이 참인지 검증입력값의 유효성 검사, 사전 조건 확인실패 시, 가스를 반환함
revert실행 중단 및 상태 변경 롤백복잡한 조건 검사, 함수 내부 오류 처리실패 시, 가스를 반환함
assert내부 오류나 불변성(invariants) 검증코드의 논리적 오류 검사, 후 조건 확인실패 시, 가스를 반환하지 않고 모든 가스를 소비함

차이점을 명확하게 알아야 한다.

require

주어진 조건이 참인지 확인하는 것에 사용한다. 주로 입력값의 유효성 검사나 사전 조건 확인에 쓰인다.
require 조건이 참이 아닌 경우, 현재 함수는 오류 메세지와 함께 종료되고 상태변경은 모두 롤백된다. 이를 통해서, 예기치 못한 오류나 잘못된 입력으로부터 스마트 컨트랙트를 보호할 수 있다.

revert

함수의 실행을 즉시 중단한다. 그리고 모든 상태변경을 롤백한다.
revert는 복잡한 조건 검사나 함수 내부에서 발생한 오류 처리에 주로 쓰인다. 이것은 특정 조건이 충족되지 않았을 때 함수의 실행을 안전하게 중단하고 모든 상태변경을 원래대로 되돌리는 역할을 한다.

assert

주로 내부 오류를 확인하거나 불변성을 검증하는데 사용된다.
assert의 조건이 참이 아닐 경우, 이는 보통 코드의 심각한 오류를 의미한다. 함수는 오류를 발생시키고 종료될 것이다.
좀 특이한 건, assert는 가스 소비에 대한 환불을 하나도 안해준다는 것이다. 그리고 이건 외부 입력을 검증하는데 사용되기 보다는 코드의 논리적 오류를 잡아내는 데에 사용된다.

가급적이면 assert는 논리적 불변성(Invariants)을 확인하는 것에만 사용하고, 사용자 입력 검증이나 예외처리 같은 경우에는 require 또는 revert를 사용하는 것을 권장한다.

profile
Frontend & Smart Contract developer

0개의 댓글