区块链:分布式共识算法

中心化的交易模型

由中间节点验证交易有效性,所有参与者以中心节点的账本为准。

但是这样的中心化的交易成本很高,需要一定的维护。例如一些临时性操作(像是银行中卡被盗刷),这些交易实际上是无效的,最终还需要修改回数据,这样的成本就很高了。

去中心化的结果

没有一个信任节点去验证交易的有效性,没有办法解决一些交易上的纠纷。

网络是开放的,所以任意一个节点都可以发送有效的或者无效的,甚至恶意的交易。这些恶意的交易就有可能导致接下来讨论的双重支付问题。

双重支付问题与拜占庭将军问题

用户A向用户B转了600,向C发出公告说自己向B转了600,但是他同时向用户D,E发送说自己向用户B转了500(自己还剩100),那么D,E同时也会发布给C说A向B转了500,那么此时C应该相信谁?

这里如果分别看两条链的数据结构会发现并没有什么异常,但是如果C同时接受到两条不同的合法信息,就会产生这个问题。

这里有一个思路。既然能有链条合法的链,那么让所有人用同一个版本。那么这里就会有几率产生一种情况,就是A实际上支付了B600,但是所有人都承认了A向B支付了500,自己剩下100的情况。

那么这里可以把问题定性为如何设计一套算法让所有节点当遇到分歧的时候能够达成一致。也就是基于异步通信的分布式共识问题

同样,拜占庭将军问题也是一个类似的问题。这里的图片来自ppt。

这些问题本质上都是基于异步通信的分布式共识问题。我们来看看每个词条。

异步通信

相对于同步通信,异步通信在发送字符时,所发送的字符之间的时隙可以是任意的。也就是说信息发出后,可能到达可能不到达。

分布式

结点之间互相独立,互相不信任,不受中央控制。

共识

目标是所有成员达成一致的意见。

解决拜占庭将军问题

FLP不可能性定理

“在分布式异步通信的网络里,即便存在一个故障的节点,不存在可解决一致性的算法。”,FLP不可能原理实际上告诉人们,不要浪费时间,去为异步分布式系统设计在任意场景下都能实现共识的算法。

但是!!!不存在任意情景下都适用的算法。但我们可以进行一些假设,来进行限制来简化问题。

假设1:多数是忠诚

因为如果超过一半都是叛军,结果只能失败,问题是无解的。

假设2:拥有原计划(缺省值)

就是在所有人进攻之前就确定如果没有受到任何信息,即使信息被截,按照原计划进攻。

假设3:将军签名无法伪造

如果存在叛将可以伪造签名,就有无穷大的权利,如肆意更改进攻时间,截获其他的信使,最终这个问题还是无解。

可是还是发现,既便加入了限制还是很难实现。

算法类型与相关研究

1、非拜占庭错误的情况:Paxos,Zab等

2、允许拜占庭错误:Extended Paxos、PBFT、工作量算法、权益证明。

总结一下

去中心化交易模型容易导致类似双重支付或者拜占庭将军问题出现,这些问题的实质都是基于异步通信下的分布式共识算法,理论上这个问题是无解的,而在实际操作中可以尝试简化问题,限制条件来找到一种成功率较高的解法。那么明天再来看看,比特币是怎么实现共识算法的。

猜你喜欢

转载自blog.csdn.net/weixin_41960890/article/details/84375598