今日はSolidityのアクセス修飾子について解説していきます。
Solidity含め様々な言語において、各関数がどこからでもアクセスできて良いのかというと、そうではありません。
場合によっては特定のコントラクトからのみのアクセスを許容したり、コントラクト外からの呼び出しのみに対応しなければならないときが発生します。
その際に設定を行うのが、アクセス修飾子と呼ばれるもので、可視性修飾子とも呼ばれています。
そして、Solidityでは4つのアクセス修飾子が存在しています。
Contents
public
コントラクト外部 | ○ |
---|---|
コントラクト内部 | ○ |
継承先 | ○ |
publicで定義された関数や変数は、同コントラクト内や継承したコントラクトからの呼び出しに対応しています。
さらに、コントラクト外部からの呼び出しにも対応しています。
基本的に、どこからの実行を許容するものという認識で良いと思います。
また、関数へ修飾子を何も付けなかった場合、publicとして扱われます。
private
コントラクト外部 | ✕ |
---|---|
コントラクト内部 | ○ |
継承先 | ✕ |
privateで定義された関数や変数は、同コントラクト内の呼び出しにのみ対応しています。
継承されたコントラクトからの呼び出しに、対応していない点には注意すべきでしょう。
internal
コントラクト外部 | ✕ |
---|---|
コントラクト内部 | ○ |
継承先 | ○ |
internalはprivateに加えて、継承されたコントラクトからの呼び出しにも対応した形になっています。
変数へ修飾子を何も付けなかった場合、internalとして扱われます。
external
コントラクト外部 | ○ |
---|---|
コントラクト内部 | ✕ |
継承先 | ✕ |
externalで定義された関数や変数は、外部からの呼び出しのみに対応しています。
アクセス修飾子まとめ
以下に表を一覧でまとめました。