📚

[Astar]エラー備忘録15( コンパイル時に「An unexpected panic function...」発生)

2023/03/05に公開

次のエラーが出たため、備忘録として残します。

1 結論

エラー発生状況:PSP22FlashMintコンパイル時に「An unexpected panic function...」発生

結論:「overflow-checks」や「lto」を「false」にする(暫定処理)

2 エラー内容

コンパイル実行時にこちらのエラーが発生しました。

ERROR: Validation of the Wasm failed.


ERROR: An unexpected panic function import was found in the contract Wasm.
This typically goes back to a known bug in the Rust compiler:
https://github.com/rust-lang/rust/issues/78744

As a workaround try to insert `overflow-checks = false` into your `Cargo.toml`.
This will disable safe math operations, but unfortunately we are currently not 
aware of a better workaround until the bug in the compiler is fixed.


ERROR: An unexpected import function was found in the contract Wasm: _ZN4core9panicking5panic17hfd9ccce09b2a6620E.
The only allowed import functions are those starting with one of the following prefixes:
seal, memory

chatGPTでも聞いてみましょう。

書かれている通り、予期しない、「パニック関数」がインポートされたためエラーとなっています。

ちなみに、個人的には、最後の「許可されるインポート関数の接頭辞には、「seal」,
「memory」がある」という部分が気になっています。


chatGPT

これはすでに知られているバグとありますが、インポート元が、「seal」,
「memory」をつけるように修正すれば直るのでは?と思いました。

ただ、それを言っても仕方ないので、現実的な解決策を見ようと思います。
https://github.com/rust-lang/rust/issues/78744

下のように、「overflow-checks」や「lto」が「true」などの条件が揃った時は、このパニック関数がインポートされるようです。

そのため、解決策はシンプルで、「overflow-checks」や「lto」を「false」にするというものです。

ただ、もちろん、オーバーフローチェックなどがないため、良い解決策ではなく、暫定的なものかなと思いました。

ちなみに、「lto」は「Link-Time Optimization」の略称のようです。

「Cargo.toml」に下のように設定することで、エラーが出なくなりました。

今回は以上です。

Discussion