浅读共识算法

PBFT(拜占庭容错实用算法)

拜占庭问题:拜占庭将军问题是一个协议问题,拜占庭帝国军队的将军们必须全体一致的决定是否攻击某一支敌军。将军们在地理上是分隔开来的,并且将军中存在叛徒。叛徒可以任意行动以达到以下目标:欺骗某些将军采取进攻行动;促成一个不是所有将军都同意的决定,如当将军们不希望进攻时促成进攻行动;或者迷惑某些将军,使他们无法做出决定。如果叛徒达到了这些目的之一,则任何攻击行动的结果都是注定要失败的,只有完全达成一致的努力才能获得胜利。

PBFT解决拜占庭问题依然是少数服从多数,但是该算法容许投票的人中产生叛徒或者不响应者。

假设一共有n个节点,其中有f个节点是出错节点,所以我一定要能从n-f个节点的反馈中进行判断(如果上述f个节点都是未响应)。由于是异步传输,所以当我陆续收到n-f个传来的消息后,我并不知道之后是否还会有新的消息传来。因为如果f个有问题的节点都是未响应,那么我将不会收到新的消息,如果其中有节点出错,我之后还会收到消息,但作为接受节点的现在不知道是哪种情况,却需要立刻作出判断。

最坏的情况下,剩下的f个节点都未出错,也就是说收到n-f的节点消息中有f个都是出错消息,即f个出错和n-2f个未出错。所以只有当n-2f>f的情况下,接受节点会作出正确决定,即n>3f,n最小需要取3f+1。

我们发现当f=1,n=4,所以PBFT算法适用于节点数量大于4的场景。

POW共识算法举例

关于比特币的共识机制POW书面的描述大致是这样子的:

  1. POW就是找符合要求的随机数;
  2. 首先对区块的交易信息做一个哈希值,这样就得到一个256位的字符串,我们把256位的字符串命名为A1;
  3. 在A1的字符串后面加上nonce(随机数),这个字符串叫做A2,然后对A2字符串做hash运算得到256位的字符串A3;
  4. 如果A3的前四位都是0,那么这个随机数就找对了,就可以向网络进行提交,从而如果你是第一个提交,这样一个nonce随机数,你就具有了记账的权力;
  5. 如果算力升高就加多前面0的数量,这样寻找随机数的工作难度就提升了。

形象的比喻是这个样子的:

  1. POW就是从沙子中找钻石;
  2. 先给每人一桶沙子,然后每桶沙子中掺入10颗碎钻;
  3. 谁先找到碎钻谁就赢得出块权限,获得比特币奖励;
  4. 人多了怎么办,每人还是一桶沙子,但是只掺入5颗碎钻;这样找碎钻的难度自然提升。

你可能感兴趣的:(浅读共识算法)