今日はSolidity開発時におけるエラーを紹介していきます。
スマートコントラクト開発時に以下のエラーが発生しました。
TypeError: This type is only supported in the new experimental ABI encoder. Use “pragma experimental ABIEncoderV2;” to enable the feature.
エラー発生時のソースコード
原因
関数の返り値に Struct の配列を設定することができないため、エラーが発生しているようです。
解決策
根本的な解決策は現時点ではなさそうです。
そのため以下のような形で対応するのが良いです。
データを都度取得する
配列でデータを返すのではなく、配列の要素を返す関数を作成し、配列の数だけ関数を実行する形です。
相当量のGASが必要になると思うので、パブリックチェーンでやるのは覚悟が必要です…。
ABIEncoderV2を使う(解決しないかも)
pragma experimental ABIEncoderV2;
を記載すれば動くようになるという記事を見つけて試してみました。
確かにエラーは発生しなくなり、コントラクトの実行はできているのですが、ログ的に上手く動いているかは不明です。
Web3で叩けば見えるはずなのでそのうち試してみます。誰か試したら教えてください。笑