---
# System prepended metadata

title: Exit(normal)のテストシナリオ
tags: [テスト設計]

---

# Exit(normal)のテストシナリオ
###### tags: `テスト設計`

## ZKP
```javascript=
describe("ZKP回路", () => {
    it("user state内の任意の資産の量をmerkle proofで証明をする", () => {});
    it("資産がないのにあると偽るとfailする", () => {});
    it("適当なmerkle Proofをinputに入れてもfailする", () => {});
    it("適当なkeyHashedをinputに入れてもfailする", () => {});
    it("適当なprivateKeyをinputに入れてもonetime Addressが一致しないのでfailする", () => {});
});
```


## コントラクト
```javascript=
describe("contract", () => {
    it("main commitされたstateはそれ以降exitできるようになる", () => {});
    it("オペレーターのpre commitかmain commit時にexit申請があれば、同時にexitのtransferが処理される", () => {});
    
    it("Contract address mappingを頼りにL2のアドレスからL1のアドレスに変換される", () => {});
    
    it("指定されたaddressに資産をtransferしている", () => {});
    it("不正して適当なaddressにexitしようとしても、zkpのverifyが通らないのでexitでいない", () => {});
});
```

## オペレーター
```javascript=
describe("オペレーター", () => {
    it("ユーザーからzkproofを受け取りverifyする", () => {});
    it("inputが不適切な場合エラーを返す", () => {});

    it("validなproofの場合、user state rootのupdateをしexitを含めたrollup zkpを行う", () => {});
    it("invalidなproofの場合エラーを返す", () => {});
});
```


## ユーザー（Wallet）
```javascript=
describe("ユーザー（Wallet）", () => {
    
    it("資産を選択して、任意の量をexitするためにzkpできる", () => {});
    it("exitするL1アドレスを選択できる", () => {});
    it("お急ぎexitの場合main commitのコストを肩代わりすることができる", () => {});
    it("お急ぎfeeを払うことができる", () => {});
    
    
    it("proofをオペレーターに投げれる", () => {});
    it("エラーがあればエラーが返ってくる", () => {});
    
    it("stateがmain commit通過後の場合はすぐにexitできることをUIで表示する", () => {});
    it("stateがmain commit通過前の場合はすぐにexitできるないことをUIで表示する", () => {});    
});
```



## ここに書かないこと
- exit(freeze)
- deposit系