【Solidity】Warning: Function declared as view, but this expression (potentially) modifies the state and thus requires non-payable (the default) or payable.

Ethereum×Solidity

本日もSolidity開発時におけるエラーについてご紹介していきます。
スマートコントラクトの開発をしているときに以下のようなWarningが発生しました。

Warning: Function declared as view, but this expression (potentially) modifies the state and thus requires non-payable (the default) or payable.

エラー発生時のソースコード

原因

修飾子をviewとして関数を定義している場合、Eventを仕込んでも発火しないようになっているようです。
※これは恐らくEventの発火におけるGasが発生するためです。

そのためエラーにはならないですが、Warningが発生します。
ちなみにこの場合のlogsの値は以下のようになります。
logs []

対応

view修飾子を外せばWarningは消えます。
※ただし、関数の呼び出しでGasが発生するようになります。

きちんと理解していないと、Eventを書いているのに発火しないなど思わぬバグにぶつかってしまうので抑えておくようにしましょう。

参考文献

Scroll to top