摘要:協議的細節由一個名為的處理。運行下面的腳本來讓所有的事情都發生一兩分鐘后,命令提示符將返回運行結果如下圖所示現在運行該命令查看當前正在運行的容器。
前言
本教程基本上是對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 SinghDate: 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 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網絡,然后測試該網絡步驟過程.
先下載 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 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----- MIIB8DCCAZegAwIBAgIUeQVhK98LQFSz5Dz0bt3bB9Baom8wCgYIKoZIzj0EAwIw czELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNh biBGcmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMT E2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTgwNTE1MTA1ODAwWhcNMTkwNTE1MTA1 ODAwWjAQMQ4wDAYDVQQDEwVhZG1pbjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA BPlS00VDvBQpsmMFUGnNzEAQd7lgpTNgEDpzJGk4/xfBuechE8cfNH6WuibJtXxh sEQ4uLAlDcOAP1nfXq9oEtWjbDBqMA4GA1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8E AjAAMB0GA1UdDgQWBBShJWerMoKEE2u+dn08UBkGs4tWzjArBgNVHSMEJDAigCBC OaoNzXba7ri6DNpwGFHRRQTTGq0bLd3brGpXNl5JfDAKBggqhkjOPQQDAgNHADBE AiAmqy0J0M1aZlvuv6cDK8GjeMTMjN0V5dZIW/uBv+whtAIgCMbyQRtE+PDwsoSS G40hZ4UOoNS2tvIXHRglMMHvKjs= -----END CERTIFICATE----- "}}}
第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步:接下來,我們需要驗證連接配置文件中的文件路徑是否與您的安裝相匹配。
打開你的連接配置文件
在這個JSON里找到這三個字段:
organizations -> x-adminCert -> path
organizations -> x-adminKeyStore -> path
client -> credentialStore -> path
每個字段中 path 的值需要反映您的環境(您的目錄結構)。你可以瀏覽這些文件夾和文件以驗證它們是否存在。
您可能需要根據您放置fabric-samples目錄的位置以及密鑰存儲數據所在的位置來更改這些值。一旦路徑有效,您可以繼續。
第6步:你完成了!將路徑更改回彈珠根目錄:cd ~/marbles 并繼續執行下面的安裝鏈接代碼說明。
安裝鏈碼完成之后,我們需要將鏈代碼放到 peer 節點的文件系統中。記住 chaincode 定義了什么彈珠(資產)是我們系統交易的業務邏輯。你可以在這個目錄中找到彈珠鏈碼
我們將使用位于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命令啟動項目的過程中出現了如下圖的錯誤,有可能你在運行時也會出現這個錯誤:
查看 Issues:208可以發現有人已經遇到過這種問題, 閱讀后發現這個bug是由fabric-sdk-node https://jira.hyperledger.org/... 引起的, 需要將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動畫演示的那樣為一個用戶創建彈珠資產,或者將一個彈珠資產轉移給另一個用戶;也可以刪除這個彈珠資產.
在每次點擊創建,刪除,交易資產時其實都是在進行調用鏈碼操作,而且本項目還有動畫進行調用鏈碼的演示:
當然,還有更多的功能, 你可以在部署后盡情體驗!
IBM-Blockchain/marbles(官方項目地址)
node 版本管理工具 n 無效的原理及解決方案
Ubuntu環境下安裝nodejs和npm
npm版本怎么降級
issues:208
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/24099.html
摘要:任何彈珠字符串的首字符永遠都表示零幀。基本的彈珠語法時間幀的時間段。完成表示成功完成。錯誤終止的錯誤。它是此的零幀,在前的所有幀都將是無效的。 羅里吧嗦的一些解釋 RxJS使用的越來越多,但發現很多開發者都是使用最基礎的部分用來處理http請求,其實RxJS可以做的事情不僅僅是在對網絡資源處理過程中替代Promise,但如果按照一些已有的網絡博客和分享來看,對二者在實踐上的差異確實體現...
摘要:和比特幣協議有所不同的是,以太坊的設計十分靈活,極具適應性。超級賬本區塊鏈的商業應用超級賬本超級賬本是基金會下的眾多項目中的一個。證書頒發機構負責簽發撤 showImg(https://segmentfault.com/img/bV2ge9?w=900&h=385); 從比特幣開始 一個故事告訴你比特幣的原理及運作機制 這篇文章的定位會比較科普,盡量用類比的方法將比特幣的基本原理講出來...
摘要:如果你的環境搭建再云服務器上,例如阿里云或者騰訊云,可以不用更新源,直接在自己的主機上使用遠程連接工具連接上云主機,環境就算完成了若在本地不能連接上云主機,或者虛擬機,檢查一下是否已經安裝并啟動若沒有,可以參加網上的教程,配置遠程連接。 showImg(https://segmentfault.com/img/bVbavlU?w=978&h=273); 前言 最近在參加一個比賽,使用到...
摘要:可以說,云大數據分析和人工智能正在成為的新靈魂。而在年創紀錄產生的多項專利中,的專利是云大數據分析及認知計算相關。 IBM董事長及CEO Ginni Rometty現在,一個新IBM正在浮出水面。在IBM的2015年財報上寫道:今天的IBM已經不僅是一家‘硬件、軟件與服務’公司,而轉型成為一家認知解決方案與云平臺公司。在公司100多年的歷史上,IBM第一次稱自己是一家平臺公司。IBM首席財務...
摘要:我們目前正處于一個新興的區塊鏈開發行業中。,一種在以太坊開發人員中流行的新的簡單編程語言,因為它是用于開發以太坊智能合約的語言。它是全球至少萬開發人員使用的世界上最流行的編程語言之一。以太坊,主要是針對工程師使用進行區塊鏈以太坊開發的詳解。 我們目前正處于一個新興的區塊鏈開發行業中。區塊鏈技術處于初期階段,然而這種顛覆性技術已經成功地風靡全球,并且最近經歷了一場與眾不同的繁榮。由于許多...
閱讀 1030·2021-09-22 15:26
閱讀 2607·2021-09-09 11:52
閱讀 1890·2021-09-02 09:52
閱讀 2241·2021-08-12 13:28
閱讀 1180·2019-08-30 15:53
閱讀 506·2019-08-29 13:47
閱讀 3380·2019-08-29 11:00
閱讀 3095·2019-08-29 10:58