初链:高性能去中心化公开账本

1.绪论

2017-2018年,互联网界最火热的话题之一就是区块链。其去中心化、分布式以及防篡改一系列特性使得人们对于这个可能对互联网发展产生重大影响的技术关注颇多。从比特币的区块链最初版本,到以太坊为主流的进阶版本,再到超级账本项目的版本,区块链技术一直在飞速的发展,并且不断落地到各个领域。本文我将简单介绍区块链中的相关概念以及相关技术理念。

2.什么是区块链

所谓区块链,字面上的理解就是由很多的“区块”组成的链式结构,区块我们成为“block”,区块链的全名为“blockchain”。很多人在聊到区块链的时候,往往容易认为区块链就是比特币,比特币就是区块链。实则不然,区块链是比特币的底层技术。在具体说到区块链的概念之前,我们先了解几个问题。

2.1分布式

如果大家是IT工作者的话,对于“分布式”这个名词肯定很熟悉。我就以我们最为熟悉的git代码版本管理工具为例,它就是一个典型的分布式管理工具。如果我们的开发团体中有10个人在进行项目开发,每个人在开发自己的代码前,都需要和master分支进行merge。10个人的代码都进行了同步,如果有成员或者master分支出现了代码丢失的情况,那么他可以从别的组员中进行恢复。也就是说,在分布式系统中,每一个节点拥有的数据都是相同的,如果某个节点出现了问题,那么其他节点可以当做新的参考进行数据恢复。

2.2拜占庭将军问题

在区块链的学习当中,要理解分布式系统问题,大部分的学者都会举出拜占庭将军的问题。故事大致是这样的:古代希腊有一个国家叫拜占庭,国力雄厚,拜占庭中的一位将军喜欢征战,想把别的国家的资源抢夺到自己手中。在攻打敌方国家的时候,将军派出了10支部队同时去攻打。当然敌对国也不是吃素的,在拜占庭将军排除的10支部队中,需要有6支或者以上的部队同时发起进攻,才能取得胜利。那么这个问题就属于一个典型的分布式的问题,在这个分布式系统中有10个节点,我们希望这10个节点同步,一起在同一时间执行同一个操作。也就是说拜占庭将军希望这10支部队在同一时间攻打敌方国家。但是在将军发出一起攻打的命令时,通讯兵有可能会被敌军俘获,或者通讯兵表达能力欠缺,有可能把将军的命令表达错误。这些问题可能导致通讯兵传递出去的数据时错误的,那么这10支部队肯定保持不了同步,攻打的结果极有可能是失败。所以这就是拜占庭将军的问题所在。

2.3去中心化

先来说说什么是中心化,在我们日常的交易中,都有着中心化的概念,比如用户在淘宝上购买商品,用户首先需要对自己选购的商品使用支付宝付款,但是付款并不会直接打到卖家的账户上,而是暂由阿里巴巴集团支付宝代收,在买家确认收货后,付款才会最终到达卖家的账户上。那么这个交易过程中明显就有着阿里巴巴支付宝这个中心的存在。也就是说这个交易有着第三方的平台参与。这就是所谓的中心化概念。中心化的机制必然会产生一些交易问题,比如说买家和卖家在交易过程中,第三方平台服务器突然崩溃,导致数据丢失等等不可控的问题,必将对交易造成恶劣影响。而去中心化就是使得在交易过程中剔除第三方,买家和卖家直接交易。去中心化的其实就是网络中的节点与节点之间相互信任,去除了常见分布式系统中的中心系统的概念。

2.4分布式系统中,听谁的?

在分布式系统中存在着一些问题,相信做过Java的同学很有体会,往往在分布式系统的实现中,有一个很非常重要的问题,那就是谁说了算?听谁的?如果才能保持数据一致?典型的例子就是我们在实zookeeper集群时,在该分布式系统当中选举出一个领导,在该网络内所有的分支都听这个领导的。如果在该网络中这个领导挂掉了,zookeeper会在剩下的分支当中,再选举一个分支作为新的领导,但是zookeeper在实际的生产环境中,也存在一些问题,就是如果第一个领导挂掉的时候,并没有彻底死亡,有一部分还存活着,但是新的领导分支已经选定,那么此时存在两个领导。那么两个master手下的分支就会出现我们所说的“脑裂”问题,它们不知道到底该听第一个领导的还是第二个领导的。其实zookeeper是属于一种中心化的分布式实现。

2.5区块链概念

在了解了上述的几个问题后,区块链的概念就很好理解了,区块链是一个去中心化的分布式账本(数据库)。区块链系统实际上就是一个维护公共数据账本的系统,一切的技术单元的设计都是为了更好地维护好这个公共账本。

3.区块链的技术栈

我们知道,区块链本身只是一个数据的记录格式,就像们平时使用Excel表格、Word文档一样,按照一定的格式将我们的数据存储在电脑上。与传统记录不同的是,区块链将产生的数据按照一定的时间间隔,分成一个个的数据块记录,然后再根据数据块的先后关系串联起来,也就是所谓的区块链了。按照这种规则,沿着时间线不断增加新的区块,记录下发生的每一笔操作。

这种数据记录的方式很新颖,在这种记录方式下,数据很难被篡改或者删除,有朋友可能会说,这有什么不好修改或者删除的,比如我在电脑上保存的Excel数据,再怎么复杂我也能修改啊!如果区块链的数据格式只是应用在单机环境或者一个中心化的服务器上,那确实是,毕竟自己对自己的数据拥有完全支配的权利。然而,事实上并非如此。

事实上,区块链是一整套技术组合的代表,在这一组技术的配合下,才能显示区块链技术的优点。无论是什么样的区块链系统,不管是比特币、莱特币、以太坊还是其他的,核心结构和工作原理都是相同的。我们来看看最基本的技术组合有哪些吧。  如上图所示,这是区块链系统结构的基本组成,各种系统本质上都是在这个经典结构之上直接实现或者扩展实现。这些零部件装配在一起,组成了一个区块链软件,运行起来后就成为一个节点,多个这样的节点在不同的计算机上运行起来,就组成了一个网络。在这个网络中没个节点都是平等的,大家相互为对方提供服务,这种网络称为点对点的“对等网络”。下面我们来依次解释一下。

3.1区块链账本

如上所述,区块链账本它表示一种特有的数据记录形式。区块链就是“区块+链”,所谓的区块就是指数据块的意思,每个数据块之间通过某个标志连接起来的,从而形成一条链,我们看一下示意图: 如图所示,一个区块一个区块地衔接,区块之间通过某种方式串联起来,就比特币来说,大约是每10分钟产生一个区块,区块中主要包含了交易事务数据以及区块的摘要信息。我们来看看比特币中区块链数据的组成示意图: 通过上图可以看到比特币中区块链账本的数据组成以及关系,并且可以看到区块链数据在逻辑上分成了区块头和区块体,每个区块头中通过梅克尔根关联了区块中众多的交易事务,而每个区块之间通过区块头哈希值(区块头哈希值就是一个区块的身份证号)串联起来。这是一种链条格式,链条最大的特点就是一环扣一环,很难从之间去破坏。比如有人篡改了中间的2号区块,那么久的同时把2号区块后序的所有区块都要更改掉,这个难度就很大了。在区块链系统中,一个节点产生的数据或者更改的数据要发送到网络中的其他节点接受验证,而其他节点是不会通过验证一个被篡改的数据的,因为跟自己的本地区块链账本数据匹配不起来,这也是区块链数据不可篡改的一个很重要的技术设计。

这个格式还有个很巧妙的地方,如果数据总是由一个人来记录的,那自然也没什么,但是如果放到网络中,大家共同来记录这个数据,那就有意思了,每个区块数据由谁来记录或者打包,有一个规则。比如说掷骰子,大家约定谁能连续3次掷出三次6点,那就让他记录下一个区块的数据,为了补偿他的劳动投入,奖励给他一些收益。比特币正是通过这种方式不断发行新的比特币出来,奖励给打包记录区块数据的那个人的比特币就是新发型的比特币。

3.2共识机制

所谓共识,就是指大家达成一致的意思。在区块链系统中,每个节点必须要做的事情就是让自己账本和其他节点的账本保持一致。如果在传统的软件系统中,这几乎不是问题,因为有一个中心服务器存在,也就是所谓的主库,其他库向它看齐就行。在实际生活中,很多事情人们也是按照这种思路来的。但是区块链是一个分布式的对等网络结构,在该结构中没有哪个节点是“老大”,一切都要商量着来。在区块链系统中,如何让每个节点按照规则保持数据一致是一个很核心的问题,这个问题的解决方案就是制定一套共识算法。

共识算法其实就是一个规则,每个节点都要按照这个规则去确认自己的数据,并且我们要从所有的节点中选举出一个最具有代表性的节点,那么如何筛选呢?其实就是设置一组条件,就像我们筛选运动员、尖子生一样,给一组指标让大家来完成,谁完成得更好,谁就有机会被选上。在区块链系统中,存在着多种这样的筛选方案,比如PoW(proof of work工作证明)、PoS(Proof of stake权益证明)、DPoS(Delegate proof of stake委托权益证明)、PBFT(Practical Byzantine Fault Tolerance,实用拜占庭容错算法)等等。区块链系统就是通过这些删选算法或者共识算法使得网络中各个节点的账本数据达成一致。

3.3密码算法

密码算法的应用在区块链系统中很巧妙,应用点也很多,我在这里不详细介绍密码的原理,就从几个很关键的应用来介绍一下。

首先我们回顾下区块链账本格式。通过上述讲解我们知道,区块链账本就是一个链接起来的一个个区块。到底是通过什么技术来链接的呢?学过数据结构的同学都知道,数据结构中有一种变量叫指针(Java中没有指针概念)它是可以用来指向某个数据地址的。区块之间的连接,往往不是靠数据地址来关联的,而是靠一种叫做哈希值的数据来关联,什么是哈希值?这是通过密码算法中的哈希算法计算得出的。哈希算法可以通过一段数据计算得出一段摘要字符串,这种摘要字符串与原始数据是唯一对应的。什么意思呢?如果对原始数据进行修改,哪怕只是一点点的修改,那么计算出来的哈希值都会发生完全的变化。区块链账本对每个区块都会计算出一个哈希值,称为区块哈希。通过区块哈希来串联区块。这有一个很好的作用就是,如果有人篡改了中间的某一个区块数据,那么后面的区块就都要进行修改,这个时候并不是简单地修改一下后面区块地址指向就能结束的。由于后面的区块是通过区块哈希来指向的,只要前面的区块发生改动,这个区块哈希就无效了,就指不到正确的区块了。

3.4脚本系统

脚本系统在区块链中是一个相对抽象的概念,也是一个及其重要的功能,可以说是区块系统之所以能形成一个价值的网络,依靠的就是脚本系统。它就像一个发动机一样,驱动着区块链系统不断地进行各种数据的收发。所谓脚本,就是指一组程序规则。在区块链中有些程序的规则是固定的,比如在比特币系统中,只能进行比特币的发送与接收,这个与发送与接收的过程就是通过实现在比特币中的一组脚本程序来完成的。而有些系统是允许用户自行编写一组程序规则的,编写好后可以部署到区块链账本中,这就可以扩展区块链系统的功能,比如以太坊就是通过实现一套可以自定义功能的脚本系统,进而实现了只能合约的功能。

脚本系统使得在区块链中可以实现各种各样的业务功能。本来大家只是通过区块链来财务记账,通过脚本系统,大家可以使用区块来记录各种各样的数据,比如订单、众筹账户、物流信息、供应链信息等,这些数据一旦可以记录到区块链上,那么区块链的优点就能充分发挥出来。

3.5网络路由

这个功能模块比较简单。区块链系统是一个分布式的网络,这些网络中的节点如何来彼此进行通信呢?依靠的就是网络路由功能。在分布式的网路结构中,不存在一个指定的服务器,大家没办法通过一个服务器来直接交换彼此的身份信息,就只能依靠彼此联系并传播信息。在区块链系统中,这个功能一般会定义成一种协议,称为“节点发现协议”。

除了要发现节点外,更重要的一个功能就是同步数据。节点要保持自己账本数据是最新的,就必须时时更新自己的数据。从哪更新呢?既然没有服务器下载下来,那就通过邻近的节点了。通过向邻近节点发送数据请求来获得最新的数据,节点彼此都充当服务者和被服务者,通过这种方式,网路中的每个节点都会在某一个时刻达成数据上的一致。

网络路由可以说是区块链系统的触角,通过大量的触角将每个节点连入网络,从而形成一个功能强大的区块链共识网络。

4.区块链的主要技术架构

通过区块链的概念我们知道,区块链在本质上来说就是一种记账方法,当然它并不是通过人来记账的,而是通过一种软件,我暂且称它为区块链客户端。他们运行于不同的设备上,彼此之间独立工作。通常我们把运行中的客户端成为“节点”。所有的节点都在一个互通的网络中,在网络中,一旦有什么交易发生,消息就会马上广播传遍给每个节点。在区块链软件的结构中,这中互相通信的功能成为“网络路由”。

在这个网络中,每个节点都维持着自己的账本,账本记录着网络中每一笔账务。具体是什么样的账务呢?这得看具体是什么样的功能网络。区块链技术属于一种技术方法,可以用来实现不同的业务功能,例如小到日常记账,大到各种复杂的商业合约等等。那么网络中的记账需要保持一致,所用的方法就是大家遵守一个规则,通过规则选出记账的节点。那么这种规则就成为“共识算法”。

在有些系统中,会考虑到通过规则选出的节点这个过程中所付出的劳动,毕竟这个节点需要通过不断得通过“工作证明”来取得记账权,还是挺辛苦的。于是会设计一种激励机制,负责打包数据以及广播的那个节点可以获得系统的奖励。那么大家都会很积极地去争取那种奖励。有些区块链系统会设计一种带竞争的机制,让各个节点去抢夺,谁能抢到这个机会就能获得数据打包的权利并且获得这笔奖励,这种情况下我们会形象地将这个竞争的过程称为“挖矿”。

那么,话又说回来了,我们将一个个运行客户端成为节点,那到底怎么标记不同的使用者呢?也是通过用户注册吗?其实不然,在区块链系统中,是通过一种密码算法来实现的,具体来说是通过一种叫公开秘钥算法的机制来实现的。我们知道对于一种密码算法来说,无论算法过程是什么样的,都会有一个秘钥,而公开秘钥算法拥有一对秘钥,是彼此配合使用的,可以相互用来加密和解密的。其中一种叫公钥,另一种叫私钥,公钥可以公开给别人,私钥要自己保存好。在区块链中,公钥是用来用户识别身份的。

那么两种秘钥是如何配合工作的?我来简单说明一下:用公钥加密的数据必须使用对应的私钥来解密,而使用私钥加密的(通常称为“签名”)的数据必须用对应的攻牙来解密。举个例子,张三要发给李四一张支票,那么怎么传送过去呢?直接发送过去,那么支票中的数据必然会被全网的其他的节点都知晓,这个处于安全性考虑肯定是不允许的。于是张三在支票上用李四的公钥加了密,然后再签上自己的名字(使用自己的私钥签名),这样的话,即使其他人拿到这张支票也没用,因为只有李四拥有自己的私钥来能解开这张支票来使用。这种功能设计在区块链系统中称为“脚本系统”。

总结:现在我们知道了,区块链的技术理念其实就是大家共同来参与记账,通过一种规则(共识算法)不断地选出账务打包者,其他节点接受验证,并且每个用户都有一对秘钥表示自己,通过脚本系统的功能实现在公共网络中定向发送有价值的数据。

5.区块链的工作流程

区块链的应用有很多种,第一个应用区块链技术的软件就是比特币,到现在为止,出现了很多机遇区块链技术的衍生系统,比如闪电网络、公正通、以太坊、超级账本项目等。但是无论设么类型的应用,它们的工作方式或者说工作流程都是相似的,本质上他们都是同一种技术结构的产物。我们接下来说说区块链的工作流程。

我们先来看一个转账交易的流程。转账交易本质上就是发送一笔数据,这个数据可以表示为资产,也可以表示为订单或者其他形式的数据,我们看一下下面的图示: 在图中,我们可以看到,整个数据的发送过程还是比较简单的,数据发送出去后,会被打包进区块,然后广播出去给所有节点确认,确认没有问题后就写入给的本地区块链账本中,当网络中的大多数节点都确认写入后,确认没问题后就写入到各自的本地区块账本中,当网络中大部分的节点都确认写入后,这个转账交易就算完成了。

这个工作流程是具有代表性的,其他各种系统都是在这个基础上进行衍生和扩展的,如有些会增加身份认证功能,以确保只有符合身份的验证的用户才能发送数据,有些扩展交易数据的表达能力,不但能用表示一般的交易转账,还能表示更复杂的商业逻辑,各种应用很多,但是万变不离其中。

6.初链:TrueChain

6.1初链:高性能混合共识公链

去中心化的最终目的,是打造自由平等的互信社会。经过以太坊等公链项目的努力,公链开发已取得显著进步,数字货币和智能合约的商业化使用成为可能。从比特币到以太坊再到超级账本,区块链的发展大致分为这三个大的版本。并且并且根据参与者的不同,可以分为公开链、联盟链和私有链。部分私有链与联盟链已成功落地应用,让人们对公链开发者们产生了更大期望,希望商用公链的到来可以解决数字货币实现问题。然而,公链之所以区别于私有链与联盟链,核心正在于其共识机制的设计需要保证互不相识、不断扩充的节点能通过技术手段彼此间建立信任,并集合算力完成任务,保障公链稳定、高效地运行。初链希望在保持去中心化本质的同时,尽可能提升效率。POW 与 PBFT 相结合的混合共识机制设想的出现,为问题的解决带来了一丝曙光。

6.2初链的技术架构

共识机制的设计是公链与私有链、联盟链的核心差别,其需要足够去中心化以实现安全性,又需要高运行速度以保证性能。行业已经基本形成认识——仅靠 单一共识机制难以兼顾效率与去中心化本质。初链选择了将PBFT 的高效与 POW 的去中心化相结合的混合共识机制。在保证去中心化本质的基础上,实现高性能、高可靠性的公链开发,以承载规模化商用 Dapp 运行的目标。保留 PBFT 记录账本的机制不动,将超级节点的选取开放给公链,利用 POW 协议作为准系统支持超级节点的动态选取和协议达成,将主干节点社区的组建由私有链与联盟链性质转换为公有链性质。

6.3初链的优越性

初链采用的是混合共识机制。在主流共识设计领域中,POW共识可以实现大规模的去中心化,节点数目有公认的可扩展性,但性能较差。而以PBFT为代表的拜占庭容错协议虽然在一定条件下可以有较高的性能,但是它们通常被设计于私有场合使用,即所有节点需要在协议开始前知道相互的身份(公钥等),并且节点不能自由出入网络。初链的解决方案各取二者所长,选择了将 PBFT 的高效与 POW 的去中心化相结合的混合共识机制。其次,初链在PBFT上推出TVM。将植入每一个进行决策的主干结点,使得它们能根据单个需求进行调用请求。通过智能合约来落地应用共识机制。最后,合约抽象层将抽象智能合约中的基本商业逻辑,简化开发者设置复杂智能合约的流程。

初链保留 PBFT 记录账本的机制不动,将超级节点的选取开放给公链,共识效率得到提高,可满足高频交易量的需求。各个共识节点由业务的参与方或者监管方组成,安全性与稳定性由业务相关方保证,共识的时延大大缩减,基本达到商用实时处理的要求。同时,利用 POW 协议作为准系统支持超级节点的动态选取和协议达成,可实现完全去中心化,节点自由进出。并且将PBFT和POW共识结合在一起,解决了去中心化和性能的矛盾。与此同时,初链是全球最早的混合共识公链,在研究上和工程上都会存在诸多问题,例如在混合共识内部的边角情况处理、改善潜在的leader处理能力上遇到瓶颈,混合共识场景下的节点策略、可信的外部数据获取等等,都需要我们进一步去解决或者提出优化方案。随着初链的越来越成熟,我相信它将受到保险、医疗、游戏、公益、资产证券化、数字广告等各个行业的青睐。

6.4初链:TrueChain

随着区块链技术优势不断体现,在各个领域都相继有成功的区块链应用落地实现。区块链应用解决方案,在市场上需求也越来越大。打造承载未来商用去中心化应用的公链,是时代的需求,也是初链的梦想。基于混合共识机制设计的初链,旨在为社会提供高速点对点通信、价值传输以及智能合约基础设施。在此之前,部分私有链与联盟链已成功落地应用,让人们对公链开发者们产生了更大期望,初链在保持去中心化本质的同时,提出了POW与PBFT相结和的混合共识设想,旨在区块链上的发展道路上贡献出更多的力量。

猜你喜欢

转载自blog.csdn.net/kuangsonghan/article/details/81255244