Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
zkevm-circuits
zkevm-circuits
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Labels
    • Service Desk
    • Milestones
  • Merge Requests 0
    • Merge Requests 0
  • CI / CD
    • CI / CD
    • Pipelines
    • Jobs
    • Schedules
  • Operations
    • Operations
    • Incidents
    • Environments
  • Packages & Registries
    • Packages & Registries
    • Package Registry
  • Analytics
    • Analytics
    • CI / CD
    • Repository
    • Value Stream
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar

新注册的用户请输入邮箱并保存,随后登录邮箱激活账号。后续可直接使用邮箱登录!

  • zkp
  • zkevm-circuitszkevm-circuits
  • Wiki
    • Zkevm docs
  • 2 trace parser

Last edited by geruiwang Aug 07, 2024
Page history

2 trace parser

轨迹解析器

轨迹解析器(trace parser)的作用是将EVM程序的执行轨迹(trace)转换成零知识证明电路可以处理的数据结构。以下是对其工作过程的详细描述:

输入格式

我们选择了trace的JSON输出格式,以便于程序处理。trace文件的格式是.jsonl,每一行代表执行的一步,包含一个json格式的trace。每一步的格式如下:

  • pc: 程序计数器(Program Counter)
  • 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:

{
  "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表格中,从而使得零知识证明电路能够利用这些数据进行证明。

Clone repository

Copyright © 2024 ChainWeaver Org. All Rights Reserved. 版权所有。

京ICP备2023035722号-3

京公网安备 11010802044225号