viewやpure関数で無限ループしたらどうなる?
viewやpureの関数を外部から呼び出したときはガス代がかからない。 これはトランザクションを作成して状態変数を書き換えるわけではなく、単にそのノードで計算するだけだから。
viewやpure以外の関数を実行するときには、ガスを消費し、ガスリミットを超えると Out of Gasで失敗する仕組みなので、非常に重い処理や無限ループなどでシステムが停止してしまうことにはならない。
では、view関数で無限ループを行うとどうなるのだろうか? 疑問に思ったので調べてみた。
どうやら、そのノードの実装方法によって異なるようだ。
Gethの場合、そのブロックのガスリミットの分しか実行しない。viewやpure関数ではガスを消費するわけではないが、ガスコストの計算はしているらしい。
Remixのようにクラッシュする場合もある。