BlockChain/solidity

[Solidity] OpenZeppelin - Ownable

BEJM 2022. 5. 20. 15:48

Ownable

컨트랙트가 한번 배포가 되면 더 이상 바꿀 수 없습니다. 하지만 특정 상황에서 내용을 변경해야 하는 경우들이 있습니다. 예를 들어 다른 컨트랙트에서 정보를 받아오는 소스가 있는데 해당 컨트랙트에 문제가 생겨 정보를 받아 오지 못할 수 있습니다. 이러한 경우 컨트랙트 주소를 변경해줘야 합니다. 개발자는 컨트랙트에서는 결점을 보안하기 위해 정보를 수정할 수 있는 함수를 만듭니다. 그러면 컨트랙트를 배포한 이후에도 해당 함수를 통해 업데이트를 할 수 있습니다. 하지만 이러한 함수가 있다면 누구나 정보를 업데이트할 수 있다는 문제가 생깁니다.

 

누구나 컨트랙트를 업데이트할 수 있는 문제는 컨트랙트를 소유 가능하게 만듦으로써 해결할 수 있습니다. OpenZeppelin의 Ownable 컨트랙트를 이용하면 개발자가 컨트랙트를 소유할 수 있어 안전하게 컨트랙트를 사용할 수 있습니다.

 

Ownable의 역할

  • 컨트랙트가 생성될 때 owner에 msg.sender를 대입
  • onlyOwner 제어자를 사용해 특정한 함수를 소유자만 접근 가능하도록 함
  • 새로운 소유자에게 컨트랙트 소유권을 옮김

 

함수 제어자

함수 제어자는 modifier 키워드를 사용합니다. 함수처럼 직접 호출이 불가능 하지만, 함수 정의부 끝에 적어 해당 함수의 작동 방식을 제어할 수 있습니다.

 

ownable.sol파일에 있는 onlyOwner
modifier onlyOwner() {
    require(msg.sender == owner);
    _;
}