# stateUpdateのテストシナリオ ###### tags: `テスト設計` ## state update zkp ```javascript= describe("state update zkp", () => { it("ステートを初期化しrootを算出する", () => {}); it("state diffを用意する", () => {}); it("用意されたstate diffとrootとuserStateを回路に入れて、証明し正しいrootがoutputされる", () => {}); it("不正なstate diffの場合failする", () => {}); it("state diffをSMTで管理し、同じstate diffが含まれてないことを証明する", () => {}); it("同じstate diffを適用しようとするとSMTのnon-inclusion proofが失敗するのでfailする", () => {}); }); ``` ## state update オペレーター ```javascript= describe("state update オペレーター", () => { it("受け取ったzk proofをverifyする", () => {}); it("invalidな場合エラーを返す", () => {}); it("そのstate updateはまだ実行されてないことを確認する", () => {}); it("既にそのstate updateが実施されていた場合はエラーを返す", () => {}); it("捏造されたstate diffの場合エラーを返す") it("validな場合は、Verkle Treeのuser stateのrootをアップデートする", () => {}); }); ``` ## state update ユーザー ```javascript= describe("state update ユーザー", () => { it("state diffをオペレーターから取得する", () => {}); it("state diffがない場合はエラーが返る", () => {}); it("自分のuser stateに対してstate diffをmergeする", () => {}); it("既にmergeされていればエラーが返る", () => {}); it("state diffのzkpを回す", () => {}); it("不正なinputの場合failする", () => {}); it("zk proofをオペレーターに投げる", () => {}); it("invalidなproofを投げるとエラーが返ってくる", () => {}); it("適用済みのstate diffのinvalidなproofを投げるとエラーが返ってくる", () => {}); it("state diffの残高を適当に増やすと、failする", () => {}); }); ```