---
# System prepended metadata

title: Pre commitのテストシナリオ
tags: [テスト設計]

---

# Pre commitのテストシナリオ

###### tags: `テスト設計`

## コントラクト

```javascript=
describe("pre commit", () => {
    // 正常系
    it("proofがcalldataに載っている", () => {});
    it("proofのhash値がstorageに刻まれている", () => {});
    it("第３者が不正してないか、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