关于 fabric-node-sdk

安装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对象。
性能测试时,同一个用户注册了好多次,使用证书会错乱。

你可能感兴趣的:(区块链)