区块链是去中心化、分布式的,每个人都可以自由的参与进来,共同处理区块链中的数据。所谓绝对的自由必然带来绝对的混乱,作为一个巨大的分布式计算网络,必然有一个绕不开的问题–拜占庭将军问题

拜占庭将军问题

拜占庭将军问题(Byzantine failures),是由计算机科学史上的传奇人物莱斯利·兰伯特(Leslie Lamport)提出的。

拜占庭帝国派出10个将军去攻击敌人,这支敌人可以同时抵御5支拜占庭军队的同时袭击。而这10个拜占庭将军在分开的状态下包围了敌人,并且只能依靠通信兵骑马相互通信来协商进攻意向及进攻时间。但是这些将军们不能确定他们的通信兵中是否有叛徒,叛徒可能擅自改变进攻意向及进攻时间。在这种情况下怎样才能保证同时有多于5支军队攻击,来赢得胜利?

放到区块链中,拜占庭将军问题主要针对点对点通信中的分布式系统一致性问题。可以简单的概括为为 在整个网络中的任意节点都无法信任与之通信的对方时,如何能创造出共识基础来进行安全信息的交互而无需担心数据被篡改。

区块链四大核心技术之一的共识机制就是为了解决这个问题。

什么是共识机制?

共识,对特定事务具有相同的认识或态度。 共识在我们的生活中无处不在,说一个场景
中午你和同事一起吃午饭,你们在讨论怎么吃,然后你出来提议一起点外卖。其他人对你的提议进行投票,如果没有异议那么这就达成了共识。

区块链是一个点对点的分布式数据库结构的网络账本。这个账本与传统账本不同,不是由会计或少数几个人来记账,而是人人都可以参与记账。在没有中心机构的情况下,怎么确保别人的数据是正确的?

这就需要一套规则来规定怎样记账才是有效的,而这一套规则就是共识机制。

这一套规则主要有两点功能:

  • 如何记账
  • 怎样达成共识

按照这套规则来决定区块链中谁取得区块链中的记账权,也就决定着由谁来产生新的区块。

共识机制的作用非常大,直接关系到记账权和相关收益的分配。如果把区块链比作一个社会,那共识机制就是这个社会的法律。不夸张地说,共识机制就是区块链的灵魂。

区块链发展到现在,已经有了多种共识机制,这里主要介绍三种被提及最多的共识机制。

POW 工作量证明

POW(Proof of Work),工作量证明,闻名于比特币,经常提到的挖矿一词也是起源于POW。

POW的设计思想是计算一道数学难题,这道题计算过程是复杂的,但是验证过程是简单的。这种特性称之为计算不对称特性。

比如在比特币中选定为以SHA256算法计算一个目标哈希,使得这个哈希值符合前N位全是0。 举个例子,给出一个字符串”Blockchain”,要求计算一个数字,与给出的字符串拼接起来,进行SHA256后,得到的结果前4位是0,这个数字称作nonce。比如字符串”Blockchain1234”,nonce就是1234。由于结果只能暴力搜索,而且搜索空间非常巨大,作弊几乎不可能。

只要计算出目标值nonce就会获得记账权,距离上一次打包到现在未确认的交易,就可以一次性将未确认的交易打包并广播了。其他节点在接收到消息后,可以对nonce进行验证。

简单来说POW就是谁的计算能力越强,计算的越快,获得记账权的概率就越高。每个节点都在同时解题,一旦有一个节点解出来,其余节点解题的过程也就白费了,只能解下一个节点。所以这种证明方式需要消耗大量能源(电力及计算硬件损耗)。

并且理论上,在POW共识机制保护下,如果一个节点的计算力超过区块链全网的51%,即可对区块链网络进行有效攻击。因此许多基于比特币代码产生的、市值较小的山寨币很容易遭受攻击。这个51%攻击法在「矽谷」这个美剧第四季上曾经上演过这个情节。

POS 权益证明

POS(Proof of Stake), 权益证明,最早出现在点点币的创始人Sunny King的白皮书中,它出现的目地就是为了解决POW挖矿出现大量资源浪费的问题。

在POS中个有币龄的概念,它指的是持币数量乘以持币天数。
相较与POW中人人都可以参与,人人都可以计算,POW更像是一种选举机制。节点需要抵押一定的代币,区块链网络会根据抵押代币的币龄,随机选取一个节点,由该节点进行打包区块。 抵押代币的多少,影响着被选中的概率。

这种方式不需要每个节点都进行大量的运算,节省了能源。但它同样也有一些缺点。比如,PoS机制中初始的代币分发比较模糊,如果初始代币分发不下去,就很难形成之后的权益证明。并且POS也存在51%的问题,理论上谁能掌握51%的代币,谁就能掌控整个网络,所以,它的去中心化程度要弱一些。

DPOS 代理权益证明

DPOS(Delegated Proof of Stake),代理权益证明。最初由Bitshares、Steemit以及 EOS 的创办人Dan Larimer提出,他在区块链项目Bitshares中实现了 DPoS 共识机制。DPOS与POS类似也是一种选举机制,它有点像民主大会。

其过程是每一个持币人进行投票,选举出一定数量的代表,并由这些代表来打包区块和验证。这些代表节点的权利是相等的。比如,EOS将产生21个主节点,以及100个备用节点。如果有些代表节点不称职,就随时有可能被投票出局。

DPOS就像董事会投票,持币者投出一定数量的节点 (董事)。代表按照既定时间表,轮流产生区块,如果代表没能很好的行使权力(比如产生区块),他们会被除名,网络会选出新的代表节点来取代他们。

DPOS通过选举少数节点来出块记账,确实从网络传输和确认时间上看,大幅提升了性能。但是只有少数的节点出块记账的理念,牺牲了部分去中心化。因为DPOS机制的设计并不能保证一定有足额的真实的区块生产者,因为一个人或一个实体,可能控制着多个节点。如果节点的持有人相互串通,将进一步形成巨头垄断,这和区块链思想更是南辕北辙。这也是为什么V神怒怼DPOS的原因。