最新内容会更新在主站深入浅出区块链社区

原文链接:联盟链初识以及Fabric环境搭建流程

这篇文章首先简单介绍了联盟链是什么,再详细的介绍了Fabric环境搭建的整个流程。

区块链分类:

以参与方式分类,区块链可以分为:公有链、联盟链和私有链。

定义:

我们知道区块链就是一个分布式的,去中心化的公共数据库(或称公共账本)。而联盟链是区块链的一个分支,所以它本身也是一个分布式的,去中心化的公共数据库,跟其他链的区别就是它是针对特定群体的成员和有限的第三方,其内部指定多个预选节点为记账人,其共识过程受到预选节点控制的区块链

本质

联盟链本质仍然是一种私有链,只不过它要比单个小组织开发的私有链更大,但是却没有公有链这么大的规模,可以理解为它是介于公有链和私有链的一种区块链。

联盟链的特点

  • 交易速度快

    我们知道对于公有链来说,要想达成共识,必须得由区块链中的所有节点来决定,本身公有链的节点数量就非常庞大,所以处理速度很慢。但对于联盟链来说,由于其节点不多的原因,而且只要当网络上2/3的节点达成共识,就可以完成交易,交易速度自然也就快很多。
  • 数据默认不会公开

    不同于公有链,联盟链上的信息并不是所有有访问条件的人就可以访问的,联盟链的数据只限于联盟里的机构及其用户才有权限进行访问。
  • 部分去中心化

    与公有链不同,联盟链某种程度上只属于联盟内部的所有成员所有,且很容易达成共识,因为其节点数毕竟是有限的。

联盟链的应用

R3:由40多加银行参与的区块链联盟R3,包括世界著名的银行(如摩根大通、高盛、瑞信、伯克莱、汇丰银行等),IT巨头(如IBM、微软)。

超级账本(Hyperledger):由 Linux基金会在2015年12月主导发起该项目, 成员包括金融,银行,物联网,供应链,制造和科技行业的领头羊。

Fabric介绍

我们知道智能合约比较成功的就是以太坊了。以太坊主要是公有链,其实对企业应用来说并不是特别合适,而且本身并没有权限控制功能,面向企业的,主要还是HyperLedger Fabric,当然还有R3的Corda。这里我们主要是讲Fabric。

Fabric是一个面向企业应用的区块链框架,基于Fabric的开发可以粗略分为几个层面:

1. 参与Fabric的底层开发,这主要是fabric,fabric-ca和sdk等核心组件。

2. 参与Fabric周边生态的开发,如支持如支持fabric的工具explorer, composer等。

3. 利用fabric平台开发应用,这就是利用fabirc提供的各种sdk来为应用服务(应用开发)

大部分企业会参与2-3的内容,以3为主来服务应用场景,以2为辅。因为现在除了区块链核心功能尚未完善外,对区块链的管理,运维,监控,测试,优化,调试等工具非常匮乏。企业将不得不面对自己开发一些工作。

Fabric环境依赖

fabric官方推荐的开发环境是基于docker搭建的,使用docker搭建需要一下前置条件:

  • docker一一Docker version 17.06.2-ce 或以上版本
  • Docker Compose一一1.14或以上版本
  • Go一一1.10或以上版本, Node.js一一8.9.x或以上版本
  • Python一一主要是python-pip

Fabric环境搭建具体步骤:

这里使用的是Ubuntu 16.04.4版本

1.安装go及环境变量配置

(1)下载最新版本的go二进制文件

$ wget https://dl.google.com/go/go1.9.2.linux-amd64.tar.gz

(2)解压文件

$ sudo tar -C /usr/local -xzf go1.9.2.linux-amd64.tar.gz

(3)配置环境变量

vim ~/.profile

添加以下内容:

export PATH=$PATH:/usr/local/go/bin
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$HOME/go/bin

编辑保存并退出vi后,记得使这些环境变量生效

source ~/.profile

2.安装docker

Fabric的chaincode是运行在docker里的。

(1) 由于apt官方库里的docker版本可能比较旧,所以先卸载可能存在的旧版本:

sudo apt-get remove docker docker-engine docker-ce docker.io

(2) 更新apt包索引:

sudo apt-get update

(3) 安装以下包以使apt可以通过HTTPS使用存储库(repository):

sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common

(4) 添加Docker官方的GPG密钥:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
备注:可验证秘钥指纹 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
使用如下命令验证:
sudo apt-key fingerprint 0EBFCD88

(5) 使用下面的命令来设置stable存储库:

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

(6) 再更新一下apt包索引:

sudo apt-get update

(7) 安装最新版本的Docker CE:

sudo apt-get install -y docker-ce
注意:在生产系统上,可能会需要应该安装一个特定版本的Docker CE,而不是总是使用最新版本:
列出可用的版本:apt-cache madison docker-ce
选择要安装的特定版本,第二列是版本字符串,第三列是存储库名称,它指示包来自哪个存储库,以及扩展它的稳定性级别。要安装一个特定的版本,将版本字符串附加到包名中,并通过等号(=)分隔它们:
sudo apt-get install docker-ce=<VERSION>

(8) 测试是否安装成功

docker --version

(9) 使用阿里提供的镜像,否则后面下载Fabric镜像会非常慢

cd到/etc/docker目录下,创建文件daemon.json,输入下面的内容:

{
"registry-mirrors": ["https://obou6wyb.mirror.aliyuncs.com"]
}

保存并退出,接着执行:

sudo systemctl daemon-reload
sudo systemctl restart docker

(10) 查看docker服务是否启动:

systemctl status docker

(11) 若未启动,则启动docker服务:

sudo service docker start或者sudo systemctl start docker

3.安装最新版本的Docker-compose

(1) Docker-compose是支持通过模板脚本批量创建Docker容器的一个组件。在安装Docker-Compose之前,需要安装Python-pip,运行脚本:

sudo apt-get install python-pip

(2) 安装Docker-compose:

pip install docker-compose

(3) 验证是否成功:

sudo docker-compose --version

(这部分还可以看下此篇文章https://blog.csdn.net/so5418418/article/details/78355868)

4.Fabric源码下载

(1) 新建存放测试、部署代码的目录。

mkdir -p ~/go/src/github.com/hyperledger/

(2) cd到刚创建的目录

cd ~/go/src/github.com/hyperledger

(3) 下载Fabric,这里使用使用git命令下载源码:

git clone https://github.com/hyperledger/fabric.git

特别注意这里:

直接使用上面的git clone下载会非常慢,因为github.global.ssl.fastly.Net域名被限制了。只要找到这个域名对应的ip地址,然后在hosts文件中加上ip–>域名的映射,刷新DNS缓存就可以了。

解决办法:

步骤【1】:查询域名global-ssl.fastly.Netgithub.com 公网地址

可以使用https://www.ipaddress.com/ 这个查。

分别查找下面这两个域名的ip地址:

	github.global.ssl.fastly.net
github.com

步骤【2】:将ip地址添加到hosts文件

sudo vim /etc/hosts

在文件下方输入下面内容并保存,前面两个ip就是我们刚才上面查找到的ip:

151.101.185.194 github.global.ssl.fastly.net
192.30.253.113 github.com

步骤【3】:修改完hosts还不会立即生效,你需要刷新DNS缓存,告诉电脑我的hosts文件已经修改了。

输入指令:

sudo /etc/init.d/networking restart 即可,如果不行也可以尝试重启一下电脑。

接下来再去git clone就快很多了。

(4) 由于Fabric一直在更新,新版本的并不稳定,所有我们并不需要最新的源码,需要切换到v1.0.0版本的源码:

git checkout v1.0.0

5.下载Fabric Docker镜像

(1) 前面步骤4下载完成后,我们可以看到当前工作目录(~/go/src/github.com/hyperledger/)下多了一个fabric的文件夹,

接下来我们cd到~/go/src/github.com/hyperledger/fabric/examples/e2e_cli目录下执行:

source download-dockerimages.sh -c x86_64-1.0.0 -f x86_64-1.0.0

(注:一定要下载完所有镜像并且镜像版本要和Fabric版本一致如何没有下载问继续执行source download-dockerimages.sh命令直到在完如图所有镜像),执行完所有会用到的Fabric docker镜像都会下载下来了。

运行以下命令检查下载的镜像列表:

docker images

注意:如果下载时遇到权限问题,需要切换到root用户下:su root

(2) 重启docker

service docker restart

6.测试Fabric环境是否成功

在~/go/src/github.com/hyperledger/fabric/examples/e2e_cli下执行如下命令启动测试

./network_setup.sh up

这个指令具体进行了如下操作:

  1. 编译生成Fabric公私钥、证书的程序,程序在目录:fabric/release/linux-amd64/bin
  2. 基于configtx.yaml生成创世区块和通道相关信息,并保存在channel-artifacts文件夹。基于configtx.yaml生成创世区块和通道相关信息,并保存在channel-artifacts文件夹。
  3. 基于crypto-config.yaml生成公私钥和证书信息,并保存在crypto-config文件夹中。基于crypto-config.yaml生成公私钥和证书信息,并保存在crypto-config文件夹中。
  4. 基于docker-compose-cli.yaml启动1Orderer+4Peer+1CLI的Fabric容器。基于docker-compose-cli.yaml启动1Orderer+4Peer+1CLI的Fabric容器。

    在CLI启动的时候,会运行scripts/script.sh文件,这个脚本文件包含了创建Channel,加入Channel,安装Example02,运行Example02等功能。

运行完如果出现下图所示,说明整个Fabric网络已经通了。

这里记录本人测试Fabric环境是否成功时遇到的问题

1. 如果发现运行 ./network_setup.sh up命令 后提示在...fabric/release/linux-amd64/bin文件夹下找不到指定文件

解决办法

可以在~/go/src/github.com/hyperledger/fabric/scripts文件下找到 bootstrap.1.0.0.sh文件,手动运行它 ./bootstrap.1.0.0.sh, 此时可以在当前文件夹生成一个bin文件夹,bin里面的文件就是我们需要的,将它拷贝到前面的...fabric/release/linux-amd64/bin文件夹下

2. 如果出现:Error on outputBlock: Error writing genesis block: open ./channel-artifacts/genesis.block: is a directory不能生成创世块的错误。

解决办法:

可以在~/go/src/github.com/hyperledger/fabric/examples/e2e_cli/channel-artifacts目录下,将genesis.block这个目录删除,rm -rf genesis.block/

3. 如果出现:.ERROR: for orderer.example.com Cannot start service orderer.example.com: b'OCI runtime create failed: container_linux.go:348: starting container process caused "process_linux.go:402: container init caused \"rootfs_linux.go:58:

解决办法:

执行./network_setup.sh down 清除网络后再启动即可

接下来我们手动测试下Fabric网络:

fabric提供了SDK和CLI两种交互方式,这里我们使用的是CLI。

这里我们使用官方提供的小例子进行测试,在官方例子中,channel名字是mychannel,链码(智能合约)的名字是mycc。

首先要登录到CLI这个容器中,才能执行Fabric的CLI命令:

docker exec -it cli bash

这时用户名变为root@caa22f87a5bf,当前目录变为/opt/go/src/github.com/hyperledger/fabric/peer#,接着可执行peer命令,体验区块链的命令行使用方式。

1.查看a账户的余额

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

此时我们可以看到控制台输出有:

Query Result: 90

这里90就是a账户的余额

2.调用链码,转账

这里我们让b账户向a账户转账10:

peer chaincode invoke -o orderer.example.com:7050  --tls true --cafile /opt/go/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","b","a","10"]}'

转账成功后,我们可以看到有输出如下提示:

DEBU 009 ESCC invoke result: version:1 response:<status:200 message:"OK"

接下来我们使用前面的命令继续查看a账户的余额,输出结果如下:

Query Result: 100

很明显我们已经转账成功了。

退出cli容器:

直接执行

exit

最后如果我们要关闭Fabric网络,cd到~/go/src/github.com/hyperledger/fabric/examples/e2e_cli下(注意这里的路径按自己前面创建的,不一定要和我一样),执行:

./network_setup.sh down

参看链接:

https://blog.csdn.net/github_34965845/article/details/80610060

https://www.cnblogs.com/preminem/p/7729497.html

https://www.cnblogs.com/gao90/p/8692642.html

https://blog.csdn.net/so5418418/article/details/78355868

https://blog.csdn.net/iflow/article/details/77951610

https://blog.csdn.net/vivian_ll/article/details/79966210

联盟链初识以及Fabric环境搭建流程的更多相关文章

  1. cocos2d-x 3.11 游戏开发环境搭建流程

    cocos2d-x 3.11.1 游戏开发环境搭建流程 1. 准备下面的软件 1) Windows7 64Bit+ VS2013 (VC++) 这个不用多说. 2) cocos2d-x-3.11.1. ...

  2. 深入理解Fabric环境搭建的详细过程

    博主之前的文章都是教大家怎么快速的搭建一个Fabric的环境,但是其中大量的工作都隐藏到了官方的脚本中,并不方便大家深入理解其中的过程,所以博主这里就将其中的过程一步步分解,方便大家! 前面的准备工作 ...

  3. 深入理解Fabric环境搭建的详细过程(转)

    前面的准备工作我就不用多说了,也就是各种软件和开发环境的安装,安装好以后,我们git clone下来最新的代码,并切换到v1.0.0,并且下载好我们需要使用的docker镜像,也就是到步骤6,接下来我 ...

  4. Hyperledger Fabric 环境搭建(2)

    上一篇https://www.cnblogs.com/xdyixia/p/11738096.html 介绍了Hyperledger Fabric环境中各种软件安装和源码编译,这一篇介绍快速运行一个简单 ...

  5. 【推荐】 HyperLedger Fabric环境搭建、测试及注意事项 [详尽指导] [亲测有效]

    系统:Ubuntu16.04 LTS 一.环境准备 1.1 Ubuntu下安装 crul sudo apt install curl curl是利用URL语法在命令行方式下工作的开源文件传输工具.它被 ...

  6. Appium 1.6.4 环境搭建流程(Java, Android+IOS, Windows+Mac)

    Appium1.6.4已经出来一段时间了,快速给大家串一下怎么搭建,贴了下载链接 1 基础环境: Windows + Mac: Java JDK 1.8+ (需配置环境变量),Appium1.6.4的 ...

  7. 初识Django框架——环境搭建前你需要了解的几点

    Django是一个开放源代码的Web应用框架,由Python写成. 采用了MVC的框架模式,即模型M,视图V和控制器C. 它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是C ...

  8. Python之路-初识python及环境搭建与测试(Python安装、Anaconda安装、PyCharm安装)

    一.认识Python 起源 Python的作者是著名的“龟叔”Guido van Rossum,他希望有一种语言,这种语言能够像C语言那样,能够全面调用计算机的功能接口,又可以像shell那样,可以轻 ...

  9. Linux学习环境搭建流程

    Linux学习环境搭建 Vmware安装 VMware下载:https://www.vmware.com/go/getworkstation-win 运行安装程序,该重启安装驱动就重启,不需要就下一步 ...

随机推荐

  1. CLOSE_WAIT状态的原因与解决方法(转载留自己看)

    这个问题之前没有怎么留意过,是最近在面试过程中遇到的一个问题,面了两家公司,两家公司竟然都面到到了这个问题,不得不使我开始关注这个问题.说起CLOSE_WAIT状态,如果不知道的话,还是先瞧一下TCP ...

  2. 好用的 over the wall教程

    还在为翻 xxx墙苦恼吗,一分钟就能搞定的翻xxx墙教程 1.下载chrome扩展插件 Proxy SwitchyOmega,加入到谷歌的高级扩展程序当中,这个就不详细讲解了. 请戳 https:// ...

  3. luogu3830 [SHOI2012]随机树

    传送门:洛谷 题目大意:对于一个只有一个节点的二叉树,一次操作随机将这棵树的叶节点的下方增加两个节点.$n-1$次操作后变为$n$个叶节点的二叉树.求:(1)叶节点平均深度的期望值(2)树深度的数学期 ...

  4. app优化篇

    UIImageView高效加个圆角 一般通过clipsToBounds和layer.cornerRadius会强制Core Animation提前渲染屏幕的离屏绘制,影响性能. 通过贝塞尔曲线切割图片 ...

  5. nio例子

    跟传统io相比,nio会支持更大的并发量 nio去除了传统io的连接阻塞,和读写阻塞 服务器端 客户端 nio模型 传统io nio

  6. Windows路由表

    对于路由器的路由表,网管都很熟悉,但是windows的路由表,可能了解的人就相对少一些.今天我们就一起来看看windows路由表. 一.windows路由表 1.使用命令 route print 查看 ...

  7. C#设计模式(8)——桥接模式(Bridge Pattern)(转)

    一.引言 这里以电视遥控器的一个例子来引出桥接模式解决的问题,首先,我们每个牌子的电视机都有一个遥控器,此时我们能想到的一个设计是——把遥控器做为一个抽象类,抽象类中提供遥控器的所有实现,其他具体电视 ...

  8. supervisor 守护进程

    一.supervisor 安装 1.yum -y install epel-release 2.yum -y install supervisor 二.supervisor 配置文件详解 三.supe ...

  9. Angular4的依赖注入

  10. 记录Ok6410 sd 启动uboot

    1\参考资料https://github.com/SeanXP/ARM-Tiny6410/tree/master/no-os/sd-no-os/u-boot 2\参考资料https://blog.cs ...