基於ubuntu16.04部署IBM開源區塊鏈專案-彈珠資產管理(Marbles)

Dmego發表於2018-05-15
基於ubuntu16.04部署IBM開源區塊鏈專案-彈珠資產管理(Marbles)

前言

本教程基本上是對Marbles專案的翻譯過程. 如果英文比較好的話,建議根據官方操作說明,一步步進行環境部署。當然你也可以參考本教程在自己的主機上部署該專案。

Marbles 介紹

關於 Marbles

  • 這個應用程式的基礎網路是 Hyperledger Fabric,後者是一個 Linux Foundation 專案。 您可能想查閱以下操作說明來稍微瞭解一下 Hyperledger Fabric
  • 本演示旨在幫助開發人員瞭解鏈程式碼的基礎知識以及如何使用 Fabric 網路開發應用程式
  • 這是一個非常簡單的資產轉移演示。多個使用者可以建立並相互轉移彈珠。
    mark

版本

各種版本的 marbles 同時存在。 本版本相容 Hyperledger Fabric v1.1x。 你可以通過檢出別的分支來獲取別的版本的 marble,這裡演示使用的是ae4e37d分支

應用程式背景

請大家集中注意力,這個應用程式將演示如何利用 Hyperledger Fabric 在許多彈珠所有者之間轉移彈珠。 我們將在 Node.js 中使用一些 GoLang 程式碼完成此任務。 該應用程式的後端將是在我們的區塊鏈網路中執行的 GoLang 程式碼。 從現在開始,這些 GoLang 程式碼將稱為“鏈程式碼”或“cc”。 該鏈程式碼本身會建立一顆彈珠,將它儲存到鏈程式碼狀態中。 該鏈程式碼本身可以將資料作為字串儲存在鍵/值對設定中。 因此,我們將字串化 JSON物件,以便儲存更復雜的結構.

彈珠的屬性包括:

  • ID(唯一字串,將用作鍵)
  • 顏色(字串,CSS 顏色名稱)
  • 尺寸(int,以毫米為單位)
  • 所有者(字串)

我們將建立一個使用者介面,它可以設定這些值並將它們儲存在區塊鏈的賬本中。 彈珠實際上是一個鍵值對。 鍵為彈珠 ID,值為一個包含(上面列出的)彈珠屬性的 JSON 字串。 與 cc 的互動是通過對網路上的一個對等節點使用 gRPC 協議來完成的。 gRPC 協議的細節由一個名為 Hyperledger Fabric Client SDK 的 SDK 處理。 請檢視下圖瞭解拓撲結構細節。

mark

應用程式通訊流

  • 1.管理員將在他們的瀏覽器中與我們的 Node.js 應用程式 Marbles 進行互動
  • 2.此客戶端 JS 程式碼將開啟一個與後端 Node.js 應用程式的 Websocket 連線,管理員與該站點互動時,客戶端 JS 將訊息傳送到後端
  • 3.讀取或寫入賬本稱為提案,這個提案由 Marbles (通過SDK)構建,然後傳送到一個區塊鏈對等節點.
  • 4.該對等節點將與它的 Marbles 鏈程式碼容器進行通訊. 鏈程式碼容器將執行/模擬該交易. 如果沒有問題, 它會對該交易進行背書,並將其發回我們的Marbles程式.
  • 5.然後, Marbles (通過SDK)將背書後的提案傳送到訂購服務.訂購方將來自整個網路的許多提案打包到一個區塊中. 然後它將新的區塊廣播到網路中的對等節點
  • 6.最後,對等節點會驗證該區塊並將它寫入到自己的賬本中,該交易現在已經生效,所有後續讀取都會反映此更改.

Marbles 專案環境配置

這裡使用的是本地的 Hyperledger Fabric 網路來部署專案,如果想使用 IBM Cloud IBM Blockchain 服務來部署該專案,請參考前言中給的官方文件.

  • 注意:本教程使用的系統環境是: ubuntu16.04

設定 Chaincode(鏈碼) 開發環境

如果您通過本人的上一篇部落格基於ubuntu16.04快速構建Hyperledger Fabric網路已經搭建好了一個 Hyperledger Fabric 網路,那麼這裡只需要安裝 Node.js 的環境並驗證環境是否正確即可,如果您沒有在本地搭建 Hyperledger Fabric 網路,建議您通過上述部落格先在本地構建好網路環境.

驗證 Git 環境

一般來說 linux 系統都是自帶 Git ,如果系統裡沒有裝,可以使用如下命令來進行安裝

$ sudo apt-get install git
複製程式碼

安裝完成後驗證一下

$ git --version
git version 2.7.4
複製程式碼

驗證 GO 環境

Go安裝安裝了一組Go CLI工具,這些工具在編寫連結程式碼時非常有用。例如,該 go build 命令允許您在嘗試將其部署到網路之前檢查鏈程式碼是否實際編譯.

  • 驗證安裝環境
$ go version
go version go1.10 linux/amd64
$ echo $GOPATH
/home/ubuntu/go
複製程式碼

這裡的 ubuntu是我的使用者名稱,表示我的 GOPATH 目錄是我的主目錄下的 go 資料夾,當然你的 GOPATH 不需要匹配上面的那個。它只是很重要的,但你必須把這個變數設定為檔案系統上的有效目錄.

安裝 Node.js 環境

首先可以先使用 node -vnpm -v 命令來驗證系統中是否有 Node.js 環境,如果沒有安裝則需要使用如下命令進行安裝:

$ sudo apt-get install nodejs
$ sudo apt install nodejs-legacy
$ sudo apt install npm
複製程式碼

安裝完成之後使用 node -vnpm -v 命令來檢視版本資訊:

$ node -v
v4.2.6
$ npm -v
3.5.2
複製程式碼

遺憾的是通過這種方式安裝的 Node.js 版本都比較低,而且並不符合我們專案的環境要求(官網文件中出現的版本為:node:v6.10.1;npm:3.10.10),為了避免因軟體版本不同而引起的問題,我們還需要對 Node 以及 npm 的版本進行升級操作

  • 先配置 npm 倉庫,因為國內的網路環境,直接從 npm 官方源安裝軟體包速度會特別慢
$ npm install -g nrm
複製程式碼
  • 安裝完成之後,列出可用的軟體源
$ nrm ls
* npm ---- https://registry.npmjs.org/
  cnpm --- http://r.cnpmjs.org/
  taobao - https://registry.npm.taobao.org/
  nj ----- https://registry.nodejitsu.com/
  rednpm - http://registry.mirror.cqupt.edu.cn/
  npmMirror  https://skimdb.npmjs.com/registry/
  edunpm - http://registry.enpmjs.org/
複製程式碼
  • 可以切換到淘寶的源,這個速度在國內還是很快的
$ nrm use taobao
Registry has been set to: https://registry.npm.taobao.org/
複製程式碼
  • 安裝 node 版本管理工具 n
$ npm install -g n
複製程式碼
  • 通過 n 安裝指定版本
$ n 6.10.1
複製程式碼
  • 再次使用 node -v 命令,檢視當前版本
$ node -v
v6.10.1
複製程式碼
  • 升級 npm 的版本號
$ npm install -g npm@3.10.10
複製程式碼
  • 再次使用 npm -v 命令,檢視當前版本
$ npm -v
3.10.10
複製程式碼

至此,Node.js的環境就算是搭建完成了

Hyperledger Fabric 版本切換

官方文件中提供了三種選擇,一種是不想對鏈碼進行修改的,下面操作可以不必執行.而想要自己修改鏈碼的而且想使用最新版本 Fabric 的可以切換到最新的分支,雖然說該專案相容 Hyperledger Fabric v1.1x,但是出於避免出現未知的錯誤,建議將分支切換到文件中使用的版本ae4e37d.切換步驟命令如下

  • 將此版本與網路/ Fabric 的提交雜湊匹配(前7個字元將起作用)
$ cd $GOPATH/src/github.com/hyperledger/fabric
$ git checkout ae4e37d
複製程式碼

如果按照我的上篇部落格配置的,這裡的 $GOPATH 既使用者主目錄下的 go 資料夾,

  • 使用git分支確認級別。它應該顯示與您提供的相符的提交級別
$ git branch
* (HEAD detached at ae4e37d)
  release-1.1
複製程式碼

顯示已經切換到ae4e37d分支,當前最新發布版本為1.1. 當然,你如果想知道ae4e37d分支的具體資訊,可以通過如下命令檢視:

$ git log -p
commit ae4e37dbafe74997534ab317dec5c3f4f53b6a84
Author: Gari Singh <gari.r.singh@gmail.com>
Date:   Mon Aug 7 17:50:39 2017 -0400

    FAB-5652 Prepare fabric for 1.0.2 release
    
    - base version = 1.0.2
    - prev version = 1.0.1
    - is_release = false
    
    Change-Id: Ibce2a81193b09015eef896391b0e8166d40e7102
    Signed-off-by: Gari Singh <gari.r.singh@gmail.com>

diff --git a/Makefile b/Makefile
index d1febaa..ffe51f3 100755
--- a/Makefile
+++ b/Makefile
@@ -36,9 +36,9 @@
 #   - unit-test-clean - cleans unit test state (particularly from docker)
 
 PROJECT_NAME   = hyperledger/fabric
複製程式碼

通過上面的命令輸出結果可以看到,該分支是基於1.0.2版本的.切換到該分支後,還需要驗證結構安裝

  • 開啟命令提示符/終端輸入一下命令
$ cd $GOPATH/src/github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02
$ go build --tags nopkcs11 ./
複製程式碼

它應該返回沒有錯誤/警告。您還應該看到在該目錄中建立了可執行檔案。 請注意,nopkcs11標籤很重要。PKCS 11是您不太可能在您的系統上使用的公鑰加密標準。 請記住在開發/構建鏈碼時使用此標誌。 對編寫鏈碼 IDE 的選擇官方文件推薦了兩個 Visual Studio CodeAtom,具體的 IDE 開發環境配置可以在網上搜尋.

搭建一個本地的Hyperledger網路

這裡是構建一個本地的Hyperledger網路,然後測試該網路步驟過程.

先下載 Marbles 專案

我們需要將 Marbles 下載到本地系統。 讓我們使用 Git 通過克隆此儲存庫來完成該任務。 即使您計劃將 Marbles 託管在 IBM Cloud 中,也需要執行這一步,執行以下命令即可

$ cd ~
$ git clone https://github.com/IBM-Blockchain/marbles.git --depth 1
$ cd marbles
複製程式碼

注意:我這裡將 Marbles 克隆到了使用者主目錄下,你可以選擇任意合適的目錄

下載 Hyperledger Fabric 官方例子

我們將使用 Hyperledger Fabric 例子執行本地網路。他們的程式碼具有 Fabric 網路的設定以及連結程式碼示例。我們只會使用網路設定部分。 使用以下命令下載它們的節點示例:

$ git clone https://github.com/hyperledger/fabric-samples.git
$ cd fabric-samples
複製程式碼

如果之前沒有下載各種結構組織的 Docker 映象,那麼可以使用下面的命令進行下載

$ curl -sSL https://raw.githubusercontent.com/hyperledger/fabric/release-1.1/scripts/bootstrap-1.1.0-preview.sh -o setup_script.sh
$ sudo bash setup_script.sh
複製程式碼

請務必通過執行以下命令或將其貼上到您的.profile檔案中,將這些二進位制檔案新增到PATH變數中

  • 執行命令
$ export PATH=$PWD/bin:$PATH
複製程式碼
  • 若想永久將這些二進位制檔案新增到PATH變數中,可以加入到系統環境變數中
$ vim ~/.profile
複製程式碼

開啟後在最後一行插入插入export PATH=/home/ubuntu/fabric-samples/bin:$PATH,這裡可以先使用 pwd 命令來獲取您本地fabric-samples的目錄,然後將上面命令中的 $PWD 換成該目錄即可,最後使用 :wq 儲存退出,執行下面命令重新整理一下

$ source  ~/.profile
複製程式碼

啟動網路

接下來,我們需要啟動Fabric。執行下面的指令碼來讓所有的事情都發生

 $ cd ./fabcar
 $ sudo ./startFabric.sh
複製程式碼

一兩分鐘後,命令提示符將返回,執行結果如下圖所示

mark

現在執行該命令 docker ps 檢視當前正在執行的Docker容器。您應該看到類似於以下內容的內容:

CONTAINER ID        IMAGE                                   COMMAND                  CREATED             STATUS              PORTS                                            NAMES
01cdf948b39c        dev-peer0.org1.example.com-fabcar-1.0   "chaincode -peer.add…"   2 minutes ago       Up 2 minutes                                                         dev-peer0.org1.example.com-fabcar-1.0
2f79bac1371e        hyperledger/fabric-tools                "/bin/bash"              3 minutes ago       Up 3 minutes                                                         cli
648da0074a8d        hyperledger/fabric-peer                 "peer node start"        3 minutes ago       Up 3 minutes        0.0.0.0:7051->7051/tcp, 0.0.0.0:7053->7053/tcp   peer0.org1.example.com
868e0f78f80e        hyperledger/fabric-ca                   "sh -c 'fabric-ca-se…"   3 minutes ago       Up 3 minutes        0.0.0.0:7054->7054/tcp                           ca.example.com
4c385bb6aa9d        hyperledger/fabric-couchdb              "tini -- /docker-ent…"   3 minutes ago       Up 3 minutes        4369/tcp, 9100/tcp, 0.0.0.0:5984->5984/tcp       couchdb
4b9a2b2b0718        hyperledger/fabric-orderer              "orderer"                3 minutes ago       Up 3 minutes        0.0.0.0:7050->7050/tcp                           orderer.example.com
複製程式碼
  • 如果你沒有看到全部6個容器在執行,那麼有些問題是錯誤的。在繼續之前,您需要排除故障。我建議進入一個已停止的容器的日誌sudo docker logs peer0(替換名稱為w / e的peer0已停止)。

  • 如果您看到containerID already exists正在執行的Docker工具 - 組成,那麼您需要刪除現有的容器。該命令將刪除所有容器docker rm -f $(docker ps -aq)

安裝並例項化鏈程式碼

很好,就快要完成了!現在,我們需要執行我們的 Marbles 鏈碼。 請記住,鏈碼是一個關鍵元件,它最終會在賬本上建立我們的 Marbles 事務。 該鏈碼是需要安裝在對等節點上,然後在一個通道上例項化的 GoLang 程式碼。 已為您編寫好該程式碼! 我們只需要執行它

準備

我們需要一些彈珠依賴來執行安裝/例項化指令碼。通過返回 Marbles 目錄的根目錄並輸入這些命令來安裝彈珠 npm 依賴關係:

$ cd ~/marbles
$ npm install
複製程式碼

重要的是安裝沒有錯誤返回(警告是好​​的)。如果你有 npm 安裝錯誤,在繼續之前你必須解決並修復這些錯誤

生成證書與金鑰檔案

這是一個非常重要步驟! 安裝和例項化操作需要管理員證書和私鑰。如果找不到這些檔案,您將無法執行任何操作。

  • 第1步:在終端/命令提示符中更改路徑到fabric-samples/fabcar目錄:
$ cd ../fabric-samples/fabcar
複製程式碼
  • 第2步:執行命令:
$ node enrollAdmin.js
 Store path:/home/ubuntu/fabric-samples/fabcar/hfc-key-store
Successfully enrolled admin user "admin"
Assigned the admin user to the fabric client ::{"name":"admin","mspid":"Org1MSP","roles":null,"affiliation":"","enrollmentSecret":"","enrollment":{"signingIdentity":"9b6f84a7672908c0629d9b3ad0bf23437d624089061e937af0b0476ec6dec81d","identity":{"certificate":"-----BEGIN CERTIFICATE-----\nMIIB8DCCAZegAwIBAgIUeQVhK98LQFSz5Dz0bt3bB9Baom8wCgYIKoZIzj0EAwIw\nczELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNh\nbiBGcmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMT\nE2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTgwNTE1MTA1ODAwWhcNMTkwNTE1MTA1\nODAwWjAQMQ4wDAYDVQQDEwVhZG1pbjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA\nBPlS00VDvBQpsmMFUGnNzEAQd7lgpTNgEDpzJGk4/xfBuechE8cfNH6WuibJtXxh\nsEQ4uLAlDcOAP1nfXq9oEtWjbDBqMA4GA1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8E\nAjAAMB0GA1UdDgQWBBShJWerMoKEE2u+dn08UBkGs4tWzjArBgNVHSMEJDAigCBC\nOaoNzXba7ri6DNpwGFHRRQTTGq0bLd3brGpXNl5JfDAKBggqhkjOPQQDAgNHADBE\nAiAmqy0J0M1aZlvuv6cDK8GjeMTMjN0V5dZIW/uBv+whtAIgCMbyQRtE+PDwsoSS\nG40hZ4UOoNS2tvIXHRglMMHvKjs=\n-----END CERTIFICATE-----\n"}}}
複製程式碼
  • 第3步:執行命令:
$ node registerUser.js 
 Store path:/home/ubuntu/fabric-samples/fabcar/hfc-key-store
Successfully loaded admin from persistence
Successfully registered user1 - secret:PfPGkGQmNgfw
Successfully enrolled member user "user1" 
User1 was successfully registered and enrolled and is ready to intreact with the fabric network
複製程式碼
  • 第4步:仔細檢查資料夾中是否建立了一些金鑰和證書檔案 fabric-samples/fabcar/hfc-key-store
  • 第5步:接下來,我們需要驗證連線配置檔案中的檔案路徑是否與您的安裝相匹配。
    • 開啟你的連線配置檔案<marbles root>/config/connection_profile_local.json
    • 在這個JSON裡找到這三個欄位:
      • organizations -> x-adminCert -> path
      • organizations -> x-adminKeyStore -> path
      • client -> credentialStore -> path
    • 每個欄位中 path 的值需要反映您的環境(您的目錄結構)。你可以瀏覽這些資料夾和檔案以驗證它們是否存在。
    • 您可能需要根據您放置fabric-samples目錄的位置以及金鑰儲存資料所在的位置來更改這些值。一旦路徑有效,您可以繼續。
  • 第6步:你完成了!將路徑更改回彈珠根目錄:cd ~/marbles並繼續執行下面的安裝連結程式碼說明。

安裝鏈碼

完成之後,我們需要將鏈程式碼放到 peer 節點的檔案系統中。記住 chaincode 定義了什麼彈珠(資產)是我們系統交易的業務邏輯。你可以在這個目錄中找到彈珠鏈碼<marbles root>/chaincode/src/。這個目錄下的檔案就是鏈碼檔案。

我們將使用位於scripts資料夾中的指令碼install_chaincode.js。它會讀取我們的彈珠配置檔案和連線配置檔案資料。您可以通過編輯install_chaincode.js檔案來更改本專案鏈程式碼ID或版本。如果您想編輯這些檔案並想要更多關於其內容的資訊,請開啟下面的配置和連線配置檔案自述檔案。如果您對預設設定沒有問題,那麼只需將這些檔案單獨儲存並執行下面的命令即可。

$ cd ./scripts
$ node install_chaincode.js

  ......
..........
#這裡省略了許多輸出資訊
..........
  ......


---------------------------------------
info: Now we install
---------------------------------------
debug: [fcw] Installing Chaincode
debug: [fcw] Sending install req targets=[grpc.http2.keepalive_time=300, grpc.keepalive_time_ms=300000, grpc.http2.keepalive_timeout=35, grpc.keepalive_timeout_ms=3500, grpc.max_receive_message_length=-1, grpc.max_send_message_length=-1, grpc.primary_user_agent=grpc-node/1.10.1, _url=grpc://localhost:7051, addr=localhost:7051, , _request_timeout=90000, , _name=null], chaincodePath=marbles, chaincodeId=marbles, chaincodeVersion=v4
info: [packager/Golang.js]: packaging GOLANG from marbles
debug: [fcw] Successfully obtained transaction endorsement
---------------------------------------
info: Install done. Errors: nope
---------------------------------------
複製程式碼

出現上述輸出結果,說明鏈碼安裝成功

例項化鏈碼

接下來我們需要例項化鏈碼。這會讓您的 channel(通道) 啟動彈珠鏈碼mychannel。一旦完成,我們準備使用區塊鏈網路來記錄我們的系統(Marbels)活動。使用下面的命令完成例項化:

$ node instantiate_chaincode.js  

  ......
..........
#這裡省略了許多輸出資訊
..........
  ......

---------------------------------------
info: Now we instantiate
---------------------------------------
debug: [fcw] Instantiating Chaincode peer_urls=[grpc://localhost:7051], channel_id=mychannel, chaincode_id=marbles, chaincode_version=v4, cc_args=[12345], ssl-target-name-override=null, pem=null, grpc.http2.keepalive_time=300, grpc.keepalive_time_ms=300000, grpc.http2.keepalive_timeout=35, grpc.keepalive_timeout_ms=3500
debug: [fcw] Sending instantiate req targets=[grpc.http2.keepalive_time=300, grpc.keepalive_time_ms=300000, grpc.http2.keepalive_timeout=35, grpc.keepalive_timeout_ms=3500, grpc.max_receive_message_length=-1, grpc.max_send_message_length=-1, grpc.primary_user_agent=grpc-node/1.10.1, _url=grpc://localhost:7051, addr=localhost:7051, , _request_timeout=90000, , _name=null], chaincodeId=marbles, chaincodeVersion=v4, fcn=init, args=[12345], 0=214, 1=155, 2=127, 3=34, 4=197, 5=82, 6=208, 7=191, 8=141, 9=140, 10=57, 11=113, 12=46, 13=90, 14=76, 15=231, 16=170, 17=118, 18=197, 19=137, 20=186, 21=212, 22=64, 23=33, _transaction_id=d550ed194a2d798f2a6c2924c0302fdc6323fba2835e128f3dc541f1b6754525
debug: [fcw] Successfully obtained transaction endorsement
debug: [fcw] Successfully ordered instantiate endorsement.
---------------------------------------
info: Instantiate done. Errors: nope
---------------------------------------
複製程式碼

出現上述輸出結果,說明例項化鏈碼成功

執行 Marble 專案

通過上述操作,我們所有的環境都已經配置完成了,接下來就是執行本專案

安裝依賴

開啟命令提示符/終端並導航到 Marbles 目錄,並執行下面的幾個命令:

$ cd ~/marbles
$ sudo npm install gulp -g
$ sudo npm install
複製程式碼

安裝依賴成功後,並且沒有錯誤返回(警告是好​​的).如果你有 npm 安裝錯誤,在繼續之前你必須解決並修復這些錯誤

執行專案

使用如下命令執行專案:

$ gulp marbles_local

  ......
..........
#這裡省略了許多輸出資訊
..........
  ......

----------------------------------- Server Up - localhost:3001 -----------------------------------
Welcome aboard:	 United Marbles
Channel:	 mychannel
Org:		 Org1MSP
CA:		 fabric-ca
Orderer:	 fabric-orderer
Peer:		 fabric-peer-org1
Chaincode ID:	 marbles
Chaincode Version:  v4
------------------------------------------ Websocket Up ------------------------------------------


info: [fcw] Going to enroll peer_urls=[grpc://localhost:7051], channel_id=mychannel, uuid=marblesDockerComposeNetworkmychannelOrg1MSPfabricpeerorg1, ca_url=http://localhost:7054, orderer_url=grpc://localhost:7050, enroll_id=admin, enroll_secret=adminpw, msp_id=Org1MSP, kvs_path=/home/ubuntu/.hfc-key-store
info: [fcw] Successfully loaded enrollment from persistence
debug: added peer grpc://localhost:7051
debug: [fcw] Successfully got enrollment marblesDockerComposeNetworkmychannelOrg1MSPfabricpeerorg1
info: Success enrolling admin
debug: Checking if chaincode is already instantiated or not 1

info: Checking for chaincode...
debug: [fcw] Querying Chaincode: read()
debug: [fcw] Sending query req: chaincodeId=marbles, fcn=read, args=[selftest], txId=null
debug: [fcw] Peer Query Response - len: 5 type: number
debug: [fcw] Successful query transaction.

----------------------------- Chaincode found on channel "mychannel" -----------------------------


info: Checking chaincode and ui compatibility...
debug: [fcw] Querying Chaincode: read()
debug: [fcw] Sending query req: chaincodeId=marbles, fcn=read, args=[marbles_ui], txId=null
warn: [fcw] warning - query resp is not json, might be okay: string 4.0.1
debug: [fcw] Successful query transaction.
info: Chaincode version is good
info: Checking ledger for marble owners listed in the config file

info: Fetching EVERYTHING...
debug: [fcw] Querying Chaincode: read_everything()
debug: [fcw] Sending query req: chaincodeId=marbles, fcn=read_everything, args=[], txId=null
debug: [fcw] Peer Query Response - len: 30 type: object
debug: [fcw] Successful query transaction.
debug: This company has not registered marble owners
info: We need to make marble owners


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
info: Detected that we have NOT launched successfully yet
debug: Open your browser to http://localhost:3001 and login as "admin" to initiate startup
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
複製程式碼

出現上述輸出資訊,則表示專案啟動成功,現在你可以在瀏覽器中輸入 http://localhost:3001來訪問本專案,並且您不需要輸入密碼或更改預先填寫的使用者名稱admin.

注意: 本人在使用gulp marbles_local命令啟動專案的過程中出現瞭如下圖的錯誤,有可能你在執行時也會出現這個錯誤:

mark
檢視 Issues:208可以發現有人已經遇到過這種問題, 閱讀後發現這個bug是由fabric-sdk-node https://jira.hyperledger.org/browse/FAB-2593 引起的, 需要將hfc-key-store目錄複製到您的主目錄$HOME / .hfc-key-store,然後重新配置connection_profile_local.jsonclient.credentialStore.path. 如果你也遇到了這個問題,可以參考如下步驟.

  • 先將hfc-key-store目錄複製到您的主目錄$HOME / .hfc-key-store:
$ cd ~/fabric-samples/fabcar
$ cp -r hfc-key-store  ~/.hfc-key-store
複製程式碼
  • 重新配置connection_profile_local.jsonclient.credentialStore.path:
$ cd ~/marbles/config
$ vim connection_profile_local.json
複製程式碼

在檔案中定位到下面的片段:

"client": {
        "organization": "Org1MSP",
        "credentialStore": {
            "path": "/$HOME/.hfc-key-store"
        }
     },
複製程式碼

path改為上面的路徑(/$HOME/.hfc-key-store)即可.

  • 返回 Marbles 主目錄,重新執行本專案
$ cd ~/marbles
$ gulp marbles_local
複製程式碼

如果這樣,還不能執行,你可以在 issues 裡找找看有沒有相同的錯誤, 如果有解答過程,可以按照解答的過程,自己試著解決這些問題.

執行配置截圖

  • 開始

    mark
    點選選擇右邊的按鈕Guided, 通過這種方式即可以瞭解 Fabric 又能自定義一些設定

  • 第一步:檢查連線配置資料

    mark

第一步是檢查你的連線配置JSON檔案。 檢查的檔案是:marbles/config/marbles_local.json和``marbles/config/connection_profile_local.json`

  • 第二步:註冊管理員
    mark

接下來,我們嘗試將您註冊為貴公司的管理員。此步驟與您的證書頒發機構(CA)聯絡並從您的連線配置檔案中提供了enrollIDenrollSecret

  • 第三步:查詢 Chaincode
    mark

現在我們需要在您的channel(通道)上找到鏈碼。檢查或修改您的連線配置檔案裡配置的鏈碼名為彈珠的通道mychannel

  • 第四步:建立資產
    mark

作為一個彈珠貿易公司,您可以攜帶新的彈珠業主。這些彈珠業主代表您的使用者群。 這一步將建立彈珠使用者並且每個使用者擁有3個彈珠。

  • 進行下一步前,請點選Create進行建立

  • 第五步:配置完成,點選Enter進入系統

    mark

進入系統後,你可以按照本教程開頭,或者下面的Gif動畫演示的那樣為一個使用者建立彈珠資產,或者將一個彈珠資產轉移給另一個使用者;也可以刪除這個彈珠資產.

  • 在每次點選建立,刪除,交易資產時其實都是在進行呼叫鏈碼操作,而且本專案還有動畫進行呼叫鏈碼的演示:
    mark
    當然,還有更多的功能, 你可以在部署後盡情體驗!

參考

相關文章