실습: 다중 modifier 적용하기
하나의 함수에 여러 modifier 를 붙여 조건을 겹겹이 검사할 수 있습니다.
이번에는 onlyOwner 와 whenActive 두 modifier 를 함께 사용하는 컨트랙트를 만듭니다.
modifier 적용 순서
함수에 function bump() public onlyOwner whenActive { ... } 처럼 두 modifier 를 나열하면,
왼쪽에서 오른쪽 순서로 검사가 진행됩니다. 즉 먼저 onlyOwner 의 require(msg.sender == owner, ...)
가 호출자를 확인하고, 그 다음 whenActive 의 require(active, ...) 가 컨트랙트가 활성 상태인지
확인합니다. 두 검사를 모두 통과해야 비로소 _; 자리의 함수 본문이 실행됩니다. 하나라도 실패하면
revert 되어 counter 는 그대로 유지됩니다.
이렇게 권한 검사와 상태 검사를 따로 두면 각 modifier 를 다른 함수에서도 그대로 재사용할 수
있습니다.
해야 할 일:
address public owner와bool public active상태 변수를 선언하세요.constructor에서owner = msg.sender로 설정하고active = true로 초기화하세요.onlyOwnermodifier:require(msg.sender == owner, "only owner")후_;.whenActivemodifier:require(active, "not active")후_;.uint256 public counter상태 변수를 선언하세요.bump()함수에onlyOwner와whenActive를 둘 다 적용하고counter를 1 증가시키세요.onlyOwner가 적용된toggle()함수로active값을 반전시키세요.
toggle() 에는 onlyOwner 만 적용합니다. whenActive 까지 붙이면 비활성 상태일 때 다시 활성화할
방법이 사라져 컨트랙트가 잠겨버립니다.
완성 후 Run 을 눌러 모든 조건을 통과하는지 확인하세요.