前序博客有:
Polygon zkEVM网络节点代码见:
Polygon zkEVM网络中的关键词汇有:
以上表示的是由trusted sequencer运行的单个节点的架构图。实际网络中会有多种角色运行节点,详情后续再补充。
以上架构图中:
1)(JSON)RPC:为用户(如metamask、etherscan等)与节点交互的接口。与以太坊RPC完全兼容,并附加了一些额外的端口。如与state
交互可获得数据的接口;处理交易的接口;与pool
交互存储交易的接口。
2)Pool:通过RPC
来存储交易的DB,pool
中所存储的交易后续可由sequencer
来选中或丢弃。
3)Trusted Sequencer:从pool
中获取交易,使用state
对交易处理以检查交易是否有效,创建sequences。一旦交易被添加到state
中,可立刻对broadcast
服务可用。sequences可通过etherman
发送到L1。
4)Broadcast:由非trusted sequencer
运行的节点中的synchronizer
使用的API,用于同步trusted state。
5)Permissionless Sequencer:待续。。。。
6)Etherman:对 需与以太坊网络和相关合约 交互的方法的抽象。
7)Synchronizer:通过etherman
从以太坊获取数据更新state
(为virtual state 或 consolidated state)。若该节点不是trusted sequencer
,还会从trusted sequencer
的broadcast
获取数据并更新state
(为trusted state)。同时synchronizer
还会发现并处理reorgs,reorgs情况仅发生在:trusted sequencer
通过broadcast
发送的数据 与 发送到L1的sequences数据 不同时(即trusted state与virtual state不同时,会进行reorg)。
8)State:负责管理存储在StateDB
的状态数据(batches、blocks、transactions等),同时State
还会处理与executor
和Merkletree
服务的集成。
9)StateDB:为状态数据的持久层。例外情况是,Merkle tree由Merkletree
服务处理。
10)Aggregator:通过生成ZKPs(Zero Knowledge proofs)来consolidate强化batches。它会通过向state
发送请求来获得prover
所需输入数据。一旦proof生成,可通过etherman
发送到以太坊。
11)Prover/Executor:生成ZK proofs的服务。注意Prover/Executor
并未在 https://github.com/0xPolygonHermez/zkevm-node 中实现,而是从节点的角度将其当成是“黑盒”。
当前Prover/Executor
有2版实现:
尽管Prover/Executor
是完全相同的软件/服务,但是,实际运行时具有不同的目的:
Executor
:提供EVM实现,支持交易处理,并获得所需result metadata(如state root、receipts、logs)Prover
:生成ZKPs12)Merkletree:该服务中存储Merkle tree,包含了所有的账号信息(如balances、nonces、smart contract code 和 smart contract storage)。Merkletree
模块也并未在 https://github.com/0xPolygonHermez/zkevm-node 中实现,而是作为节点的一个外部服务。Merkletree
的实现见https://github.com/0xPolygonHermez/zkevm-prover(即与Prover/Executor
实现在同一仓库内)。
Polygon zkEVM节点软件支持以多种角色运行,不同的角色启动不同的服务。zkEVM节点软件内的大多数服务都可以不同实例运行,而JSON RPC服务可运行在多个实例中(而所有其它服务仅能有一个实例)。
Polygon zkEVM的角色主要有:
任何人都可承担RPC角色。
运行RPC角色所需服务和模块有:
必须仅能由一个synchronizer,且推荐对executor实例具有独占访问(并不是必须的)。
RPC角色可运行在单一实例内,但是,若随着收到请求数的增加,性能有所下降的话,将JSON RPC和executor服务运行在多个实例内 是有益的。
Polygon zkEVM网络中仅能有一个实体承担trusted sequencer角色。该角色在智能合约内强化,合约内trusted sequencer的相关方法仅可由具有特定私钥的owner执行。
运行Trusted sequencer角色所需服务和模块有:
注意,JSON RPC需要接收交易,推荐将JSON RPC运行在分离的实例之上,具体取决于网络负载,可有多个JSON RPC。同时推荐JSON RPC和Sequencer不共享相同的executor实例,以确保sequencer对executor具有独占性访问。
待续。。。
任何人都可承担Aggregator角色。
运行Aggregator角色所需服务和模块有:
推荐将prover
运行在分离的实例之上,因其对硬件有重要的要求。此外,其它模块可运行在单一实例上。