您当前的位置: 首页 > 

mutourend

暂无认证

  • 2浏览

    0关注

    661博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Polygon zkEVM节点代码解析

mutourend 发布时间:2022-08-18 18:27:51 ,浏览量:2

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) 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
关注
打赏
1664532908
查看更多评论
立即登录/注册

微信扫码登录

0.1166s