Polygon zkEVM节点代码解析
Posted mutourend
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Polygon zkEVM节点代码解析相关的知识,希望对你有一定的参考价值。
1. 引言
前序博客:
相关代码:
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服务
当前代码库中,暂未实现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
以上是关于Polygon zkEVM节点代码解析的主要内容,如果未能解决你的问题,请参考以下文章