# Exit(freeze)のテストシナリオ ###### 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する", () => {}); it("userStateMerkleRootの中にuserStateRootが含まれている", () => {}); it("userStateMerkleRootの中にuserStateRootが含まれていなければfailする", () => {}); it("onetime address listにonetime addressが入っていないことを証明する", () => {}); it("証明できなければfailする", () => {}); it("適当なProofを入れてもfailする", () => {}); it("適当なprivateKeyを入れてもfailする", () => {}); it("適当なnonceを入れてもfailする", () => {}); }); ``` ## コントラクト ```javascript= describe("contract", () => { it("一定時間L2のブロックがコミットされなかった場合、誰でもfreeze modeにすることができる", () => {}); it("freeze modeかどうかを確認できるview関数があり、freeze中であればtrueが返る", () => {}); it("freeze modeかどうかを確認できるview関数があり、freeze中でなければfalseが返る", () => {}); it("main commitされたstateはそれ以降exitできるようになる", () => {}); it("Contract address mappingを頼りにL2のアドレスからL1のアドレスに変換される", () => {}); it("指定されたaddressに資産をtransferしている", () => {}); it("適当なaddressにexitしようとしても、zkpのverifyが通らないのでexitでいない", () => {}); it("一度使用されたProofは再利用できない", () => {}); }); ``` ## ユーザー(Wallet) ```javascript= describe("ユーザー(Wallet)", () => { it("資産を選択して、任意の量をexitするためにzkpできる", () => {}); it("exitするL1アドレスを選択できる", () => {}); it("onetime address listをL1から構築する", () => {}); it("自分のn + 1のonetime addressがonetime address listに入ってないことを証明するzkpを実行する", () => {}); it("自分のn + 1のonetime addressがonetime address listに入っていた場合はfailする", () => {}); it("最新のuser stateがない場合は、オペレーターもしくは分散ストレージから取得する", () => {}); }); ``` ## ここに書かないこと - exit(normal) - deposit系