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?