超级账本(Hyperledger Fabric)源码分析之一:总览

超级账本(Hyperledger Fabric)源码分析之一:总览

一、编译

1、环境准备

需要提前在linux或者mac机器上安装如下软件

1)Go,注意设置好gopath(笔者安装的是go1.8.3,对应的源码是v1.0.0这个tag,版本不对可能会出现编译不过或者运行出现问题)

2)Docker

3)一些依赖包(笔者当时没有装特殊的依赖包,所以这里不写了)

2、源码下载

首先先创建源码目录(注意这里必须是gopath下的这个目录,否则编译不过)

$ mkdir -p $GOPATH/src/github.com/hyperledger $ cd $GOPATH/src/github.com/hyperledger

然后在该目录下复制仓库 $ git clone http://gerrit.hyperledger.org/r/fabric

笔者用的是v1.0.0的tag所以还需要

$ git checkout v1.0.0

3、编译

在源码目录中make

不过这样要求比较高,耗时比较长,会从网上下载一些docker镜像等等,读者如果嫌费时间或者由于网络原因搞不定,可以一个一个make

比如make native是编译一些bin比如order,peer等

而make order和make peer是编译两个关键程序

由于编译不是本文的重点所以简单提一下,如果有疑问欢迎给笔者留言交流

二、运行

自己配置联盟比较麻烦,比较建议是下载一个开源项目使用docker运行,以下是简单的方式

1、环境要求:

安装docker-compose

2、下载开源项目

$ git clone https://github.com/yeasy/docker-compose-files $ cd docker-compose-files/hyperledger_fabric/v1.0.0

3、下载镜像

$ sudo bash scripts/ download_images.sh

4、启动

$ make start

后面的具体方式可以看Makefile,有运行、停止、初始化、测试链码等命令

三、架构

联盟链的概念比较多,从比特币转过来的同学可能刚开始会晕(因为我当时研究的时候看各种文章就很晕),所以我这里尽量把我的理解路径写出来

1、主程序

联盟链真正运行时只有两个主程序

1)peer,这个程序是参与实体的运行终端,也是命令行的终端(客户端),可以理解为比特币中的主程序。

2)order,一个排序服务,类比到比特币,暂时简单理解为主程序中的挖矿部分,因为联盟链把这部分功能单独隔离了出来。随着代码的深入了解,可以发掘其其他功能。

2、讲解模型

其中order服务是一个单独的服务,可以理解为一个专门各个组织公认的权威服务器(也可以是服务集群),主要用来对交易进行排序,然后生成区块(挖矿)

Org代表组织,讲解的模型中有两个组织,org1和org2,可以对应的是清华大学和北京大学

而peer一般代表的是组织内的子部门,比如org1.peer1代表清华大学的计算机学院,org2.peer2代表北京大学的计算机学院。

3、启动命令行

对应上图中的讲解模型每一个节点中的运行的命令行如下

1)order服务:order start

2)org1.peer1 : peer node start

3)org2.peer1 : peer node start

4)org1.peer2:peer node start

5)org2.peer2:peer node start

这里除了order运行是order start以外其他的全部是peer node start,那怎么区分他们的功能呢?

答案是通过msp和tls两个目录(这个后续再继续讲)

在各个节点运行过后,网络是这样的

也就是网络其实还没有互联起来

4、网络互联

要完成网络需要三步

1)创建通道

创建通道,可以单独在一个机器上运行

peer channel create \ -o orderer.example.com:7050 \ -c testchannel\ -f ./ testchannel.tx ps:为了简单,这里省略了一些证书信息的配置(后文会讲解)

其中当前需要理解的参数是-o orderer.example.com:7050 代表了order的url,-c testchannel代表了通道的名字

这个命令其实就是通过连接到orderer.example.com:7050服务上,让服务器增加了一个通道的配置(配置文件是testchannel.tx),这个配置中包括了一些信息,比如证书信息,机构信息,以及一些权限设置等等。然后order会返回一个testchannel.block的文件(也是一些配置信息),加入通道时候会用到。

这一步并没有构建网络,网络模型依然如下

只是order服务中多了一个叫testchannel的通道

2)加入通道

命令为

CORE_PEER_ADDRESS=peer1.org1.example.com:7051 \ peer channel join \ -b testchannel.block ps:这里省略了msp配置的信息

主要参数列出来

1、CORE_PEER_ADDRESS表明要加入通道的地址(因为实际操作时候是用的cli在另外的机器上操作要加入通道的peer)

2、testchannel.block 创建通道时候的返回文件

该命令执行完以后,网络模型变成了

可以看到org1的peer1和order连接陈功了,依次执行

CORE_PEER_ADDRESS=peer2.org1.example.com:7051 \ peer channel join \ -b testchannel.block

CORE_PEER_ADDRESS=peer1.org2.example.com:7051 \ peer channel join \ -b testchannel.block

CORE_PEER_ADDRESS=peer2.org2.example.com:7051 \ peer channel join \ -b testchannel.block

最后网络模型变成了

3)设置锚节点

各个节点都加入网络后,细心的读者可能会发现,和我们要达到的网络模型还少了几条线,也就是各个节点的互通线没有连接。而这个的完成需要gossip协议,而gossip协议是一个节点相互发现的协议,其中有一项就是需要一些锚点,fabric中一般每一个组织一到多个锚点。这个概念在讲解gossip协议的时候会进一步说明,在这里就只需要知道锚点的设置是为了网络互通就可以了,实在要理解,暂时理解为p2p协议中的初始域名服务器。命令如下:

peer channel update \ -o orderer.example.com:7050 \ -c testchannel \ -f ./Org1MSPanchors.tx \ 其中-c代表了通道名称,-f表示了锚点信息(里边会包含锚点的url比如peer1)-o指定了order节点。

在org1和org2中中分别生成锚点配置文件,然后执行以上命令就能把锚点信息更新到通道的配置中,这样各个节点就可以通过从order中更新配置,知道锚点,然后通过gossip协议进行全网互联,互联后网络模型如下

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

Firefox/Chrome渗透测试插件推荐

注意:360安全浏览器有些比较不错的功能值得体验下(firefox/chrome有些功能我没能正常使用)不喜勿喷。firefox一直是各位渗透测试必备的利器,这...

4767
来自专栏Keegan小钢

App项目实战之路(二):API篇

概述篇发布出去后,收到很多人的大力支持,也收到了几点关于功能需求的建议,主要在于几点:

522
来自专栏后端技术探索

接上篇-nginx-http-flv-module更新说明(二)

最近这段时间主要在不同平台测试模块的稳定性,目前播放这一块没发现问题,由于条件限制,除了FreeBSD平台没测试过,Windows 7,Debian 7.x和m...

912
来自专栏我的安全视界观

【一起玩蛇】python武器库的打开方式

19611
来自专栏冰霜之地

手把手教你利用Jenkins持续集成iOS项目

众所周知,现在App的竞争已经到了用户体验为王,质量为上的白热化阶段。用户们都是很挑剔的。如果一个公司的推广团队好不容易砸了重金推广了一个APP,好不容易有了一...

833
来自专栏友弟技术工作室

Python 资源大全中文版

GitHub 上有一个 Awesome - XXX 系列的资源整理,资源非常丰富,涉及面非常广。awesome-python 是 vinta 发起维护的 Pyt...

3485
来自专栏一枝花算不算浪漫

【python】Python 资源大全中文版

1332
来自专栏MasiMaro 的技术博文

hexo next主题为博客添加分享功能

title: hexo next主题为博客添加分享功能 date: 2018-01-06 20:20:02 tags: [hexo博客, 博客配置] ca...

2652
来自专栏极客猴

Django 学习笔记之环境搭建

古人云:功遇善其事,必先利其器。在正式学习 Django Web 框架之前,我们要把准备工作做好。准备工作主要是搭建开发环境,具体工作是安装 Python、创建...

632
来自专栏友弟技术工作室

beego入门

简介: beego 是一个快速开发 Go 应用的 HTTP 框架,他可以用来快速开发 API、Web 及后端服务等各种应用,是一个 RESTful 的框架,主要...

3207

扫码关注云+社区