因爲這個活兒前段時間本身過了一遍,當時發現網上資料不多,因此特意寫一篇給你們分享一下,幫助你們踩一些坑。php
Hyperledger Fabric是由IBM公司主導開發的一個面向企業級客戶的開源項目。與比特幣和以太坊這類公有鏈不一樣,Hyperledger Fabric網絡中的節點必須通過受權認證後才能加入,從而避免了POW資源開銷,大幅提升了交易處理效率,知足企業級應用對處理性能的訴求。同時,爲了知足靈活多變的應用場景,Hyperledger Fabric採用了高度模塊化的系統設計理念,將權限認證模塊(MSP)、共識服務模塊(Ordering Service)、背書模塊(Endorsing peers)、區塊提交模塊(committing peers)等進行分離部署,使開發者能夠根據具體的業務場景替換模塊,實現了模塊的插件式管理(plug-in/plug-out)。因此,Hyperledger Fabric是一個私有鏈/聯盟鏈的開發框架,並且系統的運行不須要token支持。html
本文主要是根據Hyperledger Fabric Sample中的Commercial paper tutorial改編,來實現一個簡單的Blockchain Bookstore App。node
Commercial paper tutorial參考文檔:
git
咱們須要實現一個簡單的區塊鏈書店,這裏面首先必須得有智能合約,而後還須要包含一些書店交易環節的基本的功能,好比購買,退貨等。同時也要保證退貨的時候,款項退款正確。實現這些簡單的需求,能夠參考Commercial paper tutorial代碼。github
既然能夠參考Commercial paper tutorial的代碼,那麼咱們就先去: docker
https://hyperledger-fabric.readthedocs.io/en/release-1.4/tutorial/commercial_paper.html複製代碼
去看一下這個教程都有些什麼內容。數據庫
這個教程比較長,並且都是英文,因此皮爺在這裏就給你們簡單總結一下:小程序
那麼長的英文其實就講的是這些東西而已,整個流程其實和書店的環節很像:bash
這裏其實有點坑,以前我一直嘗試着在Mac上面作,可是作到一半,發現有個「mkdir xxxxxx permission deny」始終過不去,網上找了好多好多好多好多方法,都不行,這個問題整整困擾了我兩天!實實在在的兩天,一個週末。天哪,一個美好的週末,兩天,就在搜索怎樣解決這個問題。最後仍是解決不了,因此我就乾脆直接在個人 服務器
由於文章都是涉及到服務器的,因此福利就要寫在最前面:
皮爺這裏就有上千元的阿里雲和騰訊雲的優惠券給你使用(每一款優惠只要點擊優惠連接,進入便可領取):阿里雲部分:
【阿里雲新人1888元雲產品通用代金券】:
promotion.aliyun.com/ntms/yunpar…【阿里雲爆款雲主機,2折優惠券】:
promotion.aliyun.com/ntms/act/qw…【阿里雲企業級服務器2折優惠券】:
promotion.aliyun.com/ntms/act/en…騰訊雲:
【新客戶無門檻領取總價值高達2775元代金券,每種代金券限量500張,先到先得】:
cloud.tencent.com/redirect.ph…
有了雲服務器,下一步就是準備環境了:
首先咱們得啓動整個網絡,啓動網絡則是 /fabric-samples/basic-network/
裏面,直接運行 . start.sh
而後咱們能夠從 docker ps
裏面看到,成功啓動了四個image
接着,咱們須要啓動 cliBookStore 的image,則須要cd /fabric-samples/commercial-paper/organization/bookstore/configuration/cli/
,而後經過命令:docker-compose -f docker-compose.yml up -d cliBookStore
啓動。
接下來咱們還須要去啓動消費者的cliDigiBank。目錄/fabric-samples/commercial-paper/organization/digibank/configuration/cli/
,命令:docker-compose -f docker-compose.yml up -d cliDigiBank
則能啓動起來:
爲了更好的觀察網絡中的數據變化,咱們能夠啓動一個監控image來檢測所有網絡。目錄是/fabric-samples/commercial-paper/organization/bookstore/configuration/cli/
,經過命令./monitordocker.sh net_basic to start a new docker image to monionter basic_net
啓動。
既然咱們是BookstoreApp,那麼咱們的只能合約就叫作bookcontract
。合約在/fabric-samples/commercial-paper/organization/bookstore/contract/
目錄下,安裝合約,則經過命令:docker exec cliBookStore peer chaincode install -n bookcontract -v 0 -p /opt/gopath/src/github.com/contract -l node
以後咱們須要將合約發佈出去,經過命令:docker exec cliBookStore peer chaincode instantiate -n bookcontract -v 0 -l node -c '{"Args":["org.papernet.digitbook:instantiate"]}' -C mychannel -P "AND ('Org1MSP.member')"
每個組織的應用程序,都在他對應的/application/
目錄地下。因此,書店的應用程序也在這個目錄下。
首先,須要把書店的錢包添加到網絡裏:
而後,咱們能夠調用 issue 程序,將《LEARNING JAPANESE》這本書,按照編號00001發佈出去:
此時,能夠調用一個query程序,來看一下書籍的信息:
由於這本書已經發售了,因此書店的人是有權利來讀取這本書的內容的。
目前,圖書的狀態指示issued,若是書店想要賣這本書,那麼他還須要把這本書publish出來,因此調用publish程序:
由於此時圖書狀態是處在待賣的狀態,歸屬Digibank的兩我的是沒有權限來讀取書中內容的:
今天的文章咱們就先說到這裏,還剩下
代碼我已經在公衆號裏面分享了,想要獲取源碼的同窗,能夠關注公號『皮爺擼碼』,回覆『代碼』便可找到,記住對應的代碼編號是『HF001』,代碼編號是『HF001』,代碼編號是『HF001』。
最後給小程序打個廣告,搖一搖,來不來?