POW POS共识算法
一、基于投票的共识算法
拜占庭将军问题
一组拜占庭将军分别各率领一支军队共同围困一座城市。简单起见,各支军队的行动限定为进攻或撤离。因为部分军队进攻部分军队撤离可能会造成灾难性后果,因此各位将军必须通过投票来达成一致策略,即所有军队一起进攻或所有军队一起撤离。各位将军分处城市不同方向,他们只能通过信使互相联系。这就需要设计一套系统,来完成投票。问题在于,可能将军中出现叛徒。
针对拜占庭将军问题,其中一个解决方案认为即使出现了伪造或错误的讯息。只要有问题的将军的数量不到三分之一,仍可以达到“拜占庭容错”
实用拜占庭容错(PBFT)演算法
二、基于证明的共识算法
比特币共识算法
比特币采用了POW算法,节点不停的计算,当求出一个合适的nonce值的时候,这个节点获得记账权,可以写入区块,然后发布到全网。其他节点进行验证,如果这个区块是最长,也是合法的,那其他节点就会延着这个区块继续挖。
POS共识
节点抵押一定数量的代币,来参与新块的产生。系统通过一定的算法(比如伪随机)选出出块节点,每隔一段时间后重新选择。这个算法要保证不能被操作,也不能预测,从而保证安全性。
选择算法会综合考虑节点质押的代币数量以及质押时长,通常情况质押时间越长,数量越多的节点有更好的概率被选出来生产区块,从而获得区块奖励。POS需要解决两个问题:
Nothing at stake
长程攻击
另外根据区块链生产的过程可以将PoS共识分为以下两类:
基于“链”的PoS(Chain-based Proof of Stake)。类似BTC PoW生产区块的原理,算法每隔一定的时间内根据节点持有的权益随机选择一个节点负责生产区块,这个区块必须附加在一个合法区块之后,当分叉产生时,通过共识算法规定的规则选择一条链作为共识链。
“拜占庭”类PoS(BFT-style Proof of Stake)。算法每隔一定的时间内根据节点持有的权益随机选择节点发布一个区块,但这个区块是否合法、能被附加到共识链之后需要得到一定比例的验证者投票确认。
以太坊的POS
1. 验证者
以太坊要求用户抵押他们的以太币从而成为网络中合法的验证者。 验证者的职责:将交易排序和创建新的区块,以便让所有的节点就网路状态达成一致。验证者还负责检查和确认那些不是由他们创造的区块。
在工作量证明中,生成区块的时间是由挖矿难度决定的,而在权益证明中,节奏是固定的。 权益证明以太坊中的时间分为时隙(12 秒)和时段(32 个时隙)。 在每个时隙中随机选择一位验证者作为区块提议者。 该验证者负责创建新区块并发送给网络上的其他节点。 另外在每个时隙中,都会随机选择一个验证者委员会,通过他们的投票确定所提议区块的有效性。
2. 最终确定性
以太坊上,通过“检查点”区块来管理确定性。 每个时段中的第一个区块是检查点。 验证者为他们认为有效的“检查点对”投票。如果一对检查点获得了质押以太币总数中三分之二以上的投票,那么这对检查点将被升级。 这两个检查点中较新的一个会变成“合理”状态。 较旧的一个检查点会升级为“已确定”状态。(上一轮已经是合理状态)
3. 分叉选择
由于网络延迟或因为区块提议者提议多个区块, 验证者可能看到不同的链。 以太坊POS使用的算法称为 LMD-GHOST。它的工作原理是确定其历史记录中具有最大证明权重的分叉。Casper-FFG 的原始定义包含一个分叉选择算法,该算法规定:follow the chain containing the justified checkpoint that has the greatest height,其中高度被定义为与创世区块之间的最大距离。 在 Gasper 中,原来的分叉选择规则被弃用,转而采用一种更复杂的算法,即 LMD-GHOST。