LoginSignup
8
4

More than 3 years have passed since last update.

【Solidity】private、public、internal、externalの違い

Posted at

Solidityの関数、変数につけることができるアクセス制限。
具体的には以下の4つを設定できる。
・private
・public
・internal
・external

それぞれの違い、使い所が分からなくなってしまう時があるので備忘録として残したいと思う。

private

定義したコントラクト内でのみ呼び出し可能。
継承した子コントラクトでも呼び出すことはできない。

範囲 呼び出し可否
コントラクト外部 ✖️
コントラクト内部
継承先 ✖️

public

定義したコントラクト、そのコントラクトを継承したコントラクト、及び外部からも呼び出し可能。
関数はデフォルトでpublicになっているため、何も指定しないとpublicなので注意が必要。

範囲 呼び出し可否
コントラクト外部
コントラクト内部
継承先

internal

定義したコントラクト、そのコントラクトを継承したコントラクトから呼び出し可能。
変数はデフォルトでinternalになっているため、何も指定しないとinternalになる。

範囲 呼び出し可否
コントラクト外部 ✖️
コントラクト内部
継承先

external

外部からの呼び出しのみ可能。

但し、thisを使用することで内部から外部的に呼び出すことは可能。
であれば、publicと変わらないように見える。
ところがpublicは引数の値をメモリに保存し、externalはメモリ保存しないため、externalの方がgasの消費が低く済むらしい。

参考:https://ethereum.stackexchange.com/questions/19380/external-vs-public-best-practices

範囲 呼び出し可否
コントラクト外部
コントラクト内部 ✖️
継承先 ✖️
8
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4