什么是共识
一个系统想要正常运行,就必须要有一个系统成员都认可的规则来说明如何分工、谁来领导、奖罚机制等问题。
在中心化系统中,所有节点都只需要询问超级节点就能得到一致的结果。
而区块链是去中心化的数据库,且区块链实行少数服从多数的机制,所以区块链中的节点只能通过相互通信得知哪些规则(即区块中的交易)被大多数节点认可。区块链中大多数节点都认可一条交易的过程,就是区块链对这条交易达成共识的过程。
为什么会出现达不成共识的情况
系统中的恶意节点会给不同的节点发送不同的信息。
比如,系统中有A,B,C三个节点 ,其中C是恶意节点。C给A发送交易“小明给小黄转5元”,C给B发送交易“小明给小黄转50元”。A节点会在账本中记载“小明-5元,小黄+5元”,B节点会在帐本中记载“小明-50元,小黄+50元”。最后,A,B节点会在小黄到底有多少钱这个问题上达不成共识。(这就是著名的拜占庭将军问题)
未达成共识的体现
区块链分叉。可分为正常的分叉和恶意的分叉攻击
正常分叉
因为网络的延迟导致的分叉
硬分叉
大部分节点进行了软件升级(new node),少数节点没有进行软件升级(old node)。new node发布的区块在old node处验证不通过。
硬分叉是永久性分叉【old node的本地区块链中只有old node生成的区块,new node的本地区块链中由new node发布的区块所在的链成为最长合法链】
软分叉
大部分节点进行了软件升级(new node),少数节点没有进行软件升级(old node)。old node发布的区块在new node处验证不通过。
软分叉是暂时性分叉【new node的本地区块链只有new node生成的区块,old node的本地区块链中会出现分叉(new node发布的区块和old node发布的区块),因为new node占大多数,最终new node发布的区块所在的链会成为最长合法链】
分叉攻击
区块链不可能三角问题
区块链不可能在scalability,security,decentralization这三个方面同时达到最优。
- scalability高效可扩展【对标用户体验感】
----高效&