Ⅰ 区块链之联盟链(三) 认识Fabric
Fabric 是超级账本联盟推出的核心区块链框架,它适合在复杂的企业内和企业间搭建联盟链。根据超级账本联盟的目标, Fabric 被建设为一个模块化的、支持可插拔组件的基础联盟链框架。;
与以太坊系的Quorum不同,Fabric从一开始就只考虑企业间的应用。其独有的channel概念,将企业根据业务目的不同以不同的子网连接起来, 每一个子网对应一个channel,而每个channel有自己独立的区块链。而Quorum很显然是只有一个公网(所有企业节点都加入进去),企业与企业间的私有业务是通过Private Manager 完成的。
理解channel的最简单方法就是,将它类比为一个消息服务提供的Topic,实际上Fabic最早就是基于Kafka 的分布式消息服务来实现。
在Fabric网络中,一个企业可以有一个或多个节点加入整个联盟链;一个企业可以加入1个或者多个Channel(子网); 一个节点可以加入1个或者多个channel。每个channel构成一个子网,所以Fabric 是 一种由子网组成的网络。
那么Fabric是怎么实现智能合约的执行和完成业务上链(将事务结果记录在区块链里)的呢?
与其它框架不同, Fabric 将整个过程分成了三个阶段:
业务背书阶段 : 客户的请求发送的背书节点,通过智能合约完成业务的计算(但不更新状态),并完成背书;将背书结果返回个客户端。
业务的排序阶段 : 客户端将背书结果通过Channel被发送到排序节点(orderer),在排序节点完成事务的排序,并打包到block里,最后下发给所有连接到channel的节点。
业务验证并写入账本阶段 : 通过Gossip 网络,所有Channel的节点都会接收到新的block,节点会验证block中的每一个事务,确定是否有效:有效地将会跟新world state,无效的将会标志为“无效”,不会更新World state,但整个block会被完整的加入到帐本中(包括无效的事务)。
根据以上的描述,Fabric 节点实际可以分为 ,普通节点和Order节点:
Peer, 普通节点, 完成背书(包括只能合约的执行)和验证.
orderer, 排序节点,完成排序。
加入orderer节点的Fabric网络可以被描述如下:
每一个Channel,都定义了所有属于channel的节点,但是并不需要所有节点都连接到Orderer 节点(节点间可以通过gossip 协议通讯来传播私有数据或事务).
在区块链中,共识是区块链的基础。与公有链不同,联盟链的共识要求所有加入账本的事务是确定的、最终的,也就是不可以有分叉,区块与区块间的顺序是一定的,只存在唯一条链。在Fabric 中,这个客观需求正是由排序实现的,所有的事务将被提交给orderer节点获得确定的顺序,并最终打包成block进入帐本。 Fabric 从1.4.1开始支持基于Raft实现排序服务, 可以认为基于Raft实现共识。
基于RAFT的排序服务相对于早期的Kafka 具有更好的分布性,配置更加简单,是联盟链里常用的一个常用的达成共识的算法,Quorum就 默认使用RAFT作为共识层。简单的说,RAFT是一个leader和follower的模式, 所有加入RAFT网络的节点,任意时候都有一个leader, 只有这个leader有权决定事务的顺序,并打包成Block,其它节点只能作为follower提交事务和同步block。
基于FAFT网络,每个企业可以有一个或多个节点参与到Orderer中去。在Frabric中企业间的网络连接可以变化成如下形式:
区块链的使用用户在以太网中被称作EOA(External of Account), EOA的载体是钱包。我们沿用这个概念,来看看Fabric是如何实现用户和发起事务的。Fabric中EOA是一个CA中心发布的certificate(x.509),一个Certificate代表一个Identity(这与以太坊还是有很大区别的, 以太坊中一个EOA其实是一个hash地址),EOA能够参与的channel以及被授权的操作是有channel的MSP( Membership Service Provider)决定的(如下图)。
注:certificate 是一种密码学上验证身份的通用做法; certificate包含了个人的信息,公钥以及发布这个certificate的CA的签名。验证方只需要拥有这个CA的证书(包含CA的公钥),就可以验证这个签名是否正确,certificate的内容是否有篡改。简单的说,通过CA和Certificate,我们可以获得一个可验证的的身份和信任链。
如上图,fabric中通要使用Wallet作为EOA的载体,一个Wallet中可以包含多个Identity(x.509 certificate)。 Identity 通过 CA提供的信任链来验证正确性。
验证了身份之后, Fabric 通过MSP在区块链网络中解决该身份是否代表组织的成员和在组织内具有什么角色。例如,channel首先会验证当前用户Identity是否是有效地身份,然后通过MSP查看其所处的企业和具有的角色,最终确定该用户是否有权执行操作。
可以说,Fabric的访问控制是通过MSP来完成的。在每一个需要访问控制的地方都需要定义一个MSP。 例如,每个channel都定义一个MSP,这个MSP规定了在channel范围内资源的访问权限。 MSP 是Fabric里一个晦涩难懂的概念,也是其赋予企业间安全访问的基础。
前文提到, Fabric 将业务处理和上网分成了三个部分, 背书,排序,验证后加入账本。
其中背书是Fabric执行智能合约的阶段。以太坊中,智能合约是在EVM中执行的,有多种语言支持。 在Fabric,智能合约被称为chaincode: 一个chaincode 可以理解为是智能合约的容器,可以包含一个或多个智能合约, 不用于EVM, chaincode是在 JVM 或NodeJS中执行。
客户应用程序通过智能合约来访问账本,每一个可访问的智能合约都被安装在客户端可以访问的节点上,并被定义在channel里。(有只能合约的节点被称为背书节点,没有只能合约的节点被称未提交节点,提交节点只维护账本)
客户应用提交一个交易请求, 请求到达背书节点, 背书节点首先会验证客户的签名,确保客户的身份有权执行本次交易,接着执行交易提及的智能合约(chaincode),并生成一个背书响应(或者叫做交易提案,tran-proposal)。这个背书响应中通常包含World state 的读集合,写集合, 以及节点对本次交易的签名。这里与以太坊系联盟链最主要的不同是: 背书阶段只模拟交易,并不真正更新交易结果。 而真正更新交易在第三阶段完成。背书节点最后将生成的背书响应fanhui给客户端, 智能合约部分的执行就结束了。
通常一个交易的执行需要多方的签名,所以客户端需要将一个交易发送给多个背书节点,这些背书节点的选择需要满足背书策略的要求。
下图是一个包含有客户、背书节点,提交节点的网络示意图。
根据Fabric官方的参考文档,客户交易的正果过程可使用下图描述。
如上图,从1到3,为背书阶段,4为排序阶段,4.1,4,2, 5为验证提交阶段。 参考 Frabic的节点 概念,可以了解更多在交易细节的概念。
总的来看, Fabric 更专注于企业间,通过上文,可以让大家对Fabric的基本构成与概念有一个总的了解。 Fabric本身并不神秘,都是使用的现有的企业间的技术。要更好的了解,建议参考阅读分布式消息系统和企业的安全基础设施(CA相关)的支持。与以太坊系联盟链实现比较, Fabric 的子网更概念对于复杂企业间应用适应更强,但是其复杂的安全考量,使得运营成本很高,另外,Fabric 使用Certificate做为用户身份,有很大的局限性,在新的2.0里,Fabric对于此处将有所改变。
下一篇,我们将来看看Sawtooth , 由Inter 提供的区块链框架。
区块链之联盟链(一) 认识以太坊
区块链之联盟链(二) 认识Quotum
区块链之联盟链(三) 认识Fabric
区块链之联盟链(四) 认识Sawtooth
Ⅱ 哈希图会取代区块链
2018年2月份哈希图团队就在Reddit上po出了一种新的实现共识算法平台,旨在为世界提供一种更有效、快速的价值互联网底层支撑。
从比特币出现到现在,区块链这个名词已经深入人心,似乎我们已经被深深植入一种想法,那就是 价值互联网 必将通过区块链来实现。而仔细一看,区块链似乎就是一个简单的链表,只不过是更宏观一些的区块相连。区块之内打包的各种公开的交易事务。于是我们从中总结出了人人都能谈的区块链的特点:
而区块链的用途承载了我们很多美好的想象,赋予更多节点以价值,包括内容,个人数据等形形色色的各类资产。
诚然,区块链已经在部分领域实现了这个功能。但是,在具体使用过程中,我们渐渐遇到了很多性能问题,先是以太坊上养猫就堵塞了整个以太坊网络。而比特币就更不用说了,即使全世界成千上万个分布式节点,各大矿场投入了巨资构建的矿场来支撑这个网络,仍然受限于每10分钟才出一个区块的算法限制。
因为性能瓶颈,其他算法也迅速出现,企图解决这个问题。比如通过PoS算法,DPoS算法,试图绕过PoW这种简单粗暴的解决方案,来提升网络每秒能够处理的交易事务次数(TPS)。
而最近掀起的EOS节点竞选,全世界范围内各个财大气粗的团队,参与竞选全球 21个超级节点 ,用于投票产生下一个区块。本质上仍然属于DPoS算法的应用,只不过这个超级节点能够获得大量的EOS代币|Token(主网上线后可称之为Coin)奖励,按照当前价格折算,就是上亿的收入。资本逐利,无可厚非。但是仔细想一想,官方的说法,这是为了提升TPS而设计的一种折中的方法。意思就是,决定区块产生的不再是公平的,而是一种代议制,在去中心化和中心化之间找到的一个微妙的平衡,当然这个系统内,除了超级节点,备胎节点也是必须的。本文不赘述EOS。
而这些,不禁让人深深思索一个新的问题,当年中本聪的设想,一人一个CPU,一个投票权的愿景似乎已经渐行渐远了。
提到区块链,我们常说共识算法,其实全称是一致性共识算法。其中,拆出两个关键词来:
共识似乎离普通用户很近,白话说即为,我们大多数人认同它的价值,它就有价值。而一致性却离得很远,下一个区块怎么产生,节点之间如何同步数据与我何干?
这里,我也只浅浅列出用在区块链世界的几种牛批的共识算法,包含:
下面进入本文的主题。
无论是什么共识算法,核心目的相同,那就是:在无可信中心节点可以依仗时,社区用户能够关于事务的产生,区块打包达成一致。
此处上一个对比图,将会一目了然,然后我也会再文字赘述一遍,和大家分享我自己对此的一点点浅浅的思考,如有任何差错,欢迎随时指正。
可见,左边是区块链,右边是哈希图。
仔细看,区块链实际上是一个公平但是残酷的机制。每一个参与挖矿的节点,都是在玩一个概率游戏。比如老大哥比特币,使用纯正的PoW算法,每个人通过密码学问题,暴力求解那个答案,我们称之为哈希碰撞。在10分钟内,产生的交易事务其实不止那个最终被加入最长的链上的区块的那些事务。而是同时有很多其他区块。每一笔事务会通过广播机制,向周围的其他节点广播以求得到足够的确认,并最终加入区块链。问题来了,节点保存着当前最新的备份,且只认最长的那个链,但是我们知道,广播意味着一样长的多个链会产生,于是节点就需要同时保存多个备用区块,然后静静等待下一步传来的区块,再比较选谁链更长,就把谁真的加入大家都认同的那个链,而失败的区块,就黯然退场,加入下一轮的事务。
挖到那个没加入到链上的节点,只能暗暗擦干眼泪,继续前行。
以太坊呢,就稍稍温情一些,会有一点点奖励给这类被称之为叔块的东西。
看到左边的区块链结构吗?生长过程中,是个树,长成了以后,就会被修剪的只剩下一个白白长长的树干。这就是我们说的,只认最长的链的法则残酷之处。
哈希图
对比看右边的哈希图结构,是不是要复杂很多?简单说,就是一个都不能少。
挖到的区块全都加入到系统。每个分支都将被用到,最终缝合到整个系统。
稍稍想想,就能知道左边的没有右边的事务处理速度快。因为左边总是要自我阉割一部分打包在区块内的事务。而右边不用。
那么,为什么右边可行?而区块链却选择的是更慢的算法呢?
答案很简单,区块链的广播方法,在全网达成共识很慢。那么哈希图是怎么做到的呢?
下面将谈一谈哈希图的两个核心机制中的其中一个,官方称呼为Gossip about gossip协议。
粗浅翻译为:关于八卦的八卦协议。
先来说一说Gossip协议(八卦协议)。
Gossip协议解决的问题就是在分布式环境下信息高效分发的问题。这个问题的解决决定着系统的一致性程度。
以办公室八卦为例,八卦一般是从一次对话开始,只要一个人八卦一下,有限的时间内办公室的人都会知道。与病毒传播类似。因此Gossip别名就是“病毒感染算法”,“谣言传播算法”。
Gossip的核心就是当前节点随机选择一些节点把那个告诉它们你知道的所有事情。好比说,你听到了一个八卦消息,你会忍不住想和朋友分享,于是你从你认识的人中,随机挑了一部分人,把这个消息告诉了他们。他们也一样,每个人听到这个消息,也会忍不住想和他们的朋友分享。像病毒传播一样,迅速传遍了整个人际网络。
因此理解八卦协议,可以带入一种日常生活我们总是会参与到的八卦场景。
而关于八卦的八卦协议,这里不再多说,只是可以对照一下,作为一个传递八卦消息的人,你再被其他人八卦,是不是有一种意想不到的被人验证的感觉?后面会再写文详述。
总之,通过Gossip协议,哈希图能够做到在秒级别实现共识(牛批吧)。因此,就能够采用这种绝不放弃任何区块的图状方式,进而提升事务打包确认的速度。不是一般的快。
有人认为哈希图要颠覆区块链的,但是哈希图的人认为,它们会共存。-- 且当八卦,不必在意
接着引出一个新的问题给大家,我们真的关心底层技术的实现方式吗?
支付宝好用,微信好用,我们关心它们是怎么实现的吗?我想绝大部分朋友是不在意的。
那么对应到区块链或者哈希图,我们其实并不会太在意到底哪个算法更好,而是更关心,我这个转账多久能够被确认,别人给我转的钱多久能收到。
诚然,我们不必太在意底层,但是支撑起一个良好体验的产品,必然是从底层汲取能量。
或许,哈希图将带来一种崭新的体验。
到现在,我相信一组新词不断出现在大家的信息捕捉器里:
我的粗浅理解是,不带代币的互联网产品都是古典的,而带有代币的大多数号称价值互联网的产品也只是耍猴,博眼球,卖空气,更不要提国外还时不时捧出的12岁CEO,发行以太坊代币,我归结为卖傻儿子系列。
不管是什么互联网,我们的核心诉求始终都是,要好用,简单说就是快且安全高效。
而价值呢,更多的愿景仍然是希望将个人产生的价值部分乃至全部还归于个人。
但是,任重道远。在古典互联网安家的90后们尚且未能全部拥抱区块链,更别说80后,70后等等大部队了。
我们终将死去,价值互联网会在新一代的原住民中生存。
而本篇,希望带来了一点点价值,那就很好了。
2018.4.21 -- YQ
郑重声明
本文里还未提到哈希图的缺点,导致给人一种推广软文的感觉。本文只是纯粹科普一下不同的公开记账本实现方式,并非诱导大家投资,我个人不参加一级市场的私募,风险承担不起,也不鼓吹大家参与。个中风险,自己衡量,自己把握。