IT/블록체인

[Solidity] modifier

KimCookieYa 2023. 9. 4. 00:37

modifier

  • 제어자(Modifier): 함수의 동작을 변경하거나 확장하기 위해 사용된다.
  • modifier는 함수가 호출되기 전이나 후에 실행될 추가적인 로직을 담고 있다.
  • 주로 스마트 컨트랙트의 함수가 특정 조건을 충족해야 실행될 수 있게 하거나, 상태 변경 등의 추가적인 작업을 수행하는 데 사용된다.

코드

pragma solidity ^0.8.0;

contract Ownable {
    address public owner;

    constructor() {
        owner = msg.sender;
    }

    modifier onlyOwner() {
        require(msg.sender == owner, "You are not the owner");
        _;
    }
}

contract MyContract is Ownable {
    uint public x;

    function setX(uint _x) public onlyOwner {
        x = _x;
    }
}
  • onlyOwner라는 modifier가 serX() 함수에 적용되어 있다.
  • 오직 owner만이 이 함수를 호출할 수 있다.

주요 특징

  • _; 코드가 있는 위치에 원래 함수의 코드가 삽입된다.
  • 재사용성: modifier는 한 번 정의하면 다양한 함수에서 재사용 가능하다.

장점

  • 코드의 중복을 줄일 수 있다.
  • 함수의 로직을 명확하게 표현할 수 있다.
  • 특정 조건을 만족해야 함수가 실행되도록 설정할 수 있다.

단점

  • 제어자가 복잡해지면 코드의 가독성과 유지 보수성이 떨어질 수 있다.
  • 제어자의 로직에 버그가 있으면 여러 함수에 동일한 버그가 전파된다.