Section2.7 接口与实现
Event
ExecutionConsumer
Usage
consensus.Consenter接口的一部分.
consensus/executor.coordinatorImpl的成员变量consumer
Implement
没有单独实现的ExecutionConsumer
Consenter对ExecutionConsumer进行了实现
Consenter 接收事件
Usage
consensus/helper.EngineImpl的成员变量,pbft只会生成一个consensus.Consenter作为engine的成员变量
consensus/helper.Helper的成员变量
Implement
Helper的Consenter来自于engine, engine的Consenter来自controller, controller的来自于pbft.
Consenter接口的实现为obcBatch,但obcBatch并没有自己实现这些函数, 而是继承自consensus/pbft/external.go中的externalEventReceiver;externalEventReceiver通过和event.Manager的直接交互来对接口进行了实现.
coordinator
Helper的成员变量coordinator,类型为peer.MessageHandlerCoordinator, 定义在peer中, 是初始化engine时的唯一参数, 也可以说是和节点联系的途径.
engine使用它获得PeerEndpoint(本节点), 然后将它传给Helper用于初始化, 自己并不保存这个变量. Helper会保存该变量, 并用它来实现了NetworkStack里的功能, 包括获取节点信息, 广播, 单播, 另外还包括获取区块链长度.
Network
Inquirer 获取网络信息
Usage
consensus.NetworkStack接口的一部分
consensus/pbft.communicator接口的一部分.
Implement
Inquirer的引用都是通过NetworkStack实现的
Communicator 发送消息
Usage
consensus.NetworkStack接口的一部分
consensus/pbft.communicator接口的一部分.
broadcaster结构体的成员变量
Implement
Communicator通过NetworkStack实现的
NetworkStack
NetworkStack只是作为Stack的一部分被使用, 并没有单独实现NetworkStack接口的结构体.
对于Stack, 由Helper来实现, Helper对NetworkStack部分的实现是依赖于core/peer中定义的MessageHandlerCoordinator. 该参数在程序启动时会初始化.
Stack
在pbft内部, 也定义了一个与此对应的接口innerStack, 用于内部使用.
只有consensus/helper/helper.go中定义的Helper实现了Stack.
Crypto
SecurityUtils 加密消息
SecurityUtils接口仅作为Stack的一部分使用, Stack是由Helper实现的, 对于SecurityUtils部分, Helper通过调用secHelper来实现, secHelper类型为crypto.Peer,实际由nodeImpl实现。
secHelper
用于实现SecurityUtils接口, 类型为crypto.Peer, 通过调用coordinator.GetSecHelper()生成. 在消息传递前会进行加密, 接收后进行解密.
实际上, 在pbft中并没有直接使用SecurityUtils接口, 而是进行了封装.
Blockchain
ReadOnlyLedger
blockchain被封装在了Ledger内, ReadOnlyLedger定义了对Blockchain的读操作, Helper使用Ledger对其进行了实现, 而Ledger内部则是调用了blockchain的对应方法, blockchain则是通过使用db进行了实现.
LegacyExecutor
LegacyExecutor用来对blockchain进行写操作, 实际实现只有一处, 在Helper中, 另一处在executor里虽作为一部分定义了一个新的接口, 但该接口仍是通过Helper来初始化的.
在Helper中, 除func ExecTxs()是和chaincode交互实现的, 其他仍是和Ledger交互. executor的存在, 主要是为了方便收集来自obcBatch关于对blockchain写操作的消息, 集中调用Helper进行执行.
Executor 执行Tx
Executor作为Stack的一部分以Helper实现, Helper用executor来实现的, 本质上是由executor.coordinatorImpl来实现的.
LedgerManager
LedgerManager也是Stack的一部分, 用于设置Ledger的状态是否最新/合法, 会在状态转换前或检测到失效后置false, 收到stateUpdatedEvent后重新置true.
Last updated
Was this helpful?