区块链学习笔记(5)-运行一个fabric测试网络

本文讲述了作者在使用Fabric2.3容器网络时遇到的问题,如镜像版本升级、通道创建失败、配置文件问题、链码兼容性等,详细记录了解决过程,包括如何设置环境变量、共享文件夹以及链码部署等步骤。
摘要由CSDN通过智能技术生成

一走一个不吱声,一走一个坑!!!!

1. 开启容器

进入test-network文件夹,通过下面的命令开启容器

./network.sh up

2. 创建通道

./network.sh createChannel

创建通道的时候出现了错误

通过提示可以看到osnadmin未找到命令

搜了一下说是fabric2.2的镜像还不支持这个,需要用2.2以上的镜像,然后我就去下载了2.3的镜像,原以为下载之后2.2的镜像会被覆盖,没想到两个同时存在。

接着我又把docker images全部清除,重新下载了2.3的镜像

(1) 停止并删除所有容器

docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)

(2)删除所有镜像(因为我刚开始做这个,镜像里关联的东西不多,就全删了,要小心别把数据弄丢了)

docker rmi -f $(docker images -q)

(3)确认镜像已被完全删除

docker images

(4)重新下载镜像

这个时候只需要把脚本文件的version改成2.2.3,然后把docker=true samples=true binary=true的后面两个写成false,运行脚本,就可以下载了

最后再重新开启容器,创建通道

由于没有显示通道成功被创建,就用peer channel list 去查看,结果报错,段错误,查了一下说是可能是版本不匹配引起的,所以只好删除所有内容,重新下载最新版本的fabric。

当我重新下载之后,运行peer channel list依然出错,是因为没有找到配置文件core.yaml导致的,因为fabric需要要执行peer相关命令,peer需要读取core.yaml文件,而Peer节点默认会尝试从以下路径读取配置文件:

(1)设置环境变量的情况下,从FABRIC_CFG_PATH读取

(2)为设置环境变量的情况下,从当前目录读取

(3)以上两种都未读到,便从/etc/hyperledger/fabric/core.yaml读取。

都未读取到就会报图上所说的错误。

这个时候最推荐的方式就算创建环境变量

结果设置环境变量老是不成功,先是docker run执行的时候需要一个镜像名称作为参数,而命令中没有,添加之后又是明明路径都能访问,结果设置的时候就报错,找不到路径。查了一下又说是需要设置共享文件夹,然后这个路径应该写宿主机也就算真实机的路径。

然后,就又扯到了共享文件夹上。

设置共享文件夹的时候,有共享文件夹和共享文件夹名称,共享文件夹是宿主机上的文件夹路径,共享文件夹名称是虚拟机上的,然后虚拟机上的文件夹放入config文件夹,宿主机上也能够收到这个文件夹。当选择自动挂载时,virtualBox会提供一个文件夹,通常在media文件夹底下的以输入的文件夹名称命名的文件夹中

然后就把config文件夹放入这个文件夹中,宿主机就可以收到啦,但是,这只是实现了文件共享,被误导了,设置环境变量根本就和宿主机虚拟机共享没有什么关系。

然后,我又重新运行了./network

通道已存在!!!!所以之前确实成功了。其实早就实现了,我还弄了好长时间,就当学了下文件共享了。

3. 在通道上启动链码(智能合约部署到通道)

报错"Error: chaincode install failed with status: 500 - failed to invoke backing implementation of 'InstallChaincode': could not build chaincode: failed to get chaincode package for external build: could not get legacy chaincode package"

链码中的go和我下载的go版本不兼容

卸载go并重新下载,保证linux系统中的go版本和链码中的go版本一致。

//卸载系统中的go
sudo rm -rf /usr/local/go

//重新下载
wget https://dl.google.com/go/go<version>.linux-amd64.tar.gz
sudo tar -C /usr/local -zxvf go<version>.linux-amd64.tar.gz

下载完成后生成vendor文件

链码安装成功

4. 与网络交互

首先要添加两个环境变量,来保证可以找到配置文件的路径

export PATH=${PWD}/../bin:$PATH
export FABRIC_CFG_PATH=$PWD/../config/

这个就是我在第二步创建通道的时候,想要检查通道而想要添加的环境变量,但是因为是小白,不会写,反而走了绕路,都是坑啊。

添加针对Org1的环境变量,允许 Org1 的和客户端节点进行交互

export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=localhost:7051

Org1与链码做交互

peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem" -C mychannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt" --peerAddresses localhost:9051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt" -c '{"function":"InitLedger","Args":[]}'

 查询分类帐

peer chaincode query -C mychannel -n basic -c '{"Args":["GetAllAssets"]}'

转移或更改账本上的资产时,调用链码

peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem" -C mychannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt" --peerAddresses localhost:9051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt" -c '{"function":"TransferAsset","Args":["asset6","Christopher"]}'

均成功

Orgs2与Org1的操作类似

5. 测试完成关闭容器

主要参考文档:官方文档

终于弄好了,还只是走了一遍流程,还没看具体的含义,每一步具体实现了什么,都弄了一天,为后面的学习感到痛苦,加油吧

  • 19
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值