... | ... | @@ -23,7 +23,7 @@ STOP |
|
|
|
|
|
### Witness Core Row
|
|
|
|
|
|
core row中的表格设计如下:
|
|
|
Witness Core Row用于记录每个操作的中间状态,包括操作码(opcode)、程序计数器(PC)、代码地址(code_addr)和栈值(value_lo 和 value_hi)等。其中JUMP的core row中的表格设计如下:
|
|
|
|
|
|
cnt=1 vers[0]~vers[7]的位置用来存放栈顶弹出的值,即next_pc
|
|
|
|
... | ... | @@ -40,6 +40,8 @@ cnt=1, vers[24]~vers[31]的位置用来存放去向为bytecode的LookUp, 即校 |
|
|
|
|
|
### 门约束
|
|
|
|
|
|
门约束用于确保每一步操作符合预期,包括栈操作和跳转验证。以下是详细的门约束设计:
|
|
|
|
|
|
1. 当前的OPCODE=JUMP
|
|
|
2. Stack Value约束(tag、state_stamp、 call_id、stack_pointer、is_write)
|
|
|
3. Auxiliary字段约束(state_stamp、stack_pointer、log_stamp、read_only)
|
... | ... | @@ -95,8 +97,18 @@ cnt=1, vers[24]~vers[31]的位置用来存放去向为bytecode的LookUp, 即校 |
|
|
|
|
|
### LookUp约束
|
|
|
|
|
|
LookUp约束用于验证跳转目标PC是一个有效的JUMPDEST指令位置。以下是详细的LookUp约束设计:
|
|
|
|
|
|
cnt=1的位置vers[24]~vers[31]的位置用来存放要lookUp的信息(next_pc的合法性,即校验next_pc在bytecode中是否存在)
|
|
|
|
|
|
其中,vers[24]~vers[31]的Witness Core Row 表结构如下:
|
|
|
|
|
|
```plaintext
|
|
|
| cnt | vers[24] | vers[25] | vers[26] | vers[27] | vers[28] | vers[29] | vers[30] | vers[31] |
|
|
|
|-----|-----------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|
|
|
|
| 1 | code_addr | pc | opcode | not_code | value_hi | value_lo | - | is_push |
|
|
|
```
|
|
|
|
|
|
来源:core
|
|
|
|
|
|
去向:bytecode
|
... | ... | |