一、构建环境

项目

下载地址:github/fabric-sample

环境与搭建基本教程:【Fabric】SOLO 共识网络搭建

PBFT算法实现:github/fabric-sample

版本

  • Hyperleger/fabric v1.4.4
  • Hyperleger/caliepr-cli v0.3.0
  • node v8.10.0
  • npm v5.6.0
  • docker 19.03.5
  • docker-compose 1.25.4

文件

chaincode/demo:       测试 chaincode
chaincode/callback:   hyperleger/caliper测试用例

pbft:                 可插拔 PBFT 共识算法简单实现
rbft:                 可插拔 RBFT 共识算法简单实现

solo-network:          solo共识配置
pbft-network:          pbft共识配置 
rbft-network:          rbft共识配置
multi-channel-network: solo多链配置

二、共识算法 PBFT 开发流程

  • configtxgen工具源码修改,使其识别pbft共识配置。
// common/tools/configtxgen/localconfig/config.go:388
switch ord.OrdererType {
    case 'pbft':
}
// commom/tools/configtxgen/encoder/encoder.go:38
const ConsensusTypePbft = "pbft"
// commom/tools/configtxgen/encoder/encoder.go:215
switch conf.OrdererType {
    case ConsensusTypePbft:
}
  • 添加共识算法实例
// orderer/common/server/main.go:664
consenters["pbft"] = pbft.New()
  • 实现共识接口/orderer/consensus/consensus.go
// 接口说明 - Consneter 
// 返回 Chain 用于实现处理区块接口
type Consenter interface {
    HandleChain(support ConsenterSupport, metadata *cb.Metadata) (Chain, error)
}
// Chain 处理区块接口
type Chain interface {
       // 处理 Normal 交易
    Order(env *cb.Envelope, configSeq uint64) error
    // 处理配置交易
    Configure(config *cb.Envelope, configSeq uint64) error
    // 等待接收交易,处理函数交易前
    WaitReady() error
    // 发送错误 chan
    Errored() <-chan struct{}
    // 初始化 Chain 中资源
    Start()
    // 资源释放
    Halt()
}

三、网络拓扑

类型/组织域名IP/端口/PBFT端口组织名
Ordererorderer0.yzm.com172.22.0.100:6050/6070OrdererOrg
Ordererorderer1.yzm.com172.22.0.101:6051/6071OrdererOrg
Ordererorderer2.yzm.com172.22.0.101:6052/6072OrdererOrg
Ordererorderer3.yzm.com172.22.0.101:6053/6073OrdererOrg
Peer/OrgApeer0.orga.com172.22.0.2:7051OrgAMSP
Peer/OrgBpeer0.orgb.com172.22.0.3:8051OrgBMSP

四、环境变量说明

  • PBFT_LISTEN_PORT:PBFT 节点监听端口
  • PBFT_NODE_ID:PBFT 节点 ID
  • PBFT_NODE_TABLE:PBFT 网络列表

五、测试方法

$ npx caliper launch master --caliper-workspace <pbft或rbft-network> --caliper-benchconfig benchmarks/config.yaml --caliper-networkconfig benchmarks/network.yaml
最后修改:2021 年 05 月 23 日
如果觉得我的文章对你有用,请随意赞赏