专栏首页林滨的专栏在ubuntu下 搭建区块链 (Hyperledger Fabric) 可在腾讯云实验室测试
原创

在ubuntu下 搭建区块链 (Hyperledger Fabric) 可在腾讯云实验室测试

作为目前Hash chain 的CTO,接到很多开源社区的朋友请教,大家对于区块链抱有很大程度上的热诚。但是由于区块链开发技术门槛较高,广谱技术开发普及度不高。所以准备出个教程,本来昨天已经在腾讯云实验室测试部署完成,但是由于没被审核通过,审核同学可能规矩比较严吧,再加上平时工作太忙了,没办法细致整合,我就把在实验室的原内容照搬在底下,只能让大家跟着文章,看一看,一起了解。

有不懂的地方可以加群问答:qq:538327407

同时也感谢:Hashchain 研发中腾讯区块链团队的童鞋们鼎力帮助和支持!

点我查看HashChain

1、 环境准备

### 如果在 腾讯云实验室环境,不需要执行这一步

在安装完Ubuntu后,需要保证apt source是国内的,不然如果是国外的话会很慢很慢的。具体做法是

1.1 请编辑原列表

执行命令:sudo vi /etc/apt/sources.list

打开这个apt源列表,如果其中看到是http://us.xxxxxx之类的,那么就是外国的,如果看到是http://cn.xxxxx之类的,那么就不用换的。我的是美国的源,所以需要做一下批量的替换。在命令模式下,输入:

  执行命令:   :%s/us./cn./g

就可以把所有的us.改为cn.了。然后输入:wq即可保存退出。

1.2 权限问题

如果后面遇到权限问题,切换到root 账户

执行命令:sudo passwd

修改设置自己的密码,两次,建议选择123456

切换到root账号

执行命令:su root

更新源

执行命令:sudo apt-get update

2、配置GO环境

2.1 下载GO 并安装

执行命令(下载):wget https://studygolang.com/dl/golang/go1.9.linux-amd64.tar.gz
执行命令(解压):sudo tar -C /usr/local -xzf go1.9.linux-amd64.tar.gz

【注意:不要使用apt方式安装go,apt的go版本太低了!】

2.2 配置go

  • 2.1.1 编辑配置
执行命令: 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后(esc 键退出命令模式, wq即可保存退出。记得把这些环境载入:
执行命令:source ~/.profile

2.3 在根目录下创建 go文件夹

我们把go的目录GOPATH设置为当前用户的文件夹下,所以记得创建go文件夹

执行命令(跳转到根目录):cd ~
执行命令(创建名称为go的文件夹):mkdir go

3、遇到锁的问题

3.1 遇到锁问题这样解决

命令模式出现如下提示:

Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable) E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?

解决方法:删除锁定的文件

执行命令:sudo rm  /var/lib/dpkg/lock

4、安装docker

#### step 1: 安装必要的一些系统工具

执行命令: sudo apt-get update

#### step 2: 安装GPG证书

执行命令:curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

#### Step 3: 写入软件源信息

执行命令:sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

#### Step 4: 更新并安装 Docker-CE

执行命令:sudo apt-get -y update
执行命令:sudo apt-get -y install docker-ce

#### step 5:查看是否安装完成,显示当前的docker版本

执行命令:sudo docker version

### 安装完成后需要修改当前用户(我使用的用户叫ubuntu)权限:

执行命令:sudo usermod -aG docker ubuntu

### 注销并重新登录,然后添加阿里云的Docker Hub镜像

执行命令:sudo mkdir -p /etc/docker
执行命令:sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://obou6wyb.mirror.aliyuncs.com"]
}
EOF
执行命令:sudo systemctl daemon-reload
执行命令:sudo systemctl restart docker

5、 Docker-Compose的安装

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

执行命令:sudo apt-get install python-pip

5.2 然后是安装docker-compose

我们从官方网站(https://github.com/docker/compose/releases)下载也可以从国内的进行DaoClound下载,为了速度快接下来从DaoClound安装Docker-compose,运行脚本:

执行命令:curl -L https://get.daocloud.io/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` > ~/docker-compose
执行命令:sudo mv ~/docker-compose /usr/local/bin/docker-compose 
chmod +x /usr/local/bin/docker-compose

6、Fabric源码下载

6.1 github上clone 下载源代码

我们可以使用Git命令下载源码,首先需要建立对应的目录,然后进入该目录,Git下载源码:

执行命令:mkdir -p ~/go/src/github.com/hyperledger 
执行命令:cd ~/go/src/github.com/hyperledger 
执行命令:git clone https://github.com/hyperledger/fabric.git

6.2 Fabric 切换到指定版本v1.0.0

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

执行命令:cd ~/go/src/github.com/hyperledger/fabric
执行命令:git checkout v1.0.0

6.3 Fabric Docker镜像的下载

这个其实很简单,因为我们已经设置了Docker Hub镜像地址,所以下载也会很快。官方文件也提供了批量下载的脚本。我们直接运行:

执行命令: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 Docker镜像了。由于我们设置了国内的镜像,所以下载应该是比较快的。

### 下载完毕后,我们运行以下命令检查下载的镜像列表:

执行命令:docker images

7 、编译cryptogen

7.1 证书工具的使用

编译生成 cryptogen之前我们需要安装一个软件包,否则编译时会报错

执行命令:sudo apt install libtool libltdl3-dev

Fabric提供了专门编译cryptogen的入口,我们只需要运行以下命令即可:

执行命令:cd ~/go/src/github.com/hyperledger/fabric

执行命令:make cryptogen

运行后系统返回如下结果即代表编译成功了

build/bin/cryptogen 
CGO_CFLAGS=" " GOBIN=/home/studyzy/go/src/github.com/hyperledger/fabric/build/bin go install -tags "" -ldflags "-X github.com/hyperledger/fabric/common/tools/cryptogen/metadata.Version=1.0.0" github.com/hyperledger/fabric/common/tools/cryptogen 
Binary available as build/bin/cryptogen

ps:我们在build/bin文件夹下就可以看到编译出来的cryptogen程序。

8 、启动Fabric网络并完成ChainCode的测试

我们仍然停留在e2e_cli文件夹,这里提供了启动、关闭Fabric网络的自动化脚本。我们要启动Fabric网络,并自动运行Example02 ChainCode的测试,执行一个命令:

8.1 切换到root 用户

执行命令: ./network_setup.sh up

8.2 运行fabric 的example

我们仍然是以现在安装好的Example02为例,在官方例子中,channel名字是mychannel,链码的名字是mycc。我们首先进入CLI,我们重新打开一个命令行窗口,输入:

执行命令:docker exec -it cli bash

8.2.1 运行以下命令可以查询a账户的余额:

执行命令(docker环境):peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

可以看到余额是90:

8.2.2 然后,我们试一试把a账户的余额再转20元给b账户,运行命令:

执行命令(docker环境):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"]}'

8.2.3 再次查看账户

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

可以看到余额是:70

ps:如果要退出 docker 请使用命令:exit


后续总结

第一步 开启网络(前提是环境已经部署完成,网络状态是关闭的)

跳转指定文件夹,执行命令:cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli
启动网络,执行命令:./network_setup.sh up

这个时候,关掉终端,重新开一个终端,网络是存在的,正常的

第二步 进行业务操作

开启docker网络,执行命令:docker exec -it cli bash

运行以下命令可以查询a账户的余额:

查询账户余额,执行命令:peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

转账,执行命令:

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"]}'

第三步退出

在docker中,可以退出,执行命令:exit
关闭区块链网络,执行命令:./network_setup.sh down

注意:网络关闭,后面重新开启,数据恢复初始

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ABP 框架 数据库底层迁移 Mysql 集群

    我的各种github 开源项目和代码:https://github.com/linbin524

    林滨
  • Mysql 常用函数(42)- substring_index 函数

    假设有三个 IP:127.0.0.1、192.128.0.15、255.255.255.255,要分别取每一个号段的值并返回

    小菠萝测试笔记
  • 技术管理者为啥这么忙

    用户1682855
  • 数据仓库专题19-数据建模语言Information Engineering - IE模型(转载)

    Information Engineering采用Crow's Foot表示法(也有叫做James Martin表示法的),中...

    数据饕餮
  • PE知识复习之PE新增节

        例如前几讲.我们的PE文件在空白区可以添加代码.但是这样是由一个弊端的.因为你的空白区节属性可能是只读的不能执行.如果你修改了属性.那么程序就可能出现问...

    IBinary
  • 云计算开源大势所趋,2019云计算开源产业大会将于7月开幕

    云计算已经由概念导入期进入了应用繁荣、迅速普及的新阶段。在云计算的发展过程中,开源软件已经成为云计算技术进步、产业发展中的重要推动力量。

    CloudBest
  • 干货 | 携程 CAT 性能优化的实践和思考

    锦华,携程高级技术专家,超过 10 年互联网研发经验,2011 年至今一直从事框架和中间件相关产品研发,对高并发、分布式中间件以及应用性能优化等有浓厚兴趣。

    携程技术
  • Magic Leap新动向:致力于AI计算房间空间

    VRPinea
  • 反射的应用与理解

    反射就是把Java类中的各种成分映射成相应的java类 <代理模式会用到反射,SSH框架会用到框架> 反射使用用中用到的是:字节码(获取类的字节码的三种方式) ...

    片刻
  • Web 性能优化: 使用 Webpack 分离数据的正确方法

    制定向用户提供文件的最佳方式可能是一项棘手的工作。 有很多不同的场景,不同的技术,不同的术语。

    Fundebug

扫码关注云+社区

领取腾讯云代金券