基础环境搭建

### docker 安装
如果服务器上有旧版的docker,需要先执行卸载操作。
$ sudo yum remove docker \
docker-common \
docker-selinux \
docker-engine 随后开始安装docker-ce
1 $ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
2
3 $ sudo yum-config-manager \
4 --add-repo \
5 https://download.docker.com/linux/centos/docker-ce.repo
6
7 $ sudo yum-config-manager --enable docker-ce-edge
8
9 $ sudo yum-config-manager --enable docker-ce-test
10
11 $ sudo yum-config-manager --disable docker-ce-edge
12
13 $ sudo yum makecache fast
14
15 $ sudo yum install docker-ce 执行查询docker版本号,看是否安装成功
docker --version docker启动
service docker start docker开机自启(视具体情况使用)
chkconfig docker on ### docker-compose 安装
需要服务器支持 curl 功能,如果服务器不支持 curl 功能,需要手动进行安装
yum install curl 执行如下操作下载docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose 下载目录为:
/usr/local/bin/docker-compose 为其添加可执行权限:
sudo chmod +x /usr/local/bin/docker-compose 查询版本信息:
docker-compose --version ### Go语言安装
安装包下载
curl -O https://golang.google.cn/doc/install?download=go1.15.linux-amd64.tar.gz 解压缩文件包
tar -C /usr/local -xzf go1.15.linux-amd64.tar.gz 配置 go 的环境变量
修改 /etc/profile 文件使其永久生效
1 export PATH=$PATH:/usr/local/go/bin
2 export GOPATH=/opt/gopath 修改文件后,执行如下命令,应用上述参数
source /etc/profile 查看当前 go 版本信息
go version 也可通过下述命令查看是否安装成功
echo $PATH

Fabric源码及镜像文件处理

下载 fabric 源码是因为要用到源码中的例子和工具,工具编译需要用到 go 语言环境,因此需要把源码目录放到 GOPATH 下,路径设置为 /opt/gopath

可以使用 Git 命令下载源码(耗时会比较长):
cd /opt/gopath/src/github.com/hyperledger/
git clone https://github.com/hyperledger/fabric.git 如果没有 git 命令,需要先执行如下命令,构建 git 环境:
yum install git 默认Fabric源码下载版本为 2.2.0 Fabric Docker 镜像的下载:
cd /opt/gopath/src/github.com/hyperledger/fabric/scripts
./bootstrap.sh
等待下载完成即可 至此,Fabric源码,fabric-samples 源码、fabric 镜像的工作已经完成

网络环境测试

启动 Fabric 网络
cd /opt/gopath/src/github.com/hyperledger/fabric/scripts/fabric-samples/test-network
./network.sh up 建立通道
./network.sh createChannel 在通道上启动链码
./network.sh deployCC 如果链码启动失败,手动添加 go 代理
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
再次启动链码即可 在test-network 目录进行如下环境变量设置
export PATH=${PWD}/../bin:${PWD}:$PATH
export FABRIC_CFG_PATH=$PWD/../config/ 继续设置如下环境变量,允许以 peer Org1 的形式操作 CLI
# Environment variables for 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 完成后,source /etc/profile 获取已添加到通道分类账中的汽车列表
peer chaincode query -C mychannel -n fabcar -c '{"Args":["queryAllCars"]}'
上述命令可能会出现报错提示,如下(如果是提示某些文件不存在,我的一个解决办法是,关闭网络,启动网络前,source /etc/profile):
Error: endorsement failure during query. response: status:500 message:"make sure the chaincode fabcar has been successfully defined on channel mychannel and try again: chaincode fabcar not found"
查看报错信息,我们可以知道,链码 fabcar 没有在通道上被定义,所以我们进入对应目录,执行启动指令:
cd /opt/gopath/src/github.com/hyperledger/fabric/scripts/fabric-samples/fabcar
./startFabric.sh
等待执行结束即可 我们现在可以重新进入 test-network 目录,执行命令
peer chaincode query -C mychannel -n fabcar -c '{"Args":["queryAllCars"]}'
可以看到,正常返回结果了
[{"Key":"CAR0","Record":{"make":"Toyota","model":"Prius","colour":"blue","owner":"Tomoko"}},{"Key":"CAR1","Record":{"make":"Ford","model":"Mustang","colour":"red","owner":"Brad"}},{"Key":"CAR2","Record":{"make":"Hyundai","model":"Tucson","colour":"green","owner":"Jin Soo"}},{"Key":"CAR3","Record":{"make":"Volkswagen","model":"Passat","colour":"yellow","owner":"Max"}},{"Key":"CAR4","Record":{"make":"Tesla","model":"S","colour":"black","owner":"Adriana"}},{"Key":"CAR5","Record":{"make":"Peugeot","model":"205","colour":"purple","owner":"Michel"}},{"Key":"CAR6","Record":{"make":"Chery","model":"S22L","colour":"white","owner":"Aarav"}},{"Key":"CAR7","Record":{"make":"Fiat","model":"Punto","colour":"violet","owner":"Pari"}},{"Key":"CAR8","Record":{"make":"Tata","model":"Nano","colour":"indigo","owner":"Valeria"}},{"Key":"CAR9","Record":{"make":"Holden","model":"Barina","colour":"brown","owner":"Shotaro"}}]

上述调试工作相继完成后,我们继续如下操作(仍然在 test-network 目录下),执行关闭网络指令:
./network.sh down

接着,编辑profile文件,添加如下内容(因为资产转移链码的背书策略要求事务由 Org1 和 Org2 签名,chaincode invoke 命令需要同时针对 peer0.org1.example.com 和 peer0.org2.example.com 使用 --peeradresses 标志,而且,由于为网络启用了 TLS, 该命令还需要使用 --tlsRootCertFiles 标志为每个对等方引用 TLS 证书。):
vi /etc/profile

# Environment variables for Org2

export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org2MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
export CORE_PEER_ADDRESS=localhost:9051
保存退出

source /etc/profile

启动测试网络:
./network.sh up
./network.sh createChannel
./network.sh deployCC

运行如下命令初始化资产分类账:
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":[]}'

如果有如下报错信息,可能是链码没有在通道中被成功定义,关闭测试网络后,重新执行启动网络操作:
Error: endorsement failure during invoke. response: status:500 message:"make sure the chaincode basic has been successfully defined on channel mychannel and try again: chaincode basic not found"

上述初始化指令的执行成功返回结果信息如下:
2020-08-28 11:20:52.062 CST [chaincodeCmd] chaincodeInvokeOrQuery -> INFO 001 Chaincode invoke successful. result: status:200

运行以下命令获取添加到通道分类账的资产列表:
peer chaincode query -C mychannel -n basic -c '{"Args":["GetAllAssets"]}'

返回结果如下:
[{"ID":"asset1","color":"blue","size":5,"owner":"Tomoko","appraisedValue":300},{"ID":"asset2","color":"red","size":5,"owner":"Brad","appraisedValue":400},{"ID":"asset3","color":"green","size":10,"owner":"Jin Soo","appraisedValue":500},{"ID":"asset4","color":"yellow","size":10,"owner":"Max","appraisedValue":600},{"ID":"asset5","color":"black","size":15,"owner":"Adriana","appraisedValue":700},{"ID":"asset6","color":"white","size":15,"owner":"Michel","appraisedValue":800}]

当网络成员希望转移或更改分类账上的资产时,会调用链码。使用以下命令更改分类账上的资产所有者:
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"]}'

返回如下提示信息,即表示更改成功:
2020-08-28 11:21:29.252 CST [chaincodeCmd] chaincodeInvokeOrQuery -> INFO 001 Chaincode invoke successful. result: status:200

使用如下命令查询刚刚的转移信息:
peer chaincode query -C mychannel -n basic -c '{"Args":["ReadAsset","asset6"]}'

返回结果如下:
{"ID":"asset6","color":"white","size":15,"owner":"Christopher","appraisedValue":800}

(如果是提示某些文件不存在,我的一个解决办法是,启动网络前,source /etc/profile)

Hyperledger fabric 2.2.0 环境搭建的更多相关文章

  1. HyperLedger Fabric 1.4 基础环境搭建(7)

    学习了前面几章理论知识后,本章开始介绍实践操作,先介绍Fabric基础环境搭建,采用的操作系统为Centos 7 64位,依次介绍Docker安装.Docker-Compose安装.GO语言环境安装. ...

  2. Hyperledger Fabric 1.4 快速环境搭建

    自己的硕士研究方向和区块链有关,工程上一直以IBM的Hyperledger Fabric为基础进行开发,对该项目关注也有两年了.目前迎来了Hyperledger Fabric v1.4,这也是Fabr ...

  3. Hyperledger Fabric (1.0)环境部署 chaincode【转】

    三.测试Fabric 其实我们在前面运行./network_setup.sh up的时候系统已经运行了一个Example02的ChainCode测试,部署上去的ChainCodeName是mycc,所 ...

  4. Centos7 HyperLedger Fabric 1.4 生产环境部署

    Kafka生产环境部署案例采用三个排序(orderer)服务.四个kafka.三个zookeeper和四个节点(peer)组成,共准备八台服务器,每台服务器对应的服务如下所示: kafka案例网络拓扑 ...

  5. ubantu16.04+mxnet +opencv+cuda8.0 环境搭建

    ubantu16.04+mxnet +opencv+cuda8.0 环境搭建 建议:环境搭建完成之后,不要更新系统(内核) 转载请注明出处: 微微苏荷 一 我的安装环境 系统:ubuntu16.04 ...

  6. 菜鸟学自动化测试(八)----selenium 2.0环境搭建(基于maven)

    菜鸟学自动化测试(八)----selenium 2.0环境搭建(基于maven) 2012-02-04 13:11 by 虫师, 11419 阅读, 5 评论, 收藏, 编辑 之前我就讲过一种方试来搭 ...

  7. XNA 4.0 环境搭建和 Hello World,Windows Phone 游戏开发

    XNA 4.0 环境搭建和 Hello World,Windows Phone 游戏开发 使用 Scene 类在 XNA 中创建不同的场景(八) 摘要: 平方已经开发了一些 Windows Phone ...

  8. (win10 64位系统中)Visual Studio 2015+OpenCV 3.3.0环境搭建,100%成功

    (win10 64位系统中)Visual Studio 2015+OpenCV 3.3.0环境搭建,100%成功 1.下载opencv 官网http://opencv.org/下载windows版Op ...

  9. [转]OPENCV3.3+CUDA9.0 环境搭建若干错误总结

    编译OpenCV设计启用OpenGL三维可视化支持和启用GPU CUDA并行加速处理的基本知识: 1.从2.4.2版本开始,OpenCV在可视化窗口中支持OpenGL,这就意味着在OpenCV中可以轻 ...

  10. Hyperledger Fabric(v1.2.0)代码分析1——channel创建

    Hyperledger Fabric(v1.2.0)代码分析1--channel创建 0. e2e_cli Hyperledger Fabric提供了一个e2e的例子,该例中创建了一个基础的区块链网络 ...

随机推荐

  1. 【4】java之基础数据类型的包装类

    一.认识包装类 ​ java 在设计之初有一个基本原则:一切皆对象,一切的操作都基于对象,但是有一个矛盾,基本数据类型不是对象.为了符合于这种要求,最早使用人为的方式解决此问题,如下所示: class ...

  2. C#获取各种当前日期时间

    我们可以通过使用DataTime这个类来获取当前的时间.通过调用类中的各种方法我们可以获取不同的时间:如:日期(2008-09-04).时间(12:12:12).日期+时间(2008-09-04 12 ...

  3. [NPUCTF2020]认清形势,建立信心

    [NPUCTF2020]认清形势,建立信心 题目 from Crypto.Util.number import * from gmpy2 import * from secret import fla ...

  4. python + pyqt 实现的你下载css背景图片的小工具(最终版)

    学习python有三个星期了,算是做的第一个小工具,其实也没必要做成图形界面,只是为的GUI学习(再说技术总归给人使用的,熟练很多shell命令只是个"匠人".) win8下面: ...

  5. 小程序-扩展能力图片上传Uploader组件

    微信小程序中有一些扩展组件可以用,例如其中的图片上传组件,不论样式还是上传时的动画,都比较好,在使用过程中也遇到了一些问题,在这记录一下,也期望能让后来用的人少走弯路. 第一步,首先访问网址,http ...

  6. 零基础小白速成python?有了这本书你还在担心什么?

    <Python编程快速上手>书籍PDF高清版免费下载地址 提取码:bc9h 内容简介  · · · · · · 如今,人们面临的大多数任务都可以通过编写计算机软件来完成.Python是一种 ...

  7. 前端面试题 10 个「有用」JavaScript 代码片段

    携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第16天,点击查看活动详情 降低阅读负担,启发创作心智,轻松学习 JavaScript 技巧,日拱一卒,jym,冲~ 注:本篇可能更 ...

  8. .NET版本发展史

    .NET从始至今可以分为3个阶段,分别是.NET Framework阶段..NET Core阶段..NET阶段: .NET Framework终结于.NET Framework4.8版本,.NET C ...

  9. Unity中UGUI图片跟随文本自适应方法

    字体和图片层级如下 Text添加Content Size Fitter Image设置锚点

  10. idea等工具网盘下载地址

    1.idea2020 下载地址:https://caiyun.139.com/m/i?1E5C2SkIZbJH4 ,下载密码微信 搜索 "白菜拼吧" 回复 idea2020 获取 ...