Hyperledger Fabric V1.0 開發(fā)者快速入門.md

# Hyperledger Fabric V1.0– 開發(fā)者快速入門

本文檔演示使用Hyperledger Fabric V1.0來部署一個開發(fā)者環(huán)境并運行一個簡單例子。文檔包括創(chuàng)建和加入通道(賬本)、客戶端認證以及部署和調(diào)用智能合約。CLI將用于創(chuàng)建和加入通道(賬本),NodeJS SDK將用于客戶端身份驗證和使用賬本的智能合約功能。

Docker Compose將用于創(chuàng)建包含三個Peer節(jié)點的聯(lián)盟鏈、一個獨立的Orderer和一個證書頒發(fā)機構(CA)。為了加快部署進度,預先生成了基于標準PKI實現(xiàn)的加密要素并打包進fabpre.tar.gz。證書頒發(fā)機構(CA)負責簽發(fā)、撤銷和維護代表一個企業(yè)的加密要素,這些要素提供給客戶端(Node SDK)用于身份認證。

Fabric網(wǎng)絡將通過執(zhí)行docker-compose自動生成,創(chuàng)建通道和加入通道的API將會自動被調(diào)用;同時,開發(fā)者也可以通過手動步驟生成自己的Fabric網(wǎng)絡和通道(賬本)或直接使用開發(fā)者模式進行應用開發(fā)。

****

### 前提條件和系統(tǒng)配置

-**Docker** - v1.12 及更高版本

-**Docker Compose** - v1.8 及更高版本

-**Node.js** - v2.1.8 及更高版本

nodejs帶有節(jié)點的包管理(NPM)。如果你的機器上已經(jīng)安裝了NPM,可以發(fā)出以下命令來獲取新的軟件包:

```Python

npm install npm@latest

```

查看npm安裝的版本:

```Python

npm -v

```

如圖:![這里寫圖片描述](http://img.blog.csdn.net/20170213113535347?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb2xpYW5nMTEzMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

查看docker安裝的版本:

```Python

docker -v

```

如圖:![這里寫圖片描述](http://img.blog.csdn.net/20170213113451565?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb2xpYW5nMTEzMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

查看docker-compose安裝的版本:

```Python

docker-compose -v

```

如圖:![這里寫圖片描述](http://img.blog.csdn.net/20170213113708334?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb2xpYW5nMTEzMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

查看nodejs安裝的版本:

```Python

node -v

```

如圖:![這里寫圖片描述](http://img.blog.csdn.net/20170213113936744?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb2xpYW5nMTEzMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

**安裝docker、docker-compose、python-pip、nodejs、npm都不一一安裝了,如果不會安裝的,可以看下我的前一篇博文。**

****

### 一、下載源代碼和創(chuàng)建網(wǎng)絡

- 如果沒有安裝Curl,請先下載并安裝 Curl 工具

```python

yum install curl

```

- 創(chuàng)建 Fabric 工程和項目目錄

```

mkdir -p ?testone

```

- 進入項目目錄

```

cd testone

```

然后, 執(zhí)行如下代碼:

```

curl -L https://raw.githubusercontent.com/hyperledger/fabric/master/examples/sfhackfest/sfhackfest.tar.gz -o sfhackfest.tar.gz 2> /dev/null; ?tar -xvf sfhackfest.tar.gz

```

執(zhí)行完這條命令,會下載并解壓縮部署Fabric網(wǎng)絡的相關組件 ,包括Docker Compose 腳本, 通道創(chuàng)建/加入腳本, 認證使用的加密要素等,在/ src / github.com/example_cc目錄你可以將鏈碼部署。

這時你的目錄里的內(nèi)容應該是這樣的

```

sfhackfest.tar.gz ? channel_test.sh ? src

ccenv ? ? docker-compose-gettingstarted.yml ?tmp

```

### 二、使用docker

你不需要手工拖取Docker鏡像,通過執(zhí)行docker-compose命令, fabric-peer, fabric-orderer, fabric-ca和 cli 都會自動下載、解壓縮相關的鏡像。

### 三、命令

通道相關的命令:

- **create** ? –在 orderer上創(chuàng)建并命名一個通道,返回一個通道的創(chuàng)世區(qū)塊,生成的創(chuàng)世塊以通道的名字命名;

- **join** ?– 使用 create 命令生成的創(chuàng)世區(qū)塊,向Peer節(jié)點發(fā)出加入通道的請求。

### 四、使用Docker 創(chuàng)建Fabric網(wǎng)絡 & 創(chuàng)建/加入通道

(1)確保 hyperledger/fabric-ccenv 鏡像的標簽是 latest,執(zhí)行以下命令:

```

docker-compose -f docker-compose-gettingstarted.yml build

```

(2)創(chuàng)建Fabric網(wǎng)絡 ,創(chuàng)建通道(賬本), 將Peer節(jié)點加入通道,執(zhí)行命令如下:

```

docker-compose -f docker-compose-gettingstarted.yml up -d

```

(3)查看你的容器,命令如下:

```

docker ps -a

```

終端應該顯示有6個獨立運行的容器(3 個peer節(jié)點, 1個 獨立的 orderer, CLI 和 CA). 嵌入在docker-compose.yml里的channel_test.sh會在CLI容器里執(zhí)行創(chuàng)建通道和加入通道命令。執(zhí)行結束,應該只有一個Fabric網(wǎng)絡和一個通道(賬本),通道包含三個節(jié)點peer0,Peer1,Peer2。

(4)確保已創(chuàng)建通道,并已成功連接節(jié)點:

```

docker exec -it cli bash

```

(5)查看通道創(chuàng)建/節(jié)點加入的結果:

```

more results.txt

```

顯示的結果如下:

```

SUCCESSFUL CHANNEL CREATION

SUCCESSFUL JOIN CHANNEL on PEER0

SUCCESSFUL JOIN CHANNEL on PEER1

SUCCESSFUL JOIN CHANNEL on PEER2

```

(6)驗證成功創(chuàng)建了創(chuàng)世塊,執(zhí)行如下命令:

```

more myc1.block

```

(7)退出容器

```

exit

```

****

### 五、下載應用程序源代碼和SDK模塊

- 在發(fā)出命令之前,確保你在工作的目錄中,已經(jīng)下載好代碼。確保你已經(jīng)退出了CLI的容器。

- 執(zhí)行以下命令:

```

curl -OOOOOO https://raw.githubusercontent.com/hyperledger/fabric-sdk-node/master/examples/balance-transfer/{config.json,deploy.js,helper.js,invoke.js,query.js,package.json}

```

這條命令會下載用于部署、調(diào)用和查詢案例,智能合約的 javascript 代碼 ,同時,它也包含了node SDK 依賴的模塊

- 安裝node模塊

```

npm install

```

現(xiàn)在你已經(jīng)擁有了全部Fabric網(wǎng)絡運行需要的組件.

### 六、使用 node SDK 注冊/登錄一個用戶并執(zhí)行部署/調(diào)用/查詢操作

這個案例程序?qū)⑼ㄟ^Node SDK &APIs以及預先準備的CA認證所需的加密要素來實現(xiàn)客戶端的登記、注冊和登錄。一旦客戶端完成身份驗證,就可以執(zhí)行程序包含的智能合約功能(部署、調(diào)用、查詢)。

在每個節(jié)點程序成功后,你將在終端接收到“200”響應。

(1)注冊/登錄 & 部署智能合約 (Linux or OSX):

```

GOPATH=$PWD node deploy.js

```

(2)執(zhí)行一個調(diào)用操作, 從 “a” 轉(zhuǎn)移一定資產(chǎn)到 “b”:

```

node invoke.js

```

(3)查詢鍵值 “b”:

```

node query.js

```

你可以瀏覽NodeJS SDK 和APIs的文檔來實現(xiàn)更多功能。

****

### 七、手動創(chuàng)建和加入通道

使用CLI容器手動執(zhí)行創(chuàng)建通道和加入通道API。

通道m(xù)yc1已經(jīng)存在,所以,讓我們創(chuàng)建一個新的通道,命名為myc2。

(1)進入cli容器:

```

docker exec -it cli sh

```

(2)如果成功,您應該在您的終端看到以下:

```

/opt/gopath/src/github.com/hyperledger/fabric/peer #

```

(3)發(fā)送createChannel API 給 Orderer:

```

CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050 peer channel create -c myc2

```

(4)發(fā)送joinchannel API 給 Peer0:

- CreateChannel執(zhí)行完畢將返回一個創(chuàng)世區(qū)塊(myc2.block),然后你可以執(zhí)行加入通道的指令,把Genesis block作為參數(shù)發(fā)送joinchannel API給 peer0。

通道的定義都保存在創(chuàng)世塊內(nèi):

```

CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050 CORE_PEER_ADDRESS=peer0:7051 peer channel join -b myc2.block

```

(5)如果想要加入其它節(jié)點,只需重新發(fā)送上述命令給peer1或Peer2即可

```

CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050 CORE_PEER_ADDRESS=peer1:7051 peer channel join -b myc2.block

```

一旦全部Peer節(jié)點都加入了通道,你可以查詢賬本而無需在每個節(jié)點都部署智能合約。

### 八、使用CLI命令,部署,調(diào)用和查詢智能合約

(1)運行部署命令:這個命令是在通道m(xù)yc2上的Peer節(jié)點0上部署一個名叫MYCC的智能合約。構造函數(shù)把A和B的值分別初始化為100和200

```

CORE_PEER_ADDRESS=peer0:7051 CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050 peer chaincode deploy -C myc2 -n mycc -p github.com/hyperledger/fabric/examples -c '{"Args":["init","a","100","b","200"]}'

```

(2)運行調(diào)用命令:這個命令是從A移動10個單位到B

```

CORE_PEER_ADDRESS=peer0:7051 CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050 peer chaincode invoke -C myc2 -n mycc -c '{"function":"invoke","Args":["move","a","b","10"]}'

```

(3)運行查詢命令:按照預期,查詢a的返回值應該是90

```

CORE_PEER_ADDRESS=peer0:7051 CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050 peer chaincode query -C myc2 -n mycc -c '{"function":"invoke","Args":["query","a"]}'

```

你可以在任何時間發(fā)出exit命令退出CLI容器。

### 九、常用docker命令:

1)刪除一個容器

```

docker rm

```

2)強制刪除一個容器

```

docker rm -f

```

3)強制刪除全部容器

```

docker rm -f $(docker ps -aq)

```

4)刪除一個鏡像:

```

docker rmi

```

5)強制刪除一個鏡像:

```

docker rmi -f

```

6)強制刪除全部鏡像

```

docker rmi -f $(docker images -q)

```

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,362評論 6 537
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,013評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,346評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,421評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,146評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,534評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,585評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,767評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,318評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,074評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,258評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,828評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,486評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,916評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,156評論 1 290
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,993評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,234評論 2 375

推薦閱讀更多精彩內(nèi)容