教程区块链区块链技术ch1515.2 搭建 Fabric 开发网络与测试环境

本页目录

Fabric 不会从零搭建——官方提供了 test-network 脚本,一键生成 2 组织 + 1 orderer 的完整网络。理解这些脚本背后的身份、创世块和通道配置,是生产部署的基础。


15.2.1 单命令启动

bash
# 下载 fabric-samples
wget https://raw.githubusercontent.com/hyperledger/fabric/main/scripts/bootstrap.sh
bash bootstrap.sh -s  # 下载二进制工具和样本代码

# 进入测试网络
cd fabric-samples/test-network

# 一键启动两个组织 + 1 个 orderer 的通道网络
./network.sh up createChannel
# 输出:
# [+] Creating org1, org2 identities
# [+] Starting orderer.example.com
# [+] Creating channel 'mychannel' ...
# [+] Joining org1, org2 peers to 'mychannel'

`network.sh` 背后发生了什么?

graph LR
    S1[cryptogen / CA] --> S2[生成 MSP 身份]
    S2 --> S3[每个组织:admin + peers + users]
    S3 --> S4[configtxgen]
    S4 --> S5[创世块 genesis.block]
    S4 --> S6[通道配置 channel.tx]
    S5 --> S7[Orderer 启动]
    S6 --> S8[通道创建 + 加入]
    
    style S1 fill:#e3f2fd
    style S7 fill:#c8e6c9

工具链

  • cryptogen:批量生成固定的 X.509 证书(开发和快速测试)
  • Fabric-CA:材料服务的 CA 服务,用于生产环境的动态注册
  • configtxgen:从 configtx.yaml 生成创世块和签名交易

15.2.2 核心配置文件

yaml
# configtx.yaml 关键片段演示
capabilities:
  channel: V2_0  # 通道级别能力
  orderer: V2_0  # orderer 级别
  application: V2_0  # 应用级别

organizations:
  - &Org1
    name: Org1MSP
    mspdir: crypto-config/peerOrganizations/org1.example.com/msp
    policies: ...
  - &Org2
    name: Org2MSP
    mspdir: crypto-config/peerOrganizations/org2.example.com/msp

profiles:
  TwoOrgsOrdererGenesis:  # 创世块配置
    orderer:
      ordererType: etcdraft
      organizations: [*Org1, *Org2]
      
  TwoOrgsChannel:  # 通道配置
    consortiums:
      - SampleConsortium
        organizations: [*Org1, *Org2]
    application:
      organizations: [*Org1, *Org2]
      # 默认背书策略:需要两个组织的任一 peer 背书
      policies:
        Endorsement:
          rule: "MAJORITY Endorsement"

15.2.3 容器架构

text
docker-compose 启动的容器群:
- orderer.example.com        (1 个)
- peer0.org1.example.com     (Org1)
- peer0.org2.example.com     (Org2)
- ca_org1, ca_org2           (可选 CA)
- couchdb0, couchdb1         (状态数据库,可选)
- cli                        (命令行交互容器)

每个 peer 有两个存储:

  • 文件系统(LevelDB/CouchDB):当前世界状态的键值存储
  • 区块文件:不可变的排序后的区块序列
graph TB
    subgraph Peer0["peer0.org1"]
        P1[提交/提交容器]
        P2[区块文件 /var/hyperledger/fabric/ledgers]
        P3[状态数据库 LevelDB / CouchDB]
        P4[背书状态]
    end
    
    P1 --> P2
    P1 --> P3
    P1 --> P4
    
    style P2 fill:#ffebee
    style P3 fill:#e8f5e9

15.2.4 身份层次

graph TD
    Root[Root CA 证书] --> CA1[org1.example.com CA]
    Root --> CA2[org2.example.com CA]
    
    CA1 --> Admin1[Org1 Admin]
    CA1 --> Peer1[Org1 Peer]
    CA1 --> User1[Org1 User1]
    
    CA2 --> Admin2[Org2 Admin]
    CA2 --> Peer2[Org2 Peer]
    CA2 --> User2[Org2 User2]
    
    style Root fill:#fff3e0
    style Admin1 fill:#e8f5e9
    style Admin2 fill:#e8f5e9

15.2.5 关闭与清理

bash
./network.sh down
# 删除容器、删除加密材料、删除通道

生产环境不会使用 test-network,但理解其结构是部署生产网络的基石:

  • 生产上你会用 Fabric-CA 动态注册身份(而非 cryptogen 静态文件)
  • 生产上你会部署 etcd-raft 的 orderer 集群(Raft BFT 共识)
  • 生产上你会用外部 CouchDB/LevelDB 集群,而非嵌入式

> ← 15.1 Fabric 架构 | 前往 → 15.3 链码开发 |*

评论

0

评论加载中…

发表评论

0/2000