Hyperledger Fabric 整理體系:
?以下操作在fabric-samples 1.4.4版本上進行。
第一步
?下載bin目錄 hyperledger fabric,拷貝到fabric-sample目錄下。
- configtxgen:生成初始區塊及通道交易配置文件的工具;
- cryptogen:生成組織結構及相應的身份文件的工具;
- configtxlator:將指定的文件在二進制格式與json格式之間進行切換
構建第一個網絡
?構建你的第一個網絡(build your first network - BYFN),提供了一個fabric網絡示例。該示例網絡由兩個組織組成,每個組織維護兩個節點,默認使用solo共識服務。
- 切換到first-network目錄
- 生成證書及創世區塊
./byfn.sh generate
?運行該命令會為fabric網絡各種實體生成所需的證書和秘鑰,保存在crypto-config目錄下。
ordererOrganizations子目錄下包括構成Orderer組織的身份信息
peerOrganizations子目錄為所有Peer節點組織的相關身份信息,其中最關鍵的是MSP目錄,代表了實體的身份信息。一般包括
- admincerts:管理員的身份證書文件
- cacerts:信任的根證書文件
- keystore:節點的簽名,私鑰文件
- signcerts:節點的簽名,身份證書文件
- tlscacerts:TLS連接用的證書
- intermediatercerts:信任的中間證書
- crls:證書撤銷列表
- config.yaml:記錄OrganizationalUnitldentifiers信息,包括跟證書位置和ID信息
$ tree crypto-config -L 4 -d
crypto-config
├── ordererOrganizations
│ └── example.com
│ ├── ca
│ ├── msp
│ │ ├── admincerts
│ │ ├── cacerts
│ │ └── tlscacerts
│ ├── orderers
│ │ └── orderer.example.com
│ ├── tlsca
│ └── users
│ └── Admin@example.com
└── peerOrganizations
├── org1.example.com
│ ├── ca
│ ├── msp
│ │ ├── admincerts
│ │ ├── cacerts
│ │ └── tlscacerts
│ ├── peers
│ │ ├── peer0.org1.example.com
│ │ └── peer1.org1.example.com
│ ├── tlsca
│ └── users
│ ├── Admin@org1.example.com
│ └── User1@org1.example.com
└── org2.example.com
├── ca
├── msp
│ ├── admincerts
│ ├── cacerts
│ └── tlscacerts
├── peers
│ ├── peer0.org2.example.com
│ └── peer1.org2.example.com
├── tlsca
└── users
├── Admin@org2.example.com
└── User1@org2.example.com
?如果報錯:cryptogen tool not found. exiting
解決方案:拉取fabric 1.4,拷貝fabric/scripts/bootstrap.sh文件到fabric-samples目錄下,直接執行該腳本。最后會生成所需bin目錄。
2.1 與組織結構和身份證書關聯的配置文件
?生成過程中依賴cryto-config.yaml配置文件,包括如下內容:
OrdererOrgs:
- Name: Orderer # 組織名稱
Domain: example.com # 域名
Specs:
- Hostname: orderer # hostname + Domain的值組成Orderer節點的完整域名
PeerOrgs:
- Name: Org1
Domain: org1.example.com
EnableNodeOUs: true # 在msp下生成config.yaml文件
Template:
Count: 2 # 節點數量
Users:
Count: 1 # 新增用戶數量
- Name: Org2
Domain: org2.example.com
EnableNodeOUs: true
Template:
Count: 2
Users:
Count: 1
- 啟動網絡
./byfn.sh up
?fabric-sample-1.4.0版本在執行first-network時,會出現一些問題,切換到1.4.4版本就OK。
2019-11-20 09:31:53.970 UTC [main] InitCmd -> ERRO 001 Cannot run peer because cannot init crypto, folder "/Users/macserver/Documents/BlockChain/src/github.com/hyperledger/fabric-samples/first-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp" does not exist
!!!!!!!!!!!!!!! Channel creation failed !!!!!!!!!!!!!!!!
========= ERROR !!! FAILED to execute End-2-End Scenario ===========
3.1 關聯的docker-compose-base.yaml文件
services:
orderer.example.com:
container_name: orderer.example.com
image: hyperledger/fabric-orderer:$IMAGE_TAG
environment:
- ORDERER_GENERAL_LOGLEVEL=INFO # 日志級別
- ORDERER_GENERAL_LISTENADDRESS=0.0.0.0 # 監聽地址
- ORDERER_GENERAL_GENESISMETHOD=file # 生成初始區塊的提供方式
- ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/orderer.genesis.block # 初始區塊配置文件路徑
- ORDERER_GENERAL_LOCALMSPID=OrdererMSP # 本地MSP ID
- ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp # 本地MSP路徑
# enabled TLS
- ORDERER_GENERAL_TLS_ENABLED=true # 開啟TLS驗證
- ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key # TLS 私鑰
- ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt # TLS 證書
- ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt] # TLS 根證書
working_dir: /opt/gopath/src/github.com/hyperledger/fabric # 進入容器后,默認工作目錄
command: orderer
volumes:
- ../channel-artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block # 初始區塊配置文件
- ../crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp:/var/hyperledger/orderer/msp # MSP目錄
- ../crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/:/var/hyperledger/orderer/tls # TLS目錄
- orderer.example.com:/var/hyperledger/production/orderer
ports:
- 7050:7050
peer0.org1.example.com:
container_name: peer0.org1.example.com
extends: # 基本信息來源于哪個文件
file: peer-base.yaml
service: peer-base
environment:
- CORE_PEER_ID=peer0.org1.example.com
- CORE_PEER_ADDRESS=peer0.org1.example.com:7051
- CORE_PEER_GOSSIP_BOOTSTRAP=peer1.org1.example.com:7051
- CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org1.example.com:7051
- CORE_PEER_LOCALMSPID=Org1MSP
volumes:
- /var/run/:/host/var/run/
- ../crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp:/etc/hyperledger/fabric/msp
- ../crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls:/etc/hyperledger/fabric/tls
- peer0.org1.example.com:/var/hyperledger/production
ports:
- 7051:7051
- 7053:7053
3.2 關聯的peer-base.yaml文件
services:
peer-base:
image: hyperledger/fabric-peer:$IMAGE_TAG
environment:
- CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
- CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=${COMPOSE_PROJECT_NAME}_byfn
- CORE_LOGGING_LEVEL=INFO # 日志級別
- CORE_PEER_TLS_ENABLED=true # 是否開啟TLS驗證
- CORE_PEER_GOSSIP_USELEADERELECTION=true # 是否采用leader選舉
- CORE_PEER_GOSSIP_ORGLEADER=false # 是否將當前節點設為leader
- CORE_PEER_PROFILE_ENABLED=true
- CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt # TLS 證書文件
- CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key # TLS 秘鑰文件
- CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt # TLS 根證書文件
working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer # 進入容器默認工作目錄
command: peer node start # 容器啟動命令
?
第一個簡單應用:fabcar
- 在fabcar目錄下執行腳本,啟動網絡:
./startFabric.sh
日志詳情:日志總結
1.1 configtx.yaml配置文件
Organizations:
- &OrdererOrg # 組織
Name: OrdererOrg # 組織的名稱
ID: OrdererMSP # 組織ID
MSPDir: crypto-config/ordererOrganizations/example.com/msp # MSP路徑
- &Org1
Name: Org1MSP
ID: Org1MSP
MSPDir: crypto-config/peerOrganizations/org1.example.com/msp
AnchorPeers:
- Host: peer0.org1.example.com
Port: 7051
- &Org2
Name: Org2MSP
ID: Org2MSP
MSPDir: crypto-config/peerOrganizations/org2.example.com/msp
AnchorPeers:
- Host: peer0.org2.example.com
Port: 7051
Orderer: &OrdererDefaults
OrdererType: solo # 共識排序服務的實現方式,有兩種選擇(solo和kafka)
Addresses:
- orderer.example.com:7050 # orderer節點的服務地址和端口號
BatchTimeout: 2s
BatchSize: # 批處理大小,如最大交易數量,最大字節數及建議字節數
MaxMessageCount: 10
AbsoluteMaxBytes: 99 MB
PreferredMaxBytes: 512 KB
Kafka:
Brokers:
- 127.0.0.1:9092
Organizations:
Profiles:
TwoOrgsOrdererGenesis: # 生成Orderer服務的初始區塊文件,
Capabilities: # 通道的權限信息
<<: *ChannelCapabilities
Orderer: # Orderer服務的信息及權限信息
<<: *OrdererDefaults
Organizations:
- *OrdererOrg
Capabilities:
<<: *OrdererCapabilities
Consortiums: # 聯盟組成成員
SampleConsortium:
Organizations:
- *Org1
- *Org2
TwoOrgsChannel: # 生成應用通道交易配置文件
Consortium: SampleConsortium # 聯盟信息
Application: # 組織及權限信息
<<: *ApplicationDefaults
Organizations:
- *Org1
- *Org2
Capabilities:
<<: *ApplicationCapabilities
- 在javascript文件內,運行腳本實現用戶、數據更新或查詢:
# 安裝環境
npm install
# 加入管理員 admin
node enrollAdmin
# 注冊新用戶 user1
node registerUser
# 查詢所有車輛信息
node query.js
# 插入新的車輛信息,car12
node invoke