600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > hyperledger/fabric-区块链快速入门教程+错误解决——良好用户体验

hyperledger/fabric-区块链快速入门教程+错误解决——良好用户体验

时间:2018-12-03 21:34:47

相关推荐

hyperledger/fabric-区块链快速入门教程+错误解决——良好用户体验

hyperledger/fabric-区块链快速入门

目录操作系统软件安装git 安装go安装docker安装源码获取hyperledger环境配置镜像获取入门测试fabric-samplesreleas-1.0开始测试releas-1.0master(2.2.0)智能合约fabric相关错误与解决方案fabric-samples测试出错cryptogen文件不存在解决方法:获取二进制文件查看对应版本修改版本docker image does not match the version解决方案

目录

包括前期的操作系统环境、前期的软件获取、前期的项目源码获取、中期的测试、最后可能遇到的问题和解决方案。PS:本文所说的网络问题,均无任何含义,只是网络问题。

操作系统

我使用的是deepin 20Beta,它比较适合习惯用windows操作系统的用户。

包括了很多win的软件如vscode、微信和qq等,基本上和在win没太大区别;Deepin中包括了自己的u盘启动器和镜像,按照教程完全装机ok;Deepin的UI非常舒服,自带特效;Deepin和Ubuntu类似,相关操作均通用,无使用难度;Deepin开源,安全可靠;Deepin为国产,现有较好的软件生态,感觉ok;

当然其他linux均可

linux内核版本:Linux version 5.3.0-3-amd64

软件安装

作为前期的准备,我们需要安装gitgodocker三个软件。git用于获取源码,go用于编译,docker作为容器获取镜像。

git 安装

hyperledger的源码是在github上,所以需要用git进行获取,而系统默认无git,安装就完事了。注意,以下所有代码均默认已有root权限

// 安装代码如下// 获取root权限,输入root密码回车即可sudo su// deepin安装git,注意,如果是centos,用yum install +软件名apt-get install git//没报错即安装完成

go安装

hyperledger的fabric采用go语言编写,所以需要先下载go语言安装包:

由于网络问题,我们选择并点击go语言中文网获取linux的安装包,右键获取链接。

打开终端,输入以下命令获取:

// 也可以下载下来进行解压,都行//-08-07,此时链接可用wget /dl/golang/go1.14.6.linux-amd64.tar.gz//在get到go语言的安装包后解压到/usr/local/software下// 先新建/usr/local/software文件夹再解压mkdir /usr/local/softwaretar -zxvf go1.14.6.linux-amd64.tar.gz -C /usr/local/software

到此时,go已经解压完成在/usr/local/software/go文件夹中

docker安装

hyperledger使用docker打包应用为镜像进行移植,使得所有的客户端均可获取到每个版本对应的镜像。

Deepin的安装教程类似Ubuntu的安装,参考教程

// 安装代码如下// 先更新本地的软件源,使用中科大的cp /etc/apt/sources.list /etc/apt/sources.list.baksed -i 's//mirrors./g' /etc/apt/sources.listapt update// 更新完成后先安装需要的包,共5个apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common// 由于安装docker需要类似先注册一下,所以先添加 Docker 的官方 GPG 密钥:curl -fsSL /linux/ubuntu/gpg | sudo apt-key add -// 添加 Docker-ce 软件源add-apt-repository "deb [arch=amd64] https://mirrors./docker-ce/linux/ubuntu \$(lsb_release -cs) stable"// 再次更新并安装apt-get updateapt-get install docker-ce//设置开机自启动systemctl enable dockersystemctl start docker//没报错即安装完成

源码获取

hyperledger

地址:/hyperledger

我们需要获取两个子项目:fabricfabric-samples,fabric通过编译成二进制文件,提供给其他子项目使用。

但在实际过程中我们实际上只会用到了一个子项目:fabric-samples

先通过git获取到这两个子项目的源码:

hyperledger/fabric-samples为例:

具体的代码如下:

fabric-samples的链接:/hyperledger/fabric-samples.git

fabric的链接:/hyperledger/fabric.git

//-08-07// 注意git clone 下来的项目是在你目前所在的目录下,所以我们需要先进入对应的目录再git// 我们在根目录/下创建了个workspace,一个go用于以后的go开发路径,并继续创建作为存放git项目的文件目录mkdir /workspace \/workspace/go /workspace/go/bin \/workspace/ \/workspace//hyperledger // 进入目录/workspace//hyperledger/cd /workspace//hyperledger/// 获取源码,由于网络问题,会有点慢git clone /hyperledger/fabric.gitgit clone /hyperledger/fabric-samples.git// 注意,通过这种方式获取的是master的,也就是最新的源码// 获取完成后更改权限chmod 777 -R /workspace//hyperledger/

环境配置

当源码获取完成后,前期安装的软件需要进行环境配置

go的环境配置:

修改/etc/profile文件,将go的路径加入,代码如下

// vim进行修改/etc/profilevim /etc/profile// 按i并移动光标在最后添加如下内容:#workspaceexport WORKSPACE=/workspace#goexport GOROOT=/usr/local/software/goexport GOBIN=$GOROOT/binexport GOPATH=$WORKSPACE/go#hyperledgerexport FABRIC=$WORKSPACE//hyperledger#pathexport PATH=$PATH:$GOROOT/bin:$GOPATH/bin:$FABRIC/fabric-samples/bin#END// 添加完成按esc并输入:wq进行保存// 修改生效source /etc/profile

当修改完成后,通过输入go version测试,结果如下

2. docker添加镜像加速器

由于国内网络问题,当通过docker获取镜像时,往往速度不如人意(谁试谁知道)这时候镜像加速器让你感受到网速的美妙:

以阿里云镜像加速器为例:通过搜索容器镜像服务找到最下面的镜像加速器,而右边则是你的地址。

// 具体教程可参考上图mkdir /etc/dockervim /etc/docker/daemon.json// 添加你的加速器地址{"registry-mirrors":["https://xxxx."]}// 保存并退出systemctl daemon-reloadsystemctl restart docker

完成后输入docker version测试,结果如下,说明docker正常启动

镜像获取

当添加完成加速器后,可以去/u/hyperledger/来获取hyperledger的docker镜像。

我们需要以下镜像:

hyperledger/fabric-peer为例,/r/hyperledger/fabric-peer

点击进入即可获取fabric-peer的镜像,通过右边代码进行获取

// 输入复制代码,即可pull对应的镜像文件docker pull hyperledger/fabric-peer// 所有的镜像均可按此方式进行

注:官方给了一个脚本bootstrap.sh(具体路径如下图),可以通过执行此文件来获取所有的镜像。但是,由于网络问题,执行此文件通常会以失败告终。只能说,官方的想法是很好,但是网络问题,无解。所以还是老老实实的一个一个pull。

通过pull相关的镜像文件,最后通过docker images进行查看。如果出现的镜像和所需镜像均吻合,则镜像下载完成。

至此,基本上所有的文件都已经准备完毕。开始区块链的入门吧!

入门测试

我们之前git了两个子项目,fabricfabric-samples,先进入fabric-samples来看看如何上手吧。

fabric-samples

fabric-samples中包括了很多,但是作为入门我也不清楚,先进入test-network来开始入门的测试

注意,我们的是最新的版本,而网上的教程大多是V1.0时候的fabric-samples,所以会出现比如测试路径名称不同:

比如当你选择fabric-samples版本为1.0时,显示的可执行文件为byfn.sh,如下图所示

而如果是master(-08-07)时

进入后可以看到一个可执行文件network.sh

releas-1.0

具体的获取方法如上,只是注意需要修改镜像对应的版本,即pull时添加上对应的tag即可

开始测试

命令行进入此路径执行此文件

// 防止万一,直接绝对路径执行./$FABRIC/fabric-samples/test-network/xxx.sh

releas-1.0

如果是releas-1.0版本,即网上常见的版本时,通过./byfn.sh执行时,显示常用的3个命令-up-down-generate

通过./byfn.sh generate执行区块链网络创建

而在创建完成后即可通过./byfn.sh up开始区块链的网络。这里报错,说明没有安装docker-compse安装即可

重新通过./byfn.sh up开始区块链的网络,一切正常显示:START

区块链网络搭建完成,添加了一个名为mychannel的通道,并添加了两个用户a和b,完成了交易,最后查询querya的账户,由原来的100变为现在的90.

此时docker images查看docker 镜像,可以看到多出3个测试镜像。

master(2.2.0)

查看执行结果,红色部分为翻译

./network.sh包括以下几个执行命令

通过./network.sh up createChannel -c testchannel来新建并加入一个名为testchannel的通道

最后结果:

智能合约

这里通过peer相关的命令行来手动完成交易:

先新建一名为channel1的通道,其中包含a用户和b用户,其初始余额为100和200;通过query查询a此时的余额,返回结果100,说明初始化成功;通过invoke来新建一场交易记录,调用智能合约example02,完成a向b转10的操作;再次query查询a此时余额,返回结果90,说明交易完成。

具体细节如下图:

fabric

fabric的结构包括:网络、通道、orderer、peer和链码chaincode。

各个部分间的关系如下图所示。在一个大的区块链网络中,存在多个peer 节点,不同节点间通过channel进行交易,并通过链码(智能合约)对自身账本进行读写等操作,并将修改后的交易信息交给orderer节点进行排序,orderer节点确定交易是否可行,并将最终的正确交易数据排好序,发送至各个peer节点,完成所有节点账本的同步。

相关错误与解决方案

fabric-samples测试出错

cryptogen文件不存在

当我们执行例子中的可执行文件时,显示没有二进制文件:

Starting nodes with CLI timeout of '5' tries and CLI delay of '3' seconds and using database 'leveldb' with crypto from 'cryptogen'ERROR! Peer binary and configuration files not found..

解决方法:获取二进制文件

make release

这里是说明fabric的作用,进入fabric文件,看到有个Makefile文件,通过make release可以编译出二进制文件,输出到$GOPATH下的bin/目录中,但是,由于网络问题,可能无法编译成功

./bootstrap.sh

官方在fabric/scripts/中设置了脚本文件:bootstrap.sh,可以获取镜像、二进制文件和范例,但是由于网络问题,会出现无法下载的情况。自行下载(推荐)

打开bootstrap.sh文件,我们可以看到里面有二进制对应的url:

获取对应的地址:/hyperledger/fabric/releases和/hyperledger/fabric-ca/releases/,通过这便可获取对应版本的二进制文件。

当然这里网络仍然存在问题,我将各个版本的二进制文件均下载上传至蓝奏云,有需要可自取:密码:fabric

fabric/ca1.5以上版本:/b01hlg8gf

fabric/ca1.1-1.5版本:/b01hlg8ti

fabric/ca1.1以下版本:/b01hlg90f

查看对应版本

通过fabric/scripts/bootstrap.sh进行查看

如果是git master的版本时,打开进入master对应的bootstrap.sh,可以看到fabric的版本为:VERSION=2.2.0,fabric-ca的版本为:CA_VERSION=1.4.8

于是通过进入fabric/ca1.5以上版本:/b01hlg8gf和fabric/ca1.1-1.5版本:/b01hlg8ti下载fabric和fabric-ca的对应版本二进制文件并解压到本地的fabric-samples即可

修改版本

进入本地目录修改版本

cd /workspace//hyperledger/fabric// 查看目前的git对应版本git branch -a// 当显示已有的版本后,可以修改对应的版本// git checkout +xxx// 如修改为release-2.0版本git checkout release-2.0

docker image does not match the version

错误代码:

ERROR! Fabric Docker image version of x.x.x does not match the versions supported by the test network.

报错显示:

解决方案

这里就先查看docker的镜像文件,看看是不是没有对应的版本镜像就行。

docker images// 发现的确没有2.2.0版本的镜像// 那就很简单// pull + 路径 + tag,看哪些不是2.2的,pull就是了pull hyperledger/fabric-tools:2.2// 如果镜像里出现其他的,可以通过// docker rmi + 镜像ID // 进行删除

注意,这种情况下可能会出现:同名同id不同tag的镜像需要删除:

参考教程:/qq_37674858/article/details/80282068?utm_medium=distribute.pc_relevant.none-task-blog-baidulandingword-1&spm=1001.2101.3001.4242

通过docker rmi 镜像名称:镜像tag

// 例子:删除2.2版本,留下2.2.0版本docker rmi hyperledger/fabric-ccenv:2.2

具体如图所示:

或者一个比较直接的方法:修改network.sh内容,将其中对image的tag进行直接指定:修改此处:#default image tag

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。