本文主要内容如下,爱看不看~
Fabric运作原理概述
说个小八卦。
我第一次在区块链相关的文章中看到Fabric这个词的时候,以为它是一个Python lib库。
我平时工作中Python用的比较多,而Fabric正好是一个以前我用到过的知名的运维相关的工具库。
在学习区块链的时候,突然看到Fabric,以为是用来做一些区块链维护工作的。后来才知道,原来区块链中的Fabric不是全称,前面还有一个Hyperledger。
下面,正式开始我们今天的学习之旅。
在正式动手执行计划前,有必要熟悉Fabric的运行原理。看看Fabric有何德何能来满足我们的需求。
原理概述
学习区块链技术,我认为最好的入门材料就是比特币。因为它涵盖了所有区块链所用到的核心技术,而业务逻辑又足够简单。
比特币的业务就两个---转账和挖矿。我带你回顾下这个过程先。
比特币交易过程概述
如下图,灰色圆圈代表比特币网络。

假设男人(A)向女人(B)转了一笔钱,余额足够的情况下,这笔交易会经历如下这几个步骤:
A发起转账交易,并向全网广播这笔交易(图中黑色细箭头)。
所有矿工节点收到交易,并将其加入到它的待执行交易池中。
矿工节点从它的待执行交易池中取出交易,然后按解锁脚本执行该交易,如果执行成功,则将其打包进区块中。
矿工节点完成打包后,开始计算符合要求的区块hash(挖矿)。
第一个计算出符合要求的hash的矿工节点,向全网广播区块(图中绿色细箭头)。
其他节点收到区块后,验证该区块和其中交易的有效性,随后将其添加到链的尾端。
完成转账。
下面,再来看看Fabric的交易过程,注意对比。
Fabric交易过程概述
先来看看Fabric的部署架构。

如上图,黑色实线框代表Fabric网络的参与者,圆圈代表运行的节点(程序)。
首先要明确的是:「Fabric的参与者均为组织」。Fabric的用户必须隶属于某一个组织,且该组织已经加入到Fabric网络中。
每个参与者(下文称为“组织”)贡献自己的节点组成基础网络。共有两种类型的节点:orderer和peer。业务相关的区块链存储在每个peer节点中。
在一个Fabric网络中有且仅有一个orderer集群(可以是单节点),该集群中的节点可以由一个组织管理,也可以由多个组织管理。为了简便,图中只将它们归属到组织C。
peer集群有1个或多个。除单独管理orderer集群的组织外,其他组织必须运行至少1个peer节点。
每个组织可以有多个客户端,用来发起交易。
所有的节点和用户均需要使用所在组织发放的PKI证书来连接和访问Fabric网络,可以使用CA对这些证书进行管理。
先对整个部署架构有个整体印象,后面会逐一分解它们。
下面,来讨论下,如果用Fabric实现和比特币同样的业务,那么上一节描述的转账的过程会经历以下这几个步骤:

如上图所示,这里就不指定具体的用户了,用户A和用户B可以是任意组织内的成员:
客户端向peer发起交易请求(可能需要向多个peer发送)。
peer收到请求后,运行相关智能合约代码,产生交易结果,并对结果签名。然后,返回给客户端。
客户端将收到的交易结果进行校验、比对,然后封装成交易消息并签名,发送到orderer集群。
orderer集群收集交易信息,按一定的策略(如:交易数量、数据大小或时间限制)将这些交易打包成新的区块。
orderer将新的区块分别发送给相关的peer集群。
区块在peer集群中通过gossip协议进行广播
peer节点收到区块后,对区块中的每一笔交易进行验证,如果交易有效,就标记为有效,否则标记为无效。
最后,将该区块添加到链的尾端。
通过这两个过程的对比,发现什么了吗? Fabric除了不需要挖矿以外,做的事情其实和比特币差不多,只是顺序稍有不同。总结为以下几个步骤:
- 发起交易
- 执行交易
- 打包(排序)交易
- 广播交易
- 验证交易
- 更新区块链
去中心化、共识与挖矿
从上面两个图中很容易看出来,Fabric不像前面提到的公有区块链---每个节点都是对等的。
Fabric看上去并不是完全的去中心化,至少从基础架构上看不是的。
关于Fabric去中心化这个话题,等我们彻底弄懂它的原理后再回头来谈。
再说下挖矿这事。
设立挖矿机制的目的是要建立共识。什么是共识?
首先,共识是2个以上个体为达成某一个共同目标才会有的事。一个人可以自己说了算,自己干自己的。
其次,共识是整个群体必须遵守的约定。你跟你老婆都不愿意洗碗,但碗又不得不洗,也只能你们其中一个洗。
那就约定,谁做饭谁就可以不洗碗,不管饭做得多难吃。
你俩都同意。达成共识!
再比如,两家人为争夺利益而争吵,吵到法院去了。
法官判了,都服了,都得照着判决执行。达成共识!
「共识是协作的基础。」
说回正题,比特币的共识就是:谁先算出符合要求的随机值(挖矿),并且他生成的新块能通过验证,这个块就是有效的。
而Fabric的共识就是,orderer生成的新块就是有效的块,无论这个块是以什么样的策略和规则生成的。然后由peer经过一套有效性验证算法来决定交易是否有效。
既然挖矿的目的是建立共识,那挖矿为什么还要设立奖励机制--谁挖到了就奖励一些比特币呢?
答:这个问题与技术无关。
比特币是要建立一个完全去中心化的电子货币支付系统,那谁来提供计算资源?
由一个人或一个组织提供?那又变成中心化了。
那两个呢?这两家会不会有勾结?
谁都不信任谁,谁提供都不放心,那就让参与者自己提供吧。
参与者越多,中心化可能性就越小。
为了吸引更多的节点来参与和维持整个系统运作,于是设置了电子货币奖励机制,这是其一。
其二,通过挖矿这种方式,完成货币的发行。
挖矿这种方式,最令人诟病的就是,为了赢得奖励而消耗了很多无谓的资源。
在中国,两大矿场所在地,一个是贵州,一个是鄂尔多斯。为啥?
因为这里气候凉爽,电费便宜。尤其是鄂尔多斯,除了气候凉爽,便宜的电力,还有广袤的土地,以及良好的基础设施,使得它很快成为世界比特币矿业中心。直接带动当地经济第二次起飞(第一次是因为煤炭)。
所以,能耗高是好是坏也不能一概而论。看站在哪个层面讲。不过,如果有能耗更小、效率更高的解决方案,这肯定会是大家首选的方案。
Fabric在这方面没有要主动吸引更多参与者的考虑,而且在共识上采用非竞争的算法(但在orderer集群中也是有竞争的,采用raft算法)。
另外,电子货币并不作为Fabric内置的一种资产。所以,挖矿这种事,在Fabric中不存在的。
为什么要排序交易
为什么在Fabric中打包交易要叫排序(ordering)?
答:你知道“双花问题”吗?
在比特币中,一笔钱如果同时转给2个以上的人,也就是针对一笔钱同时发起多笔交易。只有最先被打包进「有效区块」,或者是在区块中排在最前面的那笔交易才生效。你说交易顺序重不重要?
同样的,Fabric中也有同样的问题。如果同时修改一个数字资产,到底哪次修改才是有效的呢?排在最前面那个。
不同的是,比特币用的是UTXO模型,而Fabric采用的是版本号。这个我们后面再细说。
小结
谈到区块链,最为人称道的两个特性就是:不可篡改和去中心化。
但这是技术人员关心的问题,而普通民众更关心挖矿和炒币。
这样看起来,Fabric跟我们印象中的区块链很不一样,既没让人称道的去中心化,又没令人兴奋的电子货币,没意思啊!
作为一个技术人员,币圈的事我就不掺和了。
但Fabric真的是中心化的吗?上面的过程太过简单粗略,其实Fabric和其他流行的公链在设计思想上就已经有很大差别了。这些,后面再慢慢体会。
怎么样?想知道更多具体的实现细节吗?请您接着往下看~
我是2流程序员,我们下次再贱!

本文使用 mdnice 排版