安装fabric-node-sdk的时候,出现下面错误
No command 'gulp' found
按照这篇文章更改npm目录,gulp通过。
http://www.mamicode.com/info-detail-1687014.html
-----------------安装fabric-node-sdk过程------------------
cd $GOPATH/src/github.com/hyperledger
Git clone https://github.com/hyperledger/fabric-sdk-node.git
cd $GOPATH/src/github.com/hyperledger/fabric-sdk-node
git checkout -b v1.0.0-beta refs/tags/v1.0.0-alpha2
npm install
npm install --global gulp-cli
npm install --save-dev gulp
apt install jq
gulp ca
#测试一下安装结果
npm test
cd $GOPATH/src/github.com/hyperledger/
git clone https://github.com/hyperledger/fabric-samples.git
cd $GOPATH/src/github.com/hyperledger/fabric-samples/balance-transfer
ln -s $GOPATH/src/github.com/hyperledger/fabric/examples/e2e_cli/crypto-config ./crypto-config
ln -s $GOPATH/src/github.com/hyperledger/fabric/examples/e2e_cli/channel-artifacts ./channel-artifacts
config.json,network-config.json的设置根据上面映射路径需要更改
等所有都配置好了再执行下面
cd ...src/github.com/hyperledger/fabric-samples/balance-transfer
npm install
--------------------------------------------------------------
以下两种场合,需要清理key
1,crypto-config发生变更
2,rest服务初期状态返回再启动
rm -rf /tmp/fabric-client-kvs* ~/.hfc-key-store
--------------------------------------------------------------
测试途中发生异常,比如creat channel通过没问题,join channel时出错,
第二次再执行的时候,需要把所有容器重新启动,为了清理上一次执行的记录
sudo lsof -i:4000 //列出4000端口下的进程
sudo kill -9 xxxx // xxxx指的是进程的PID
sudo kill -9 $(sudo lsof -i:4000 | awk '{print $2}' | grep [0-9])
PORT=4000 node app
---------------------------------------------------------------
sdk工程和fabric-example工程都有node_modules,
可以删除node_modules的一部分引用,
利用下面方法共享sdk元代码
#源代码目录
cd ../../fabric-ca-client
sudo npm link
cd ../../node_modules
sudo npm link fabric-ca-client
另外fabric-ca-client里面不能debug,但是logger.error可以用,原因不明。。。
--------------------------------------------------------------------
sdk说明
https://github.com/flyinox/hyperledgerDocs/blob/bccsp-dev/docs/sdk-design_zh.md
----------------------------------------------------------------------------------------
验证从ca服务器返回的tls证书,需要追加ca 和servername,来验证证书的正确性。
servername是证书里面的CN,
因为需要验证证明书里面的CN和hostname:xx.xx.xx.xx是否一致。
一个是ip一个是服务器名,当然不一致,所以把servername追加进来,就不会去验证ip,而直接和servername进行比较
FabricCAClientImpl.js
post(api_method, requestObj, signingIdentity) {
var fs = require('fs');
var caPem = fs.readFileSync('....../crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem');
var requestOptions = {
hostname: self._hostname,
port: self._port,
path: self._baseAPI + api_method,
method: 'POST',
headers: {
Authorization: self.generateAuthToken(requestObj, signingIdentity)
},
servername: 'ca.org1.example.com',
ca: [caPem],
rejectUnauthorized: true
};
---------------------------------------------------------------------------------------------------
sdk调试
http://cnodejs.org/topic/4f77c41f8a04d82a3d5dfcb9
rm -rf /tmp/fabric-client-kvs* ~/.hfc-key-store
sudo npm install -g node-inspector
node-inspector &
调试fabric-samples
PORT=4000 node --debug /home/ubuntu/go/src/github.com/hyperledger/fabric-samples/balance-transfer/app
调试单个nodejs
sudo npm install superagent --save
sudo npm install superagent-promise --save
node --debug-brk=5858 test/integration/configtxlator.js
调试的两外一个方法是
PORT=4000 node --inspect /home/ubuntu/go/src/github.com/hyperledger/fabric-samples/balance-transfer/app
然后,控制台出现下面的信息,把它直接粘到chrom浏览器里,就可以了。别忘记改IP哈
chrome-devtools://devtools/remote/serve_file/@6dasdfadsddsdfasdf84980/inspector.html?experiments=true&v8only=true&ws=127.0.0.1:9229/8720816c-f3ac-4744-8fe7-065e9ee12b82
v 8.6调试单个文件
node --inspect-brk=192.168.75.134:4000 batch/ContractDeploy.js
chrome-devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=192.168.75.134:4000/0f7069cf-a788-4545-a4bf-f7b7f9603a71
node --inspect=192.168.75.138:4000 ./bin/www
chrome://inspect/
设置ip和端口,然后点「Open dedicated DevTools for Node」,过一会自动刷新出代码
--------------------------------------------------------------------------------------------------------
问题集
1.读系统文件时,如果文件是系统root用户做成的,会出现permission denied异常,这事sudo PORT=4000 node app重新启动nodejs
2.channel create request发生异常的时候,看一下content-type是否为json格式。
3.如果有设定proxy时,可能会引起容器间通信故障,临时解决办法.容器再启动。
删除 /etc/systemd/system/docker.service.d/http-proxy.conf
从下面文件里面删除proxy的设定
systemctl daemon-reload
systemctl restart docker
4.timed out after:45000异常的时候,../node_modules/fabric-client/config/default.json的值重新设定一下
5.invoke时调用了helper.getRegisteredUsers进行enrool了,为了在channel.sendTransactionProposal时取channel对象。
性能测试时,同一个用户注册了好多次,使用证书会错乱。