EKT多链技术谈 | 共识算法演义——以太坊只能被以太坊打败吗?

2019-03-22 15:22:37 浏览数 (1)

摘要:比特币的诞生给我们带来了一个可以自运转网络的成功范例。通过共识算法、加密、点对点网络以及奖励机制等,可以形成一个自治的社区,可以形成一个通过挖矿机制(POW)来达成一种不通过中心机构来达成的信任,最终实现点对点的价值流通。

在第一代区块链账本(比特币)的基础上,以太坊加入了智能合约的概念,但继续沿用了POW共识机制,直到最近(5月8日),以太坊网络发布了一项酝酿和讨论了很久的升级计划——新版Casper代码。 Hybrid Casper Friendly Finality Gadget被引入后,能将网络从与采矿相关的问题中解放出来,例如“能耗过大,采矿硬件配置过高,采矿池集中和ASIC新兴市场等问题”,最终目标是将网络从工作量证明机制向权益证明机制(POS)转化。不过距离EOS主网上线也只有一个月,围绕着EOS上的股份授权证明机制(DPoS)的全球21个主节点之争也一直是最近的火热话题。以太坊区块链被认为是区块链的2.0时代,长期霸占比特币之下Queen的宝座,虽然国外区块链社区甚至认为以太坊体量变得太大,已经不可轻易战胜,但类似EOS这样的挑战者层出不穷,除开PoW、PoS、DpoS,还有诸如PBFT,DBFT,Tendermint,Paxos,Pool验证池等一系列共识机制。

对于投资者而言,未来将是一场底层链争夺战,不同的公链会支持不同的共识机制,熟悉这些概念变得尤为重要。

【De Beers的微笑】

“A Diamond is forever"(钻石恒久远,一颗永流传)如一颗种子,它存在大众深深的脑海里。天然钻石作为石头,它的工业用处实在是越来越少,可以说,如果没有戴比尔斯(De Beers),天然钻石不会有今天。

钻石按功用分有工业钻和首饰钻,按来源分有天然和人造两种。一般普通人讲钻石指的都是天然首饰钻。最早人们发现钻石并没有觉得特殊,只是觉得硬度指标这个特性可以在工业上有点用处,于是玻璃刀,拉丝模等金刚石制品被应用到一些领域中。可是1955年GE通过高温高压获得人造金刚石的技术后,天然金刚石的最后一点工业价值也失去了。现在除非是一些高规格高精度工艺需要,天然金刚石没有特别大的用处。因为人造的成本越来越低。我国在人造金刚石原材料方面占了全球的90%左右。不过戴比尔斯跳出来了,告诉你女人离不开钻石,钻石稀有,璀璨,拥有不可限量的价值,一颗钻石成就一段人生,一块破石头就是婚姻的见证。戴比尔斯在钻石文化上做的一些努力大家可以去翻翻史书资料,实在是太多了。

这是可怕的营销。能卖钻石的,只有大庄家De Beers和他的销售帝国。所以钻石并不稀缺,价格却能维持高企。你不抽烟,却肯定吸过二手烟。你想买钻石,却几乎找不到二手的。男人们肉疼买下的每颗昂贵小钻戒,里面都闪烁着大庄家De Beers深邃的微笑。

共识的形成真是件奇妙的事情…它受到人为和非人为因素的影响。首先我们来看看比特币PoW共识机制的构成。一句话简单介绍:干的越多,收的越多。比特币依赖机器进行数学运算来获取记账权,资源消耗相比其他共识机制高、可监管性弱,同时每次达成共识需要全网共同参与运算,性能效率比较低,容错性方面允许全网50%节点出错。

工作量证明是矿工在处理交易数据(对数据也是进行哈希)的同时不断的进行哈希计算,求得一位前23位为0的哈希值,这个值成为nonce黄金数。当全网有一位矿工哈希出nonce时,他就会把自己打包的区块公布出去,其他节点收到区块验证区块后就会一致性认为这个区块接到了区块链上,就继续进行下一个区块的打包和哈希计算。在这个过程中,中本聪是通过算力的比拼牺牲了一部分最终一致性(因为会有分叉的产生)并且需要等待多个确认,但是这种简单暴力的方法却保证了整个区块链系统的合法性,而且把区块链系统的健壮性提升到极致,就算全网只剩下一个节点运行,这个区块链系统还是会继续运行下去。最后POW也充分提高了区块链系统的安全性,依靠51%攻击理论去破坏区块链系统是只有政府或者疯子才会采取的方法。

和钻石类似,比特币也经历了从一文不值到身价不菲万人追捧的过程,这背后体现的正是社区、矿工和普通投资者对其背后机制的认可。八年前 Laszlo Hanyecz用1万枚比特币购买了两个披萨,因为当时世人既没有发掘比特币的价值,也没有人来维护它的价值,而这背后却潜藏着巨大的增长空间。所以投资者需要尽可能的了解共识机制的运行机理,才能当下一个先进的共识机制出现时,拥抱它。

【Tendermint还是Casper?】

PoW被广泛诟病的耗能问题(挖矿成本高)促使许多区块链行业的前驱在不断地研究和创造新的共识机制。PoS就是其中叫声最响亮的一个。

在2011年,BitcoinTalk论坛对一个叫做权益证明(PoS)的概念组织了一场讨论。最初的PoS协议例如点点币,实现结果的并不理想。第一个真正提出将BFT研究应用到PoS公有区块链环境中是Jae Kwon,他在2014年创造了Tendermint,这个机制我们下面会做重点介绍。

对PoS的一句话介绍是:持有越多,获得越多。PoS主要思想是节点记账权的获得难度与节点持有的权益成反比,相对于PoW,一定程度减少了数学运算带来的资源消耗,性能也得到了相应的提升,但依然是基于哈希运算竞争获取记账权的方式,可监管性弱。该共识机制容错性和PoW相同。它是Pow的一种升级共识机制,根据每个节点所占代币的比例和时间,等比例的降低挖矿难度,从而加快找随机数的速度。

不过,以太坊正在计划从 POW 机制切换为 POS共识机制 Casper,存在两个不同实现的版本,分别是:

Casper the Friendly Finality Gadget(FFG)

Casper the Friendly GHOST: Correct-by-Construction(CBC)

Casper FFG 是由 Vitalik 主导的,侧重于通过逐步迭代实现,慢慢过渡到 POS 机制。而 Casper CBC 则是由 Vlad Zamfir 主导的,不同于传统的协议设计方式,即先定义完整的协议,CBC 协议在开始阶段只是部分确定的,其余部分协议以证明能够满足所需/必需属性的方式得到。不过,也只是两种不同的方法,关于 POS 的核心理念还是一致的。相对来说,FFG 比较容易理解,也是即将第一个部署到以太坊的 Casper 版本。

FFG 版本的 Casper 是一种混合 POW / POS 的共识机制,该机制下的每次出块依然还是采用 POW 挖矿机制,但每 100 个区块会增加一个 POS 检查点(checkpoint),通过验证人(validator)来评估区块的最终有效性。创世区块是一个检查点,区块高度为 100 的倍数的区块也是检查点,将这些检查点连起来就组成了一条检查点链(checkpoint chain)。检查点一般会有两种状态:justified 和 finalized,finalized 则表示已经确定为最终有效的,该状态的检查点至少已经存在一个子检查点,justified 则表示该检查点是已经被证明合理的,finalized 的检查点一定是 justified 的,但反过来则不一定。而一个检查点是否有效,是通过多个验证人投票得出的结果。

那么Tendermint是什么呢?Tendermint属于拜占庭容错算法,它针对PBFT(实用拜占庭容错算法)做了优化,只需要有两轮投票即可达成共识。简单地说,Tendermint里面对高度为h的块共识的每一轮包括3个步骤:

Propose(提议),Prevote(预投票),Precommit(预提交)。当在某一轮达成共识(收到大于2/3的Precommit投票)后,就会进入对下一个高度的共识,从第0轮开始 。 Tendermint中有个很重要的概念:PoLC,全称为Proof of Lock Change,表示在某个特定的高度和轮数(height,round),对某个块或nil(空块)超过总结点2/3的Prevote投票集合,简单来说PoLC就是Prevote的投票集。Tendermint中的参与者叫做 “验证人”(validator)。他们轮流对交易区块进行提议,并对这些区块进行投票。区块会被提交到链上,每一个块占据一个高度h。当然提交块可能会失败,如果失败就会开始下一轮的提交。 要想成功提交一个块,需要有两个阶段的投票:预投票和预提交。在同一轮提交中,只有超过2/3 的验证人对同一个块进行了预提交,这个块才能被提交到链上。假设少于1/3的验证者是拜占庭,Tendermint保证安全永远不会被破坏。也就是说验证者(2/3以上)永远不会在同一个高度提交冲突的区块。因此,基于Temdermint的区块链永远不会分叉。

在当时,PoS研究做出了很大的假设:假设系统中的一系列对等节点都是静态的,并且在长时间内都是稳定的。在区块链环境中完全是不现实的。 Jae Kwon的重大突破是使Tendermint能够使用区块,哈希链接,动态验证器集合和循环的领导者选举来将BFT研究适应复制状态机(区块链)的领域。

在Tendermint环境中,出现了大量的共识算法(Honeybadger, Ouroboros, Tezos, Casper),它们都包含了BTF研究的元素以及在区块链上其他模块观察的元素。

为权益证明做的所有研究都指向一个重要问题:在不耗尽物质稀缺资源的情况下,我们可以达到工作量证明(PoW)的安全级别吗?这个问题可以转化为:PoS的投票权以链上货币计价而不是计算力计价。区块链的POS共识问题比可扩展性更被广泛讨论,运行PoW挖矿的高开销成本以及环境外部性方面存在的问题都刺激了大量资源涌入PoS安全研究。

Tendermint假设的是区块链的参与者在绝大多数时候不会作恶,因此验证者相应的惩罚机制比Casper轻,所以Tendermint更适合参与者们都相对可信的区块链,比如公有/私有链结合的企业级区块链。然而Casper假设的是区块链的参与者都是不可信的,所以相比Tendermint而言设计·3了非常严厉的惩罚机制,因而更适合去中心化无信任基础的区块链。当然,两者都还有问题,还远不是完美的共识机制。

在区块链行业生态当中,一个能够满足商业需求、高效的区块链公共应用平台是必不可少,并占有极其重要的地位。Ethereum的兴起以及在2017年的爆发性增长,为我们提供了一个绝佳的参考范例。距离EOS主网上线还只有一个月,围绕着EOS上的股份授权证明机制(DPoS)的全球21个主节点之争成为最近大热话题。DPoS共识机制,简单点说,就是大家一起用手里的EOS Token来给所有节点竞选人投票,谁的票数多,谁就可以当选主节点。号称要取代以太坊生态的EOS在主网上线之前已经吸引近50个DAPP的入驻。

虽然区块链是一个能够保证输出可信的系统,但是去中心化系统容量天生不如中心化系统,所以,需要高容量的应用,可以根据需求选取中心化程度较高去中心化程度较低的区块链系统。

基本上,所有的所谓大容量高并行低延迟的区块链系统,其实都有某种程度上的中心化,中心化程度越高越快。同互联网一样,区块链提供的也不是完全的去中心化,而是,你可以用它在任何层面,进行任何程度的去中心化。所以,你对容量需求高,就需要少去中心化一点好了,至少在可靠性上,它可能会比完全中心化的系统强。

然而,不得不承认的是,整个区块链行业还处于一个在初期完善基础架构的阶段,现阶段阻碍区块链大规模应用的最大障碍存在于技术上。Ethereum目前的PoW机制以及运行效率,的确还很难支持一个庞大的去中心化商业应用生态。

EOS的DPoS在POS的基础上,多加了一个条件——“Delegated”——代表。能够获得记账权的人是社区投票选出来的,而且是轮流制。这类似于人大代表制度,我们投票表决,推选出能够代表社区整体的利益的人,而且如果这个代表表现不给力(如:没有按时记账),我们还可以换掉他。但相对于POS机制,DPOS的中心化程度降低了。

在实现拜占庭容错BFT上,Tendermint假设区块链上的部分网络同步就能实现容错,而EOS只在完全同步的网络里才发挥容错特性。其次,Tendermint上的代表(验证者)只要大于4个且没有上限,而EOS上面的代表(主节点)是固定的21个。在投票权方面,EOS使用其代币投票来实现去中心化,拥有越多代币的人具有更大的投票权。而在Tendermint上为了成为验证者并具有一定的投票权,参与者必须锁定预设数量的代币,可以是自筹资金购买代币,也可以是其他代币拥有者授权委托。CAP定理指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。当DDOS攻击发生时,Tendermint会直接停止共识服务。EOS则是继续运行,并在运行的过程产生很多的分叉,这种不一致的状态可能被攻击者利用。从这个角度来看,Tendermint将选择了C(一致性)优先于A(可用性),DPoS则相反。

显然 EOS 能够解决Ethereum一些的问题。EOS 的 DPOS 共识算法和石墨烯底层工具组能够满足每秒上万次,甚至每秒上百万次交易请求的企业级应用需求。EOS软件也提供完善的账号系统,可以帮助开发者快速开发自己的DAPP,而如果要在以太坊上开发DAPP,则需要花更多的时间去开发底层模块。

在这样的情况下,我们判断,虽然以太坊极其成功地普及了链上智能合约的技术并建立了包含各类区块链应用和 ERC-20 代币的庞大生态,但它远未发展为能够满足现实商业需求的应用平台。限制它商业发展的阻碍存在于其技术机制。声称只有以太坊才能打败以太坊也为时过早。

时至今日,底层公链依然处在非常薄弱的境地,尚且无法实现真正的安全、可靠和高效。到目前为止,对于目前整个数字货币领域而言,基本是遵循“底层公链 → 解决方案 → 项目应用”的发展逻辑。底层公链相当于区块链世界的基础设施,解决方案用来拓展底层公链的性能或为商业应用提供服务支撑。只有在底层公链扎实稳健高效运转的基础上,区块链商业应用才能发展和落地。公链在整个区块链领域的重要性和必要性,由此可见一斑。

【多链与多共识】

虽然大多数公链项目都会提出高TPS,高可用性,高扩展性,跨链等标配指标,但在区块链底层框架世界,解决性能、去中心化程度、和安全度这个三角问题,还是一个需要跨越的巨大障碍。共识机制是区块链网络运转的核心,区块链上不同节点的副本要保持一致,都需要通过共识算法来达成。但是为了保证安全和去中心化,目前区块链技术很难实现性能、安全和去中心化同时兼得。

由于货币需要一个稳定的系统,智能合约设计的越复杂出错的可能性就越高,所以在早期中本聪认为货币系统是不需要图灵完备的语言的,比特币之所以不支持智能合约也是觉得货币需要极高的稳定性。那么,如何运行区块链里保持货币稳定的同时又可以开发Dapp呢?有一种比较好的解决办法就是把Token链和DApp链分开。

在EKT中Token链是一个并行多链的结构,多链多共识,共享用户基础。设计并行多链有两个原因:

1. 每个Token发行者或者链的发行者对共识的要求是不同的,对去中心化程度要求比较高的可以选择PoW,对TPS要求比较高的可以选择DPOS,每个链的Token进行交易的时候消耗的是当前链的主币作为交易费,也提高了发行链的灵活性。

2. 并行多链可以共享用户,不同链的拥有者是一个互利关系,可以很方便的进行不同链的资产转移,而且多链并行理论上整个网络的TPS是没有上限的。

作为一个DAPP开发者最关心的肯定是三件事:1 开发难度 2 用户体验 3 社区生态。那么Token链的设计就是针对不想自己重新开发一条公链,但想要发行token和链的开发人员。EKT主要面向的对象是开发者,所以在设计token链的时候最大的想法是设计一个可以吸引大家都来发币的平台(之所以大家过来发币是因为TPS高,手续费低,可以选择发链用自己的Token做交易费,还可以和其他的链共享用户),这样可以让在EKT上开发DAPP的开发者可以获得更多的用户资源。

由于 EKT提供了一个新的编程语言AWM,是一个完全事件驱动的语言,不需要main函数,大家只需要定义自己可以对外提供的事件和参数,然后在自己定义的事件函数里面写上相应的逻辑处理即可。同时EKT还会对主流的语言进行支持,第一个是Java,然后后面陆续推出Nodejs和Python,让大家可以不用学习新的编程语言就可以写出自己的DAPP对DAPP完全屏蔽共识机制和区块的概念,让开发者只需要关心自己的逻辑即可。EKT也提供数据库和fs的支持,在短期内还会支持DAPP直接操作sql数据库,也会支持分布式文件系统。这样下来其实可以和传统互联网应用的开发没有太大差异了。

EKT的中心思想是设计一个社区的机制,让开发者可以轻易的开发一个DAPP,其他的交给EKT来处理。那么如何能建立一个正反馈的,良性运行的社区呢?最关键的特性指标其实在于TPS和延迟。平日大家吐槽最多的是TPS,其实在比特币或者以太坊上,即使TPS上去了,延迟也下不来。在EKT中,允许一些执行顺序不同对全局一致性没有影响的事件可以在区块打包前执行(其实应用中大部分都是这样的事件),然后对时序性有要求的事件区块打包后执行,这样可以实现大部分事件的秒级确认和执行。其实就是把一些事件先异步执行,然后区块打包的时候进行一致性校验。这样就能较好的降低延迟了。

以上就是我对区块链共识机制的一些思考,和一些在设计EKT的多链多共识,Token链和DAPP链分离的解决思路。

0 人点赞