hyperledger/fabric-区块链快速入门教程+错误解决——良好用户体验
hyperledger/fabric-区块链快速入门
- 目录
- 操作系统
- 软件安装
- git 安装
- go安装
- docker安装
- 源码获取
- hyperledger
- 环境配置
- 镜像获取
- 入门测试
- fabric-samples
- releas-1.0
- 开始测试
- releas-1.0
- master(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
软件安装
作为前期的准备,我们需要安装git、go和docker三个软件。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的安装包,右键获取链接。
打开终端,输入以下命令获取:
// 也可以下载下来进行解压,都行
//2020-08-07,此时链接可用
wget https://studygolang.com/dl/golang/go1.14.6.linux-amd64.tar.gz
//在get到go语言的安装包后解压到/usr/local/software下
// 先新建/usr/local/software文件夹再解压
mkdir /usr/local/software
tar -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.bak
sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
apt update
// 更新完成后先安装需要的包,共5个
apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
// 由于安装docker需要类似先注册一下,所以先添加 Docker 的官方 GPG 密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
// 添加 Docker-ce 软件源
add-apt-repository "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \
$(lsb_release -cs) stable"
// 再次更新并安装
apt-get update
apt-get install docker-ce
//设置开机自启动
systemctl enable docker
systemctl start docker
//没报错即安装完成
源码获取
hyperledger
地址:https://github.com/hyperledger
我们需要获取两个子项目:fabric和fabric-samples,fabric通过编译成二进制文件,提供给其他子项目使用。
但在实际过程中我们实际上只会用到了一个子项目:fabric-samples
先通过git获取到这两个子项目的源码:
以hyperledger/fabric-samples为例:
具体的代码如下:
fabric-samples的链接:https://github.com/hyperledger/fabric-samples.git
fabric的链接:https://github.com/hyperledger/fabric.git
//2020-08-07
// 注意git clone 下来的项目是在你目前所在的目录下,所以我们需要先进入对应的目录再git
// 我们在根目录/下创建了个workspace,一个go用于以后的go开发路径,并继续创建github.com作为存放git项目的文件目录
mkdir /workspace \
/workspace/go /workspace/go/bin \
/workspace/github.com \
/workspace/github.com/hyperledger
// 进入目录/workspace/github.com/hyperledger/
cd /workspace/github.com/hyperledger/
// 获取源码,由于网络问题,会有点慢
git clone https://github.com/hyperledger/fabric.git
git clone https://github.com/hyperledger/fabric-samples.git
// 注意,通过这种方式获取的是master的,也就是最新的源码
// 获取完成后更改权限
chmod 777 -R /workspace/github.com/hyperledger/
环境配置
当源码获取完成后,前期安装的软件需要进行环境配置
- go的环境配置:
修改/etc/profile文件,将go的路径加入,代码如下
// vim进行修改/etc/profile
vim /etc/profile
// 按i并移动光标在最后添加如下内容:
#workspace
export WORKSPACE=/workspace
#go
export GOROOT=/usr/local/software/go
export GOBIN=$GOROOT/bin
export GOPATH=$WORKSPACE/go
#hyperledger
export FABRIC=$WORKSPACE/github.com/hyperledger
#path
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin:$FABRIC/fabric-samples/bin
#END
// 添加完成按esc并输入:wq进行保存
// 修改生效
source /etc/profile
当修改完成后,通过输入 go version测试,结果如下
2. docker添加镜像加速器
由于国内网络问题,当通过docker获取镜像时,往往速度不如人意(谁试谁知道)这时候镜像加速器让你感受到网速的美妙:
以阿里云镜像加速器为例:通过搜索容器镜像服务找到最下面的镜像加速器,而右边则是你的地址。
// 具体教程可参考上图
mkdir /etc/docker
vim /etc/docker/daemon.json
// 添加你的加速器地址
{"registry-mirrors":["https://xxxx.mirror.aliyuncs.com"]}
// 保存并退出
systemctl daemon-reload
systemctl restart docker
完成后输入 docker version测试,结果如下,说明docker正常启动
镜像获取
当添加完成加速器后,可以去https://hub.docker.com/u/hyperledger/来获取hyperledger的docker镜像。
我们需要以下镜像:
以hyperledger/fabric-peer为例,https://hub.docker.com/r/hyperledger/fabric-peer
点击进入即可获取fabric-peer的镜像,通过右边代码进行获取
// 输入复制代码,即可pull对应的镜像文件
docker pull hyperledger/fabric-peer
// 所有的镜像均可按此方式进行
注:官方给了一个脚本bootstrap.sh(具体路径如下图),可以通过执行此文件来获取所有的镜像。但是,由于网络问题,执行此文件通常会以失败告终。只能说,官方的想法是很好,但是网络问题,无解。所以还是老老实实的一个一个pull。
通过pull相关的镜像文件,最后通过docker images进行查看。如果出现的镜像和所需镜像均吻合,则镜像下载完成。
至此,基本上所有的文件都已经准备完毕。开始区块链的入门吧!
入门测试
我们之前git了两个子项目,fabric和fabric-samples,先进入fabric-samples来看看如何上手吧。
fabric-samples
fabric-samples中包括了很多,但是作为入门我也不清楚,先进入test-network来开始入门的测试
注意,我们的是最新的版本,而网上的教程大多是V1.0时候的fabric-samples,所以会出现比如测试路径名称不同:
比如当你选择fabric-samples版本为1.0时,显示的可执行文件为byfn.sh,如下图所示
而如果是master(2020-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,完成了交易,最后查询query a的账户,由原来的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:
获取对应的地址:https://github.com/hyperledger/fabric/releases和https://github.com/hyperledger/fabric-ca/releases/,通过这便可获取对应版本的二进制文件。
当然这里网络仍然存在问题,我将各个版本的二进制文件均下载上传至蓝奏云,有需要可自取:密码:fabric
fabric/ca1.5以上版本:https://hyperledger.lanzous.com/b01hlg8gf
fabric/ca1.1-1.5版本:https://hyperledger.lanzous.com/b01hlg8ti
fabric/ca1.1以下版本:https://hyperledger.lanzous.com/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以上版本:https://hyperledger.lanzous.com/b01hlg8gf和fabric/ca1.1-1.5版本:https://hyperledger.lanzous.com/b01hlg8ti下载fabric和fabric-ca的对应版本二进制文件并解压到本地的fabric-samples即可
修改版本
进入本地目录修改版本
cd /workspace/github.com/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的镜像需要删除:
参考教程:https://blog.csdn.net/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
hyperledger/fabric-区块链快速入门教程+错误解决——良好用户体验相关推荐
- Hyperledger Fabric区块链工具configtxgen配置configtx.yaml
configtx.yaml是Hyperledger Fabric区块链网络运维工具configtxgen用于生成通道创世块或通道交易的配置文件,configtx.yaml的内容直接决定了所生成的创世区 ...
- Hyperledger Fabric 官网翻译入门教程--之关键概念(Hyperledger Fabric 模型)
英文地址:http://hyperledger-fabric.readthedocs.io/en/latest/fabric_model.html Hyperledger Fabric Model/ ...
- (Fabric 超级账本学习【5】)Fabric2.4网络环境下——搭建Hyperledger Fabric区块链浏览器
博主最近在搭建Hyperledger Fabric区块链浏览器过程中也学习了很多博主的搭建流程,踩了很多雷,踩 了很多坑,现将成功搭建好的Hyperledger Fabric区块链浏览器详细流程分享如 ...
- Linux搭建Hyperledger Fabric区块链框架 - Hyperledger Fabric模型概念
企业选型的区块链底层技术 Hyperledger Fabric 概念 2015年,Linux基金会启动了Hyperledger项目,目标是发展跨行业的区块链技术. Hyperledger Fabric ...
- Hyperledger Fabric区块链浏览器搭建
最近在用Hyperledger Fabric平台做一个项目,要使用区块链浏览器.以下是我的基础环境的情况以及搭建过程. 版本 Ubuntu 22.04.1 LTS 运行内存 8.0 GiB 处理器 I ...
- 区块链快速入门(四)——BFT(拜占庭容错)共识算法
一.BFT简介 1.拜占庭将军问题简介 拜占庭将军问题(Byzantine Generals Problem)是Leslie Lamport(2013年的图灵奖得主)用来为描述分布式系统一致性问题(D ...
- Hyperledger Fabric区块链供应链金融实战1
我们在这里将利用Hyperledger Fabric最新版本v2.0.0 Beta,创建一个区块链供应链金融项目,实现应收账款.承兑汇票.合同融资功能.出于学习目的,我们将Hyperledger Fa ...
- 区块链100讲:Hyperledger Fabric 区块链多机部署
区块链技术可以应用在很多领域,未来最有可能先在这些领域落地. 区块链技术是利用块链式数据结构来验证与存储数据.利用分布式节点共识算法来生成和更新数据.利用密码学的方式保证数据传输和访问的安全.利用由自 ...
- 区块链快速入门(五)——区块链技术的演化
一.区块链技术的发展 比特币区块链面向转账场景,支持简单的脚本计算.如果引入更多复杂的计算逻辑,将能支持更多应用场景,即智能合约(Smart Contract).智能合约可以提供除了货币交易功能外更灵 ...
最新文章
- python3.8怎么打开创建_Python3.8有哪些新功能 怎么入行Python开发
- linux上线tomcat安装目录,LINUX 下 tomcat的安装和配置
- 你真的会用storyboard开发吗?
- Bootstrap HTML编码规范之引入 CSS 和 JavaScript 文件
- Windows 7安装Oracle 10g的方法
- DataSet里的数据写入XML文件
- touch事件详解【译文】
- java读取word内容
- paip.discuz x2.5 用户及积分账户的接口attilax总结
- 计算机主板电池拆卸,主板电池没电了会怎么样 电脑主板电池怎么拆换【详解】...
- VUE仿知乎网站(四)登录注册页面开发+表单验证
- SQA软件质量保证工程师工作职责与素质要求
- 通信基站中AAU与RRU的功能和区别是什么?
- 敬业签电脑桌面便签软件怎么绑定手机号码?
- 基线检查工具Python代码
- java编写一个可切换的界面_java web 项目实现手动中英文切换
- 开源办公的五个法律问题 ——以“新型冠状病毒”防控期间企业在线远程运营为视角...
- NS3中“E: package ‘gnuplot‘ has no installation candidate”问题解决方案
- 高级宏观经济学公式整理
- 可以设置时间的计时器
热门文章
- 关于面试总结2-SQL学生表
- 任务调度Schedulerx2.0分布式计算之MapReduce模型
- nisi安装包 打印日志语法_NSIS 打包脚本基础
- 如何把程序员从久坐颈椎病中拯救出来?我为程序员做了这个救命APP
- SAP MM MARD 表里的Storage Bin 字段
- Nginx 使用./nginx -s reload报错 [error] open() “/opt/nginx/logs/nginx.pid“ failed (2: No such file or di
- python数据分析就业班_云开见明 2020Python数据分析师特训营全套课程84节
- 重塑汽车的最新5G标准
- 突破微软远程桌面帧率限制
- 刷脸支付市场未来想象空间进一步增加