# 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する", () => {});
});
```