search
LoginSignup
8

More than 5 years have passed since last update.

posted at

updated at

Solidityのfunction修飾子がよくわからなくなるのでメモ

Solidityを使っているとfunctionを定義する時にpublicやらいろいろ修飾子をつけるのですが、いっぱいあってよくわからなくなるので意味をメモ書きします。

  • internal,external,public,private
    • public コントラクト内部からも、外部メッセージでも呼び出すことができるfunction
    • external ほぼpublicと一緒だが内部でfunctionを呼び出す時にthis.(function名)と呼ばないといけない (External functions are sometimes more efficient when they receive large arrays of data.) とも書いてあるので使うといいことあるかも?
    • internal 定義したコントラクトと派生コントラクトのみで呼び出すことができる。外部呼び出し不可
    • private 定義したコントラクトのみで呼び出し可能。派生コントラクトでも呼び出し不可
  • pure
    • 状態変数を読みも書きもしないfunction
  • constant, view
    • 状態変数はreadonlyで書き込まないfunction
  • payable
    • Etherを送信できるfunction

ちなみにSolidityではmodifier構文でカスタムの修飾子を作ることができます。このあたりも開発の時はドキュメント化しないとわからなくなりますね。あとJava、C#と違って修飾子がパラメータの後ろにつけるところも間違えやすいので注意。


contract Hoge {
   address owner;

   /* トランザクション送信者がownerであることを確認するmodifier */
   modifier onlyOwner() { assert(msg.sender == owner); _; }

   function ownerOnlyFunction() public onlyOwner {
      /* owner限定で実行できるfunction */
   }
}

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
What you can do with signing up
8