POW:Proof of Work,工作证明。
比特币在Block的生成过程中使用了POW机制,一个符合要求的Block Hash由N个前导零构成,零的个数取决于网络的难度值。要得到合理的Block Hash需要经过大量尝试计算,计算时间取决于机器的哈希运算速度。当某个节点提供出一个合理的Block Hash值,说明该节点确实经过了大量的尝试计算,当然,并不能得出计算次数的绝对值,因为寻找合理hash是一个概率事件。当节点拥有占全网n%的算力时,该节点即有n/100的概率找到Block Hash。
POS:Proof of Stake,股权证明。
POS:也称股权证明,类似于财产储存在银行,这种模式会根据你持有数字货币的量和时间,分配给你相应的利息。
简单来说,就是一个根据你持有货币的量和时间,给你发利息的一个制度,在股权证明POS模式下,有一个名词叫币龄,每个币每天产生1币龄,比如你持有100个币,总共持有了30天,那么,此时你的币龄就为3000,这个时候,如果你发现了一个POS区块,你的币龄就会被清空为0。你每被清空365币龄,你将会从区块中获得0.05个币的利息(假定利息可理解为年利率5%),那么在这个案例中,利息 = 3000 * 5% / 365 = 0.41个币,这下就很有意思了,持币有利息。
DPOS:Delegated Proof of Stake,委任权益证明
PS:关于此协议的详细内容,可以参考最新的博文《[区块链]DPoS官方共识机制(BTS/EOS)详解》
比特股的DPoS机制,中文名叫做股份授权证明机制(又称受托人机制),它的原理是让每一个持有比特股的人进行投票,由此产生101位代表 , 我们可以将其理解为101个超级节点或者矿池,而这101个超级节点彼此的权利是完全相等的。从某种角度来看,DPOS有点像是议会制度或人民代表大会制度。如果代表不能履行他们的职责(当轮到他们时,没能生成区块),他们会被除名,网络会选出新的超级节点来取代他们。DPOS的出现最主要还是因为矿机的产生,大量的算力在不了解也不关心比特币的人身上,类似演唱会的黄牛,大量囤票而丝毫不关心演唱会的内容。
PBFT:Practical Byzantine Fault Tolerance,实用拜占庭容错算法。见前文拜占庭容错算法介绍。
PBFT是一种状态机副本复制算法,即服务作为状态机进行建模,状态机在分布式系统的不同节点进行副本复制。每个状态机的副本都保存了服务的状态,同时也实现了服务的操作。将所有的副本组成的集合使用大写字母R表示,使用0到|R|-1的整数表示每一个副本。为了描述方便,假设|R|=3f+1,这里f是有可能失效的副本的最大个数。尽管可以存在多于3f+1个副本,但是额外的副本除了降低性能之外不能提高可靠性。
以上主要是目前主流的共识算法。
从时间上来看,这个顺序也是按该共识算法从诞生到热门的顺序来定。
对于POW,直接让比特币成为了现实,并投入使用。而POS的存在主要是从经济学上的考虑和创新。而最终由于专业矿工和矿机的存在,让社区对这个标榜去中心化的算法有了实质性的中心化担忧,即传闻60%~70%的算力集中在中国。因此后来又出现DPOS,这种不需要消耗太多额外的算力来进行矿池产出物的分配权益方式。但要说能起到替代作用,DPOS来单独替代POW,POS或者POW+POS也不太可能,毕竟存在即合理。每种算法都在特定的时间段中有各自的考虑和意义,无论是技术上,还是业务上。
如果跳出技术者的角度,更多结合政治与经济的思考方式在里面,或许还会跳出更多的共识算法,如结合类似PPP概念的共识方式,不仅能达到对恶意者的惩罚性质,还能达到最高效节约算力的目的也说不定。
至于说算法的选择,这里引用季总的这一段话作为结束:
一言以蔽之,共识最好的设计是模块化,例如Notary,共识算法的选择与应用场景高度相关,可信环境使用paxos 或者raft,带许可的联盟可使用pbft ,非许可链可以是pow,pos,ripple共识等,根据对手方信任度分级,自由选择共识机制,这样才是真的最优。
POW:全称Proof ofWork,工作证明。这是什么意思呢?这就是说,你获得多少货币,取决于你挖矿贡献的有效工作,也就是说,你电脑性能越好,分给你的矿就会越多,这就是根据你的工作证明来执行货币的分配。大部分的虚拟货币,比如比特币、莱特币等等,都是基于POW模式的虚拟货币(算力越高、挖矿时间越长,你获得的货币就越多)。
POS:全称Proof ofStake,股权证明。这又是什么意思呢?简单来说,就是一个根据你持有货币的量和时间,给你发利息的一个制度,在股权证明POS模式下,有一个名词叫币龄,每个币每天产生1币龄,比如你持有100个币,总共持有了30天,那么,此时你的币龄就为3000,这个时候,如果你发现了一个POS区块,你的币龄就会被清空为0。你每被清空365币龄,你将会从区块中获得0.05个币的利息(可理解为年利率5%),那么在这个案例中,利息 = 3000 * 5% / 365 = 0.41个币,这下就很有意思了,持币有利息,非常好!(需要注意的是,5%的年利率仅仅是小编举例,并非每个POS模式的币种都是5%,比如点点币PPCoin就是1%年利率)。
POS设计的理念以及初衷:
POS的设计理念,来自于对比特币危机的思考,原因有三:
首先,我们都知道,比特币的区块产量每4年会减半,在不久的未来,随着比特币区块包含的产量越来越低,大家挖矿的动力将会不断下降,矿工人数越来越 少,整个比特币网络有可能会逐渐陷入瘫痪(因为大家都减少了运行比特币客户端的时间,因此越来越难找到一个P2P节点去连接和同步网络数据)。
POS解决方案:在POS体系中,只有打开钱包客户端程序,才能发现POS区块,才会获得利息,这促使很多不想挖矿的人,也会常常打开自己的钱包客户端,这帮助了P2P货币网络的健壮。
其次,若干年后,随着矿工人数的下降,比特币很有可能被一些高算力的人、或团队、或矿池,进行51%攻击,导致整个比特币网络崩溃。51%攻击简单来说,就是当你拥有了超过全球51%的比特币算力时,你将能伪造比特币网络的任何数据,比如你伪造你有一百万个比特币但实际上你没有。(拓展阅读:什么是51%攻击)
POS解决方案:在POS体系中,即使你拥有了全球51%的算力,也未必能够进行51%攻击,因为,有一部分的货币并不是挖矿产生的,而是由利息产生(利息存放在POS区块中),这要求攻击者还需要持有全球超过51%的货币量。这大大提高了51%攻击的难度。
第三,虽然我们知道比特币是一个永远不会通货膨胀的体系,因为他的货币总量表面看起来是固定的,但是,你是否知道,比特币其实是一个通货紧缩的体系。因为,当我们重装了系统,或者忘记了钱包密钥时,我们会永远无法再拿回钱包里的钱,这意味着,每年都会有一些比特币随着钱包的丢失而永远被锁定,这就形成了实质上的通货紧缩,也许在五十年后,有效的比特币,将会只剩下一千万个。
从以上3点我们可以看出,POS体系是在POW的基础上全新建设的体系,有着非常长远的见解和先进的理念。
正确看待POW与POS,总结与区分
本质上,POW 和 POS 都是一种随机选择下一个区块上传者的方式。然而,创建一个每个人被选中几率相等的算法其实是非常难的事情,同时,这种算法只是听上去很美,而在现实中这种算法却称不上公平——因为你怎么在虚拟世界里确定一个人的身份?你怎么知道一个 ID 背后的是真实的用户还是女巫攻击的脚本?
所以说,与其耐心去验证每一个人的身份,不如干脆根据某种无法伪造的东西进行随机,于是才有了工作证明和权益证明,以及许许多多的其他证明。
POW(Proof of work) 就是根据计算能力随机,根据矿工挖矿贡献的工作量来进行货币的分配,电脑性能越好,分给你的矿就会越多;POS (Proof of stake)根据拥有财产随机,基于矿工们目前拥有的数字货币数量,这就是这两个共识机制的本质。
但是,另一个问题是,POW 是一个在比特币出现之前就有了的东西,而因为比特币的成功,POW 基本上特指比特币的 POW。但相反,POS 是个新东西,目前并没有成熟的 POS 应用,所以,当提到 POS 的时候,并不是指某一个算法,而是一类,而且,这类算法目前各有优劣。并且,目前为止,没有一个算法的可靠性通过了实践的检验。所以,要对比 POW 和 POS 的优劣,我只能以 POS 这一大类为例。以上基本上所有其他的答案,其实都在说 PPCoin 的 POS,也就是最早的 POS,那个东西是有根本缺陷的,例如什么是币龄攻击(save-up attack),都仅仅是对 PPC 适用,而并不是 POS 的问题。
下面说一下优劣:
POW 机制优势
1、完全去中心化,安全性强。
2、建立了信任,使得人们相信货币有价值,因为它是目前唯一接受了实践检验的公有链算法。
POW 机制劣势
1、浪费算力,对于 51% 攻击有潜在隐患——攻击者并不需要拥有比特币,所以如果要做 51% 攻击,所需要的花费跟挖矿难度相关而不是直接跟比特币价格相关(虽然说挖矿难度会和比特币价格相关),所以,如果挖矿公司的市值不如比特币的价格的话,比特币面临 51% 攻击的风险就会变大 。
2、共识达成机制长(交易确认时间由原先10分钟变为了现在的2小时),挖矿也造成大量的资源浪费。
POS 机制优势
1、不需要浪费算力,同时,进行 51% 攻击的代价更高,因为想要进行 51% 攻击的话,你得拥有 51% 的货币。也就是说,这东西越值钱,攻击的成本就越高。
POS 机制劣势
1,权益粉碎攻击(nothing-at-the-stake attack),上面有人说 POS 是社会主义,我是不赞同的。我觉得 POS 就是完全的资本主义——你钱越多,你拥有的权力就越大。当然,这个也并不是没有道理,因为在其中利益越多的人,就更愿意去维护这个币的系统,于是他们手中的币才能更有价值。因此,他们并不愿意去进行恶意攻击,因为那样实际上他们手中的币也会受害,这就是 POS 能够更有效地防御 51% 攻击的原因。换句话说,钱越多责任越大。
但反过来讲,钱越少责任越小。假设你只有 1% 的钱,你成功的概率只有 1%,但是你尽可以去尝试分叉,因为这并不消耗任何资源。也就是你在最长链上挖矿的同时,也去创造一个只在自己的区块上挖矿的分支。放在 POW 里,创建这个分支完全得不偿失因为你浪费了大量的算力。然而在 POS 里,如果这个分支不被接收,实际上你什么都没损失。于是,即便是诚实的矿工也可能回去偷偷地进行这种分叉尝试。尽管他们知道这种尝试会造成整个币的价值降低,但是他们的钱很少,他们并不在乎,这就是所谓的平凡人悲剧(tragedy of the commons)。
对于这种攻击,基本上所有的新的 POS 算法都有应对的机制,例如以太坊的 casper 里的slasher,基本概念就是如果有人尝试了这种攻击,其他人发现了可以公布证据然后对这个人进行惩罚。
2,理性分叉。很多地方把这个合在权益粉碎攻击里了,但我觉得必须要分出来说。权益粉碎攻击是主动的,而这个是被动的——假设有人做了权益粉碎攻击进行了分叉尝试,诚实节点理应不予理会,因为他们能看到这种分叉被接受的几率小。对于 POW 来说,你不会在被接收几率小的分叉(例如不是最长链的分叉)上挖矿,因为那样浪费算力。但对于POS 来说,在那上面挖矿没任何损失,反而是不在那上面挖矿,万一这条链被接收了,你就会受到损失。
于是,即便是诚实节点,如果它足够理性,那么它也会在所有它收到的链上同时挖矿。POW 里,没人挖的分支很快就会变成孤块被丢弃,但在 POS 里,如果整个网络足够理性,会出现的情况反而是每条分支都会永远存在因为理性的矿工会同时在所有分支上挖矿。这是我觉得 POS 最大的缺陷,就是如果只用最长链共识的话,POS 本身是没法应对分叉的,必须通过惩罚。而这种惩罚不光是基于作恶,而是违反节点逐利本性的。
本质就是一句话:“防止有人做恶,保证区块链的安全和唯一”
而两者实现方法却有不同:
-
PoW 假设大多数人不会做恶,如果你想做恶,你要有压倒大多数人的算力,但不能防止矿工抱团取暖
-
PoS 假设富人不会做恶,毕竟做恶的目标是钱,若你富有,自然就没有做恶的动力