この記事は以下の記事の翻訳・まとめです。
https://yamenmerhi.medium.com/foundry-vs-hardhat-918c55e47add
主な違い
1. コンパイル速度
FoundryはRustで作られていて、どうやらコンパイル速度が速いらしいということを知ってる人が多いと思います。
https://github.com/YamenMerhi/foundry-lsp-smart-contracts
このレポジトリでの検証結果では、
- hardhat: 39.33s
- Foundry: 26.22s
hardhatの2/3程になっています。
2. テスト言語
Hardhat => Javascript/Typescript
Foundry => Solidity
Foundryでは、コントラクトとテスト両方solidityで書くので、開発からテストに移る際に脳の切り替えをせずにそのまま始めることができます。+JSよりもSolidityの方がテスト速度が全然速いです。
3. Dependencies
Hardhat => npm
Foundry => git submodule (default)
Foundryにしかない機能
Traces
トレースは、関数処理の内部状態を見ることができる機能です。どの関数がどんなパラメーターで呼び出され、どのイベントが吐かれたかなどを、構造的に確認することができます。これにより、Hardhatであれば コントラクト内でconsole.log()して頑張っていたデバッグが超簡単になります。
Fuzz Testing
Fuzzing testとも言い、ランダムなパラメーターを渡すテスト方式です。通常のUnitTestと同じくらい大事なテストですが、知名度の低さやそもそもの導入難易度の高さでほとんどの場合無視されています。
開発者が想定していない状態をテストでき、スマコン開発では必須級です。
Foundryではこれをネイティブ実装しており、個人的にはこれが一番嬉しいです。
もし想定と異なる動きをした際、その時渡されたパラメーターを出してくれます。
最後に
Foundryは非常に強力ですが、まだまだ開発初期段階です。ドキュメントやチュートリアルの充実、追加機能がユーザーから求められています。
参考リンク
https://www.youtube.com/watch?v=Rp_V7bYiTCM&t=1119s
https://book.getfoundry.sh/index.html
https://www.paradigm.xyz/2021/12/introducing-the-foundry-ethereum-development-toolbox