BloCCat

Ownable.sol 본문

Study/Solidity

Ownable.sol

uooy 2021. 8. 29. 21:31

생성자 : 컨트랙트랑 같은 이름으로 정의하거나 constructor() 로 정의 

 

modifier : 함수 제어자, 다른 함수들에 대한 접근을 제어하기 위해 사용되는 일종의 유사 함수.

 

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
  address public owner;

  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  function Ownable() public {
    owner = msg.sender;
  }


  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(msg.sender == owner);
    _;
  }


  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param newOwner The address to transfer ownership to.
   */
  function transferOwnership(address newOwner) public onlyOwner {
    require(newOwner != address(0));
    OwnershipTransferred(owner, newOwner);
    owner = newOwner;
  }

}
  • 컨트랙트의 생성자가 owner에 msg.sender(컨트랙트를 배포한 사람)를 대입
  • 특정한 함수들에 대해서 오직 소유자만 접근할 수 있도록 제한 가능한 onlyOwner 제어자를 추가 
  • 새로운 소유자에게 해당 컨트랙트 소유권을 옮길 수 있게 함 

대부분의 컨트랙트 개발자들은 첫 컨트랙트에 이 컨트랙트를 상속시킴.

contract MyContract is Ownable {
  event LaughManiacally(string laughter);

  // 아래 `onlyOwner`의 사용 방법을 잘 보게:
  function likeABoss() external onlyOwner {
    LaughManiacally("Muahahahaha");
  }
}

likeBoss() 함수를 호출하면 onlyOwner의 코드가 먼저 실행되고 _;를 만나면 다시 likeBoss()로 돌아가 

해당 코드 (LaughManiacally())를 실행함. 

'Study > Solidity' 카테고리의 다른 글

효율적인 Contract 작성법 (2) - 가스 절약  (0) 2021.08.30
효율적인 Contract 작성법 (1)  (0) 2021.08.29
solidity 기초 (3)  (0) 2021.08.29
solidity 기초(2)  (0) 2021.08.29
solidity 기초 (1)  (0) 2021.08.29