一、说明

区块链是一个透明的,基于不可变模式的去中心化系统,核心就是一个分布式账本,记录网络上发生的所有交易。

区块链网络主要有三种类型:公共区块链、联盟区块链,以及私有区块链;我们熟知的比特币、以太坊这些数字货币其实就是属于公共区块链平台;

而今天要介绍的 Fabric 则是属于联盟链类型的;Fabric是一个企业级的分布式账本技术平台,也是目前应用最广泛的区块链项目。

本文将梳理区块链技术平台 Fabric 的核心概念与关键功能。

二、特点

Fabric与其他区块链平台对比有以下几个特点:

  • 开源:它是Linux基金会旗下的一个重量级区块链平台。

  • 身份管理:fabric和其他区块链系统的不同之处在于它是私有的,有准入资格授权的,并非一个公开的允许不明身份参与者进入网络的系统;它提供了一个成员身份服务,用于管理网络上的所有参与者和权限。

  • 隐私和保密:有一个通道的概念提供了交易隐私和机密性,一个Fabric的网络可以创建多个通道,任何未正式授权的网络成员都没办法看到或者访问通道上的任何数据;可以理解为就是支持多租户,通道与通道之间的数据都是隔离的。

  • 链码功能:智能合约在Fabric 中称之为链码,用于对账本的访问,例如写入交易信息,查询数据等等。

  • 模块化设计:Fabric实现了模块化架构,例如身份、排序、链码等服务和功能,都是可选的可插拔的非常灵活。

三、系统功能

Fabric的一个功能架构图:

  • 身份管理功能是通过PKI体系和CA模块来实现成员、权限还有证书的管理。
  • 分布式账本就是区块链网络的核心功能,记录着所有的交易信息。
  • 排序服务,类似一个裁判的角色,因为不同的交易顺序对最终的交易结果是有很大的影响的,所以这个排序服务主要是为了让所有的节点达成统一的共识,最终实现数据的一致性。
  • 网络通信方面,节点与节点之间的点对点通信是基于grpc协议,然后再通过gossip算法来实现去中心化的广播,意思就是不需要中心节点,通过任意一个节点以一传十,十传百的方式来把消息散播到全网。
  • 背书验证指的是背书策略,背书策略有很多种,例如我指定策略为大多数节点同意,意思就是一笔交易必需超过半数的节点都认证通过了,才能完成,这样就能有效的防御一些恶意的交易。
  • 链码服务是一个独立的应用程序,运行在隔离的Docker容器中,在链码部署的时候会自动生成链码的Docker镜像。

四、组件逻辑关系

  1. 图中的浅蓝色方块 N 代表整个区块链网络;
  2. 网络底部的 C通道 相当于是一个子链,一个区块链网络可以创建多个通道,通道与通道之间是数据隔离的,可以理解为是一个多租户系统;
  3. 一个通道上面可以部署多个 Peer 节 点为图中蓝色方块 P1P2,区块链网络主要由 Peer 节 点组成;
  4. 每个 Peer 节 点上都有一份 账本 的全量副本为红色的 L1,然后 智能合约 是部署在每个节点上的为黄色 S1,一个节点可以部署多个 智能合约
  5. 最后区块链网络外面的白色方块A指的是访问区块链的 应用,应用是通过通道来与节点上的账本进行交易的。

五、账本

账本是 Hyperledger Fabric 中的一个重要概念,它存储了有关业务对象的重要事实信息,其中既包括对象属性的当前值,也包括产生这些当前值的交易的历史。

账本由一个区块链(链)构成,并将不可变的、有序的记录存放在区块中;同时包含一个状态数据库来记录当前的Fabric状态。每个 通道 中各有 一个账本。各个节点对于它所属的每个通道,都会保存一份该通道的 账本副本

如下图所示,Hyperledger Fabric 中的账本由“世界状态“和”区块链“这两部分组成:

世界状态:世界状态是以数据库的形式实现,默认使用的是LevelDB,这是一个KeyValue数据库;里面记录的是业务对象的最新值;智能合约主要与账本中的世界状态进行交互。

区块链:以文件形式实现的,记录交易日志明细,相当于是一个交易的台账表。

例如有一个银行账户,发生一次存款和三次取款操作,则最终区块链里面会记录四条记录的日志,而世界状态则只记录一条记录,就是当前账户最新的余额。

六、智能合约

智能合约 是一个运行在账本上的应用程序,它可以对资产进行编码,其中的交易指令(或者叫业务逻辑)也可以用来修改资产。

Fabric2.0 以后引入了新的生命周期来管理合约:

  1. 首先第一步开发合约:需要依赖原生的合约 sdk,支持包括 Java、js 和 Golang 三种开发语言。
  2. 开完合约后,管理员可以使用 package 子命令来打包合约,并生成打包文件。打包命令默认程序是 golang 语言,可以使用 -l 参数来指定其他语言。
  3. 一次打包可以多次安装,然后接着使用 install 命令在指定的 peer 节点上安装合约。
  4. 安装成功后,接着使用 approveformyorg 命令代表所在机构审批合约,并且指定背书策略。
  5. 最后使用 commit 命令向指定的通道提交合约定义,执行完这一步智能合约就部署成功,正式生效了。
  6. 接下来我们就可以编写应用程序来与区块链网络进行交易了,Fabric 封装了一套网关 SDK 给应用程序使用,通过一系列的简单 API 就实现和区块链网络进行交互。

关于 Java 智能合约的开发可以看我之前的文章《Hyperledger Fabric 2.x 自定义智能合约

七、交易流程

  1. 首先区块链应用发起一笔交易;
  2. 然后 背书节点 对交易进行签名验证,返回验证结果;
  3. 客户端将背书结果封装发给 Peer 节点,然后再提交给 Order 节点进行数据同步;
  4. Order 节点按顺序把交易信息同步给其他的 Peer 节点进行验证和提交;
  5. 最后账本更新,完成整个交易。

扫码关注有惊喜!

Hyperledger Fabric 核心概念的更多相关文章

  1. 联盟链 Hyperledger Fabric 应用场景

    一.说明 本文主要通过一个例子分享以 Hyperledger Fabric 为代表的联盟链应用场景. 关于 Fabric 的相关概念请先参考文章 <Hyperledger Fabric 核心概念 ...

  2. Hyperledger Fabric架构详解

    区块链开源实现HYPERLEDGER FABRIC架构详解 区块链开源实现HYPERLEDGER FABRIC架构详解 2018年5月26日 陶辉 Comments 10 Comments hyper ...

  3. 区块链开源实现hyperledger fabric架构详解

    hyperledger fabric是区块链中联盟链的优秀实现,主要代码由IBM.Intel.各大银行等贡献,目前v1.1版的kafka共识方式可达到1000/s次的吞吐量.本文中我们依次讨论:区块链 ...

  4. Hyperledger Fabric on SAP Cloud Platform

    今天的文章来自Wen Aviva, 坐Jerry面对面的程序媛. Jerry在之前的公众号文章<在SAP UI中使用纯JavaScript显示产品主数据的3D模型视图>已经介绍过Aviva ...

  5. HyperLedger Fabric部署与链码解读

    1.Fabric简介 Fabric是超级账本中的一个项目,用以推进区块链技术.和其他区块链类似,它也有一个账本,使用智能合约,且是一个参与者可以分别管理自身交易的系统.它是一个联盟链.Fabric与其 ...

  6. 菜鸟系列Fabric——Fabric 基本概念(1)

    Fabric 基本概念 1.区块链介绍 区块链之所以引来关注是因为比特币开源项目,尤其是比特币价值的飙升,让大家开始关注数字货币以及相关技术.那么区块链究竟是什么? 1.1 区块链定义 狭义上,区块链 ...

  7. 基于Debian搭建Hyperledger Fabric 2.4开发环境及运行简单案例

    相关实验源码已上传:https://github.com/wefantasy/FabricLearn 前言 在基于truffle框架实现以太坊公开拍卖智能合约中我们已经实现了以太坊智能合约的编写及部署 ...

  8. Hyperledger Fabric 智能合约开发及 fabric-sdk-go/fabric-gateway 使用示例

    前言 在上个实验 Hyperledger Fabric 多组织多排序节点部署在多个主机上 中,我们已经实现了多组织多排序节点部署在多个主机上,但到目前为止,我们所有的实验都只是研究了联盟链的网络配置方 ...

  9. HyperLedger Fabric Introduction——区块链超级账本介绍

    介绍 HyperLedger Fabric是一个基于模块化架构的分布式账本解决方案平台,它拥有深度加密.便捷扩展.部署灵活及可插拔等特性.它设计之初的目的是支持不同组件的可插拔实现,并适应整个经济生态 ...

随机推荐

  1. 机器学习 machine learn

    机器学习 机器学习 概述 什么是机器学习 机器学习是一门能够让编程计算机从数据中学习的计算机科学.一个计算机程序在完成任务T之后,获得经验E,其表现效果为P,如果任务T的性能表现,也就是用以衡量的P, ...

  2. Canvas 核心技术

    最近项目需求中要写较多H5小游戏,游戏本身体量不是很复杂,主要是承载较多业务逻辑,所以决定用canvas来完成游戏部分.之前只是知道H5中有canvas这个东西,也知道它大概是画图的,但具体怎么用,还 ...

  3. centos报错:Could not retrieve mirrorlist http://mirrorlist.centos.org/

    检查是否可以上网. ping 114.114.114.114 如果不可以,调试通.通了之后下一步: 然后检查DNS设置是否正常. ping www.baidu.com 不正常的话,设置DNS,如下: ...

  4. HTML表格CSS美化

    效果展示 style.css html{ width: 100%; height: 100%; overflow: hidden;}body{ width: 100%; height: 100%; f ...

  5. Android去掉标题头

    在AndroidManifest.xml文件中定义 <application android:theme="@android:style/Theme.NoTitleBar"& ...

  6. spring-注入list集合对象(值是对象)

    1.创建stu类 public class Stu { // //1.数组类型 // private String[] courses; // // //2.list集合属性 // private L ...

  7. Windows下安装mysql(非安装包)

    Windows下安装mysql(非安装包) 参考:https://www.cnblogs.com/yunlongaimeng/p/12558638.html 1.下载MYSQL(慢的话可以用迅雷,或其 ...

  8. flink调优之RocksDB设置

    一.开启监控 RocksDB是基于LSM Tree实现的,写数据都是先缓存到内存中,所以RocksDB的写请求效率比较高.RocksDB使用内存结合磁盘的方式来存储数据,每次获取数据时,先从内存中bl ...

  9. iOS全埋点解决方案-UITableView和UICollectionView点击事件

    前言 在 $AppClick 事件采集中,还有两个比较特殊的控件: UITableView •UICollectionView 这两个控件的点击事件,一般指的是点击 UITableViewCell 和 ...

  10. Python连接数据库,列表输出数据库中的某一列

    1 import pymysql 2 import pandas as pd 3 import numpy as np 4 #连接数据库,地址,端口,用户名,密码,数据库名称,数据格式 5 conn ...