区块链之Hyperledger Fabric v1.2 的环境搭建

柒八九 2021-03-31 17:35:42 阅读数:480

本文一共[544]字,预计阅读时长:1分钟~
docker Ubuntu Git go npm


> 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/](https://hyperledgercn.github.io/hyperledgerDocs/)

### 1.准备Linux系统 建议Ubuntu 16.04 或者18.04
###### 1.1. 查看apt source源
```bash
vim /etc/apt/sources.list
```


```bash
//北邮镜像源
deb http://mirrors.byrio.org/ubuntu/ bionic main restricted
deb http://mirrors.byrio.org/ubuntu/ bionic-updates main restricted
deb http://mirrors.byrio.org/ubuntu/ bionic universe
deb http://mirrors.byrio.org/ubuntu/ bionic-updates universe
deb http://mirrors.byrio.org/ubuntu/ bionic multiverse
deb http://mirrors.byrio.org/ubuntu/ bionic-updates multiverse
deb http://mirrors.byrio.org/ubuntu/ bionic-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu bionic-security main restricted
deb http://security.ubuntu.com/ubuntu bionic-security universe
deb http://security.ubuntu.com/ubuntu bionic-security multiverse

//阿里源
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 更新源

```bash
apt-get update && apt-get upgrade
```
### 2.安装Golang   
go语言中文官网:[https://studygolang.com/dl](https://studygolang.com/dl)


```bash
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= P A T H : PATH: GOROOT/bin:$GOPATH/bin

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

//查看go版本
go version
```

### 3.安装git、cURL、 libltdl-dev

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

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

apt-get -y install libltdl-dev

```

### 4.安装Docker

```bash
//安装软件包以允许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 
```
*注:如果执行第二条命令报错*
![在这里插入图片描述](https://img-blog.csdnimg.cn/2021033011005364.png)
### 5.安装 python-pip、docker-compose

```bash
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 手动新建  mkdir 文件夹

```bash
//获取fabirc并切换版本
git clone https://gitee.com/arxin/fabric.git

//进入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
```
*注:如果出现执行不成功,选采用加速链接或者使用码云*

```bash
//加速地址
git clone https://github.com.cnpmjs.org/wlc1216/Hyperledger-fabric.git
//码云
git clone https://gitee.com/arxin/fabric.git
```

###### 6.2 查看拉取镜像
```bash
docker images
```

###### 6.3 网络测试

```bash
//进入first-network文件夹
cd ../fabric/fabric-samples/first-network
```
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210330134436274.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dsY18xMTEx,size_16,color_FFFFFF,t_70)

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

```bash
//生成所需的证书和镜像
./byfn.sh -m generate  

//启动网络
./byfn.sh -m up  
```
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210330150247153.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dsY18xMTEx,size_16,color_FFFFFF,t_70)
等待。。。。。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210330150331359.png)

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

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


*注:网络启动的过程中docker-compose 报错*![在这里插入图片描述](https://img-blog.csdnimg.cn/20210330134014803.png)
原因是compse读取的时间太短
```bash
vi /etc/resolv.conf
```

解决办法:将 options timeout:2 attempts:3 rotate single-request-reopen 这行内容在前面加上井号注释掉然后保存退出

### 7.测试favirc网络
在官方例子中,channel名字是mychannel,链码的名字是mycc

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

```bash
docker exec -it cli bash
```
在/opt/gopath/src/github.com/hyperledger/fabric/peer目录下,运行以下命令可以查询a账户的余额:
```bash
peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
```
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210330151336369.png)
下面我们可以进行转账操作,操作为invoke ,由a转b 20:

```bash
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 -c '{"Args":["invoke","a","b","20"]}'
```

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210330153258647.png)

转账成功!!!


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

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

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

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

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


### 8. 关于node.js开发
##### 1.安装 node.js and npm

```bash
curl ­sL https://deb.nodesource.com/setup_8.x | sudo ­-E bash ­-

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

//查看npm版本
npm ­-v
```
###### 1.1移动到fabcar目录

```bash
cd ../
cd fabcar
```
###### 1.2 安装node模块

```bash
npm install
```
*注:可能会出现node.js版本问题,可尝试升级*

npm升级或者更新到指定版本,运行指令
```bash
npm install -g npm   或者  npm -g install npm@3.0.0
```

###### 1.3 安装grpc模块以与Hyperledger Fabric进行通信:

```bash
sudo npm install grpc
```
###### 1.4 启动fabcar的Hyperledger Fabric网络

```bash
./startFabric.sh
```

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

版权声明:本文为[柒八九]所创,转载请带上原文链接,感谢。 https://my.oschina.net/u/4562085/blog/5004679