Section2.3.7 summary
Summary:
代码分析如下:
1. 首先我们对Engine的产生过程进行分析,在core/peer/peer.go中:
// NewPeerWithEngine returns a Peer which uses the supplied handler factory function for creating new handlers on new Chat service invocations.
func NewPeerWithEngine(secHelperFunc func() crypto.Peer, engFactory EngineFactory) (peer *Impl, err error) {
peer = new(Impl)
peerNodes := peer.initDiscovery()
...
peer.engine, err = engFactory(peer)
peer.handlerFactory = peer.engine.GetHandlerFactory()
peer.chatWithSomePeers(peerNodes)
...
}2. 接下来我们看Impl结构体,其即为区块链系统节点结构体,或者是验证节点VP,或者是普通的Peer(定义在core/peer/peer.go)
3. 由EngineImpl代码可看出,GetHandlerFactory实际上就是调用NewConsensusHandler (在consensus/helper/engine.go中)
4.接下来分析NewConsensusHandler(consensus/helper/handler.go):
5. NewConsensusHandler在Impl.handleChat中被调用:
6. handleChat被两个函数调用,分别是chatwithpeers和chat:
7. NewPeerWithEngine为Validator,NewPeerWithHandler为非Validator,在peer/node/node.go文件中的serve()函数中:
ConsensusHandler将消息传递给ConsensusEngine
1. ConsensusHandler处理消息的函数为
2. 从GetEngine可看出,consenter调用了RecvMsg处理consensusFan.out中的消息,GetEngine实际上极为engFactory().
3. innerStack interface implemented by obcBatch.
VP节点命名规则
PBFT Request and Message
ProtocolBuffer
Last updated