fabric的nodejs的sdk開發,官方balance-transfer部署及測試
開發環境
作業系統:Ubuntu 18.04.1 LTS
軟體工具版本:
[email protected]:/home/wjl/nodejs/sample2/fabric-samples-1.3.0/balance-transfer# node -v
v8.9.4
[email protected]:/home/wjl/nodejs/sample2/fabric-samples-1.3.0/balance-transfer# npm -v
5.6.0
[email protected]:/home/wjl/nodejs/sample2/fabric-samples-1.3.0/balance-transfer# docker -v
Docker version 18.06.1-ce, build e68fc7a
[email protected]:/home/wjl/nodejs/sample2/fabric-samples-1.3.0/balance-transfer# docker-compose -v
docker-compose version 1.23.1, build b02f1306
軟體工具的版本取決於專案目錄下的package.json
"engines": {
"node": ">=8.9.4 <9.0",
"npm": ">=5.6.0 <6.0"
},
如果使用虛擬機器,不能在Ubuntu和Windows的共享資料夾操作示例,會導致檔案許可權問題。要把官方示例下載到ubuntu本機的資料夾中。
下載fabric官方的示例
然後
ls
可看到fabric-samples-1.3.0
然後執行,進入專案目錄
cd fabric-samples-1.3.0/balance-transfer
執行 ./runApp.sh
進入balance-transfer專案目錄
直接執行
./runApp.sh
出現如下錯誤
gyp ERR! configure error gyp ERR! stack Error: EACCES: permission denied, mkdir '/home/wjl/nodejs/sample2/fabric-samples-1.3.0/balance-transfer/node_modules/dtrace-provider/build' gyp ERR! System Linux 4.15.0-39-generic gyp ERR! command "/opt/node-v8.9.4-linux-x64/bin/node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild" gyp ERR! cwd /home/wjl/nodejs/sample2/fabric-samples-1.3.0/balance-transfer/node_modules/dtrace-provider gyp ERR! node -v v8.9.4 gyp ERR! node-gyp -v v3.6.2 gyp ERR! not ok
說明node_modules下載出現錯誤
需要設定上網代理,然後手動npm安裝node_modules
設定上網代理(搭梯子)
export http_proxy=http://192.168.10.158:1080
在192.168.10.158,開啟上網代理,並啟用本地埠1080,允許來自區域網的連線
測試代理設定是否成功
出現如下資訊
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>
手動npm安裝
刪除專案目錄下的node_modules
rm -r node_modules
需要設定上網代理,然後執行命令
npm install --unsafe-perm=true
啟動nodejs的服務端
在啟動服務端前需要刪除上網代理
export -n http_proxy
執行命令
PORT=4000 node app
即可成功啟動服務端
[2018-11-18 23:59:07.860] [INFO] SampleWebApp - ****************** SERVER STARTED ************************
[2018-11-18 23:59:07.862] [INFO] SampleWebApp - *************** http://localhost:4000 ******************
(node:34938) DeprecationWarning: grpc.load: Use the @grpc/proto-loader module with grpc.loadPackageDefinition instead
說明啟動成功
使用 ./testAPIs.sh進行介面測試
在專案目錄執行
./testAPIs.sh
POST request Enroll on Org1 ...
{"success":true,"secret":"","message":"Jim enrolled Successfully","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NDI2NDk4NzksInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Ik9yZzEiLCJpYXQiOjE1NDI2MTM4Nzl9.nEsR5xVG5l3DmLBhanCIq1KPQq1t0YDQV6udyoluD94"}
ORG1 token is eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NDI2NDk4NzksInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Ik9yZzEiLCJpYXQiOjE1NDI2MTM4Nzl9.nEsR5xVG5l3DmLBhanCIq1KPQq1t0YDQV6udyoluD94
POST request Enroll on Org2 ...
{"success":true,"secret":"","message":"Barry enrolled Successfully","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NDI2NDk4ODEsInVzZXJuYW1lIjoiQmFycnkiLCJvcmdOYW1lIjoiT3JnMiIsImlhdCI6MTU0MjYxMzg4MX0.qjaSpwtITLz0TGCpSf_-rt8FMKDhoBwyYDvW6Gz8Hwk"}
ORG2 token is eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NDI2NDk4ODEsInVzZXJuYW1lIjoiQmFycnkiLCJvcmdOYW1lIjoiT3JnMiIsImlhdCI6MTU0MjYxMzg4MX0.qjaSpwtITLz0TGCpSf_-rt8FMKDhoBwyYDvW6Gz8Hwk
POST request Create channel ...
{"success":true,"message":"Channel 'mychannel' created Successfully"}
POST request Join channel on Org1
{"success":true,"message":"Successfully joined peers in organization Org1 to the channel:mychannel"}
POST request Join channel on Org2
{"success":true,"message":"Successfully joined peers in organization Org2 to the channel:mychannel"}
POST Install chaincode on Org1
{"success":true,"message":"Successfully installed chaincode"}
POST Install chaincode on Org2
{"success":true,"message":"Successfully installed chaincode"}
POST instantiate chaincode on Org1
POST invoke chaincode on peers of Org1 and Org2
說明可以實現部分功能,但是instantiate chaincode on Org1,出現錯誤
手動post鏈碼初始化
接下來,使用手動命令列進行鏈碼的初始化,需要拷貝org1的token:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NDI2NDk4NzksInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Ik9yZzEiLCJpYXQiOjE1NDI2MTM4Nzl9.nEsR5xVG5l3DmLBhanCIq1KPQq1t0YDQV6udyoluD94
curl -s -X POST
http://localhost:4000/channels/mychannel/chaincodes
-H “authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NDI2NDk4NzksInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Ik9yZzEiLCJpYXQiOjE1NDI2MTM4Nzl9.nEsR5xVG5l3DmLBhanCIq1KPQq1t0YDQV6udyoluD94”
-H “content-type: application/json”
-d “{
“chaincodeName”:“mycc”,
“chaincodeVersion”:“v0”,
“chaincodeType”: “$LANGUAGE”,
“args”:[“a”,“100”,“b”,“200”]
}”
執行結果
{"success":true,"message":"Successfully instantiate chaincode in organization Org1 to the channel 'mychannel'"}
說明鏈碼初始化成功,之後進行查詢驗證
手動post查詢已初始化鏈碼
拷貝org1的token,執行命令
curl -s -X GET
“http://localhost:4000/channels/mychannel/chaincodes?peer=peer0.org1.example.com”
-H “authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NDI2NDk4NzksInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Ik9yZzEiLCJpYXQiOjE1NDI2MTM4Nzl9.nEsR5xVG5l3DmLBhanCIq1KPQq1t0YDQV6udyoluD94”
-H “content-type: application/json”
執行後返回結果
["name: mycc, version: v0, path: github.com/example_cc/go"]
說明查詢成功
相關推薦
fabric的nodejs的sdk開發,官方balance-transfer部署及測試
開發環境 作業系統:Ubuntu 18.04.1 LTS 軟體工具版本: [email protected]:/home/wjl/nodejs/sample2/fabric-samples-1.3.0/balance-transfer# node -v
[開源地址] 放棄Flink,.NET5.0開發CSharpFlink,簡要設計、部署及二次開發說明。
github地址:https://github.com/wxzz/CSharpFlinkgitee地址:https://gitee.com/wxzz/CSharpFlink 1 概述及背景 我們有一個全國性質的面向工業的公
Hystrix已經停止開發,官方推薦替代專案Resilience4j
隨著微服務的流行,熔斷作為其中一項很重要的技術也廣為人知。當微服務的執行質量低於某個臨界值時,啟動熔斷機制,暫停微服務呼叫一段時間,以保障後端的微服務不會因為持續過負荷而宕機。本文介紹了新一代熔斷器Resilience4j如何使用。 譯者注:Hystrix官方已經停止開發
balance transfer 解析及api深度追蹤(三)加入通道
一 程式碼解析 var util = require(‘util’); var path = require(‘path’); var fs = require(‘fs’); var Peer = require(‘fabric-client/lib/Peer.
Extjs上傳附件實戰開發,實現批量上傳及線上預覽功能(二)
SWFUpload的使用: SWFUpload採用czpae86的UploadPanel二次開發,在此鳴謝。 SWFUpload下載最新版本swfupload.swf.v2.5.0.beta3.2.zip,你會發現資料夾裡只有swfuploa
Kafka集群部署及測試
str conn 單位 大數據 list compress baseline 類型 消費者 題記 眼下我們對大數據進行研究方向以Spark為主,當中Spark Streaming是能夠接收動態數據流並進行處理。那麽Spark Streaming支持多源的數據發送端
學習手記-基於iTOP4412開發板NFS服務器搭建及測試
udp 都是 使用 共享目錄 none padding rgb 安裝 通訊 NFS特點:1)基於UDP/IP2)功能和網盤基本上差不多,但性能沒那麽強。NFS服務器搭建步驟:在ubantu上安裝nfs軟件:nfs-kernel-server配置文件1)打開配置文件:/etc
哈工大LTP部署及測試Demo
#coding: utf-8 import os from pyltp import SentenceSplitter from pyltp import Segmentor from pyltp import Postagger from pyltp import Nam
ansible安裝部署及測試
(1)下載pip(2)解壓安裝解壓下載的檔案(windows下只用解壓工具解壓如RAR,Linux下終端輸入tar -xf pip-9.0.1.tar.gz,即tar -xf 檔名),進入解壓後的資料夾中,調出命令列視窗或者終端,windows下輸入python setup.
Linux下Eclipse安裝配置OpenCV2.4.8,用C++呼叫OpenCV及測試例項
首先從官網上下載安裝opencv,安裝教程可以從網上搜索一下,需要用到cmake。然後在Eclipse中配置opencv,目的在於讓其找到opencv的庫,就是g++ test.cpp -o test -I .........................-l.....
Hive 安裝部署及測試
標籤(空格分隔): hive 1) Hive 如何配置與Hadoop 關聯,進行建立表,載入資料測試 2) 在Linux下安裝MySQL資料庫 3) 配置Hive元資料儲存在MySQL中,檢視相關元資料表資訊 4) 熟悉基本的DML和DDL語句(
【JIRA、Confluence中文官方技術部落格】分享JIRA、Confluence、Bamboo等Atlassian產品的安裝部署及使用技巧,營造全面高效的學習交流空間。上atlassian.csdn.net下載享用,諮詢QQ:2714137330
分享JIRA、Confluence、Bamboo等Atlassian產品的安裝部署及使用技巧,營造全面高效的學習交流空間。上atlassian.csdn.net下載享用,諮詢QQ:2714137330...
linux開發腳本自動部署及監控
linux開發 標準 bin systemctl eve 共享 connect name weight linux開發腳本自動部署及監控 開發腳本自動部署及監控一、編寫腳本自動部署反向代理、web、nfs;要求:1、部署nginx反向代理三個web服務,調度算法使用加權
使用IDEA 開發Spring,Maven-->並且部署到 tomcat
創建 https mave nsh div 兩個 detail ring shu 參考兩個博客: 1.如何創建Spring MVC項目。https://www.jianshu.com/p/2101d176555b 2. 如何部署。http://blog.csdn.net/a
es6+require混合開發,兼容es6 module,import,export之 加載css及公用date-main
plugins symbol 默認參數 安裝插件 alt 路徑 目的 編譯參數 row 大家好!上篇文章已經介紹了搭建文件夾,以及加載js文件。現在講一下加載css ,以及對baseUrl的理解 1.對項目結構的認知 一個項目的結構是根據項目的架構來決定的,當然也可以做到更
走進自動化運維之Ansible服務部署,附帶(參數及模塊)詳解!
輸入 epel源 檢測 鏈接文件 日誌輸出 運維 介紹 講解 book 何為Ansible: 簡單的自動化運維管理工具,不需要配置代理工具,基於Python研發。 Ansible是基於模塊工作的,本身沒有批量部署的能力。真正具有批量部署的是ansible所運行的模塊,ans
Android開發--Kotlin初體驗,java轉Kotlin程式碼及異常排除
Kotlin火了一段時間了,近段關於java版權的官司谷歌也輸了。趁著最近有時間,瞭解下Kotlin。為了更方便檢視與java開發的區別,決定拿一個小專案直接改成Kotlin程式碼。 看別人部落格的時候發現AS自帶有Java轉Kotlin的工具,於是,我們可以很方便的使用快
balance transfer程式碼解析及api深度追蹤(五)初始化鏈碼
一程式碼解析 var path = require(‘path’); var fs = require(‘fs’); var util = require(‘util’); var hfc = require(‘fabric-client’); var Peer
balance transfer程式碼解析及api深度追蹤(六)執行鏈碼
一程式碼解析 var path = require(‘path’); var fs = require(‘fs’); var util = require(‘util’); var hfc = require(‘fabric-client’); var Peer
balance transfer程式碼解析及api深度追蹤(七)查詢交易
一程式碼解析 var queryChaincode = function(peer, channelName, chaincodeName, args, fcn, username, org) { var channel = helper.getChannelF