실습: onlyOwner modifier 만들기
이제 배운 내용을 합쳐 직접 접근 제어를 구현해봅시다.
컨트랙트 배포자를 owner 로 저장하고, onlyOwner modifier 로 중요한 함수를 보호합니다.
constructor 는 배포 시점에 단 한 번 실행되므로, 그때의 msg.sender(= 배포자)를 owner 에
저장해 두면 됩니다. 그 다음부터는 onlyOwner modifier 가 require(msg.sender == owner, ...) 로
호출자가 owner 인지 검사하고, 통과했을 때만 _; 자리에서 함수 본문이 실행됩니다.
검사에 실패하면 트랜잭션이 revert 되어 상태 변경이 일어나지 않습니다. 이렇게 하면 setValue
같은 민감한 함수를 owner 만 호출하게 할 수 있습니다.
modifier 는 function setValue(uint256 newValue) public onlyOwner { ... } 처럼 가시성 뒤에
이름만 붙이면 적용됩니다.
해야 할 일:
address public owner상태 변수를 선언하세요.constructor에서owner를msg.sender로 설정하세요.onlyOwner라는 modifier를 만들어require(msg.sender == owner, "only owner")로 검사하고_;를 넣으세요.uint256 public value상태 변수를 선언하세요.onlyOwner가 적용된setValue(uint256 newValue)함수를 만들어value를 갱신하세요.
_; 를 빠뜨리면 함수 본문이 실행되지 않습니다. modifier 안에 require 와 _; 를 반드시 함께
넣으세요.
완성 후 Run 을 눌러 모든 조건을 통과하는지 확인하세요.