张明丨Libra:概念原理、潜在影响及其与中国版数(4)
分类:经典语录 热度:

第四,可验证性。Move注意到了其他一些区块链语言的常见问题,并由此对自身功能进行了一些限制:
其一是不允许动态指派,因其容易混淆究竟哪一个模块调用了特定功能,并造成非线性的程序行为;
其二是不允许多个可变的指针同时指向一个变量,这会导致同一时刻该变量被多个来源进行修改,从而导致最终状态难以预测;
其三是对资源进行强制封装,以保证只有本模块能行使对该资源的修改权,从而防止外部模块对资源的破坏。


2)使用拜占庭容错(BFT)共识机制


 Libra采用了LibraBFT共识协议来保障整个网络在高交易处理量、低延迟和更高能效的情况下快速达成一致。为了说明LibraBFT的原理,我们需要首先探讨是什么样的需求使其变得如此重要。


拜占庭容错(Byzantine Fault Tolerance)始于图灵奖得主Leslie Lamport描述的一个计算机领域经典问题:拜占庭将军问题。
问题大意是拜占庭帝国在历史上幅员辽阔,其军队相互分散。在不存在核心指挥官的情况下,相互联系只能依靠各个军队的将军间进行两两点对点通信。
如果需要进攻或有敌军进犯,各将军间便需要通过沟通达到协调一致的效果。
在现实环境下,可能会有若干因素影响共识达成:消息传递通路可能存在问题;部分将军可能叛变;叛变的将军可能会恶意传达错误消息给其他将军;部分军队可能被围困导致无法行动等。
在如此恶劣的环境之下,如何保证大部分军队取得共识?或者说,到底有多少将军同时出现问题,才会导致系统的全盘崩溃?


这个比喻跟区块链系统中面临的问题非常类似。区块链去中心化的根基在于全网需要针对某笔交易(transaction)取得共识。
在没有中心节点的情况下,共识只能依靠网络中各个节点相互之间点对点通信来进行协商。但实际网络中通信链路可能出错,各个节点可能会失效,同时可能会发生恶意攻击。那么如何保证全网能够顺利取得共识呢?


为了解决这个问题,比特币采用的是工作量证明(PoW)的方式,即由矿工们通过付出大量算力挖矿来争夺对当前区块的记账权,他们的回报就是挖矿得来的比特币。
不诚实的矿工不会愿意付出如此大的代价来换取挖矿收益,但为了破坏整个网络,他们必须掌握全网50%以上的算力才可掌控新区块的产生。这在当今世界几乎是不可能的。
但这样做也有明显缺陷,其计算复杂导致能源浪费严重,同时导致区块生成的时间过长,确认交易往往需要数十分钟的等待时间,用作在线支付系统之时实时性难以满足要求。


 LibraBFTHotStuff算法改进而来。为避免过于复杂的技术讨论,本文只简要说明共识的流程。
与比特币完全工作在网状网络不同,BFT算法为了降低流程复杂度,需要工作在有若干重要节点的星型网络中,即各重要节点之间互相通信,其余节点只跟临近的一个重要节点之间产生联系。这也是为何Libra在初期要工作在联盟链,而不是公有链上的重要原因。


LibraBFT定义这些重要节点为验证者(Validator),在网络中起到接受交易请求和验证区块有效性的作用。
当一笔交易产生后,它会被最近的一个验证者接收,此时该验证者就作为发起者(Leader)来组织验证程序。它将若干笔交易打包进一个区块(Block),并广播给网络上所有其他验证者(图1中步骤①)。
其他验证者收到区块后进行验证,如果认可这一区块,则向发起者回传投票(Vote)结果(图1中步骤②)。在收集到足够多的投票后,发起者生成一个法定人数证明(QCquorum certification),代表该区块已经得到了足够多节点的确认,并把该证明向所有验证者广播(图1中步骤③)。
此时所有验证者节点都将根据这一消息更新本地保存的区块链状态,将新验证的内容加入。这一过程称为一轮(Round)。之后其他交易所产生的验证内容也会陆续加入。为了避免前述失效或者恶意节点在此过程中进行破坏,新加入的内容将在三轮之后才正式被全网接纳或提交(Commit),正式成为整个区块链的一部分。

上一篇:骂黑心商家的经典语录 下一篇:把“不忘初心”贯穿于学习始终
猜你喜欢
各种观点
热门排行
精彩图文