# Pre commitのテストシナリオ ###### tags: `テスト設計` ## コントラクト ```javascript= describe("pre commit", () => { // 正常系 it("proofがcalldataに載っている", () => {}); it("proofのhash値がstorageに刻まれている", () => {}); it("第3者が不正してないか、calldataのproofから検証できる", () => {}); it("storageのrootが変わっていることを確認する", () => {}); // チャレンジのview関数 it("proofがvalidかどうか検証するためのview関数がある", () => {}); it("validな場合trueが返る", () => {}); it("invalidな場合falseが返る", () => {}); // チャレンジ系 it("invalidなproofだった場合、pre commitした人がスラッシュされる", () => {}); it("invalidなproofだった場合、そのブロックがなかったことになる", () => {}); it("スラッシュ時にスラッシュeventが発火している", () => {}); it("validなproofだった場合何も起こらない", () => {}); it("pre commitがN回(例: 10回。preとmainがどのぐらいかによって変更する)とも偽proofという最悪の場合を想定して、最新のmain commitまで戻れるか試す(1回のtxで全部巻き戻す必要はない)", () => {}); it("root hashが前のブロックのものに戻っている", () => {}); // exit系 it("pre commitでコミットされたstateはexitはできない", () => {}); it("逆にmain commitを通ったstateはexitできる", () => {}); }); ``` ## 回路のテスト これはmain commitのrollup回路と全く同じなのでそちらを参照する。 ## ここに書かないこと - rollup回路 - main commit