区块链-Ethermint框架源代码介绍

逻辑上讲,Ethermint做了一件事情:集成Tendermint和Ethereum。Ethermint集成Tendermint实现POS+BFT的共识机制。

本文讲解Ethermint的框架实现:

上图中的中间的一些模块是Ethermint实现,这些模块大多数是在Ethereum的代码上的封装。比如Ethermint中的ethereum.Node是Ethereum中的node.Node的封装,Ethermint中ethereum.EthState是对以太的世界状态的抽象,其实也是以太代码中的state.StateDB的封装。

EthermintApplication是Tendermint上的应用程序实现,是Ethermint和Tendermint的“接口”。

1)交易转发

很清晰,Ethermint创建的是以太的node节点。以太的node节点在接收到RPC的交易时,是缓冲在TxPool中,并发送TxPreEvent通知miner进行打包处理的。这些交易怎么送给Tendermint的呢?关键在event.TypeMuxSubscription。

在ethereum.Backend启动时,会启动一个go线程(txBroadcastLoop)。该线程会订阅TxPreEvent事件,在接收到一个交易时,会通过rpcClient.HTTPClient转发给MemPool。

2)Validators的更新

Ethermint的Application的接口中的EndBlock的返回值中,可以指明Validator的变化。比如,某个Validator的power设置为0,意味着删除该Validator。

3)区块生成逻辑

DeliverTx的接口更新一个个区块中的交易,Commit的接口生成一个区块,并加入当前的链中。Commit的调用关系如下:

4) RPC的替换

Ethermint劫持了Ethereum的APIs函数,替换了“net”RPC服务,去除了miner相关的RPC服务。具体函数如下,逻辑非常简单:

大体的框架介绍完了,有对Ethermint感兴趣或者有疑问的小伙伴,给我留言讨论。

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20180525G1QA0N00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券