---
# System prepended metadata

title: stateUpdateのテストシナリオ
tags: [テスト設計]

---

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