区块链环境搭建(composer/playground/explorer)

composer 搭建过程

  1. ​基本概念与第一个区块链应用 安装文档:https://www.ibm.com/developerworks/cn/cloud/library/cl-lo-hyperledger-fabric-study-notes1/index.html
  2. ​参考网址:https://blog.csdn.net/qq_27818541/article/details/78727076#一-开启fabric区块链网络

搭建过程中修改的地方

修改一(执行 startFabric.sh 脚本时)

1.fabfir-tools/startFabric.sh 脚本执行时会调用 fabfir-tools/_loader.sh
2.fabfir-tools/_loader.sh 脚本中 会有一段代码 export FABRIC_VERSION="hlfv12",把 hlfv12 修改成 hlfv11
3.hlfv11 对应 fabfir-tools/fabric-scripts/hlfv11 这个文件夹

修改的原因:hlfv12 版本与当前系统的 fabric 版本不相符,执行不了 hlfv12 文件夹中的脚本

修改二(执行 createPeerAdminCard.sh 脚本时)

1.调用 fabfir-tools/createPeerAdminCard.sh 最后执行的是 fabfir-tools/fabric-scripts/hlfv11/createPeerAdminCard.sh 脚本(前提是 执行了修改一)
2."peers": {
    "peer0.org1.example.com": {
        "url": "grpc://${HOST}:7051",
在这个节点下 加入 "eventUrl": "grpcs://${HOST}:7053", 这个配置,不然执行脚本的时候会报错

修改三(执行 createPeerAdminCard.sh 脚本时)

1.脚本中有一段逻辑是这样的:
	"${HL_COMPOSER_CLI}"  card import --file ${CARDOUTPUT}
	意思是把 生成的card文件 导入到 composer 中,执行的时候会报错,错误信息如下:
		Error: Failed to create client from connection profile. Error: PEM encoded certificate is required.
	这个没有搜到到具体的答案,我尝试修改的是在该脚本
		"peers": {
        "peer0.org1.example.com": {
            "url": "grpc://${HOST}:7051",
    这个节点下,加入内容:
         "tlsCACerts": {
                "pem": "-----BEGIN CERTIFICATE-----MIICGjCCAcCgAwIBAgIRANuOnVN+yd/BGyoX7ioEklQwCgYIKoZIzj0EAwIwczELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwNjI2MTI0OTI2WhcNMjcwNjI0MTI0OTI2WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWQWRtaW5Ab3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABGu8KxBQ1GkxSTMVoLv7NXiYKWj5t6DhWRTJBHnLkWV7lRUfYaKAKFadSii5M7Z7ZpwD8NS7IsMdPR6Z4EyGgwKjTTBLMA4GA1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIBmrZau7BIB9rRLkwKmqpmSecIaOOr0CF6Mi2J5H4aauMAoGCCqGSM49BAMCA0gAMEUCIQC4sKQ6CEgqbTYe48az95W9/hnZ+7DI5eSnWUwV9vCd/gIgS5K6omNJydoFoEpaEIwM97uSXVMHPa0iyC497vdNURA=-----END CERTIFICATE-----"
            }
pem 对应的值是 fabfir-tools/fabric-scripts/hlfv11/composer/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem 该文件的内容,加入该内容后,执行正常

修改四(执行 yo hyperledger-composer:businessnetwork 命令时)

错误信息:
	[root@peer0 fabfir-tools]# yo hyperledger-composer:businessnetwork
	Welcome to the business network generator
	? Business network name: tutorial-network
	? Description: kk
	? Author name:  kk
	? Author email: kk@qq.com
	? License: Apache-2.0
	? Namespace: org.example.biznet
	events.js:183
	      throw er; // Unhandled 'error' event
	      ^
	Error: EACCES: permission denied, mkdir '/opt/test/fabfir-tools/tutorial-network'
	    at Object.fs.mkdirSync (fs.js:885:18)
	    at Function.sync (/usr/local/lib/node_modules/generator-hyperledger-composer/node_modules/mkdirp/index.js:71:13)
	    at child.Base.destinationRoot (/usr/local/lib/node_modules/generator-hyperledger-composer/node_modules/yeoman-generator/lib/base.js:701:14)

解决办法:chmod 777 fabfir-tools

启动命名

composer

启动

	第一次启动(照着上面的搭建流程):
	nohup composer-rest-server -c admin@tutorial-network -n never -p 82 >/dev/null 2>&1 & 
	
	停止后重新启动:
		部署业务网络
			composer network install --card PeerAdmin@hlfv1 --archiveFile tutorial-network@0.0.1.bna
		启动业务网络
			composer network start --networkName tutorial-network --networkVersion 0.0.1 --networkAdmin admin --networkAdminEnrollSecret adminpw --card PeerAdmin@hlfv1 --file networkadmin.card
		启动服务
			nohup composer-rest-server -c admin@tutorial-network -n never -p 82 >/dev/null 2>&1 &

停止

	cd fabfir-tools
	./stopFabric.sh

playgroud

启动

nohup composer-playground -p 81 >/dev/null 2>&1 &

停止

[root@peer0 fabfir-tools]# netstat -tunpl | grep 82
tcp6       0      0 :::82                   :::*                    LISTEN      14878/node
[root@peer0 fabfir-tools]# kill 14878

explorer

启动

	cd /opt/test/blockchain-explorer
	./start.sh
	
	启动端口的设置在 /opt/test/blockchain-explorer/config.json  "prot":83

停止

	[root@peer0 fabfir-tools]# netstat -tunpl | grep 83
	tcp6       0      0 :::82                   :::*                    LISTEN      14878/node
	[root@peer0 fabfir-tools]# kill 14878

fabric 操作

查看 部署成功的网络

在服务已经起起来的前提下:
	docker exec -it peer0.org1.example.com /bin/bash
	ls /var/hyperledger/production/chaincodes/

查看部署的channel

在服务已经起起来的前提下:
	docker exec -it peer0.org1.example.com /bin/bash
	peer channel list

问题汇总

在playgroud中升级业务网络时

Error: Error trying to upgrade business network. Error: No valid responses from any peers. Response from attempted peer comms was an error: Error: 8 RESOURCE_EXHAUSTED: received trailing metadata size exceeds limit

硬盘内存不足

在启动 explorer 时

Handshake failed with fatal error SSL_ERROR_SSL: error:1408F10B:SSL routines version number

把 config.json 中的 grpcs 改成 grpc

通过composer写入区块信息,再通过explorer获取写入的信息时

正常返回值:
{"status":200,"rows":[{"id":40,"blocknum":9,"datahash":"3f1b67d9050a3e86cc5367d4eccbee92bf7b4e9f3c98d8ac8e4debcedbc767d0","prehash":"c4c3384877cffae8fa92fd798bca268c08be42e0c7ec3eb51e6cc3e1bba57aa8","channelname":"composerchannel","txcount":1,"createdt":"2018-12-12T02:12:21.000Z","prev_blockhash":null,"blockhash":null,"txhash":["cd656e737c1a76382f888f750318141eb466b1b4b79d1ce3365b3fd9bc82949d"]}]}
返回的txhash数组里只有一个值

遇到的错误返回值:
{"status":200,"rows":[{"id":40,"blocknum":9,"datahash":"3f1b67d9050a3e86cc5367d4eccbee92bf7b4e9f3c98d8ac8e4debcedbc767d0","prehash":"c4c3384877cffae8fa92fd798bca268c08be42e0c7ec3eb51e6cc3e1bba57aa8","channelname":"composerchannel","txcount":1,"createdt":"2018-12-12T02:12:21.000Z","prev_blockhash":null,"blockhash":null,"txhash":["cd656e737c1a76382f888f750318141eb466b1b4b79d1ce3365b3fd9bc82949d","79d304b942e629151433dca8d32b6871882f55e398669eb9d0f89630bb970c85"]}]}
返回的txhash数组里有多个值

原因:
	以前添加了一个mychannel通道,现在又新加入了一个composerchannel通道,在查询 postgre 数据库的 transaction 表(里面存放的txhash值)时,没有加入(channelname)条件判断,导致把以前mychannel中的数据也插叙出来了

解决过程:
	1.查询explorer区块信息时,访问的接口是/api/blockAndTxList/channelName/blocknum
	2.进入到blockchain-explorer项目,查看 main.js(这里写的接口逻辑) 文件,查找上面接口的处理逻辑
	3.查询到处理逻辑是调用 blockchain-explorer/app/models/block.js 的 getBlockAndTxList方法
	4.该方法中 到 postgre 数据库中执行 查询的sql语句
		原语句:
			 select blocks.*,(
    SELECT  array_agg(txhash) as txhash FROM transaction where blockid = blocks.blocknum
 	 group by transaction.blockid )  from blocks where
     blocks.channelname ='${channelName}' and blocknum >= ${blockNum}
     order by blocks.blocknum desc`;
     	改变后的语句:
     		 select blocks.*,(
    SELECT  array_agg(txhash) as txhash FROM transaction where blockid = blocks.blocknum
 and channelname='${channelName}'    group by transaction.blockid )  from blocks where
     blocks.channelname ='${channelName}' and blocknum >= ${blockNum}
     order by blocks.blocknum desc`;
     改变的位置:在查询 transaction 表时加上channelName的条件判断
 总结:
 	遇到无法理解和不好百度搜索的问题时,根据程序逻辑一步步走,然后大胆猜测
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值