Michael.W谈hyperledger Fabric第2期-关于Fabric你所需要知道的基本知识一

关于Fabric最完整的资料莫过于其官网上的文档介绍,英文阅读能力好的朋友可以去那里看一下,讲的很全面:
https://hyperledger-fabric.readthedocs.io/en/release-1.4/whatis.html

1 hyperledger介绍

比特币是第一个广为人知的区块链应用。后面一路走红的基于以太坊和比特币均属于一类区块链,我将他们归类为公共许可区块链技术。也就是说该区块链网络是属于公共网络,任何人均可以加入公网进行交易和匿名互动。
后来为了满足区块链在企业级项目上的应用,Linux基金会与2015年创立了hyperledger项目。之前区块链技术几乎都是应用在数字加密货币上,hyperledger项目的创立也是为了实现区块链技术跨行业的转变。hyperledger拥有一个开发社区,现在已经发展到有超过35个组织和近200个开发人员在维护这个项目。
与前面的比特币和以太坊相比,hyperledger是基于私有网络,任何参与者必须获得网络的许可才可以进入。同时交易确认的延迟非常低,也大大保护了与商业有关的交易和数据的隐私性机密性

2 Fabric介绍

hyperleder Fabric是hyperledger中的一个区块链项目。功能上与其他区块链技术一样,拥有账本和智能合约。Fabric可以理解为是一个管理私有网络中所有交易的系统

概括地讲,Fabric具有以下特点:

  1. 具有高度模块化和可配置的架构,良好地适应跨行业的需求;
  2. Fabric是第一个支持在通用编程语言(如Java,Go和Node.js)中创建的智能合约的分布式账本平台(以太坊的只能合约只能用solidity来编写);
  3. 不需要本地加密货币的共识协议来激活昂贵的采矿或推动智能合约执行。

3 Fabric的逻辑架构

我画了一张图,简单地概述了以下Fabric的逻辑架构。
Fabric的架够核心包括三个部分:

  1. 身份管理
  2. 账本管理与交易
  3. 智能合约

如果里面有一些词目不理解也没有关系,我后面会有讲解。
在这里插入图片描述

3.1 身份管理

为了做到网络的私有化,hyperledger Fabric提供了成员身份管理服务。该服务用于管理所有私有网络中的用户ID并对所有想访问该网络和做操作的用户进行身份验证。例如,没有注册的用户是无法进入网络以及允许特定ID的用户调用链码应用程序但不允许其部署新的链码等。
Fabric是目前为止在设计上最贴近联盟链思想的区块链。
在Fabric中,用户身份大体上可以分为如下几类:

  1. orderer节点:就是排序节点,功能类似于比特币中的矿工。
  2. peer节点:该节点中拥有账本,用来存储数据
  3. 客户端程序:客户端程序可以访问orderer节点和peer节点。同时客户端程序访问的权限有两种:管理员权限普通用户权限

3.2 账本管理与交易

Fabric使用建立在HTTP/2上的P2P协议来管理分布式账本。采取可插拔的方式来根据具体需求来设置共识协议,比如PBFT,Raft,PoW和PoS等。
Fabric的账本分为区块链世界状态两个部分。

3.2.1 账本管理

区块链用来记录历史交易,每个区块内存有前区块和本区块的哈希值,具有无法篡改的特性。世界状态指当前账本的最新状态,即最近的一个区块的信息。它是一个key-value型数据库。Fabric默认采用levelDB,也可以替换成其他的key-value数据库,如couchDB(在《Michael.W谈hyperledger Fabric第1期-环境搭建》中做环境搭建时,从网络仓库中拉取下来的镜像中就有couchDB的镜像)。

扫描二维码关注公众号,回复: 5463932 查看本文章

3.2.2 交易

Fabric上的交易分为两种:部署交易调用交易
部署交易:将链码部署到peer节点上。当一个部署交易被成功执行时,链码就被部署到各个peer节点上。
调用交易:客户端程序通过Fabric提供的API调用已部署好的某个链码的某个函数来执行交易,并相应地读取和写入key-value数据库。最后返回执行成功或失败。

3.3 智能合约

Fabric的只能合约就是前面我屡次提起的链码(chaincode)。它是一段代码,用来处理网络内成员所同意的业务逻辑。
和Ethereum(以太坊)相比,Fabric的链码和底层账本是分离的。升级链码后并不需要将之前的账本数据转移到新的链码中,真正做到了逻辑与数据分离!这个是Ethereum不具备的。
链码可采用通用编程语言Node.js、Golang和Java来编写(最新版本似乎已经不支持Java)。

在这里插入图片描述
Fabric利用Docker容器来运行链码编译出的应用程序。一旦链码容器被启动,它就会通过gPRC与启动这个链码的peer节点连接。
智能合约不仅是封装信息并使整个网络保持简单的关键机制,还可以通过编写它们以允许参与者某些方面的交易自动执行。

4 Fabric开发

个人看所谓的Fabric开发,其实就是指服务器端应用程序的开发客户端应用程序的开发
服务器端:Fabric提供API对服务端的链码进行开发。
客户端:Fabric目前提供Node.js、Golang SDK,未来计划支持Python。
对于开发者,还可以通过客户端快速测试链码或者去查询交易状态。在区块链网络里,节点和链码会发送events来出发一些监听动作,方便与其他外部系统的集成。

5 基础概念

5.1 节点

节点可以分为三类:orderer节点peer节点客户端

5.1.1 客户端

客户端:客户端的功能就是连接peer节点连接orderer节点。客户端是由用户来操作的。同时注意,客户端是没有账本的!

5.1.2 peer节点

peer节点:peer节点都拥有账本,账本包含两个东西:交易记录(区块链)和世界状态(最近的区块信息,key-value键值对)。在整个分布式区块链网络中,分布着很多的peer节点。当其中一个peer节点的数据被修改,这种修改会被自动同步到其他的peer节点。

peer节点在职责上还可以划分成:背书节点提交节点锚节点主节点。关于这些节点的细节我这里就不多介绍,在后面我在工程中遇到会给大家解释。

5.1.3 orderer节点

orderer节点上没有账本,相当于矿工这个角色。但是Fabric并不像比特币和以太坊需要矿工去挖矿,orderer节点的实际工作是对数据进行排序并打包。打包后,数据就变成了区块。之后,orderer节点将数据区块发送给peer节点,再有peer节点写入到其账本中。

那么至于多少时间打一次包?多少条数据打一次包?或者多大数据量打一个包呢?
这些都是可以在环境变量里设置的,非常智能。

但是为什么要排序呢?其实是为了解决“双花”问题。假如我在同一时间我用手里的100元钱发起了两笔交易,一笔买了甲的肾宝,一笔买了乙的枸杞。当这两条交易信息到达Fabric网络时,为了让系统鉴定出这100元我花了两次,就令orderer节点对齐排序。即使是做到了同时发起,但是一旦经过排序就会出现前后顺序。这样系统就能识别出来真是两笔交易,而杜绝了“双花”的情况产生。

orderer节点的排序算法有两种:solokafka
solo是测试用的,利用一个队列进行排序,效率很低。kafka是分布式的排序服务器,效率非常高,属于企业级。

orderer节点虽然负责排序,但是它并不是排序的最终执行者。它只是负责调用排序服务器

5.2 peer节点、账本和智能合约之间的关系

在这里插入图片描述
图中P为peer节点,S为智能合约,L为账本。
由图可知,账本和智能合约都安装在peer节点上。账本是peer节点默认就有的(天生自带),但是智能合约需要程序员去编写然后安装到peer节点上。
当有交易信息产生时,客户端调用链码(智能合约)链码修改账本
在这里插入图片描述
由图可知,一个peer节点上面可以同时存在多个不同的账本。一个账本可以对应一个智能合约也可以对应多个智能合约。每个合约可以理解为做一件事(一种业务逻辑),一个账本对应多个智能合约表示:分别做了不同的几件事,然后将结果写入一个账本中。
一个节点上的不同账本之间是不可见的,相互隔离!

5.3 通道(channel)

通道是用来隔离数据。用户在不同的通道中, 使用的数据是不同的。同时数据不共享, 可以将不同的通道理解为不同的微信群!不在同一个群中的人是看不到群内的聊天记录的。
在这里插入图片描述
由上图可知:

  1. 因为peer节点P1和P2属于同一个通道C,所以他们在该通道内的账本数据相同(都是L1)。
  2. 虽然图中P1和P2上安装的智能合约都是S1,但是实际开发中是允许同一个通道中的节点安装不同的智能合约
  3. 客户端A想连接节点P1或P2,就必须连入通道C。即,节点必须在同一通道中才能互相之间进行通信
  4. 只要多个peer节点处于同一通道,那么他们的账本数据就是保持一致的,与peer节点上安装的智能合约是否相同无关。
  5. 假如说这个通道里还有其他peer节点,P1和P2想进行秘密的通信不想让通道内的其他节点看到,那么P1和P2可以自己再创建一个通道,然后在那里面进行通信。

ps:
本人热爱图灵,热爱中本聪,热爱V神,热爱一切被梨花照过的姑娘。
以下是我个人的公众号,如果有技术问题可以关注我的公众号来跟我交流。
同时我也会在这个公众号上每周更新我的原创文章,喜欢的小伙伴或者老伙计可以支持一下!
如果需要转发,麻烦注明作者。十分感谢!
后现代泼痞浪漫主义奠基人
公众号名称:后现代泼痞浪漫主义奠基人

猜你喜欢

转载自blog.csdn.net/michael_wgy_/article/details/88304697
今日推荐