接口与实现 - Agzs/hyperledger GitHub Wiki
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.