Polygon zkEVM节点代码解析

这篇具有很好参考价值的文章主要介绍了Polygon zkEVM节点代码解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 引言

前序博客:

  • Polygon zkEVM网络节点

相关代码:

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

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

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) error
	GetPendingTxs(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.ExecutionResult
	IsL2BlockConsolidated(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) error
	UninstallFilter(filterID uint64) (bool, error)
}

3. Sequencer服务

polygon zkevm网络配置,zkVM,区块链
polygon zkevm网络配置,zkVM,区块链
当前代码库中,暂未实现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文章来源地址https://www.toymoban.com/news/detail-791201.html

附录:Polygon Hermez 2.0 zkEVM系列博客

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

到了这里,关于Polygon zkEVM节点代码解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MetaMask 添加BSC、Polygon网络配置

    打开浏览器,点击MetaMask插件,选择网络,点击弹窗中的“Add Network”按钮 添加各网络配置如下: key value 网络名称(Network Name) Binance Smart Chain Mainnet 或 BSC Mainnet (可随意取名) 新RPC网址(New RPC URL) https://bsc-dataseed1.binance.org 链ID(Chain ID) 56 货币符号(Currency Symbol) BNB

    2023年04月08日
    浏览(38)
  • 使用 Coinbase 在 Polygon 网络上获取 MATIC

    如何从 Coinbase 获取 MATIC 到 Polygon 主网上的 MetaMask 钱包 了使用Nifty Pixels,你需要一些 MATIC——Nifty Pixels 上使用的加密货币!一种方法是使用 Coinbase 和Polygon bridge。我们不推荐这种方法,因为它的费用很高。你应该使用更便宜的方法,比如Kucoin或Crypto.com 这一步是不言自明的。

    2023年04月19日
    浏览(36)
  • zk、zkVM、zkEVM及其未来

    zk(zero-knowledge)proof:可保证计算的完整性、正确性和隐私性,在区块链扩容和隐私领域大有可为。 zk-SNARK和zk-STARK各具优势,二者结合潜力无穷。 zkVM可为应用增加零知识证明,zkVM可以按mainstrem、EVM或新构建的指令集进行分类。 EVM兼容性包括EVM兼容性、等价性和规范级兼容

    2024年01月19日
    浏览(41)
  • Scroll zkEvm技术设计全面思考

    目录 前言 背景 在 zk-Rollup 中构建通用 DApp 在 zk-Rollup 中构建通用 DApp 有两种方式。

    2024年01月22日
    浏览(36)
  • 区块链知识系列 - 系统学习EVM(四)-zkEVM

    区块链知识系列 - 系统学习EVM(一) 区块链知识系列 - 系统学习EVM(二) 区块链知识系列 - 系统学习EVM(三) 今天我们来聊聊 zkEVM、EVM 兼容性 和 Rollup 是什么? rollup顾名思义,就是把一堆交易卷(rollup)起来变成一个rollup交易,所有节点接收到这个rollup交易之后,不去执行被卷起

    2023年04月09日
    浏览(43)
  • 【区块链】科普:零知识证明、ZKRollup 与 zkEVM

    译者语:2023 年将迎来 zkEVM 大发展,让我们看看有哪些项目在进行 zkEVM 的研究,zkEVM 可以做什么 原文链接: https://blog.pontem.network/zk-proofs-301-zksync-other-zkevm-b28641dc8565 这篇文章让我们解释一下zkEVM是如何工作的,为什么它们是如此重要的创新。 零知识(ZK)证明是一种加密技

    2024年02月06日
    浏览(48)
  • zkEVM战局简析:zkSync、StarkNet、Scroll和挑战者们

    不同的项目正在探索不同的方向,这或许是最利于行业的发展模式。 原文作者: Grant Griffith, 由 Odaily星球日报  Azuma  编译。 编者按:10 月 28 日,由 Matter Labs 构建的以太坊扩容解决方案正式发布了 zkSync 2.0 的第一阶段 Baby Alpha,虽然出于测试需求,该网络暂时不会向外部参

    2024年02月08日
    浏览(36)
  • 全球公链进展| 坎昆升级范围确定;Polygon 推出 Polygon 2.0;BEP-126 已成功部署到主网

    过去一周,明星项目动态如下: 最新以太坊开发者会议最终确定了坎昆升级的范围; BNB Chain 官方宣布 BEP-126 已经成功部署到主网; Polygon 宣布推出 Polygon 2.0; LayerZero 新增支持 Scroll 测试网; Sei Network 将重新开放跨链桥 Sei Bridge 测试活动 第 111 次以太坊核心开发者共识会议

    2024年02月10日
    浏览(41)
  • uniswapV3 polygon

    地址 0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6 主要接口 quoteExactInputSingle quoteExactOutputSingle quoteExactOutput quoteExactInput … 地址 0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45 主要接口 exactInput exactInputSingle … 授权 approve 循环调用查询合约找到最优兑换路径 发起交易 授权时 tokenIn 和 tokenOut 都需要授权

    2023年04月19日
    浏览(30)
  • polygon mainnet 部署文档

    2023年05月12日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包