블록체인 학습
0 XP

실습: 다중 modifier 적용하기

하나의 함수에 여러 modifier 를 붙여 조건을 겹겹이 검사할 수 있습니다. 이번에는 onlyOwner 와 whenActive 두 modifier 를 함께 사용하는 컨트랙트를 만듭니다.

modifier 적용 순서

함수에 function bump() public onlyOwner whenActive { ... } 처럼 두 modifier 를 나열하면, 왼쪽에서 오른쪽 순서로 검사가 진행됩니다. 즉 먼저 onlyOwner 의 require(msg.sender == owner, ...) 가 호출자를 확인하고, 그 다음 whenActive 의 require(active, ...) 가 컨트랙트가 활성 상태인지 확인합니다. 두 검사를 모두 통과해야 비로소 _; 자리의 함수 본문이 실행됩니다. 하나라도 실패하면 revert 되어 counter 는 그대로 유지됩니다.

이렇게 권한 검사와 상태 검사를 따로 두면 각 modifier 를 다른 함수에서도 그대로 재사용할 수 있습니다.

해야 할 일:

  1. address public owner 와 bool public active 상태 변수를 선언하세요.
  2. constructor 에서 owner = msg.sender 로 설정하고 active = true 로 초기화하세요.
  3. onlyOwner modifier: require(msg.sender == owner, "only owner") 후 _;.
  4. whenActive modifier: require(active, "not active") 후 _;.
  5. uint256 public counter 상태 변수를 선언하세요.
  6. bump() 함수에 onlyOwner 와 whenActive 를 둘 다 적용하고 counter 를 1 증가시키세요.
  7. onlyOwner 가 적용된 toggle() 함수로 active 값을 반전시키세요.

toggle() 에는 onlyOwner 만 적용합니다. whenActive 까지 붙이면 비활성 상태일 때 다시 활성화할 방법이 사라져 컨트랙트가 잠겨버립니다.

완성 후 Run 을 눌러 모든 조건을 통과하는지 확인하세요.

Code Editor
에디터를 불러오는 중...
실행 결과

Run 버튼을 눌러 코드를 실행하세요.