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操作系统的用户。

  1. 包括了很多win的软件如vscode、微信和qq等 ,基本上和在win没太大区别;
  2. Deepin中包括了自己的u盘启动器和镜像,按照教程完全 装机ok
  3. Deepin的UI非常舒服,自带特效;
  4. Deepin和Ubuntu类似,相关操作均通用,无使用难度;
  5. Deepin开源,安全可靠;
  6. 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/

环境配置

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

  1. 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相关的命令行来手动完成交易:

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

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

  1. make release
    这里是说明fabric的作用,进入fabric文件,看到有个Makefile文件,通过make release可以编译出二进制文件,输出到$GOPATH下的bin/目录中,但是,由于网络问题,可能无法编译成功
  2. ./bootstrap.sh
    官方在fabric/scripts/中设置了脚本文件:bootstrap.sh,可以获取镜像、二进制文件和范例,但是由于网络问题,会出现无法下载的情况。
  3. 自行下载(推荐)
    打开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-区块链快速入门教程+错误解决——良好用户体验相关推荐

  1. Hyperledger Fabric区块链工具configtxgen配置configtx.yaml

    configtx.yaml是Hyperledger Fabric区块链网络运维工具configtxgen用于生成通道创世块或通道交易的配置文件,configtx.yaml的内容直接决定了所生成的创世区 ...

  2. Hyperledger Fabric 官网翻译入门教程--之关键概念(Hyperledger Fabric 模型)

    英文地址:http://hyperledger-fabric.readthedocs.io/en/latest/fabric_model.html Hyperledger Fabric Model/ ...

  3. (Fabric 超级账本学习【5】)Fabric2.4网络环境下——搭建Hyperledger Fabric区块链浏览器

    博主最近在搭建Hyperledger Fabric区块链浏览器过程中也学习了很多博主的搭建流程,踩了很多雷,踩 了很多坑,现将成功搭建好的Hyperledger Fabric区块链浏览器详细流程分享如 ...

  4. Linux搭建Hyperledger Fabric区块链框架 - Hyperledger Fabric模型概念

    企业选型的区块链底层技术 Hyperledger Fabric 概念 2015年,Linux基金会启动了Hyperledger项目,目标是发展跨行业的区块链技术. Hyperledger Fabric ...

  5. Hyperledger Fabric区块链浏览器搭建

    最近在用Hyperledger Fabric平台做一个项目,要使用区块链浏览器.以下是我的基础环境的情况以及搭建过程. 版本 Ubuntu 22.04.1 LTS 运行内存 8.0 GiB 处理器 I ...

  6. 区块链快速入门(四)——BFT(拜占庭容错)共识算法

    一.BFT简介 1.拜占庭将军问题简介 拜占庭将军问题(Byzantine Generals Problem)是Leslie Lamport(2013年的图灵奖得主)用来为描述分布式系统一致性问题(D ...

  7. Hyperledger Fabric区块链供应链金融实战1

    我们在这里将利用Hyperledger Fabric最新版本v2.0.0 Beta,创建一个区块链供应链金融项目,实现应收账款.承兑汇票.合同融资功能.出于学习目的,我们将Hyperledger Fa ...

  8. 区块链100讲:Hyperledger Fabric 区块链多机部署

    区块链技术可以应用在很多领域,未来最有可能先在这些领域落地. 区块链技术是利用块链式数据结构来验证与存储数据.利用分布式节点共识算法来生成和更新数据.利用密码学的方式保证数据传输和访问的安全.利用由自 ...

  9. 区块链快速入门(五)——区块链技术的演化

    一.区块链技术的发展 比特币区块链面向转账场景,支持简单的脚本计算.如果引入更多复杂的计算逻辑,将能支持更多应用场景,即智能合约(Smart Contract).智能合约可以提供除了货币交易功能外更灵 ...

最新文章

  1. python3.8怎么打开创建_Python3.8有哪些新功能 怎么入行Python开发
  2. linux上线tomcat安装目录,LINUX 下 tomcat的安装和配置
  3. 你真的会用storyboard开发吗?
  4. Bootstrap HTML编码规范之引入 CSS 和 JavaScript 文件
  5. Windows 7安装Oracle 10g的方法
  6. DataSet里的数据写入XML文件
  7. touch事件详解【译文】
  8. java读取word内容
  9. paip.discuz x2.5 用户及积分账户的接口attilax总结
  10. 计算机主板电池拆卸,主板电池没电了会怎么样 电脑主板电池怎么拆换【详解】...
  11. VUE仿知乎网站(四)登录注册页面开发+表单验证
  12. SQA软件质量保证工程师工作职责与素质要求
  13. 通信基站中AAU与RRU的功能和区别是什么?
  14. 敬业签电脑桌面便签软件怎么绑定手机号码?
  15. 基线检查工具Python代码
  16. java编写一个可切换的界面_java web 项目实现手动中英文切换
  17. 开源办公的五个法律问题 ——以“新型冠状病毒”防控期间企业在线远程运营为视角...
  18. NS3中“E: package ‘gnuplot‘ has no installation candidate”问题解决方案
  19. 高级宏观经济学公式整理
  20. 可以设置时间的计时器

热门文章

  1. 关于面试总结2-SQL学生表
  2. 任务调度Schedulerx2.0分布式计算之MapReduce模型
  3. nisi安装包 打印日志语法_NSIS 打包脚本基础
  4. 如何把程序员从久坐颈椎病中拯救出来?我为程序员做了这个救命APP
  5. SAP MM MARD 表里的Storage Bin 字段
  6. Nginx 使用./nginx -s reload报错 [error] open() “/opt/nginx/logs/nginx.pid“ failed (2: No such file or di
  7. python数据分析就业班_云开见明 2020Python数据分析师特训营全套课程84节
  8. 重塑汽车的最新5G标准
  9. 突破微软远程桌面帧率限制
  10. 刷脸支付市场未来想象空间进一步增加