风险提示:理性看待区块链,提高风险意识!

什么是共识和分叉?

2个回答

诛限10星评价

2020-04-15 14:01:25

什么是共识和分叉?

共识在去中心化系统中必不可少,如果没有共识,去中心化的系统就不能运转。

但在中心化系统中,并不需要共识。中心化系统只存在两个角色:命令者(控制端)与执行者(受控端)。它们是一对一或一对多的关系。

举个例子,一对一的关系,比如使用遥控器控制电视,比如使用鼠标控制电脑,比如某些妻管严的家庭,丈夫对妻子说一不二,言听计从。

一对多的关系,比如在90年代,有一种BP机放羊的方法。把BP机挂到每个羊群首领的脖子上。牧羊人只要给BP机发消息,所有的羊群都会被羊群首领带回来。但羊群首领只认BP机的震动,而无法识别BP机的内容。如果有其他人知道了BP机的号码,向其发送信息,也可以通过BP机的震动控制羊群。

在中心化的系统中,受控端相信控制端,它必须执行控制端的指令,除非它坏了。但在去中心化的系统中,没有命令者与执行者。所有节点都是平等的,都按照事先规定的机制来运转。这套机制就是共识。

回到放羊的例子,如果这些羊群并不归1个牧羊人管理,而是需要5个牧羊人投票表决。当5个牧羊人讨论羊群要不要回家的时候,需要进行投票。假设有3个人同意,有2个人反对,则少数服从多数,牧羊人小组达成共识,让羊群回家。这种共识属于系统之外的共识。

如果对BP机进行改造,每次要收到5个指令,1代表回家,0代表不回家。则BP机根据比例判断是否震动。5个牧羊人开始发送指令,有3个牧羊人要羊群回家,有2个牧羊人要羊群不回家,则BP机收到了3个1和2个0,按照规则,于是BP机震动,羊群回家。这就是系统内的共识。共识就是多方认可某项规则或提议。

区块链中的共识,是根据一套规则来决定谁有记账权及验证记账是否有效。共识能让每个节点的数据都相同,从而保证系统整体的一致性。

如果在共识中产生了分歧,则会形成分叉。下面举个简单的例子来解释分叉。

现在有一个由3个节点组成的区块链流水账,每个节点都有1份流水账,总共有3份流水账,内容如下:

节点a的流水账:

1月1日,张三转给李四一个包子。

1月2日,李四转给王五两个包子。

节点b的流水账:

1月1日,张三转给李四一个包子。

1月2日,李四转给王五两个包子。

节点c的流水账:

1月1日,李四转给张三一个包子。

1月2日,王五转给张三一个包子。

在这个例子中,节点a和节点b的流水账相同,却和节点c有出入。区块链必须保持一致性,否则新的流水账不知该以谁为准。节点a和节点b相同,则2/3的结果作为最终结果。节点a和节点b的数据最终会覆盖节点c,使得整个区块链达成一致。

如果节点c始终不承认a和b怎么办?节点c可以拉上新的节点d和e,让d和e的流水账和自己一致。这样新的系统有5个节点,而3/5大于2/5,从而达成新的一致性。或者c节点贿赂b节点,b节点的数据也改过来和节点c一致。

这样,就形成了一个分叉。在分叉的链中,1月1日,李四转给了张三一个包子。而在分叉之前,却是张三转给李四一个包子。

可见,分叉的动力源自利益。为了避免恶意分叉,共识需要有安全的加密算法做支撑,还需要有合理的经济模型做制约。

经过上面的描述,相信大家对共识能有一个全新的认知。


巧乐兹7星评价

2020-04-15 14:04:48

第一个概念,叫做consensus,中文叫做共识,就是大家对一个事件,都同意,不光是发生了事件,事件A和B,而且事件A先于事件B的顺序,都一致认同

第二个概念,叫做consensus finality,就是终极共识,意思就是我们在做下一个决定之前,现有这个决定,必须是终极的,不能改变的

第三个概念是分叉,fork比特币采取的pow,原理就是在进行哈希碰撞,那么在这个过程中,基本上会出现几个人同一时间,达到哈希碰撞的结果。

Hash函数的实现多种多样,在安全领域应用最为广泛的是SHA-x系列和MDx系列。Hash函数也划分为带密钥的Hash函数和不带密钥的Hash函数,通常所说的Hash函数是不带密钥的Hash函数。由于Hash固定长度输出的特性,必然会存在多个不同输入产生相同输出的情况。如果两个输入串的hash函数的值一样,则称这两个串是一个碰撞(Collision)。在理论范围内,存在一个输出串对应无穷多个输入串,所以碰撞具有其必然性。

那么pow其实是没有终极共识的,一旦出现共识分叉,比特币原则是最长链获胜,那么短的分叉,就会被放弃。但是在理论上,如果有一帮人,决定就是将这个短分叉持续下去,那么真正的两条链就分出来了,当然事实上大家没有这样做。

第四个概念,就是软分叉,soft fork,就是这个分叉,其实不是共识分歧产生的,而是软件升级,导致未升级和已升级软件,还是可以交流

第五个概念叫做硬分叉,hard fork,就是软件升级之后,已升级和未升级软件之间不兼容,鸡犬之声相闻 老死不相往来。