# 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系