聯(lián)盟鏈初識(shí)以及Fabric環(huán)境搭建流程

最新內(nèi)容會(huì)更新在主站深入淺出區(qū)塊鏈社區(qū)
原文鏈接:聯(lián)盟鏈初識(shí)以及Fabric環(huán)境搭建流程

這篇文章首先簡單介紹了聯(lián)盟鏈?zhǔn)鞘裁矗僭敿?xì)的介紹了Fabric環(huán)境搭建的整個(gè)流程希痴。

區(qū)塊鏈分類:

以參與方式分類者甲,區(qū)塊鏈可以分為:公有鏈、聯(lián)盟鏈和私有鏈砌创。

定義:

我們知道區(qū)塊鏈就是一個(gè)分布式的虏缸,去中心化的公共數(shù)據(jù)庫(或稱公共賬本)鲫懒。而聯(lián)盟鏈?zhǔn)菂^(qū)塊鏈的一個(gè)分支,所以它本身也是一個(gè)分布式的刽辙,去中心化的公共數(shù)據(jù)庫窥岩,跟其他鏈的區(qū)別就是它是針對(duì)特定群體的成員和有限的第三方,其內(nèi)部指定多個(gè)預(yù)選節(jié)點(diǎn)為記賬人宰缤,其共識(shí)過程受到預(yù)選節(jié)點(diǎn)控制的區(qū)塊鏈

本質(zhì)

聯(lián)盟鏈本質(zhì)仍然是一種私有鏈颂翼,只不過它要比單個(gè)小組織開發(fā)的私有鏈更大,但是卻沒有公有鏈這么大的規(guī)模慨灭,可以理解為它是介于公有鏈和私有鏈的一種區(qū)塊鏈疚鲤。

聯(lián)盟鏈的特點(diǎn)

  • 交易速度快
    我們知道對(duì)于公有鏈來說,要想達(dá)成共識(shí)缘挑,必須得由區(qū)塊鏈中的所有節(jié)點(diǎn)來決定,本身公有鏈的節(jié)點(diǎn)數(shù)量就非常龐大桶略,所以處理速度很慢语淘。但對(duì)于聯(lián)盟鏈來說,由于其節(jié)點(diǎn)不多的原因际歼,而且只要當(dāng)網(wǎng)絡(luò)上2/3的節(jié)點(diǎn)達(dá)成共識(shí)惶翻,就可以完成交易,交易速度自然也就快很多鹅心。
  • 數(shù)據(jù)默認(rèn)不會(huì)公開
    不同于公有鏈吕粗,聯(lián)盟鏈上的信息并不是所有有訪問條件的人就可以訪問的,聯(lián)盟鏈的數(shù)據(jù)只限于聯(lián)盟里的機(jī)構(gòu)及其用戶才有權(quán)限進(jìn)行訪問旭愧。
  • 部分去中心化
    與公有鏈不同颅筋,聯(lián)盟鏈某種程度上只屬于聯(lián)盟內(nèi)部的所有成員所有,且很容易達(dá)成共識(shí)输枯,因?yàn)槠涔?jié)點(diǎn)數(shù)畢竟是有限的议泵。

聯(lián)盟鏈的應(yīng)用

R3:由40多加銀行參與的區(qū)塊鏈聯(lián)盟R3,包括世界著名的銀行(如摩根大通桃熄、高盛先口、瑞信、伯克萊瞳收、匯豐銀行等)碉京,IT巨頭(如IBM、微軟)螟深。
超級(jí)賬本(Hyperledger):由 Linux基金會(huì)在2015年12月主導(dǎo)發(fā)起該項(xiàng)目谐宙, 成員包括金融,銀行血崭,物聯(lián)網(wǎng)卧惜,供應(yīng)鏈厘灼,制造和科技行業(yè)的領(lǐng)頭羊。

Fabric介紹

我們知道智能合約比較成功的就是以太坊了咽瓷。以太坊主要是公有鏈设凹,其實(shí)對(duì)企業(yè)應(yīng)用來說并不是特別合適,而且本身并沒有權(quán)限控制功能茅姜,面向企業(yè)的闪朱,主要還是HyperLedger Fabric,當(dāng)然還有R3的Corda钻洒。這里我們主要是講Fabric奋姿。
Fabric是一個(gè)面向企業(yè)應(yīng)用的區(qū)塊鏈框架,基于Fabric的開發(fā)可以粗略分為幾個(gè)層面:
1. 參與Fabric的底層開發(fā)素标,這主要是fabric称诗,fabric-ca和sdk等核心組件。
2. 參與Fabric周邊生態(tài)的開發(fā)头遭,如支持如支持fabric的工具explorer, composer等寓免。
3. 利用fabric平臺(tái)開發(fā)應(yīng)用,這就是利用fabirc提供的各種sdk來為應(yīng)用服務(wù)(應(yīng)用開發(fā))
大部分企業(yè)會(huì)參與2-3的內(nèi)容计维,以3為主來服務(wù)應(yīng)用場景袜香,以2為輔。因?yàn)楝F(xiàn)在除了區(qū)塊鏈核心功能尚未完善外鲫惶,對(duì)區(qū)塊鏈的管理蜈首,運(yùn)維,監(jiān)控欠母,測試欢策,優(yōu)化,調(diào)試等工具非常匱乏艺蝴。企業(yè)將不得不面對(duì)自己開發(fā)一些工作猬腰。

Fabric環(huán)境依賴

fabric官方推薦的開發(fā)環(huán)境是基于docker搭建的,使用docker搭建需要一下前置條件:

  • docker一一Docker version 17.06.2-ce 或以上版本
  • Docker Compose一一1.14或以上版本
  • Go一一1.10或以上版本, Node.js一一8.9.x或以上版本
  • Python一一主要是python-pip

Fabric環(huán)境搭建具體步驟:

這里使用的是Ubuntu 16.04.4版本

1.安裝go及環(huán)境變量配置
(1)下載最新版本的go二進(jìn)制文件

$ wget https://dl.google.com/go/go1.9.2.linux-amd64.tar.gz

(2)解壓文件

$ sudo tar -C /usr/local -xzf go1.9.2.linux-amd64.tar.gz

(3)配置環(huán)境變量

vim ~/.profile

添加以下內(nèi)容:

export PATH=$PATH:/usr/local/go/bin 
export GOROOT=/usr/local/go 
export GOPATH=$HOME/go 
export PATH=$PATH:$HOME/go/bin

編輯保存并退出vi后猜敢,記得使這些環(huán)境變量生效

source ~/.profile

2.安裝docker
Fabric的chaincode是運(yùn)行在docker里的姑荷。
(1) 由于apt官方庫里的docker版本可能比較舊,所以先卸載可能存在的舊版本:

sudo apt-get remove docker docker-engine docker-ce docker.io

(2) 更新apt包索引:

sudo apt-get update

(3) 安裝以下包以使apt可以通過HTTPS使用存儲(chǔ)庫(repository):

sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common

(4) 添加Docker官方的GPG密鑰:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
備注:可驗(yàn)證秘鑰指紋 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
使用如下命令驗(yàn)證:
sudo apt-key fingerprint 0EBFCD88

(5) 使用下面的命令來設(shè)置stable存儲(chǔ)庫:

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

(6) 再更新一下apt包索引:

sudo apt-get update

(7) 安裝最新版本的Docker CE:

sudo apt-get install -y docker-ce
注意:在生產(chǎn)系統(tǒng)上缩擂,可能會(huì)需要應(yīng)該安裝一個(gè)特定版本的Docker CE鼠冕,而不是總是使用最新版本:
列出可用的版本:apt-cache madison docker-ce
選擇要安裝的特定版本娄昆,第二列是版本字符串认然,第三列是存儲(chǔ)庫名稱琐凭,它指示包來自哪個(gè)存儲(chǔ)庫揍庄,以及擴(kuò)展它的穩(wěn)定性級(jí)別。要安裝一個(gè)特定的版本碳却,將版本字符串附加到包名中炭玫,并通過等號(hào)(=)分隔它們:
sudo apt-get install docker-ce=<VERSION>

(8) 測試是否安裝成功

docker --version

(9) 使用阿里提供的鏡像,否則后面下載Fabric鏡像會(huì)非常慢
cd到/etc/docker目錄下,創(chuàng)建文件daemon.json脑又,輸入下面的內(nèi)容:

{
 "registry-mirrors": ["https://obou6wyb.mirror.aliyuncs.com"]
}

保存并退出,接著執(zhí)行:

sudo systemctl daemon-reload
sudo systemctl restart docker

(10) 查看docker服務(wù)是否啟動(dòng):

systemctl status docker

(11) 若未啟動(dòng)泞边,則啟動(dòng)docker服務(wù):

sudo service docker start或者sudo systemctl start docker

3.安裝最新版本的Docker-compose
(1) Docker-compose是支持通過模板腳本批量創(chuàng)建Docker容器的一個(gè)組件该押。在安裝Docker-Compose之前,需要安裝Python-pip阵谚,運(yùn)行腳本:

sudo apt-get install python-pip

(2) 安裝Docker-compose:

pip install docker-compose

(3) 驗(yàn)證是否成功:

sudo docker-compose --version

(這部分還可以看下此篇文章https://blog.csdn.net/so5418418/article/details/78355868)

4.Fabric源碼下載
(1) 新建存放測試蚕礼、部署代碼的目錄。

mkdir -p ~/go/src/github.com/hyperledger/

(2) cd到剛創(chuàng)建的目錄

cd ~/go/src/github.com/hyperledger

(3) 下載Fabric,這里使用使用git命令下載源碼:

git clone https://github.com/hyperledger/fabric.git

特別注意這里:
直接使用上面的git clone下載會(huì)非常慢梢什,因?yàn)間ithub.global.ssl.fastly.Net域名被限制了奠蹬。只要找到這個(gè)域名對(duì)應(yīng)的ip地址,然后在hosts文件中加上ip–>域名的映射嗡午,刷新DNS緩存就可以了囤躁。
解決辦法:
步驟【1】:查詢域名global-ssl.fastly.Netgithub.com 公網(wǎng)地址
可以使用https://www.ipaddress.com/ 這個(gè)查。
分別查找下面這兩個(gè)域名的ip地址:

    github.global.ssl.fastly.net
    github.com

步驟【2】:將ip地址添加到hosts文件

sudo vim /etc/hosts

在文件下方輸入下面內(nèi)容并保存荔睹,前面兩個(gè)ip就是我們剛才上面查找到的ip:

151.101.185.194 github.global.ssl.fastly.net
192.30.253.113 github.com

步驟【3】:修改完hosts還不會(huì)立即生效割以,你需要刷新DNS緩存,告訴電腦我的hosts文件已經(jīng)修改了应媚。
輸入指令:
sudo /etc/init.d/networking restart 即可,如果不行也可以嘗試重啟一下電腦猜极。
接下來再去git clone就快很多了中姜。

(4) 由于Fabric一直在更新,新版本的并不穩(wěn)定跟伏,所有我們并不需要最新的源碼丢胚,需要切換到v1.0.0版本的源碼:

git checkout v1.0.0

5.下載Fabric Docker鏡像
(1) 前面步驟4下載完成后,我們可以看到當(dāng)前工作目錄(~/go/src/github.com/hyperledger/)下多了一個(gè)fabric的文件夾,
接下來我們cd到~/go/src/github.com/hyperledger/fabric/examples/e2e_cli目錄下執(zhí)行:

source download-dockerimages.sh -c x86_64-1.0.0 -f x86_64-1.0.0 

(注:一定要下載完所有鏡像并且鏡像版本要和Fabric版本一致如何沒有下載問繼續(xù)執(zhí)行source download-dockerimages.sh命令直到在完如圖所有鏡像)受扳,執(zhí)行完所有會(huì)用到的Fabric docker鏡像都會(huì)下載下來了携龟。
運(yùn)行以下命令檢查下載的鏡像列表:

docker images

注意:如果下載時(shí)遇到權(quán)限問題,需要切換到root用戶下:su root
(2) 重啟docker

service docker restart

6.測試Fabric環(huán)境是否成功
在~/go/src/github.com/hyperledger/fabric/examples/e2e_cli下執(zhí)行如下命令啟動(dòng)測試

./network_setup.sh up

這個(gè)指令具體進(jìn)行了如下操作:

  1. 編譯生成Fabric公私鑰勘高、證書的程序峡蟋,程序在目錄:fabric/release/linux-amd64/bin
  2. 基于configtx.yaml生成創(chuàng)世區(qū)塊和通道相關(guān)信息,并保存在channel-artifacts文件夾华望∪锘龋基于configtx.yaml生成創(chuàng)世區(qū)塊和通道相關(guān)信息,并保存在channel-artifacts文件夾赖舟。
  3. 基于crypto-config.yaml生成公私鑰和證書信息蓬戚,并保存在crypto-config文件夾中”鲎ィ基于crypto-config.yaml生成公私鑰和證書信息子漩,并保存在crypto-config文件夾中豫喧。
  4. 基于docker-compose-cli.yaml啟動(dòng)1Orderer+4Peer+1CLI的Fabric容器〈逼茫基于docker-compose-cli.yaml啟動(dòng)1Orderer+4Peer+1CLI的Fabric容器紧显。
    在CLI啟動(dòng)的時(shí)候,會(huì)運(yùn)行scripts/script.sh文件旭绒,這個(gè)腳本文件包含了創(chuàng)建Channel鸟妙,加入Channel,安裝Example02挥吵,運(yùn)行Example02等功能重父。

運(yùn)行完如果出現(xiàn)下圖所示,說明整個(gè)Fabric網(wǎng)絡(luò)已經(jīng)通了忽匈。


在這里插入圖片描述

這里記錄本人測試Fabric環(huán)境是否成功時(shí)遇到的問題

1. 如果發(fā)現(xiàn)運(yùn)行 ./network_setup.sh up命令 后提示在...fabric/release/linux-amd64/bin文件夾下找不到指定文件
解決辦法
可以在~/go/src/github.com/hyperledger/fabric/scripts文件下找到 bootstrap.1.0.0.sh文件房午,手動(dòng)運(yùn)行它 ./bootstrap.1.0.0.sh, 此時(shí)可以在當(dāng)前文件夾生成一個(gè)bin文件夾丹允,bin里面的文件就是我們需要的郭厌,將它拷貝到前面的...fabric/release/linux-amd64/bin文件夾下

2. 如果出現(xiàn):Error on outputBlock: Error writing genesis block: open ./channel-artifacts/genesis.block: is a directory不能生成創(chuàng)世塊的錯(cuò)誤。
解決辦法:
可以在~/go/src/github.com/hyperledger/fabric/examples/e2e_cli/channel-artifacts目錄下雕蔽,將genesis.block這個(gè)目錄刪除折柠,rm -rf genesis.block/

3. 如果出現(xiàn):.ERROR: for orderer.example.com Cannot start service orderer.example.com: b'OCI runtime create failed: container_linux.go:348: starting container process caused "process_linux.go:402: container init caused \"rootfs_linux.go:58:
解決辦法:
執(zhí)行./network_setup.sh down 清除網(wǎng)絡(luò)后再啟動(dòng)即可

接下來我們手動(dòng)測試下Fabric網(wǎng)絡(luò):

fabric提供了SDK和CLI兩種交互方式,這里我們使用的是CLI批狐。
這里我們使用官方提供的小例子進(jìn)行測試扇售,在官方例子中,channel名字是mychannel嚣艇,鏈碼(智能合約)的名字是mycc承冰。
首先要登錄到CLI這個(gè)容器中,才能執(zhí)行Fabric的CLI命令:

docker exec -it cli bash

這時(shí)用戶名變?yōu)閞oot@caa22f87a5bf食零,當(dāng)前目錄變?yōu)?opt/go/src/github.com/hyperledger/fabric/peer#困乒,接著可執(zhí)行peer命令,體驗(yàn)區(qū)塊鏈的命令行使用方式贰谣。
1.查看a賬戶的余額

peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

此時(shí)我們可以看到控制臺(tái)輸出有:

Query Result: 90

這里90就是a賬戶的余額
2.調(diào)用鏈碼娜搂,轉(zhuǎn)賬
這里我們讓b賬戶向a賬戶轉(zhuǎn)賬10:

peer chaincode invoke -o orderer.example.com:7050  --tls true --cafile /opt/go/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem  -C mychannel -n mycc -c '{"Args":["invoke","b","a","10"]}'

轉(zhuǎn)賬成功后,我們可以看到有輸出如下提示:

DEBU 009 ESCC invoke result: version:1 response:<status:200 message:"OK" 

接下來我們使用前面的命令繼續(xù)查看a賬戶的余額吱抚,輸出結(jié)果如下:

Query Result: 100

很明顯我們已經(jīng)轉(zhuǎn)賬成功了涌攻。
退出cli容器:
直接執(zhí)行

exit

最后如果我們要關(guān)閉Fabric網(wǎng)絡(luò),cd到~/go/src/github.com/hyperledger/fabric/examples/e2e_cli下(注意這里的路徑按自己前面創(chuàng)建的频伤,不一定要和我一樣)恳谎,執(zhí)行:

./network_setup.sh down

參看鏈接:
https://blog.csdn.net/github_34965845/article/details/80610060
https://www.cnblogs.com/preminem/p/7729497.html
https://www.cnblogs.com/gao90/p/8692642.html
https://blog.csdn.net/so5418418/article/details/78355868
https://blog.csdn.net/iflow/article/details/77951610
https://blog.csdn.net/vivian_ll/article/details/79966210

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子因痛,更是在濱河造成了極大的恐慌婚苹,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鸵膏,死亡現(xiàn)場離奇詭異膊升,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)谭企,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門廓译,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人债查,你說我怎么就攤上這事非区。” “怎么了盹廷?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵征绸,是天一觀的道長。 經(jīng)常有香客問我俄占,道長管怠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任缸榄,我火速辦了婚禮渤弛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘甚带。我一直安慰自己暮芭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布欲低。 她就那樣靜靜地躺著,像睡著了一般畜晰。 火紅的嫁衣襯著肌膚如雪砾莱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天凄鼻,我揣著相機(jī)與錄音腊瑟,去河邊找鬼。 笑死块蚌,一個(gè)胖子當(dāng)著我的面吹牛闰非,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播峭范,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼财松,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起辆毡,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤菜秦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后舶掖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體球昨,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年眨攘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了主慰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鲫售,死狀恐怖共螺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情龟虎,我是刑警寧澤璃谨,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站鲤妥,受9級(jí)特大地震影響佳吞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜棉安,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一底扳、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧贡耽,春花似錦衷模、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至滥嘴,卻和暖如春木蹬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背若皱。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來泰國打工镊叁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人走触。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓晦譬,卻偏偏與公主長得像,于是被迫代替她去往敵國和親互广。 傳聞我的和親對(duì)象是個(gè)殘疾皇子敛腌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

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