1. 引言
前序博客有:
开源代码见:
- https://github.com/0xPolygonHermez/zkevm-prover(C++,生产版本)
- https://github.com/0xPolygonHermez/zkevm-proverjs(Javascript,参考版本)
Polygon zkEVM Prover负责:
- 生成zkEVM proof。
Polygon zkEVM Prover程序中提供了3个RPC服务:
- 1)Prover服务:
- 1.1)调用Prover component来执行输入数据(为a batch of EVM transactions)、计算the resulting state、基于PIL多项式定义及其约束,为该计算生成证明。
- 1.2)当被Prover服务调用时,Executor component会联合14个状态机来对输入数据进行处理,以生成证明所需的evaluations of the committed polynomials。每个状态机生成各自的computation evidence data,而更复杂的计算则委托给下一级的状态机。
- 1.3)Prover component调用Stark component来生成 Executor状态机所commit多项式的证明。
- 1.4)Prover服务的接口定义在文件zk-prover.proto文件内。
- 2)Executor服务:
- 2.1)调用Executor component来执行输入数据(为a batch of EVM transactions)、计算the resulting state。注意,不同于Prover服务,Executor服务不生成证明。
- 2.2)提供了一种快速方法,来检查所提议的batch of transactions构建正确,且符合单个batch证明所需的工作量要求。
- 2.3)当被Executor服务调用时,Executor component仅使用Main状态机,因为此处不需要生成证明,也就不需要committed polynomials。
- 2.4)Executor服务的接口定义在文件executor.proto文件内。
- 3)StateDB服务:
- 3.1)提供了接口来访问the state of the system(a Merkle tree)和存储状态的数据库。
- 3.2)由executor和prover使用,作为单一状态数据源,可用于获取状态详情,如账号余额。
- 3.3)StateDB服务的接口定义在statedb.proto文件内。