---
# System prepended metadata

title: 'Nary=4, PreState & PostState 梳'

---

# Nary=4, PreState & PostState 梳理


## 规则与图示
![image](https://hackmd.io/_uploads/H1nva9aGA.png)

- 忽略output 与 trace差异
- trace的高度为2，数据如图 4/5/6/7 节点

## Nary=2场景

### 再次理解step函数中 PreClaim 与 PostClaim计算？

#### PreClaim
- step 为 Attack情况，RootClaim 或 ParentPos - 1对应cliam
```
2 Attack 1, 4 Attack 2 中，对4进行step（Attack）， PreClaim 为 RootCliam
```
- step 为 Defend情况，Parentcliam
```
2 Attack 1, 4 Attack 2 中，对4进行step（ Defend）， PreClaim 为 4的Cliam
```

#### PostClaim
- step 为 Attack情况，Parentcliam
```
2 Attack 1, 4 Attack 2 中，对4进行step（Attack）， PostClaim 为 4的Cliam
```
- step 为 Defend情况，ParentPos + 1对应cliam
```
2 Attack 1, 4 Attack 2 中，对4进行step（Attack）， PostClaim 为 （4+1的 = 2的）2的Claim
```

#### 怎么理解 ParentPos +- 1 对应的claim？
- 这个节点本身没有上传claim（没actor提交这个节点），但通过找到他“祖先”，祖先的claim值为这个节点的claim值。 原理为A节点有claim值，A节点的最深、右节点也为这个claim值


### 结论： `指定节点pos进行step(attack & defend)，需要知道 pos-1、pos、pos+1 三个claim值`



## Nary=4的场景
![image](https://hackmd.io/_uploads/H1nva9aGA.png)

### 场景，对1进行Attack，提交4/5/6的Claim值，然后对4/5/6进行step
#### 疑问，对4进行step Defend，怎么取PostClaim？
- PreState 为 4的Claim
- PostState 为 4 + 1的Claim，但由于2的Claim没提交过，取不到5的Claim值

#### 推导
- 对4 step defend的语义，同意4是正确，同时也认可4 Attack的值1，即7（其中7的值，相当于1）
- 则推导出，不认可5 或 不认可 6
- 不认可5，但认可4，则可attack 5
- 不认可6，但认可5（如不认可5的值，需要attack 5），则可attack 6

#### 结论
- 4、5节点不能进行defend，只能attack
- 6节点，attack、defend 都支持
