超级账本(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协议进行全网互联,互联后网络模型如下
超级账本(Hyperledger Fabric)源码分析之一:总览相关推荐
- 超级账本Hyperledger Fabric的使用
原文地址:超级账本Hyperledger Fabric的使用 说明 网易云课堂:HyperLedger Fabric手动部署教程的视频讲解 超级账本HyperLedger Fabric手动部署教程的文 ...
- Fabric源码分析-共识模块
正好这些天要有一个需求要帮客户魔改Fabric-v0.6,把一些hyperchain的高级特性移植过去,借此机会把之前看过的源码在梳理一下. 下面就是对Fabric共识模块的源码分析和梳理,代码都是以 ...
- 史上超级详细:HashMap源码分析,你了解到源码的魅力了嘛
##HashMap1.8和1.8之前的源码差别很大 目录 简介 数据结构 类结构 属性 构造方法 增加 1.HashMap简介 HashMap基于哈希表的Map接口实现,是以key-value存储形式 ...
- 超级账本hyperledger fabric第五集:共识排序及源码阅读
一.共识机制 达成共识需要3个阶段,交易背书,交易排序,交易验证 交易背书:模拟的 交易排序:确定交易顺序,最终将排序好的交易打包区块分发 交易验证:区块存储前要进行一下交易验证 二.orderer节 ...
- 区块链相关论文研读3- 关于超级账本Hyperledger Fabric的性能优化
这是2019年6月发表在顶会Sigmod上面的论文,论文题目为<Blurring the Lines between Blockchains and Database Systems: the ...
- 区块链超级账本Hyperledger Fabric架构说明
翻译自:http://hyperledger-fabric.readthedocs.io/en/latest/arch-deep-dive.html 边学习边翻译,很多地方还不明白,请对照原文学习,转 ...
- Fabric源码分析之九数据库存储源码分析leveldb
一.fabric数据存储 在fabric中,数据的存储被抽象成一个帐本对象,本身数据底层的数据库和文件是被隔离的,这样做的优势在于,上层数据的变化,对底层数据库的影响极小,甚至于一般情况下都不会有什么 ...
- 超级账本HyperLedger的cello项目的部署和使用
原文地址:超级账本HyperLedger的cello项目的部署和使用 说明 应用场景 源码 master安装 workder安装(docker) 参考 说明 cello是一个用来部署.管理fabric ...
- UGUI源码分析:开关组件Toggle与ToggleGroup
系列 UGUI源码分析系列总览 相关前置: UGUI EventSystem源码分析 UGUI源码分析:Selectable交互组件的基类 文章目录 系列 Toggle Toggle组件属性介绍 初始 ...
最新文章
- python保存代码_python操作文件读写新增保存代码
- 常指针、指向常量的指针、指向常量的常指针
- tensorflow源码编译教程_源码编译安装tensorflow 1.8
- 滑动窗口在重构数据集的作用
- 信息学奥赛一本通(1186:出现次数超过一半的数)
- Android -- startActivityForResult和setResult
- php安全篇值过滤用户输入的人参数
- Spring Boot 的 GraphQL 框架DGS
- 存不存行李寄存平台_行李寄存柜和行李寄存平台的区别
- Docker 镜像加速器
- C语言 宾馆客房管理系统
- 为什么越来越多的人选择了企业微信
- 平面解析几何----圆锥曲线焦点弦上焦半径的倒数和为ep分之2的初等几何证明
- C64X EDMA优先级及优先级队列
- ARM 之 STM32F407zgt6 外设篇 ----------- FLASH 存储部分数据
- Python 制作按键触发Windows通知的脚本
- Godot中的GIProbe和Baked lightmaps
- Cocos2dx3.10常侍之移驾UBUNTU
- 新书隆重推介:网络协议本质论(2011年8月面世,沤心沥血之作)
- ZBlog源码资源站整站打包-带天兴娱乐资源主题+墨初用户中心插件