join 子命令会让指定的 Peer 节点加入到指定的应用通道。需要提前拥有所加入应用通道的初始区块文件,并且只有属于通道的某个组织的管理员身份可以成功执行该操作。加入通道命令主要通过调用 Peer 的配置系统链码进行处理。
例如,通过如下命令将本地 Peer 加入到应用通道 businesschannel 中:
$ peer channel join \
-b ${CHANNEL_NAME}.block \
-o orderer: 7050
Peer joined the channel!
加入应用通道的主要过程如图所示。
主要步骤包括:
1)客户端首先创建一个 ChaincodeSpec 结构,其 input 中的 Args 第一个参数是 CSCC.JoinChain (指定调用配置链码的操作),第二个参数为所加入通道的初始区块。
2)利用 ChaincodeSpec 构造一个 ChaincodeInvocationSpec 结构。
3)利用 ChaincodeSpec 构造一个 ChaincodeInvocationSpec 结构。
4)客户端通过 gRPC 将 Proposal 签名后发给 Endorser (所操作的 Peer),调用 ProcessProposal(ctx context.Context, in *SignedProposal, opts ...grpc.CallOption)(*ProposalResponse, error)
方法进行处理,主要通过配置系统链码进行本地链的初始化工作。
5)初始化完成后,即可收到来自通道内的 Gossip 消息等。
其中,比较重要的数据结构包括 ChaincodeSpec、ChaincodeInvocationSpec、Proposal 等,它们的具体结构如图所示。
注意 权限不足的情况下,执行加入通道命令可能不会报错,但实际上并没有加入到通道,也不会获取到通道内的数据。