博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
区块链共识机制简述
阅读量:5790 次
发布时间:2019-06-18

本文共 1479 字,大约阅读时间需要 4 分钟。

想知道更多区块链技术知识,请百度【链客区块链技术问答社区】链客,有问必答!!

共识机制是分布式系统的核心,在P2P系统中,互相不信任的节点通过预设机制最终达到数据的一致性称为共识。共识机制也就是为了达成这种共识所要采用的方法。 

共识机制的目标:
一致性:所有诚实节点所保存的区块链前缀部分完全相同。
有效性:由诚实节点发布的消息终将被所有其他诚实节点记录到自己的区块链中。
如何评价一个共识机制的优劣:
安全性:能否有效防止二次支付,私自挖矿
扩展性:当系统成员和待确认交易数量增加时,所带来的系统负载和网络通信量的变化,通常以网络吞吐量来衡量
性能效率:每秒可以处理的交易数量
资源消耗:达成共识的过程中,所要消耗的CPU、内存等计算资源
现在主要的共识机制有工作量证明、权益证明、拜占庭一致性协议三种。因为本篇文章的目的是简述共识机制,所以我们并不关注每个机制的具体算法。
工作量证明
工作量证明机制,即节点通过“多的工作量”来换取信任。每个节点在提出某个阶段的待定区块之前,必须完成达到指定工作量的工作;不仅如此,如果某个节点收到了多个待定区块,那么哪个区块的链更长,它就验证哪个区块,因为更长的链意味着链所包含的工作量更多。 
大家可能会有一个问题,为什么我们要相信工作量多的人呢?还是因为这种机制的特性之一:伪随机性。它保证某个节点优先完成工作量证明的概率只取决于它占有的计算资源(CPU、内存等)占全世界所有节点的计算资源总和的比例。保证了相对的公平性(通俗上说,就是拼人数,好人多就行。拿现实世界打比方,如果你想搞破坏,必须要收买/征服全世界一半以上人口,或者自己一个人比全世界其他所有人加一起都有钱)。 
不足:
严重的效率问题
过多强算力节点联合,可能导致安全问题(目前计算资源逐步趋向中心化,与区块链初衷相悖)
资源消耗过大
权益证明
由于工作量证明的过大资源消耗与资源浪费问题,人们越来越关注权益证明机制。 
假设网络同步性较高,系统以轮为单位运行。在每一轮的开始,节点验证自己是否可通过权益证明被选为代表,只有代表可以提出新的区块。代表在收到的最长的有效区块链后提出新的待定区块,并将自己生成的新的区块链广播出去,等待确认。下一轮开始时,重新选取代表,对上一轮的结果进行确认。诚实的代表会在最长的有效区块链后面继续工作。如此循环,共同维护区块链。 
不足:
如果网络同步性较差,则系统很可能形成分叉,破坏一致性。
代表节点操控一切
拜占庭一致性协议
这一机制的主要目的是,解决如何在有错误节点的网络中使所有正确节点对某个输入值达成一致。该机制资源消耗少,效率高,一致性强(不易产生分叉)。 
以实用拜占庭容错协议为例, 协议要求在有3f+1 个节点的分布式系统中, 失效节点数量不超过f个。实用拜占庭容错协议的每一轮包括3个阶段: 预准备阶段、准备阶段和确认阶段。在预准备阶段,由主节点发布包含待验证记录的预准备消息。接收到预准备消息后,每一个节点进人准备阶段。在准备阶段,主节点向所有节点发送包含待验证记录的准备消息,每一个节点验证其正确性,将正确记录保存下来并发送给其他节点。直到某一个节点接收到2f个不冋节点发送的与预准备阶段接收的记录一致的正确记录,则该节点向其他节点广播确认消息,系统进人确认阶段。在确认阶段,直到每个诚实节点接收到2f+1个确认消息,协议终止,各节点对该记录达成一致。 
不足:
安全性差(容错率仅为1/3,其他两种均为1/2)
扩展性差(该协议的效率取决于节点数量,不适用于节点数量过大的区块链系统)
对主节点有依赖

转载地址:http://gemyx.baihongyu.com/

你可能感兴趣的文章
Angular - -ngKeydown/ngKeypress/ngKeyup 键盘事件和鼠标事件
查看>>
Android BlueDroid(一):BlueDroid概述
查看>>
Java利用httpasyncclient进行异步HTTP请求
查看>>
宿舍局域网的应用
查看>>
html代码究竟什么用途
查看>>
Hadoop HDFS编程 API入门系列之路径过滤上传多个文件到HDFS(二)
查看>>
Python version 2.7 required, which was not foun...
查看>>
context:annotation-config vs component-scan
查看>>
exgcd、二元一次不定方程学习笔记
查看>>
经典sql
查看>>
CSS3边框会动的信封
查看>>
JavaWeb实例设计思路(订单管理系统)
查看>>
source insight中的快捷键总结
查看>>
PC-IIS因为端口问题报错的解决方法
查看>>
java四种线程池简介,使用
查看>>
ios View之间的切换 屏幕旋转
查看>>
typedef BOOL(WINAPI *MYFUNC) (HWND,COLORREF,BYTE,DWORD);语句的理解
查看>>
jsp 特殊标签
查看>>
[BZOJ] 1012 [JSOI2008]最大数maxnumber
查看>>
gauss消元
查看>>