Ethereum: Solidityの Stack Too Deep問題

NO IMAGE

Ethereumのお約束。Stack Too Deep問題のメモ

概要

  • 大まかに16か17のローカル変数と返り値を書くと、コンパイル時にStack Too Deepと出る問題
  • 最低16 or 17以上書くとダメだけど、それより少なくてもダメな場合もある (function内の挙動による)

対応方法

  • 引数をまとめる
  • ローカル変数を減らす
  • 返り値を減らす
  • functionを分ける
  • stringは2つのスタック・スロット使うので、byte32にする
  • structにまとめる?

その他、色々やり方があるかも知れません。

仕組み

  • 2つのスタック・スロットを使う沢山のストレージ・リファレンスがある
  • スロットの中にオフセットが必要
  • EVMは、ある深さのスタックまでしかリーチできない
  • ローカル変数は、スタックの中に保存されている
  • この問題は、スタックの問題ではなく、ストレージの問題
  • 変数は、スタックの中にぎゅうぎゅう詰めになっているわけではない
  • 例えば、bool変数は、フルスタックの場所をとる

参考

関連用語

  • Ethereum, イーサリアム
  • Solidity
  • EVM, Ethereum Virtual Machine
  • stack, スタック, stack slot, スタックスロット

ブロックチェーンの専門企業で働いてみませんか?

当サイトを運営するコンセンサス・ベイス株式会社では、エンジニア、プロジェクトマネージャー、ライターなど、様々なポジションで一緒に働いてくださる仲間を募集しています。

ブロックチェーン業界にチャレンジしてみたいあなたのご応募をお待ちしております!

イーサリアム(Ethereum)カテゴリの最新記事