Be lazy, Be crazy

constructor && Ownable 본문

카테고리 없음

constructor && Ownable

정신이 많이없는 개발자 2022. 3. 14. 09:55
728x90
반응형
Constructor개념은 많은 언어들에서 보았던 개념이다. java에서는 객체가 생성될때 제일 먼저하는 일이며 보통 값을 초기화 시켜줄 때 많이 하는 작업으로 알고있다. 

solidity에서도 마찬가지로 컨트랙트가 만들어질 때 제일 먼저 실행된다고 생각하면 될 것같다. 
제일먼저 실행된다 == 초기화시킨다 == 첫 변수에 내가원하는 값으로 셋팅한다. 
이정도로 생각하면 코드를 보고 실행할 때 수월 할 것같다. 

그렇다면  Ownable란 무엇일까요?? 

전글에서 배웠던 modifier개념과 owner변수를 조합해서 onlyOwner라는 modifier 생성하는 것이다. 
이렇게 되면 owner = msg.sender 이 의미는 owner는 이 컨트랙트를 배포한 사람이 되는 것이다.

이 onlyOwner를 함수에 붙여서 사용하면 우리는 제한을 줄 수가있다. 배포한사람 즉 owner가 아니면 함수를 사용하지 못한다는 
조건을 생성해서 실행시킬 수 있는 것이다.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;


contract Constructor {
    address public owner; //default address(0)
    uint public x;  //default 0
    

    //우리는 생성자를 통해서 owner, x값을 초기화 시킬 수 있습니다. 
    constructor(uint _x) {
        owner = msg.sender;
        x = _x;
    }
}   

contract Ownable {
    address public owner;
    constructor () {
        owner = msg.sender;
    }

    //컨트랙을 배포한 계정만 함수를 사용할수 있는 모디파이어
    modifier onlyOwner() {
        require(msg.sender == owner, "caller is not owner");
        _;
    }
    
    //컨트랙트 배포 계정이 소유자를 바꿔주는 함수 
    function setOwner(address _newOwner) external onlyOwner {
        require(_newOwner != address(0), "invalid address");
        owner = _newOwner;
    }
}​
반응형
Comments