Solidity modifier
Solidity modifier
Solidity
에는 modifier
라는 것이 있다.
modifier는 우리가 컨트랙트를 개발할 때 함수의 동작을 제어할 수 있도록 해준다.
간단한 modifier의 예시를 보자.
_;
키워드는 함수의 나머지 body 부분을 실행하라는 명령을 나타낸다.
다음과 같이 함수에 적용할 수 있다.
보통 modifier를 통해서 달성하고자 하는 목표는 다음과 같다.
Access control :
onlyOwner
와 같이 Role에 따라 함수 Access를 제한하기 위함Precondition : 함수의 동작을 위한 전제조건, (e.g.
decorator
를 이용한 제어와 비슷하다)
보통 modifier 를 작성할 때 error 및 assestion을 처리하기 위해 revert()
, require()
및 assert()
와 같은 몇 가지 기능을 사용한다.
revert
revert()
함수는 블록체인의 상태를 현재 함수가 호출되기 전의 상태로 되돌린다.
이는 현재 기능에서 블록체인에 대한 변경 사항이 취소되었음을 의미한다.
일반적으로 처리 방법을 모르거나 처리하지 않으려는 오류가 발생할 때 사용된다.
revert()
는 오류에 대한 자세한 정보를 제공할 수 있는 선택적 문자열 메시지도 허용한다.
required
require()
함수는 항상 참이어야 하는 항목의 유효성을 검사하는 데 사용된다.
일반적으로 입력의 유효성을 검사하기 위해 함수를 시작할 때 또는 작업의 결과를 검사하기 위해 함수를 실행할 때 사용된다.
require()
내부 조건이 false이면 revert()와 유사하게 트랜잭션을 반환한다.
require()
는 또한 요구 사항이 충족되지 않은 이유를 설명하는 선택적 문자열 메시지를 허용한다.
assert
assert()
함수는 require()
와 비슷하지만 내부 오류 또는 절대 발생해서는 안 되는 조건을 확인하는 데 사용된다.
assert()
내부의 조건이 거짓이면 심각한 문제가 발생하여 트랜잭션이 반환됩니다.
assert()
는 고장이 났을 때 남은 가스를 모두 소비하므로, revert()
보다 사용 비용이 더 많이 필요하다.
나라면 실제 프로덕션에서는 require와 revert를 사용하고, assert는 테스트넷 혹은 디버깅을 위해 사용할 것 같다.
Last updated