區塊鏈(Blockchain)技術正在迅速發展,各行各業都正以極大的熱情擁抱它。作者相信區塊鏈將成爲對信息科技領域產生革命性影響的一項新技術。目前,Hyperledger Fabric 正是此領域一個重要的技術框架與平臺。
本文既是 Hyperledger Fabric(以下簡稱 Fabric)的實用教程,也是其學習、研究筆記。讀者可以與作者一起,一步一步地學習 Fabric 基礎知識,利用 Hyperledger Composer(以下簡稱 Composer)搭建 Fabric 本地開發環境,運行示例應用;並進一步分析、深入瞭解其技術結構與特點。
本文儘量不去簡單複述其他相關文檔,着重從實用角度與讀者一起迅速建立對 Fabric 的直觀認識,並在實踐中逐漸理解區塊鏈技術。本系列文章有三個部分,此爲第一部分。
在本文示例中,Fabric 的版本爲 1.1.0,Composer 的版本爲 0.19.1。在以後的學習過程,它們可能隨時有版本更新,而 micro 版本的改動應該對示例操作不會有影響。但仍請注意版本更新可能帶來的變化。
用一句話來描述區塊鏈:區塊鏈是一個共享的不可修改的賬本,可用來記錄一個網絡上所有交易的歷史。這裏所說的"交易"翻譯自"Transaction"。也可以將之稱爲"事務",本文將之統一稱爲"交易"。
Hyperledger 是 Linux 基金會主持的一個開源項目,啓動於 2015 年,其核心目標是建立開放的、標準化的、企業級的、能支持商業交易的分佈式賬本的框架與基礎代碼。
Hyperledger Fabric 是 Hyperledger 項目的一個組成部分,是一個區塊鏈框架的實現。它將成爲區塊鏈應用開發、解決方案的基礎。Fabric 框架支持組件化、可插拔的共識服務(Consensus Service)、成員服務(Membership Service);"許可(Permissioned)"特性使之爲"私有性"、"保密性"提供了可靠的解決方案;智能合約(Smart Contracts)在 Fabric 中通過"Chaincode"得以實現。Fabric 最初是由 Digital Asset、IBM 貢獻給 Hyperledger 項目的。
Hyperledger Composer 也是 Hyperledger 項目的一個組成部分。通過它,人們可以更快速、容易地建立區塊鏈業務模型,進行區塊鏈網絡及應用的開發、部署,並與現有系統、數據進行集成。
本文中,對於 Fabric 的學習,正是以 Composer 作爲入口與基礎工具,這樣學習的效率更高。在學習初期,Fabric 與 Composer 的知識是緊密結合的,在後期,我們會對這兩項技術分別深入學習、研究。
區塊鏈技術涉及到的技術比較多,本文希望能幫助讀者將焦點一直放在區塊鏈本身上,即使對某項技術學習得不是非常深入,也不會影響對於 Fabric 的學習。一般來說,希望讀者還是能對以下知識預先有所瞭解:Ubuntu,Docker,Node.js,Javascript,npm,CA。
Fabric 支持 MacOSX、*nix 或者 Windows 10 操作系統;Composer 支持 Ubuntu Linux 14.04 / 16.04 LTS (64-bit)或者 MacOS 10.12 操作系統。
現在,我們使用 Ubuntu16.04 LTS 64-bit,作爲我們的區塊鏈部署系統。對於 Ubuntu 系統的安裝與管理,這裏不再詳述,但可以通過以下命令確認版本信息:
1
2
3
|
# cat /etc/issue
Ubuntu 16.04.4 LTS \n \l
# uname -a
|
我們在學習過程中,幾乎所有操作都通過一個專門的用戶來完成(在本文示例中,使用的用戶名爲:fabric;讀者可以根據需要使用自己的用戶名,但請注意在後續示例中要相應修改)。請不要使用 root 用戶。
1
|
# adduser fabric
|
1
|
# usermod -aG sudo fabric
|
1
2
|
# su fabric
$ cd ~
|
現在需要安裝 Node.js, Docker 等軟件,Hyperledger 提供了一個腳本,可以用來自動安裝。
1
2
3
|
$ curl -O https://hyperledger.github.io/composer/latest/prereqs-ubuntu.sh
$ chmod u+x prereqs-ubuntu.sh
$ ./prereqs-ubuntu.sh
|
安裝成功後,會顯示以下內容,包括安裝的軟件名稱及版本號。(後續版本可能會有變化。)
1
2
3
4
5
6
7
|
Installation completed, versions installed are:
Node: v8.11.1
npm: 5.8.0
Docker: Docker version 18.03.0-ce, build 0520e24
Docker Compose: docker-compose version 1.13.0, build 1719ceb
Python: Python 2.7.12
Please logout then login before continuing.
|
請退出當前用戶會話,關閉客戶端工具與 Ubuntu 的連接;並重新以用戶 fabric 登錄 Ubuntu,以使系統設置生效。
如果是自行手動安裝這幾項軟件但版本號並不完全一致,可能會給後續過程帶來一些障礙。所以,爲節約時間,請儘量使用這個自動安裝腳本;或手動安裝這些版本的軟件。
現在,終於要正式開始安裝 Composer 和 Fabric 了。
Hyperledger Composer 是一個開放的開發框架、工具集,可以幫助人們更容易地開發、部署區塊鏈應用。它支持 Fabric,並提供 Javascript SDK。我們可以通過 npm 來安裝它的一系列組件。
1
2
3
|
$ npm install -g composer-cli
$ npm view composer-cli version
0.19.1
|
當前,其版本爲:0.19.1。
我們之後許多操作(安裝、部署、管理)都將通過 Composer CLI 完成。
因爲之前的 Node.js 是通過 nvm 安裝的(請參考:prereqs-ubuntu.sh),並在這裏使用了"-g"選項,所以默認設置下安裝的 node modules 文件可以在這裏找到:
~/.nvm/versions/node/v8.11.1/lib/node_modules
1
2
3
|
$ npm install -g composer-rest-server
$ npm view composer-rest-server version
0.19.1
|
Composer REST server 可以根據我們開發、部署的區塊鏈應用自動生成一些 RESTful API 接口,以方便通過瀏覽器、curl 等工具對之進行訪問。
1
2
3
|
$ npm install -g generator-hyperledger-composer
$ npm view generator-hyperledger-composer version
0.19.1
|
它包含了一組 Yeoman generator,可以在 Yeoman 中執行,以根據模板生成我們將要部署的區塊鏈網絡文件。
1
2
3
|
$ npm install -g yo
$ npm view yo version
2.0.2
|
Yeoman 能根據定義好的 generator 迅速生成我們所需要的項目、應用的框架。
1
2
3
|
$ cd ~
$ mkdir fabric-tools
$ cd fabric-tools/
|
fabric-tools 目錄是我們以後的工作目錄,讀者可以按需要改成自己期望的目錄名。
1
2
|
$ curl -O https://raw.githubusercontent.com/hyperledger/composer-
tools/master/packages/fabric-dev-servers/fabric-dev-servers.tar.gz
|
目前,fabric-dev-servers.zip 包含了 Fabric1.0 與 Fabric1.1 的兩套安裝腳本,及用於初始化的 Fabric 相關配置。解壓後文件位於 fabric-tools/fabric-scripts 目錄下。
1
|
$ tar -xvf fabric-dev-servers.tar.gz
|
1
|
$ ./downloadFabric.sh
|
默認情況下這個腳本最終會執行 fabric-scripts/hlfv11/downloadFabric.sh,hlfv11 表示 Hyperledger Fabric V1.1。這個過程會下載 5 個 docker image 文件,共約 3.6G,視網絡情況,可能需要比較長的時間。下載完成後可以通過 docker images 命令查看。
1
2
3
4
5
6
7
|
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hyperledger/fabric-ca x86_64-1.1.0 72617b4fa9b4 2 weeks ago 299MB
hyperledger/fabric-orderer x86_64-1.1.0 ce0c810df36a 2 weeks ago 180MB
hyperledger/fabric-peer x86_64-1.1.0 b023f9be0771 2 weeks ago 187MB
hyperledger/fabric-ccenv x86_64-1.1.0 c8b4909d8d46 2 weeks ago 1.39GB
hyperledger/fabric-couchdb x86_64-0.4.6 7e73c828fc5b 6 weeks ago 1.56GB
|
到這裏,我們就非常迅速、方便的完成了 Fabric 的下載,及部署環境的安裝,得益於 Docker Container 技術,並不需要我們做複雜的配置。接下來將要開始部署一個示例應用。在之前,我們要先啓動 Fabric,並生成 PeerAdmin card。
1
|
$ ./startFabric.sh
|
startFabric.sh 最終會執行 ~/fabric-tools/fabric-scripts/hlfv11/startFabric.sh,裏面有如下一行內容:
1
|
ARCH=$ARCH docker-compose -f "${DOCKER_FILE}" up -d
|
打開~/fabric-tools/fabric-scripts/hlfv11/composer/docker-compose.yml 我們可以看到有如下四個 Docker 應用的配置:ca.org1.example.com(CA Node),orderer.example.com(Orderer Node),peer0.org1.example.com(Peer Node),couchdb(Database)。它們啓動成功後即意味着 Fabric 區塊鏈網絡的核心部分已經處於運行狀態了。
在 startFabric.sh 中,還有以下內容:
1
2
|
docker exec peer0.org1.example.com peer channel create ……
docker exec -e …… peer0.org1.example.com peer channel join ……
|
它們的作用是建立一個通道(Channel)並將剛啓動的節點 peer0.org1.example.com 加入到這個通道。
通道(Channel)是 Fabric 中的重要概念與設計,它是網絡成員間通訊的私有的子網絡;網絡中會有多個通道同時存在;每個交易都在認證、授權後在某個通道里執行;所有數據、交易、成員、通道信息都只對此通道的授權成員可見。
1
|
$ ./createPeerAdminCard.sh
|
這個腳本會生成一個 Card 文件,它包含了 Fabric 網絡的信息以及管理員 PeerAdmin 與之連接所必須的信息;即管理員的身份證明文件;生成後這個文件會被導入到 Composer,你可以在~/.composer/cards/[email protected] 目錄下找到被導入的 PeerAdmin Card 的文件內容。之後,Composer 會利用這個 Card 文件建立起到 Fabric 網絡的連接。
在以後的學習中,我們會介紹如何建立一個自定義的 Card 文件。
docker exec -e …… peer0.org1.example.com peer channel join ……