Hyperledger Fabric原理详解与实战3

1,884 阅读9分钟

本文主要内容如下,爱看不看~

Fabric运作原理概述

说个小八卦。

我第一次在区块链相关的文章中看到Fabric这个词的时候,以为它是一个Python lib库。

我平时工作中Python用的比较多,而Fabric正好是一个以前我用到过的知名的运维相关的工具库。

在学习区块链的时候,突然看到Fabric,以为是用来做一些区块链维护工作的。后来才知道,原来区块链中的Fabric不是全称,前面还有一个Hyperledger。

下面,正式开始我们今天的学习之旅。

在正式动手执行计划前,有必要熟悉Fabric的运行原理。看看Fabric有何德何能来满足我们的需求。

原理概述

学习区块链技术,我认为最好的入门材料就是比特币。因为它涵盖了所有区块链所用到的核心技术,而业务逻辑又足够简单。

比特币的业务就两个---转账和挖矿。我带你回顾下这个过程先。

比特币交易过程概述

如下图,灰色圆圈代表比特币网络。

比特币交易过程
比特币交易过程

假设男人(A)向女人(B)转了一笔钱,余额足够的情况下,这笔交易会经历如下这几个步骤:

  1. A发起转账交易,并向全网广播这笔交易(图中黑色细箭头)。

  2. 所有矿工节点收到交易,并将其加入到它的待执行交易池中。

  3. 矿工节点从它的待执行交易池中取出交易,然后按解锁脚本执行该交易,如果执行成功,则将其打包进区块中。

  4. 矿工节点完成打包后,开始计算符合要求的区块hash(挖矿)。

  5. 第一个计算出符合要求的hash的矿工节点,向全网广播区块(图中绿色细箭头)。

  6. 其他节点收到区块后,验证该区块和其中交易的有效性,随后将其添加到链的尾端。

  7. 完成转账。

下面,再来看看Fabric的交易过程,注意对比。

Fabric交易过程概述

先来看看Fabric的部署架构。

Fabric部署架构
Fabric部署架构

如上图,黑色实线框代表Fabric网络的参与者,圆圈代表运行的节点(程序)。

  1. 首先要明确的是:Fabric的参与者均为组织。Fabric的用户必须隶属于某一个组织,且该组织已经加入到Fabric网络中。

  2. 每个参与者(下文称为“组织”)贡献自己的节点组成基础网络。共有两种类型的节点:orderer和peer。业务相关的区块链存储在每个peer节点中。

  3. 在一个Fabric网络中有且仅有一个orderer集群(可以是单节点),该集群中的节点可以由一个组织管理,也可以由多个组织管理。为了简便,图中只将它们归属到组织C。

  4. peer集群有1个或多个。除单独管理orderer集群的组织外,其他组织必须运行至少1个peer节点。

  5. 每个组织可以有多个客户端,用来发起交易。

  6. 所有的节点和用户均需要使用所在组织发放的PKI证书来连接和访问Fabric网络,可以使用CA对这些证书进行管理。

先对整个部署架构有个整体印象,后面会逐一分解它们。

下面,来讨论下,如果用Fabric实现和比特币同样的业务,那么上一节描述的转账的过程会经历以下这几个步骤:

Fabric交易过程
Fabric交易过程

如上图所示,这里就不指定具体的用户了,用户A和用户B可以是任意组织内的成员:

  1. 客户端向peer发起交易请求(可能需要向多个peer发送)。

  2. peer收到请求后,运行相关智能合约代码,产生交易结果,并对结果签名。然后,返回给客户端。

  3. 客户端将收到的交易结果进行校验、比对,然后封装成交易消息并签名,发送到orderer集群。

  4. orderer集群收集交易信息,按一定的策略(如:交易数量、数据大小或时间限制)将这些交易打包成新的区块。

  5. orderer将新的区块分别发送给相关的peer集群。

  6. 区块在peer集群中通过gossip协议进行广播

  7. peer节点收到区块后,对区块中的每一笔交易进行验证,如果交易有效,就标记为有效,否则标记为无效。

  8. 最后,将该区块添加到链的尾端。

通过这两个过程的对比,发现什么了吗? Fabric除了不需要挖矿以外,做的事情其实和比特币差不多,只是顺序稍有不同。总结为以下几个步骤:

  1. 发起交易
  2. 执行交易
  3. 打包(排序)交易
  4. 广播交易
  5. 验证交易
  6. 更新区块链

去中心化、共识与挖矿

从上面两个图中很容易看出来,Fabric不像前面提到的公有区块链---每个节点都是对等的。

Fabric看上去并不是完全的去中心化,至少从基础架构上看不是的。

关于Fabric去中心化这个话题,等我们彻底弄懂它的原理后再回头来谈。

再说下挖矿这事。

设立挖矿机制的目的是要建立共识。什么是共识?

  1. 首先,共识是2个以上个体为达成某一个共同目标才会有的事。一个人可以自己说了算,自己干自己的。

  2. 其次,共识是整个群体必须遵守的约定。你跟你老婆都不愿意洗碗,但碗又不得不洗,也只能你们其中一个洗。
    那就约定,谁做饭谁就可以不洗碗,不管饭做得多难吃。
    你俩都同意。达成共识!
    再比如,两家人为争夺利益而争吵,吵到法院去了。
    法官判了,都服了,都得照着判决执行。达成共识!

共识是协作的基础。

说回正题,比特币的共识就是:谁先算出符合要求的随机值(挖矿),并且他生成的新块能通过验证,这个块就是有效的。

而Fabric的共识就是,orderer生成的新块就是有效的块,无论这个块是以什么样的策略和规则生成的。然后由peer经过一套有效性验证算法来决定交易是否有效。

既然挖矿的目的是建立共识,那挖矿为什么还要设立奖励机制--谁挖到了就奖励一些比特币呢?

答:这个问题与技术无关。

比特币是要建立一个完全去中心化的电子货币支付系统,那谁来提供计算资源?

由一个人或一个组织提供?那又变成中心化了。

那两个呢?这两家会不会有勾结?

谁都不信任谁,谁提供都不放心,那就让参与者自己提供吧。

参与者越多,中心化可能性就越小。

为了吸引更多的节点来参与和维持整个系统运作,于是设置了电子货币奖励机制,这是其一。

其二,通过挖矿这种方式,完成货币的发行。

挖矿这种方式,最令人诟病的就是,为了赢得奖励而消耗了很多无谓的资源。

在中国,两大矿场所在地,一个是贵州,一个是鄂尔多斯。为啥?

因为这里气候凉爽,电费便宜。尤其是鄂尔多斯,除了气候凉爽,便宜的电力,还有广袤的土地,以及良好的基础设施,使得它很快成为世界比特币矿业中心。直接带动当地经济第二次起飞(第一次是因为煤炭)。

所以,能耗高是好是坏也不能一概而论。看站在哪个层面讲。不过,如果有能耗更小、效率更高的解决方案,这肯定会是大家首选的方案。

Fabric在这方面没有要主动吸引更多参与者的考虑,而且在共识上采用非竞争的算法(但在orderer集群中也是有竞争的,采用raft算法)。

另外,电子货币并不作为Fabric内置的一种资产。所以,挖矿这种事,在Fabric中不存在的。

为什么要排序交易

为什么在Fabric中打包交易要叫排序(ordering)?

答:你知道“双花问题”吗?

在比特币中,一笔钱如果同时转给2个以上的人,也就是针对一笔钱同时发起多笔交易。只有最先被打包进有效区块,或者是在区块中排在最前面的那笔交易才生效。你说交易顺序重不重要?

同样的,Fabric中也有同样的问题。如果同时修改一个数字资产,到底哪次修改才是有效的呢?排在最前面那个。

不同的是,比特币用的是UTXO模型,而Fabric采用的是版本号。这个我们后面再细说。

小结

谈到区块链,最为人称道的两个特性就是:不可篡改和去中心化。

但这是技术人员关心的问题,而普通民众更关心挖矿和炒币。

这样看起来,Fabric跟我们印象中的区块链很不一样,既没让人称道的去中心化,又没令人兴奋的电子货币,没意思啊!

作为一个技术人员,币圈的事我就不掺和了。

但Fabric真的是中心化的吗?上面的过程太过简单粗略,其实Fabric和其他流行的公链在设计思想上就已经有很大差别了。这些,后面再慢慢体会。

怎么样?想知道更多具体的实现细节吗?请您接着往下看~

我是2流程序员,我们下次再贱!

本文使用 mdnice 排版