共识机制

  区块链要成为一个难以攻破的、公开的、不可篡改数据记录的去中心化诚实可信系统,需要在尽可能短的时间内做到分布式数据记录的安全、明确及不可逆,提供一个最坚实且去中心化的系统。在实践中,该流程分为两个方面:

一是选择一个独特的节点来产生一个区块
二是使分布式数据记录不可逆

实现上述流程的技术核心就是:共识机制。共识机制是区块链节点就区块信息达成全网一致共识的机制,可以保证最新区块被准确添加至区块链、节点存储的区块链信息一致不分叉甚至可以抵御恶意攻击。
  当前主流的共识机制包括:工作量证明、权益证明、工作量证明与权益证明混合、股份授权证明、瑞波共识协议等。

(一)工作量证明

  工作量证明(Proof of Work,PoW),顾名思义,即指工作量的证明。PoW机制的基本步骤如下:

  1. 节点监听全网数据记录,通过基本合法性验证的数据记录将进行暂存;
  2. 节点消耗自身算力尝试不同的随机数,进行指定哈希计算,并不断重复该过程直至找到合理的随机数;
  3. 找到合理的随机数后,生成区块信息,首先输入区块头信息,然后是区块记录信息;
  4. 接着对外广播出新产生的区块,其他节点验证通过后,连接至区块链中,主链高度加一,然后所有节点切换至新区块后面继续进行工作量证明的区块产生。

  PoW叫工作量证明体现在步骤2中,节点需要不断消耗算力工作,进行哈希计算,以找到期望的随机数。如果两个节点在同一时间找到区块,那么网络将根据后续节点和区块生成情况来确定哪个区块构建最终区块链。
  其工作量主要体现在:一个符合要求的区块随机数由N个前导零构成,零的个数取决于网络的难度值。要得到合理的随机数需要经过大量尝试计算,计算时间取决于机器的哈希运算速度。当某个节点提供出一个合理的随机数值,说明该节点确实经过了大量的尝试计算。当然,这并不能得出计算次数的绝对值,因为寻找合理随机数值是一个概率事件。

  挖矿有三个重要功能:

  • 发行新的货币
  • 维系系统的支付功能
  • 通过算力保障系统安全

  PoW机制存在两个方面明显缺陷:

  1. 算力的消耗与浪费。
  2. 算力集中化凸显。

(二)权益证明

  PoS是一个根据持有货币的量和时间,进行利息分发和区块产生的机制。

币天:每个币每天产生1币天。

  如果发现了一个新PoS区块,币天就会被清空为0。每被清空365币天,将会从区块中获得0.05个币的利息(可理解为年利率5%)。

未来币

  每个区块链的备份都存放在未来币网络的每个节点里,而且在每个节点上没有加密的每个账户都能够生成区块,只要至少一个新入账户的交易已经确认了1440次。任何账户只要达到了这个标准就会被视为“激活账户”。在未来币里,每个区块都包含着255个交易,每个交易都是由包含识别参数的192字节的数据头开始的。一个区块里的每个交易都是由128个字节所代表着。总共加在一起就意味着最大的区块大小有32K字节。
  每个区块都有一个“生成签名”的参数。激活账户用自己的私钥在原先的区块上签署“生成签名”。这就产生了一个64字节的签名,之后通过SHA256散列该签名。哈希产生的前八个字节给出了一个数字,作为一个“hit”。“hit”与目前的目标值相比较,如果计算出的“hit”值要比“目标值”低,那么就可以生成下一个区块了。
  对于每个活动账户来讲,“目标值”都是与它自身所确认的余额成比例的。一个持有1000个币的账户得到的目标值是持有20个币账户所得到目标值的50倍。因此,拥有1000个币的持有者产生的区块数是持有20个币的人产生的50倍。同事,“目标值”并不是固定的,随着先前区块的时间戳的流逝时刻都在增长。如果在最初的一秒钟内没有哪个账户的“hit”值是低于“目标值”的,则下一秒钟“目标值”就会翻倍。“目标值”会连续的翻倍,直到一个活动账户的“hit”值有一个较低的数值。还有一个“基本目标”值,它以60秒的间隔设定为目标值。正是这个原因,一个区块平均产生的时间会在60秒。即使在网络上只有很少的激活账户,它们其中的一个最终会产生一个区块,因为“目标”值会变得相当大。通过将你账户的“hit”值与目前的“目标”值相比,你就可以估算出你的“hit”值还有多久能成功。
  当一个激活账户赢得产生区块的权利时,就能将任何可获得的且未确认的交易放入区块中,并用所有需要的参数来填充该区块。然后,这个区块就会被传播到网络中作为一个区块链的备选。每一个区块中的负载值、“hit”、产生的账户以及签名都能被网络上接收到它的节点所确认。每个区块参考之前的区块,区块形成的区块链可以用来追溯和查询网络中所有的交易历史,所有这些都会追溯到创世区块。

(三)权益证明+工作量证明

  用工作量证明机制PoW发行新币,用权益证明机制PoS维护网络安全,即PoW+PoS机制。该机制中,区块被分成两种形式——PoW区块及PoS区块。在这种新型区块链体系里,区块持有人可以消耗他的币天获得利息,同时获得为网络产生一个区块和用PoS造币的优先权。
  在PoW+PoS机制下,只要持有币的人,不论持有的数量多少,都可以挖到数据块,而不用采用任何的矿池导致算力集中。同时,由于多采用币天生成区块,而不是算力,降低了资源消耗,解决了单纯PoW机制在维护网络安全方面先天不足的问题。

(四)股份授权证明

  PoS机制使用一个确定性算法以随机选择一个股东来产生下一个区块,该算法中,账户余额决定了节点被选中的可能性。然而,该系统并未使区块链变得越来越安全而不可逆。同时PoS面临的挑战是如何通过及时而高效的方法达成共识。
  为达到这个目标,每个持币节点可以将其投票权授予一名代表。获票数最多的前100位代表按既定时间表轮流产生区块。每名代表被分配到一个时间段生产区块。所有代表将收到等同于一个平均水平的区块所含交易费的1%作为报酬。如果一个平均水平的区块含有100股作为交易费,一名代表将获得1股作为报酬,即可大大提高共识效率。这是DPoS的核心思想。
  在DPoS中,

  • 第一步是称为一名代表,必须在网络上注册公钥,然后分配一个32位的特有标识符。然后该标识符会被每笔交易数据的“头部”引用。
  • 第二步是授权选票。每个钱包有一个参数设置窗口,在该窗口里用户可以选择一个或更多的代表,并将其分级。一经设定,用户所做的每笔交易将把选票从“输入代表”转移至“输出代表”。

一般情况下,用户不会创建特别以投票为目的的交易,因为那将耗费他们一笔交易费。每个钱包将显示一个状态指示器,让用户知道代表的表现如何。如果某代表错过了太多的区块,那么系统将会推荐用户去换一个新的代表。如果任何代表被发现签发了一个无效的区块,那么所有标准钱包将在每个钱包进行更多交易前要求选出一个新代表。

(五)瑞波共识协议

  瑞波共识协议(Ripple Consensus Protocol,RCP),使一组节点能够基于特殊节点列表达成共识。初始特殊节点列表就像一个俱乐部,要接纳一个新成员,必须由一定比例的该俱乐部会员投票通过。
  RCP机制的工作原理如下:

  1. 验证节点接收存储待验证交易。首先验证节点接收待验证交易,将其存储在本地;其次本轮共识过程中新到的交易需要等待,在下次共识时再确认。
  2. 活跃信任节点发送提议:首先,信任节点列表是验证池的一个子集,其信任节点来源于验证池;其次,参与共识过程的信任节点须出于活跃状态,验证节点与信任节点间存在保活机制,长期不活跃节点将被从信任节点列表删除;最后,信任节点根据自身掌握的交易双方额度、交易历史等信息对交易做出判断,并加入到提议中进行发送。
  3. 本验证节点检查收到的提议是否来自信任节点列表中的合法信任节点,如果是,则存储;如果不是,则丢弃。
  4. 验证节点根据提议确定认可交易列表的步骤如下:首先,令信任节点列表中活跃的信任节点个数为M(比如5个),本轮中交易认可阔值为N(百分比,比如50%),则每一个超过M*N个信任节点认可的交易将被本验证节点认可;其次,本验证节点生成认可交易列表。系统为验证节点设置一个计时器,如果计时器时间已到,本信任节点需要发送自己的认可交易列表。
  5. 账本共识达成的步骤如下:首先,本验证节点仍然在接收来自信任节点列表中信任节点的提议,并持续更新认可交易列表;其次,验证节点认可列表的生成并不代表最终账本的形成以及共识的达成,账本共识只有在每笔交易都获得至少超过一定阔值(比如80%)的信任节点列表认可才能达成。如果账本中每笔交易都获得至少超过一定阔值的信任节点列表认可,则共识达成,交易验证结束,否则继续上述过程。
  6. 共识过程结束后,已经形成最新的账本,现将上轮剩余的待确认交易以及新交易纳入待确认交易列表,开始新一轮共识过程。

  除上述机制外,还有恒星共识协议(Stellar Consensus Protocol,SCP)、改进型使用拜占庭容错机制(Practical Byzantine Fault Tolerance,PBFT)和Pool验证池机制等共识机制被提出,甚至已经应用在区块链系统中,不同共识机制各有其应用场景和优势。

------《区块链-从数字货币到信用社会》

http://www.frankyang.cn/2017/11/01/consensus/

原文地址:https://www.cnblogs.com/yangjiannr/p/Consensus.html