# 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