使用Hyperlegder Fabric體驗區塊鏈智能合約的樂趣----編寫一個簡單的BookstoreApp(上)

因爲這個活兒前段時間本身過了一遍,當時發現網上資料不多,因此特意寫一篇給你們分享一下,幫助你們踩一些坑。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

https://hyperledger-fabric.readthedocs.io/en/release-1.4/tutorial/commercial_paper.html

0x01_需求

咱們須要實現一個簡單的區塊鏈書店,這裏面首先必須得有智能合約,而後還須要包含一些書店交易環節的基本的功能,好比購買,退貨等。同時也要保證退貨的時候,款項退款正確。實現這些簡單的需求,能夠參考Commercial paper tutorial代碼。github

0x02_讀教程

既然能夠參考Commercial paper tutorial的代碼,那麼咱們就先去: docker

https://hyperledger-fabric.readthedocs.io/en/release-1.4/tutorial/commercial_paper.html複製代碼

去看一下這個教程都有些什麼內容。數據庫

這個教程比較長,並且都是英文,因此皮爺在這裏就給你們簡單總結一下:小程序

  • 首先在這個框架裏面,有三個組織,分別是MagnetoCrop, Digibank和PaperNet。
  • MagnetoCorp負責發行債券和贖回債券。
  • DigitBank負責購買債券,而後再贖回債券。
  • PaperNet則是負責記錄一切的區塊鏈區間。
  • 首先須要安裝咱們的智能合約PaperContract,而後再將合約擴散到PaperNet上面。
  • MagnetoCrop首先會經過issue()來發放債券。
  • 而後DigitBank則會購買那些已經發放出來的債券。
  • 最後DigitBank經過redeem()來贖回本身的本金。

那麼長的英文其實就講的是這些東西而已,整個流程其實和書店的環節很像:bash

  • 書店其實就是MagnetoCrop,負責發佈書籍,而後買書,退書。
  • DigitBank則是有點像消費者,他們能夠買書,退貨。

0x03_環境準備

這裏其實有點坑,以前我一直嘗試着在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…

【騰訊雲服務器、雲數據庫特惠,3折優惠券】:
cloud.tencent.com/redirect.ph…

有了雲服務器,下一步就是準備環境了:

  • 騰訊雲服務器一臺
  • node v10.15.3
  • Docker version 18.09.6, build 481bc77156
  • go

0x05_啓動網絡

首先咱們得啓動整個網絡,啓動網絡則是 /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啓動。

0x06_安裝智能合約

既然咱們是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')"

0x07_書店的使用場景

每個組織的應用程序,都在他對應的/application/目錄地下。因此,書店的應用程序也在這個目錄下。

首先,須要把書店的錢包添加到網絡裏:

而後,咱們能夠調用 issue 程序,將《LEARNING JAPANESE》這本書,按照編號00001發佈出去:

此時,能夠調用一個query程序,來看一下書籍的信息:

由於這本書已經發售了,因此書店的人是有權利來讀取這本書的內容的。

目前,圖書的狀態指示issued,若是書店想要賣這本書,那麼他還須要把這本書publish出來,因此調用publish程序:

由於此時圖書狀態是處在待賣的狀態,歸屬Digibank的兩我的是沒有權限來讀取書中內容的:

今天的文章咱們就先說到這裏,還剩下

買家的使用場景
和一些其餘的功能,咱們下一篇幅文章再詳細講解。

代碼我已經在公衆號裏面分享了,想要獲取源碼的同窗,能夠關注公號『皮爺擼碼』,回覆『代碼』便可找到,記住對應的代碼編號是『HF001』,代碼編號是『HF001』,代碼編號是『HF001』。

最後給小程序打個廣告,搖一搖,來不來?

相關文章
相關標籤/搜索