【Ethereum・Solidity】アクセス修飾子(public, private, internal, external)について

Ethereum

今日はSolidityのアクセス修飾子について解説していきます。

Solidity含め様々な言語において、各関数がどこからでもアクセスできて良いのかというと、そうではありません。
場合によっては特定のコントラクトからのみのアクセスを許容したり、コントラクト外からの呼び出しのみに対応しなければならないときが発生します。
その際に設定を行うのが、アクセス修飾子と呼ばれるもので、可視性修飾子とも呼ばれています。

そして、Solidityでは4つのアクセス修飾子が存在しています。

public

コントラクト外部
コントラクト内部
継承先

publicで定義された関数や変数は、同コントラクト内や継承したコントラクトからの呼び出しに対応しています。
さらに、コントラクト外部からの呼び出しにも対応しています。

基本的に、どこからの実行を許容するものという認識で良いと思います。
また、関数へ修飾子を何も付けなかった場合、publicとして扱われます。

private

コントラクト外部
コントラクト内部
継承先

privateで定義された関数や変数は、同コントラクト内の呼び出しにのみ対応しています。
継承されたコントラクトからの呼び出しに、対応していない点には注意すべきでしょう。

internal

コントラクト外部
コントラクト内部
継承先

internalはprivateに加えて、継承されたコントラクトからの呼び出しにも対応した形になっています。
変数へ修飾子を何も付けなかった場合、internalとして扱われます。

external

コントラクト外部
コントラクト内部
継承先

externalで定義された関数や変数は、外部からの呼び出しのみに対応しています。

アクセス修飾子まとめ

以下に表を一覧でまとめました。

Scroll to top