[Solidity]関数コントロール(functionmodifier)


関数コントローラ

function test() external view customModifier payable {
  /* ... */
}
上記定義関数の場合、externalviewcustomModifierpayableはいずれも関数制御者である.

1.アクセス制御者(可視修飾子)


関数がいつ、どこで呼び出されるかを制御します.
  • private契約内部の他の関数からのみ呼び出すことができます.
  • internal privateと同様であるが、この契約を継承する契約から呼び出すこともできる.
  • external契約外でしか呼び出せません.
  • public関数の内外で呼び出すことができます.
  • 2.ステータスコントローラ(state modifier)


    ブロックチェーンとのインタラクション方法について.
  • view , constantこの関数を実行しても、データは保存/変更されません.
  • pureこの関数は、ブロックチェーンにデータを格納したり、ブロックチェーンからデータを読み込んだりしません.
  • viewpureは、いずれも場外呼び出し時にガスを全く消費しない.ただし、同じパイプ内の他の関数で内部呼び出されると、ガスが消費されます.

    3.カスタムコントロール


    コントローラを独自の論理に基づいて定義し、関数に適用することもできます.
    // 메시지를 보낸 사람이 owner와 같은지 확인하는 제어자 정의
    
    modifier onlyOwner () {
    	require(msg.sender == owner);
      	_; // _;와 항상 함께 쓰인다.
    }

    4.買掛管理者💰✨


    関数呼び出しによってイーサネットを受信できる特殊な関数タイプを定義します.関数を実行しながら、クレジットカードアカウント(CA)に支払うことができます.payableを記述していない関数はイーサを送信できません.
    contract OnlineStore {
      function buySomething() external payable {
        require(msg.value == 0.001 ether);
        transferThing(msg.sender);
      }
    }

    𘥪address変数タイプの買掛金

    payableは仮想通貨のキーワードです.payableキーワードは、関数コントロールとしてのみならず、addressタイプの変数としても使用できます.address payableは、支払可能なアドレスタイプを意味する.address payable型変数には、イーサを伝送できる関数send()およびtransfer()が内蔵されている.
    // owner라는 payable한 address 선언
    address payable owner;
    
    // to라는 payable한 address를 인자로 갖는 function 선언
    function func(address payable to) public { /* ... */ } 
    📌 Reference
    https://cryptozombies.io/ko/course