foundry

【foundry】ERC721Queryableのfoundryのサンプルテスト

標準的な NFT プロジェクト(ERC721AQueryableベース)を題材とした fondryのテストを作成しました。

ソースコードは下記を参照ください。

https://github.com/eggdragons/foundry-SampleERC721AQueryable

ERC721Queryableのfoundryのサンプルテスト

テスト時間が非常に長くなるため、極力テストの数を絞っています(特に ffi)。

testnumbertime
normal31 + 38s + 1s
fork160s
ffi2900s

そのため、mint テストについては、想定する販売ケースに合わせてテストを追加してください。

また、継承しているコントラクトのロジックテストは各コントラクト毎に実施されているものとし、継承できているかのテストのみ実装しています。

注意事項:constructorMint(ERC2309)に使用されるアドレスを完全に排除できていません。

エラーが出た場合には、エラーが出たテストを単独で実施して検証してみてください。

forkテストやffiテストについて

merkleProof については、ffi test にて動作確認を行なっています。

OpenSea operator-filter-registry については、fork test にて mainnet を fork してブラックリストの動作確認を行なっています。

フォルダ構成

コントラクト

メイン:SampleERC721AQueryable.sol

販売データ:SaleInfoData.sol

(本来コントラクトに保存すべきデータではないので、当該コントラクトを使用するのではなく、セールのたびに上書きする方式を推奨)

テスト

メイン:SampleERC721AQueryable.t.sol

販売データ:SaleInfoData.t.sol

merkleProof 関係:Ffi.t.sol

OpenSea operator-filter-registry 関係(オンチェーン):Fork.t.sol

ヘルパー:ConstructorDatas.t.sol / InternalFunction.t.sol / TestHelpers.t.sol

使い方

ノーマルテストの準備

forge install

ffiテストの準備

npm i
npm run compile

必要に応じて、ts-src/merkle/allowlist.jsonの中身を変更してください。

forklテストの準備

ForkTest する際は、root フォルダに.envの中に、下記を追加してください。

MAINNET_RPC_URL = https://mainnet.infura.io/v3/{API_KEY}

総合テスト(全てのテストが実施されます)

forge test --ffi

コントラクトのmethodとテストの対比表について

リポジトリのREADMEを参照ください!

-foundry