블록체인 학습
0 XP

실습: 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 { ... } 처럼 가시성 뒤에 이름만 붙이면 적용됩니다.

해야 할 일:

  1. address public owner 상태 변수를 선언하세요.
  2. constructor 에서 owner 를 msg.sender 로 설정하세요.
  3. onlyOwner 라는 modifier를 만들어 require(msg.sender == owner, "only owner") 로 검사하고 _; 를 넣으세요.
  4. uint256 public value 상태 변수를 선언하세요.
  5. onlyOwner 가 적용된 setValue(uint256 newValue) 함수를 만들어 value 를 갱신하세요.

_; 를 빠뜨리면 함수 본문이 실행되지 않습니다. modifier 안에 require 와 _; 를 반드시 함께 넣으세요.

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

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

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