项目结构说明

下载hyperledger-fabric-linux-amd64-1.4.3.tar.gz得到以下文件.

bin/
├── configtxgen         // 读取config/configtx.yaml文件生成创世区块
├── configtxlator       // configtxlator模块可以把区块链的二进制文件转换成JSON格式文件,便于阅读。
├── cryptogen           // 生成节点间的信任证书(一种用cryptogen生成,一种是通过fabric-ca服务生成)
├── discover            // 用于发现fabirc服务
├── fabric-ca-client
├── idemixgen
├── orderer
└── peer
config/
├── configtx.yaml
├── core.yaml
└── orderer.yaml

一、生成证书

我们使用cryptogen来生成各节点通信的信任证书。
简单的说,cryptogen是用来生产fabric需要的证书的;这个生产过程是静态的。
和cryptogen工具对等的是CA服务,是一种动态的证书生产环境;在开发和测试阶段,在环境中不需要部署CA,因此可以简单的使用cryptogen工具,当然在运行环境中也可以不使用CA服务器,而继续使用cryptogen。 如果需要了解Fabric CA证书部署,请移步Fabric CA服务搭建

  1. 配置文件 cryptogen使用一个YAML格式的配置文件crypto-config.yaml

    OrdererOrgs:
    - Name: Orderer
    Domain: example.com
    Specs:
      - Hostname: orderer
    PeerOrgs:
    - Name: Org1
    Domain: org1.example.com
    Template:
      Count: 2
    Users:
      Count: 1
    - Name: Org2
    Domain: org2.example.com
    Template:
      Count: 2
    Users:
      Count: 2
    

    以上配置文件,我们将为三个节点生成证书,分别为一个order节点,两个peer节点。

  2. 生成证书 有了配置文件,就可以通过命令生成证书文件

    cryptogen generate --config=./crypto-config.yaml
    
  3. 文件结构 生成的证书文件,目录结构如下:

    $ tree -L 2 certs
    certs
    ├── ordererOrganizations
    │   └── example.com
    └── peerOrganizations
    ├── org1.example.com
    └── org2.example.com
    

启动

  1. 启动orderer节点。 Solo模式调用过程说明: 1. 节点(Peer)通过GPRC连接排序(Orderer solo)服务,连接成功后,发送交易信息; 2. 排序(Orderer solo)服务通过Recv接口,监听节点(Peer)发送过来的信息,收到信息后进行数据区块处理; 3. 排序(Orderer solo)服务根据收到的消息生成数据区块,并将数据区块写入账本(Ledger)中,返回处理信息; 4. 节点(Peer)通过deliver接口,获取排序(Orderer solo)服务生成的区块数据; 启动orderer节点需要配置环境变量 # 日志级别 export set ORDERER_GENERAL_LOGLEVEL=debug # 监听地址 export set ORDERER_GENERAL_LISTENADDRESS=0.0.0.0 # 创世块方式 export set ORDERER_GENERAL_GENESISMETHOD=file export set ORDERER_GENERAL_GENESISFILE=/data/fabric/order/orderer.genesis.block export set ORDERER_GENERAL_LOCALMSPID=OrdererMSP export set ORDERER_GENERAL_LOCALMSPDIR=/data/fabric/crypto-config/ordererOrganizations/simple.com/orderers/orderer.simple.com/msp export set ORDERER_GENERAL_TLS_ENABLED=false export set ORDERER_GENERAL_TLS_PRIVATEKEY=/data/fabric/crypto-config/ordererOrganizations/simple.com/orderers/orderer.simple.com/tls/server.key export set ORDERER_GENERAL_TLS_CERTIFICATE=/data/fabric/crypto-config/ordererOrganizations/simple.com/orderers/orderer.simple.com/tls/server.crt export set ORDERER_GENERAL_TLS_ROOTCAS=[/data/fabric/crypto-config/ordererOrganizations/simple.com/orderers/orderer.simple.com/tls/ca.crt]

rderer模块的配置文件一共有4部分组成,分别是: General、FileLedger、RAMLedger、Kafka

General:
    LedgerType: file   #账本类型,支持ram、json、file。ram表示账本的数据存储在内存中,一般用于测试环境。json和file表示账本数据保存在文件中,在实际生产环境一般是使用file
    ListenAddress: 0.0.0.0	#orderer服务监听的地址
    ListenPort: 7050	#orderer服务监听的端口号

    TLS:
        Enabled: false  #是否使能TLS通信
        #TLS私钥文件
        PrivateKey: /data/fabric/crypto-config/ordererOrganizations/simple.com/orderers/orderer.simple.com/tls/server.key
        #TLS公钥文件
        Certificate: /data/fabric/crypto-config/ordererOrganizations/simple.com/orderers/orderer.simple.com/tls/server.crt
        #TLS根证书文件
        RootCAs:
          - /data/fabric/crypto-config/ordererOrganizations/simple.com/orderers/orderer.simple.com/tls/ca.crt
        ClientAuthEnabled: false #是否启用客户端验证
        ClientRootCAs:	#客户端根证书

    LogLevel: debug	#日志级别
    GenesisMethod: file	#创世块来源方式,支持provisional或者file,provisional表示GenesisProfile指定的内容在默认的配置文件中配置自动生成的,file表示使用GenesisFile指定的现成创世区块
    GenesisProfile: TestOrgsOrdererGenesis
    GenesisFile: /data/fabric/order/orderer.genesis.block
    #orderer的msp路径     
    LocalMSPDir: /data/fabric/crypto-config/ordererOrganizations/simple.com/orderers/orderer.simple.com/msp       
    LocalMSPID: OrdererMSP    #orderer的名称,在configtxgen模块的配置文件中指定。
    Profile:
           Enabled: false	 #是否启动go Profile
           Address: 0.0.0.0:6060 #go profile信息访问地址
    BCCSP:
           Default: SW		#采用的加密机制,SW为软件实现,PKCS11表示采用硬件实现
           SW:
               Hash: SHA2		#hash算法类型
               Security: 256	#hash长度

FileKeyStore:
   KeyStore:
   FileLedger:
   	#账本文件的存储路径
       Location: /data/fabric/order/production/orderer
       #账本文件存放在临时目录时候的目录名,如果已经指定了Location,则该选项无效
       Prefix: hyperledger-fabric-ordererledger
RAMLedger:
	 #内存中保存的区块的数量,超过这个数目的区块将被放弃。
   HistorySize: 1000
   Kafka:
       Retry:
           #操作失败端重试状态下重试的时间间隔
           ShortInterval: 5s
           #短重试状态下重试的时间
           ShortTotal: 10m
           #长重试状态下重试的时间间隔
           LongInterval: 5m
           #长重试状态下重试的时间
           LongTotal: 12h

           NetworkTimeouts:
           	#等待超时时间
               DialTimeout: 10s
               #读超时时间
               ReadTimeout: 10s
               #写超时时间
               WriteTimeout: 10s

           Metadata:
               RetryBackoff: 250ms
               RetryMax: 3

           Producer:
               RetryBackoff: 100ms
               RetryMax: 3

           Consumer:
               RetryBackoff: 2s

   	#Kafka客户端日志级别,在orderer的运行日志中显示kafka日志
       Verbose: false

       TLS:
         #Kafka是否启动TLS
         Enabled: false
   	  #TLS私钥
         PrivateKey:
         #TLS证书
         Certificate:

           #File: path/to/Certificate
         #TLS根证书
         RootCAs:
           #File: path/to/RootCAs
   	#Kafa版本
       Version: