区块链之Hyperledger Fabric v1.2.0 的部署搭建及报错详解

2015年,Linux基金会启动了Hyperledger项目,目标是发展跨行业的区块链技术。
Hyperledger项目并不仅仅是定义一个单一的区块链标准,它更鼓励通过开源社区的力量协作开发区块链技术。Hyperledger Fabric是Hyperledger中的一个区块链项目。与其他区块链技术类似,Hyperledger Fabric包含一个账本,使用智能合约并且是一个通过所有参与者管理交易的系统。
Hyperledger Fabric与其他区块链系统最大的不同体现在私有和许可。与开放无需许可的网络系统允许未知身份的参与者加入网络不同(需要通过工作量证明协议来保证交易有效并维护网络的安全),Hyperledger Fabric通过Membership Service Provider(MSP)来登记所有的成员。 Hyperledger Fabric也提供了多个可拔插选项。账本数据可被存储为多种格式,共识机制可被接入或者断开,同时支持多种不同的MSP。

Hyperledger Fabric提供了建立channel的功能,这允许参与者为交易新建一个单独的账本。当网络中的一些参与者是竞争对手时,这个功能变得尤为重要。因为这些参与者并不希望所有的交易信息——比如提供给部分客户的特定价格信息——都对网络中所有参与者公开。只有在同一个channel中的参与者,才会拥有该channel中的账本,而其他不在此channel中的参与者则看不到这个账本。

Hyperledger Fabric是一个提供分布式账本解决方案的平台。
Hyperledger Fabric由模块化架构支撑,并具备极佳的保密性、可伸缩性、灵活性和可扩展
Hyperledger Fabric被设计成支持不同的模块组件直接拔插启用,并能适应在经济生态系统中错综复杂的各种场景。
Hyperledger Fabric提供了一个独特的可伸缩、可扩展的架构,这也是Hyperledger Fabric与其他区块链解决方案的显著区别。假如你正在计划部署具备完整审查机制以及开源架构的企业级区块链,Hyperledger Fabric是你的一个不错的起点。

参考Hyperledger Fabric中文官方文档:https://hyperledgercn.github.io/hyperledgerDocs/

1.准备Linux系统 建议Ubuntu 16.04 或者 18.04

1.1. 查看apt source源
vim /etc/apt/sources.list
//阿里源
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
1.2 更新源
apt-get update && apt-get upgrade

2.安装Golang

go语言中文官网:https://studygolang.com/dl

cd $HOME/ && wget https://storage.googleapis.com/golang/go1.8.1.linux-amd64.tar.gz

//解压到/usr/local
tar -C /usr/local -xzf go1.8.1.linux-amd64.tar.gz

//修改环境变量
vim /etc/profile

//设置go的路径
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

//环境变量生效
source /etc/profile

//查看go版本
go version

3.安装git、cURL、 libltdl-dev

apt-get -y install git
//查看git 版本 
git version

apt-get -y install curl
//查看curl 版本
curl -version

apt-get -y install libltdl-dev

4.安装Docker

Docker官方文档:https://docs.docker.com/

//安装软件包以允许apt通过HTTPS使用远程库
apt-get -y install apt-transport-https ca-certificates curl software-properties-common

//添加Docker的官方GPG密钥
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

//使用以下命令设置稳定版本的远程库
add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu 
 $(lsb_release -cs) stable"

//再次更新apt包索引
apt-get -y update

//使用apt安装docker-ce
apt-get -y install docker-ce

//验证是否安装成功并查看版本
docker version 

注:如果执行第二条命令报错
解决方法:强制解锁

5.安装 python-pip、docker-compose

apt-­get -y install python­-pip

//查看pip版本
pip -V

apt-get -y install docker­-compose

//查看docker-compose版本
docker­-compose ­-­version

6.下载fabric源码并拉取Fabric-samples镜像

6.1 获取fabirc源码
//创建文件夹
mkdir Hyperledger

//获取fabirc
git clone https://github.com/hyperledger/fabric.git 

**搞不懂最近Github频繁出现无法访问情况,不过还有类似得地址: https://hub.fastgit.org/
注:(小技巧)如果出现执行不成功,可采用下边加速链接或者使用码云下载

//加速地址
git clone https://github.com.cnpmjs.org/hyperledger/fabric.git
//码云
git clone https://gitee.com/arxin/fabric.git
6.2 拉取Fabric-samples镜像

可查看这一步得fabirc官方说明:https://hyperledger-fabric.readthedocs.io/en/release-1.2/install.html

//进入获取的fabric目录
cd /fabric

//查看当前已有的版本信息
git branch -a

//切换到1.2.0版本
git checkout -b v1.2.0

//获取fabric-samples并切换版本
curl -sSL https://bit.ly/2ysbOFE | bash -s -- 1.2.0

注:获取fabric-samples会失败问题,比如:
问题1:curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to bit.ly:443
原因:访问了国外的链接,下载受限
在这里插入图片描述
解决方法:(1).查看docker镜像源地址

docker info|grep Mirrors -A 1

(2).修改docker镜像源地址

vim /etc/docker/daemon.json

{
"registry-mirrors":["https://registry.docker-cn.com"]
}

(3).再次查看

docker info|grep Mirrors -A 1

(4).镜像地址出现,但可能会出现这种情况 WARNING: No swap limit support
在这里插入图片描述

原因:docker 限制容器可以使用的最大物理内存和swap

参数:-m 64M --memory-swap=128M

解决方法:(4.1).编辑/etc/default/grub文件

vim /etc/default/grub

区块链之Hyperledger Fabric v1.2.0 的部署搭建及报错详解_第1张图片
(4.2). 找到GRUB_CMDLINE_LINUX=" " 配置项,并追加“cgroup_enable=memory swapaccount=1”

注意:如果GRUB_CMDLINE_LINUX=" "内有内容,切记不可删除,只需在后面追加cgroup_enable=memory swapaccount=1并用空格和前面的内容分隔开即可

(4.3). 可以看到上图第一行蓝字说明,保存后执行

update-grub

(5).重启docker服务

systemctl restart docker.service

(6)重新执行拉取 fabric-samples镜像(多试几次不行,可尝试重启再次执行语句)

cd /fabirc

curl -sSL https://bit.ly/2ysbOFE | bash -s -- 1.2.0

(7).发现成功!!
区块链之Hyperledger Fabric v1.2.0 的部署搭建及报错详解_第2张图片

6.3 查看拉取镜像
docker images
6.4 网络测试
//进入first-network文件夹
cd ../fabric/fabric-samples/first-network

区块链之Hyperledger Fabric v1.2.0 的部署搭建及报错详解_第3张图片
first-network目录

  • .env:存储一些环境变量
  • base:存储docker-compose的一些公共服务
  • byfn.sh:执行脚本
  • configtx.yaml和crypto-config.yaml:根据之前生成的2个工具,生成相应的配置文件,用来启动网络,放到当前目录的channel-artifacts和crypto-config里
  • dockper-compose:用于启动网络
  • scripts:存放测试脚本,做的事:创建通道、加入通道,安装链码,实例化链码,链码交互
//生成所需的证书和镜像
./byfn.sh -m generate  

//启动网络
./byfn.sh -m up  

//关闭网络
./byfn.sh -m down  

注:网络启动的过程中报错在这里插入图片描述

原因是compse读取的时间太短

vi /etc/resolv.conf

解决办法:将 options timeout**** 这行内容在前面加# 注释掉保存
区块链之Hyperledger Fabric v1.2.0 的部署搭建及报错详解_第4张图片
等待。。。。。
区块链之Hyperledger Fabric v1.2.0 的部署搭建及报错详解_第5张图片

好!!恭喜你 出现这个页面 Successful!

7.测试favirc网络

在官方例子中,channel名字是mychannel,链码的名字是mycc

使用docker exec命令进入CLI容器:

docker exec -it cli bash

进入**github.com/hyperledger/fabric/peer目录下,运行以下命令可以查询a账户的余额:

peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

在这里插入图片描述
下面我们可以进行转账操作,操作为invoke ,由a转b 50:

peer chaincode invoke -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n mycc --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses peer0.org2.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"Args":["invoke","a","b","50"]}'

区块链之Hyperledger Fabric v1.2.0 的部署搭建及报错详解_第6张图片

查询到a,b账户余额发生变化,转账成功!!!

注:关于转账成功,但是没同步问题

原因应该是背书策略问题,两个org都要背书且不能省略不写

AND(‘Org1.member’, ‘Org2.member’, ‘Org3.member’)表示需要三个主体共同签名背书

OR(‘Org1.member’, ‘Org2.member’)表示需要两个主体之一的签名背书

OR(‘Org1.member’,AND(‘Org2.member’, ‘Org3.member’))表示需要Org1的签名背书或者Org2和Org3共同的签名背书

关于cli 启动后实验解析可以查看此篇文章 @微风云重轻

8. 关于node.js开发

1.安装 node.js and npm
curl ­sL https://deb.nodesource.com/setup_8.x | sudo ­-E bash ­-

//查看node版本
node -­­v

//查看npm版本
npm ­-v
1.1移动到fabcar目录
cd ../
cd fabcar
1.2 安装node模块
npm install

注:可能会出现node.js版本问题,可尝试升级

npm升级或者更新到指定版本,运行指令

npm install -g npm   或者  npm -g install [email protected]
1.3 安装grpc模块以与Hyperledger Fabric进行通信:
sudo npm install grpc
1.4 启动fabcar的Hyperledger Fabric网络
./startFabric.sh

参考部分文章
感谢@Hyperledger国际化工作组
https://hyperledgercn.github.io/hyperledgerDocs/build_network_zh/
感谢@馬McccccL
https://blog.csdn.net/so5418418/article/details/78355868
感谢@万生世代teikin
https://blog.csdn.net/qianxuezi/article/details/105851614
感谢@笔阁
https://my.oschina.net/u/2275217/blog/3014598
https://www.tqwba.com/x_d/jishu/357137.html

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