|
轨迹解析器(trace parser)是将EVM程序的官方执行轨迹(trace)转化成零知识证明电路可以处理的数据结构的模块。
|
|
轨迹解析器(trace parser)的作用是将EVM程序的官方执行轨迹(trace)转换成零知识证明电路可以处理的数据结构。以下是对其工作过程的详细描述:
|
|
|
|
|
|
我们选择trace的json输出格式,以便于程序处理。trace文件是.jsonl格式,每一行是一步json格式的trace。轨迹解析器读取每一步轨迹,解析其json中的数据,然后转化成为电路的输入——证据Witness。
|
|
### 输入格式
|
|
|
|
|
|
每一步的格式如下
|
|
我们选择了trace的JSON输出格式,以便于程序处理。trace文件的格式是.jsonl,每一行代表执行的一步,包含一个json格式的trace。每一步的格式如下:
|
|
- pc
|
|
|
|
- op
|
|
|
|
- gas
|
|
|
|
- gasCost
|
|
|
|
- depth
|
|
|
|
- stack
|
|
|
|
- memory
|
|
|
|
- storage
|
|
|
|
|
|
|
|
trace parser将此格式的数据解析、读入,然后依照我们的witness设计,将其转化为witness表格。 |
|
- **pc**: 程序计数器(Program Counter)
|
|
\ No newline at end of file |
|
- **op**: 操作码(Opcode)
|
|
|
|
- **gas**: 剩余的gas量
|
|
|
|
- **gasCost**: 本步骤的gas消耗
|
|
|
|
- **depth**: 调用深度
|
|
|
|
- **stack**: 当前的堆栈状态
|
|
|
|
- **memory**: 当前的内存状态
|
|
|
|
- **storage**: 当前的存储状态
|
|
|
|
|
|
|
|
### 解析过程
|
|
|
|
|
|
|
|
轨迹解析器逐行读取轨迹文件中的每一步,解析其JSON数据,然后转化为电路的输入——证据Witness。以下是解析过程的详细步骤:
|
|
|
|
|
|
|
|
1. **读取轨迹文件**:
|
|
|
|
- 轨迹解析器读取.jsonl格式的轨迹文件。
|
|
|
|
- 每一行都是一个JSON格式的trace,表示EVM程序执行过程中的一步。
|
|
|
|
2. **解析JSON数据**:
|
|
|
|
- 轨迹解析器解析每一行的JSON数据。
|
|
|
|
- 提取其中的字段:pc、op、gas、gasCost、depth、stack、memory、storage。
|
|
|
|
3. **转化为Witness表格**:
|
|
|
|
- 根据解析的JSON数据,依照我们的witness设计,将其转化为witness表格中的相应数据。
|
|
|
|
- 将每一步的数据映射到零知识证明电路可以处理的格式中。
|
|
|
|
|
|
|
|
### 示例
|
|
|
|
|
|
|
|
假设我们有以下一行JSON格式的trace:
|
|
|
|
|
|
|
|
```json
|
|
|
|
{
|
|
|
|
"pc": 0,
|
|
|
|
"op": "PUSH1",
|
|
|
|
"gas": 1000000,
|
|
|
|
"gasCost": 3,
|
|
|
|
"depth": 1,
|
|
|
|
"stack": [],
|
|
|
|
"memory": [],
|
|
|
|
"storage": {}
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
轨迹解析器的处理步骤如下:
|
|
|
|
|
|
|
|
1. **读取轨迹文件**:
|
|
|
|
- 读取到上述JSON数据行。
|
|
|
|
2. **解析JSON数据**:
|
|
|
|
- 提取字段:
|
|
|
|
- `pc`: 0
|
|
|
|
- `op`: "PUSH1"
|
|
|
|
- `gas`: 1000000
|
|
|
|
- `gasCost`: 3
|
|
|
|
- `depth`: 1
|
|
|
|
- `stack`: []
|
|
|
|
- `memory`: []
|
|
|
|
- `storage`: {}
|
|
|
|
3. **转化为Witness表格**:
|
|
|
|
- 将提取的数据映射到witness表格中。
|
|
|
|
- 例如,将 `pc` 映射到 witness 表格的 `pc` 列,将 `op` 映射到 `opcode` 列,依次类推。
|
|
|
|
|
|
|
|
总之,轨迹解析器通过解析EVM执行轨迹的JSON数据,将其转化为零知识证明电路可以处理的witness数据结构。这个过程包括读取轨迹文件、解析JSON数据、并将数据映射到witness表格中,从而使得零知识证明电路能够利用这些数据进行证明。 |
|
|
|
\ No newline at end of file |