# Main commitのテストシナリオ ###### tags: `テスト設計` ## コントラクト ```javascript= describe("Main commit", () => { it("proofがcalldataに載っている", () => {}); it("正常なproofの場合zkVerifyが通る", () => {}); it("不正なproofの場合zkVerifyが通らない", () => {}); it("public inputの引数の1つが前のrootになっている", () => {}); it("public inputの引数の1つが前のrootになっていなければrevertする", () => {}); it("新しいブロックが作られたeventが発火する", () => {}); it("最初のブロックの場合はrecursive proofがなくてもコミットできる", () => {}); it("最初のブロックではないのに最初のブロックだと偽った場合は、コミットできない", () => {}); it("前回のMain commitから今回のmain commitまでのproofをrecursiveで証明しcommitできる", () => {}); it("前回のMain commitから適当にpre commitをスキップしてrecursiveしてもcommitできない", () => {}); it("適当なpre commitから今回のmain commitまでのproofをrecursiveで証明していてもcommitできない", () => {}); }); ``` ## 回路のテスト これはmain commitのrollup回路と全く同じなのでそちらを参照する。 ```javascript= describe("Main commit Recursive Circuits", () => { it("前回のmain commitから今回のmain commitまでのpre commitのproofが全部inputに入っている", () => {}); it("1つでも変なproofがあったら通らない", () => {}); it("pre commitのproofをverifyできる", () => {}); it("proofによってstateの遷移が確定しているので、任意のrootを設定することはできない", () => {}); }); describe("Rollup Circuits", () => { it("txsがinputになっている", () => {}); it("ERC20のtransferができる", () => {}); it("ERC721のtransferができる", () => {}); it("ERC1155のtransferができる", () => {}); it("txのuser state zkpのverifyができる", () => {}); it("txの署名zkpのverifyができる", () => {}); it("state diffのupdate zkpをverifyできる", () => {}); it("いずれかのverifyが1つでもこけると回路がfailする", () => {}); it("onetime addressがすでに使われてないことを検証する", () => {}); it("onetime addressが使われていると回路がfailする", () => {}); it("1つのバッチで同じonetime addressが使われていた場合も回路がfailする", () => {}); }); ``` ## ここに書かないこと - pre commit - exit