前言
本教程基本上是對Marbles
專案的翻譯過程. 如果英文比較好的話,建議根據官方操作說明,一步步進行環境部署。當然你也可以參考本教程在自己的主機上部署該專案。
Marbles 介紹
關於 Marbles
- 這個應用程式的基礎網路是 Hyperledger Fabric,後者是一個
Linux Foundation
專案。 您可能想查閱以下操作說明來稍微瞭解一下Hyperledger Fabric
- 本演示旨在幫助開發人員瞭解鏈程式碼的基礎知識以及如何使用 Fabric 網路開發應用程式
- 這是一個非常簡單的資產轉移演示。多個使用者可以建立並相互轉移彈珠。
版本
各種版本的 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 處理。 請檢視下圖瞭解拓撲結構細節。
應用程式通訊流
- 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 -v
和 npm -v
命令來驗證系統中是否有 Node.js 環境,如果沒有安裝則需要使用如下命令進行安裝:
$ sudo apt-get install nodejs
$ sudo apt install nodejs-legacy
$ sudo apt install npm
複製程式碼
安裝完成之後使用 node -v
和 npm -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 Code 和 Atom,具體的 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
複製程式碼
一兩分鐘後,命令提示符將返回,執行結果如下圖所示
現在執行該命令 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
命令啟動專案的過程中出現瞭如下圖的錯誤,有可能你在執行時也會出現這個錯誤:
bug
是由fabric-sdk-node
https://jira.hyperledger.org/browse/FAB-2593 引起的, 需要將hfc-key-store
目錄複製到您的主目錄$HOME / .hfc-key-store
,然後重新配置connection_profile_local.json
的client.credentialStore.path
. 如果你也遇到了這個問題,可以參考如下步驟.
- 先將
hfc-key-store
目錄複製到您的主目錄$HOME / .hfc-key-store
:
$ cd ~/fabric-samples/fabcar
$ cp -r hfc-key-store ~/.hfc-key-store
複製程式碼
- 重新配置
connection_profile_local.json
的client.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 裡找找看有沒有相同的錯誤, 如果有解答過程,可以按照解答的過程,自己試著解決這些問題.
執行配置截圖
-
開始
點選選擇右邊的按鈕Guided
, 通過這種方式即可以瞭解 Fabric 又能自定義一些設定 -
第一步:檢查連線配置資料
第一步是檢查你的連線配置JSON檔案。 檢查的檔案是:marbles/config/marbles_local.json
和``marbles/config/connection_profile_local.json`
- 第二步:註冊管理員
接下來,我們嘗試將您註冊為貴公司的管理員。此步驟與您的證書頒發機構(CA)聯絡並從您的連線配置檔案中提供了enrollID
和enrollSecret
- 第三步:查詢 Chaincode
現在我們需要在您的channel(通道)
上找到鏈碼。檢查或修改您的連線配置檔案裡配置的鏈碼名為彈珠的通道mychannel
。
- 第四步:建立資產
作為一個彈珠貿易公司,您可以攜帶新的彈珠業主。這些彈珠業主代表您的使用者群。 這一步將建立彈珠使用者並且每個使用者擁有3個彈珠。
-
進行下一步前,請點選
Create
進行建立 -
第五步:配置完成,點選
Enter
進入系統
進入系統後,你可以按照本教程開頭,或者下面的Gif
動畫演示的那樣為一個使用者建立彈珠資產,或者將一個彈珠資產轉移給另一個使用者;也可以刪除這個彈珠資產.
- 在每次點選建立,刪除,交易資產時其實都是在進行呼叫鏈碼操作,而且本專案還有動畫進行呼叫鏈碼的演示: 當然,還有更多的功能, 你可以在部署後盡情體驗!