Polygon zkEVM节点代码解析

article/2025/10/7 6:04:01

1. 引言

前序博客:

  • Polygon zkEVM网络节点

相关代码:

  • https://github.com/0xPolygonHermez/zkevm-node(Go语言)

在这里插入图片描述
Polygon zkEVM节点提供的主要服务模块有:

  • 1)JSON-RPC服务
  • 2)Sequencer服务
  • 3)Aggregator服务
  • 4)Synchronizer服务
  • 5)Broadcast服务

2. JSON-RPC服务

以太坊JSON-RPC接口 与 Polygon zkEVM中的JSON-RPC接口 对比情况为:

序号RPC接口名以太坊Hermez 2.0备注
1GetBlockByHash✔️✔️
2GetBlockByNumber✔️✔️
3GetBlockTransactionCountByHash✔️✔️
4GetBlockTransactionCountByNumber✔️✔️
5getUncleCountByBlockHash✔️✔️
6getUncleCountByBlockNumber✔️✔️
7ChainId✔️✔️
8Syncing✔️✔️
9Coinbase✔️
10Accounts✔️
11BlockNumber✔️✔️
12Call✔️✔️
13EstimateGas✔️✔️
14CreateAccessList✔️EIP-2930:新交易类型,需以更贵的方式访问清单(地址或storage keys)外的内容。
15GasPrice✔️✔️
16MaxPriorityFeePerGas✔️
17FeeHistory✔️
18NewFilter✔️✔️
19NewBlockFilter✔️✔️
20NewPendingTransactionFilter✔️✔️
21UninstallFilter✔️✔️
22GetFilterChanges✔️✔️
23GetFilterLogs✔️✔️
24GetLogs✔️✔️
25Mining✔️
26Hashrate✔️
27GetWork✔️
28SubmitWork✔️
29SubmitHashrate✔️
30Sign✔️
31SignTransaction✔️
32GetBalance✔️✔️
33GetStorageAt✔️✔️
34GetTransactionCount✔️✔️
35GetCode✔️✔️
36GetProof✔️
37SendTransaction✔️
38SendRawTransaction✔️✔️
39GetTransactionByHash✔️✔️
40GetTransactionByBlockHashAndIndex✔️✔️
41GetTransactionByBlockNumberAndIndex✔️✔️
42GetTransactionReceipt✔️✔️
43GetCompilers✔️✔️
44GetUncleByBlockHashAndIndex✔️✔️
45GetUncleByBlockNumberAndIndex✔️✔️
46ProtocolVersion✔️✔️

Hermez 2.0(zkEVM)除实现了以上与以太坊兼容的RPC接口之外,还额外实现了一些与state交互、与pool交互的接口:

// jsonRPCTxPool contains the methods required to interact with the tx pool.
type jsonRPCTxPool interface {AddTx(ctx context.Context, tx types.Transaction) errorGetPendingTxs(ctx context.Context, isClaims bool, limit uint64) ([]pool.Transaction, error)GetGasPrice(ctx context.Context) (uint64, error)GetPendingTxHashesSince(ctx context.Context, since time.Time) ([]common.Hash, error)
}// gasPriceEstimator contains the methods required to interact with gas price estimator
type gasPriceEstimator interface {GetAvgGasPrice(ctx context.Context) (*big.Int, error)
}// stateInterface gathers the methods required to interact with the state.
type stateInterface interface {BeginStateTransaction(ctx context.Context) (pgx.Tx, error)GetLastConsolidatedL2BlockNumber(ctx context.Context, dbTx pgx.Tx) (uint64, error)GetTransactionByHash(ctx context.Context, transactionHash common.Hash, dbTx pgx.Tx) (*types.Transaction, error)GetTransactionReceipt(ctx context.Context, transactionHash common.Hash, dbTx pgx.Tx) (*types.Receipt, error)GetLastL2BlockNumber(ctx context.Context, dbTx pgx.Tx) (uint64, error)GetLastL2Block(ctx context.Context, dbTx pgx.Tx) (*types.Block, error)GetLastL2BlockHeader(ctx context.Context, dbTx pgx.Tx) (*types.Header, error)EstimateGas(transaction *types.Transaction, senderAddress common.Address) (uint64, error)GetBalance(ctx context.Context, address common.Address, blockNumber uint64, dbTx pgx.Tx) (*big.Int, error)GetL2BlockByHash(ctx context.Context, hash common.Hash, dbTx pgx.Tx) (*types.Block, error)GetL2BlockByNumber(ctx context.Context, blockNumber uint64, dbTx pgx.Tx) (*types.Block, error)GetCode(ctx context.Context, address common.Address, blockNumber uint64, dbTx pgx.Tx) ([]byte, error)GetStorageAt(ctx context.Context, address common.Address, position *big.Int, blockNumber uint64, dbTx pgx.Tx) (*big.Int, error)GetSyncingInfo(ctx context.Context, dbTx pgx.Tx) (state.SyncingInfo, error)GetTransactionByL2BlockHashAndIndex(ctx context.Context, blockHash common.Hash, index uint64, dbTx pgx.Tx) (*types.Transaction, error)GetTransactionByL2BlockNumberAndIndex(ctx context.Context, blockNumber uint64, index uint64, dbTx pgx.Tx) (*types.Transaction, error)GetNonce(ctx context.Context, address common.Address, blockNumber uint64, dbTx pgx.Tx) (uint64, error)GetL2BlockHeaderByNumber(ctx context.Context, blockNumber uint64, dbTx pgx.Tx) (*types.Header, error)GetL2BlockTransactionCountByHash(ctx context.Context, hash common.Hash, dbTx pgx.Tx) (uint64, error)GetL2BlockTransactionCountByNumber(ctx context.Context, blockNumber uint64, dbTx pgx.Tx) (uint64, error)GetLogs(ctx context.Context, fromBlock uint64, toBlock uint64, addresses []common.Address, topics [][]common.Hash, blockHash *common.Hash, since *time.Time, dbTx pgx.Tx) ([]*types.Log, error)GetL2BlockHashesSince(ctx context.Context, since time.Time, dbTx pgx.Tx) ([]common.Hash, error)DebugTransaction(ctx context.Context, transactionHash common.Hash, tracer string) (*runtime.ExecutionResult, error)ProcessUnsignedTransaction(ctx context.Context, tx *types.Transaction, senderAddress common.Address, blockNumber uint64, dbTx pgx.Tx) *runtime.ExecutionResultIsL2BlockConsolidated(ctx context.Context, blockNumber int, dbTx pgx.Tx) (bool, error)IsL2BlockVirtualized(ctx context.Context, blockNumber int, dbTx pgx.Tx) (bool, error)
}type storageInterface interface {NewLogFilter(filter LogFilter) (uint64, error)NewBlockFilter() (uint64, error)NewPendingTransactionFilter() (uint64, error)GetFilter(filterID uint64) (*Filter, error)UpdateFilterLastPoll(filterID uint64) errorUninstallFilter(filterID uint64) (bool, error)
}

3. Sequencer服务

在这里插入图片描述
在这里插入图片描述
当前代码库中,暂未实现permissionless sequencer功能,ProofOfEfficiency.sol合约中也暂未实现registerSequencer等接口。

参考资料

[1] Ethereum JSON-RPC Specification
[2] PoE
[3] zkProver debugging
[4] Hermez 1.5 - Merkle Tree spec
[5] PoE - 1.5

附录:Polygon Hermez 2.0 zkEVM系列博客

  • ZK-Rollups工作原理
  • Polygon zkEVM——Hermez 2.0简介
  • Polygon zkEVM网络节点
  • Polygon zkEVM 基本概念
  • Polygon zkEVM Prover
  • Polygon zkEVM工具——PIL和CIRCOM

http://chatgpt.dhexx.cn/article/QDQapexE.shtml

相关文章

ICCV2017跟踪算法BACF原理及代码解析

文章和代码下载地址: Galoogahi H K, Fagg A, Lucey S. Learning Background-Aware Correlation Filters for Visual Tracking. 代码下载地址:http://www.hamedkiani.com/bacf.html BACF就是将MCCF多通道特征应用到CFLB上,然后通过ADMM求解…

【深度学习2】基于Pytorch的WGAN理论和代码解析

目录 1 原始GAN存在问题 2 WGAN原理 3 代码理解 GitHub源码 参考文章:令人拍案叫绝的Wasserstein GAN - 知乎 (zhihu.com) 1 原始GAN存在问题 实际训练中,GAN存在着训练困难、生成器和判别器的loss无法指示训练进程、生成样本缺乏多样性等问题。这…

YOLOv3:Darknet代码解析(四)结构更改与训练

背景:我们需要降低YOLOv2-tiny的参数量和存储量,以便硬件实现。 目的:更改YOLO结构,去掉后面的两层卷积层,降低参数量和运算量。 相关文章: YOLOv3:Darknet代码解析(一&#xff0…

StrongSORT(deepsort强化版)浅实战+代码解析

1.实战部分 1.1 具体操作 其实和之前的deepsort没差 到github上下载Yolov5_StrongSORT_OSNet下载对应的yolov5去替代原文件中yolov5下载yolov5权重(可以自动下载)和ReID权重(可能要科学上网)放到weight里面 ReID权重有点神秘&a…

对比学习 ——simsiam 代码解析。:

目录 1 : 事先准备 。 2 : 代码阅读。 2.1: 数据读取 2.2: 模型载入 3 训练过程: 4 测试过程: 5 :线性验证 6 : 用自己数据集进行对比学习。 第一: 改数据集 &#x…

AutoWare 代码解析

Auto Ware 代码解析系列(1) Auto Ware 是日本名古屋大学的开源无人车项目,下图为ros仿真环境下的各个节点的关系图: 代码库地址为:https://github.com/CPFL/Autoware 上面有较为详细的仿真环境配置信息,建…

FAST-LIO2代码解析(六)

0. 简介 上一节我们将while内部的IKD-Tree部分全部讲完,下面将是最后一部分,关于后端优化更新的部分。 1. 迭代更新 最后一块主要做的就是,拿当前帧与IKD-Tree建立的地图算出的残差,然后去计算更新自己的位置,并将更…

DeblurGAN-V2源代码解析

DeblurGAN-V2源代码解析(pytorch) DeblurGAN-V2是DeblurGAN的改进版,主要解决的是去图像运动模糊的问题,相比于DeblurGAN而言有速度更快,效果更好的优点。 论文:https://arxiv.org/pdf/1908.03826.pdf 代码…

mmsegmentation模型生成代码解析

前言 疫情在家办公,新Team这边习惯用MMLab开发网络,正好趁这段时间理解一下商汤大佬们的框架。我之前其实网络开发的比较少,主要是学习用的,而且开发网络基本是靠手写或者copy,用这种架构开发我是十分赞成的&#xff…

PX4代码解析(1)

前言 做pixhawk飞控有一段时间了,但在学习过程中遇到许多困难,目前网上找不到比较完整的PX4学习笔记,我打算结合自己理解,写写自己对PX4源码的理解,不一定对,只是希望与各位大佬交流交流,同时梳…

PX4代码解析(2)

前言 在大致了解PX4代码架构后,我们需要了解PX4的通信机制。在PX4代码架构中,每通信总线主要分为两个部分,一是内部通信总线uORB,即PX4内部进程通信采用的协议,例如PX4内部姿态控制需要获取飞行器姿态,而飞行器姿态是…

Teams Bot App 代码解析

上一篇文章我们讲了如何使用 teams toolkit 来快速弄一个 teams bot,可以看到 toolkit 给我们提供了极大的方便性,让开发人员可以更好的把重心放在 coding 上,而不是各种配置上。 那我们这篇文章主要接着上篇,来解析一下 teams b…

代码分析(一)

2021SCSDUSC 分析前言 对于APIJSON的代码分析首先就是,看一下该项目的作用以及如何进行,看一下原来不部署这个项目的正常流程: 再来看一下部署上APIJSON后项目的流程走向: 接下来开始按照这个流程对相应的代码进行分析。 Abst…

Linux命令之lsusb

一、lsusb命令用于显示本机的USB设备列表,以及USB设备的详细信息。 二、lsusb命令显示的USB设备信息来自“/proc/bus/usb”目录下的对应文件。 三、Linux从/var/lib/usbutils/usb.ids识别USB设备的详细信息。 语法格式 lsusb [参数] 常用参数: -v显…

Linux命令-磁盘管理-lsusb

1 需求 2 语法 C:\>adb shell lsusb --help Toybox 0.8.4-android multicall binary: https://landley.net/toybox (see toybox --help)usage: lsusbList USB hosts/devices. 3 示例 adb shell lsusb 4 参考资料

嵌入式debian没有lsusb命令解决

问题 -bash: lsusb: command not found 解决

linux之lsusb命令和cd -命令使用总结

1、lsusb命令介绍 使用 lsusb 来列出 USB 设备和它的属性,lsusb 会显示驱动和内部连接到你系统的设备。直接在控制台输入 lsusb 即可 2、lsusb简单使用 在控制台输入 lsusb 效果如下 系统中同时使用了 USB 2.0 root hub 驱动和 USB 3.0 root hub 驱动。 bus 002 指明设备…

LSB

知识点 LSB即为最低有效位(Least Significant Bit,lsb),这里百度了一下:图片中的图像像素一般是由RGB三原色(红绿蓝)组成,每一种颜色占用8位,取值范围为0x00~0xFF&#…

lsusb命令-在系统中显示有关USB设备信息

在 中我们使用lsusb 列出USB设备及其属性,lsusb用于显示系统中的USB总线及其连接的设备信息。下面介绍如何安装并使用。 系统环境 7 安装usbutils 默认Centos7系统中没有lsusb ,我们需要安装usbutils安装包,才能使用lsusb: […

LSF-bsub命令

文章目录 一、LSF(load sharing facility)二、bsub命令三、 常用命令3.1 bhosts3.2 bqueues3.3 bjobs3.4 bkill3.5 bhist3.6 busers 一、LSF(load sharing facility) 分布资源管理的工具,用来调度、监视、分析联网计算机的负载。 目的:通过集中监控和调…