區塊鏈-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感興趣或者有疑問的小夥伴,給我留言討論。
※以太坊-智能合約中的assert和require的區別
※以太坊源代碼-ethash演算法介紹
TAG:星想法 |