-
Notifications
You must be signed in to change notification settings - Fork 0
Hyperledger fabric PBFT consensus #2
wanzhiguo edited this page Sep 27, 2017
·
5 revisions
Fabric采用了viper工具进行系统配置,viper可以读取配置文件,环境参数,以及命令行参数,对系统节点等对象进行配置。 Fabric的主要配置文件为peer/core.yaml,该文件配置了VP节点的ID,consensus算法等参数。
在PBFT算法中,每个节点有一个ValidatorID,该ID来自于core.yaml配置的ID,比如core.yaml中设置的ID为vp0, 则PBFT中该节点的ID为0,以此类推。具体可见pbft.go文件中的下列函数:
// Returns the uint64 ID corresponding to a peer handle
func getValidatorID(handle *pb.PeerID) (id uint64, err error) {
// as requested here: https://github.com/hyperledger/fabric/issues/462#issuecomment-170785410
if startsWith := strings.HasPrefix(handle.Name, "vp"); startsWith {
id, err = strconv.ParseUint(handle.Name[2:], 10, 64)
if err != nil {
return id, fmt.Errorf("Error extracting ID from \"%s\" handle: %v", handle.Name, err)
}
return
}
err = fmt.Errorf(`For MVP, set the VP's peer.id to vpX,
where X is a unique integer between 0 and N-1
(N being the maximum number of VPs in the network`)
return
}
其中注明了“For MVP, set the VP's peer.id to vpX, where X is a unique integer between 0 and N-1”。
- PBFT中,每一个request中包涵一个tx,使用txToRequest将tx封装成Request;
- RequestBatch包涵多个Requests, obcBatch中的BatchStore也是多个Request组成;
- Request发送到primary node,由primary node发起PBFT共识过程。
- PBFT 中使用ProtocolBuffer对发送的消息进行定义,定义在message.proto文件,然后使用proton进行编译,得到message.pb.go文件。