比特币共识与挖矿

2018-11-21 14:28 来源:证心
浏览量: 收藏:0 分享

  共识与工作量证明:为什么要工作量证明,如何证明工作量

  挖矿难度:为什么大约10分钟产生一个区块,在变化的网络中是如何调整的

  比特币来源:比特币是怎么来的,为什么有上限

  分布式系统

  区块链系统是一个典型的分布式系统,这里要了解一些相关知识才能更深入理解区块链的一些架构。

  区块链网络是由众多匿名节点共同合作形成的一个网络,比特币区块链又是做为交易系统存在的,如果我们把他当作一个分布式计算系统,他对分隔容忍性和一致性要求是非常强的。

  这里有一个很重要的理论CAP理论:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。

  比特币是用的P2P做的分布式,节点的上下线对网络没影响,所以分隔容忍性是最强的类别。

  一致性用的是pow算法,保证整个网络的区块数据一致,所以一致性也是最强的类别。

  从CAP角度看,p2p+pow的比特币系统可用性就不会太高。

  共识机制

  共识机制属于CAP中的一致性(Consistency) 部分,无论用哪种,都是cap三个特性的妥协,不要认为哪种共识机制更好,其实都是在牺牲其它两个特性的强度来实现的。

  现今区块链的共识机制可分为四大类:工作量证明机制(pow)、权益证明机制(pos)、股份授权证明机制(dpos)和Pool验证池。

  区块链网络共识机制主要是为了防止不可信节点修改已有区块链,让可信节点可以添加新区块。

  区块头包含一个随机数Nonce值,Pow的过程,即为不断调整Nonce值,对区块头做双重SHA256哈希运算,使得结果满足给定数量前导0的哈希值的过程。其中前导0的个数,取决于挖矿难度,前导0的个数越多,挖矿难度越大。

  具体如下:

  1、生成铸币交易,并与其它所有准备打包进区块的交易组成交易列表,生成Merkle根哈希值。

  2、将Merkle根哈希值,与区块头其它字段组成区块头,80字节长度的区块头作为Pow算法的输入。

  3、不断变更区块头中的随机数Nonce,对变更后的区块头做双重SHA256哈希运算,与当前难度的目标值做比对,如果小于目标难度,即Pow完成。

  Pow完成的区块向全网广播,其他节点将验证其是否符合规则,如果验证有效,其他节点将接收此区块,并附加在已有区块链之后。之后将进入下一轮挖矿。

  class CBlockHeader

  {

  public:

  //版本号

  int32_t nVersion;

  //上一个区块的哈希值

  uint256 hashPrevBlock;

  //交易列表的Merkle根哈希值

  uint256 hashMerkleRoot;

  //当前时间戳

  uint32_t nTime;

  //当前挖矿难度,nBits越小难度越大

  uint32_t nBits;

  //随机数Nonce值

  uint32_t nNonce;

  //其它代码略

  };

  共识频率与性能

  pow是需要时间的,pow之后区块链网络完成共识也是需要时间的。

  达成一次共识是非常不容易的,所以要把很多交易打包成区块在一次共识中处理。

  共识频率最终决定了区块链网络的可用性,决定共识频率的因素主要是共识算法和网络情况。

  共识算法如果太简单会导致共识并发情况比较多,导致共识能力下降。

  比特币大约10分钟产生一个区块,也就是说10分钟左右达成一次共识。

  10分钟这个值是通过调整挖矿难度全网一致的,不会随着区块链网络的变化而变化,一直动态调整的是挖矿难度。

  比特币区块大小为1M,每个交易大小约250字节,所以每个块最多容纳4000个交易。平均大约每10分钟产生一个区块,所以比特币网络每秒只能处理7比交易。

  总体看网络性能是达成共识的主要瓶颈,当5G普及后可能会有质的变化,因为随着网络性能的提升,区块大小可以调到更大,10分钟的限制也可以调到更小,这是一个乘法关系。

  10分钟的难度

  比特币是如何控制每10分钟达成一次共识,产生一个区块的?

  每创建2016个块后将计算新的难度,此后的2016个块使用新的难度。计算步骤如下:

  1、找到前2016个块的第一个块,计算生成这2016个块花费的时间。即最后一个块的时间与第一个块的时间差。时间差不小于3.5天,不大于56天。

  2、计算前2016个块的难度总和,即单个块的难度x总时间。

  3、计算新的难度,即2016个块的难度总和/14天的秒数,得到每秒的难度值。

  4、要求新的难度,难度不低于参数定义的最小难度。

  也就是原来平均一个区块用时长,后面就难度小点,每个区块产生的时间就短了,反之亦然。

  这样整体平均值就是设置的大约10分钟一个区块了。

  比特币是什么

  比特币是对区块打包的奖励,如果没有奖励也有人为区块链网络提供算力和存储,那就没有比特币了。

  比特币被设计成每生成21000个区块,挖矿奖励就减半,最开始的奖励是50个比特币。

  到第33次减半时,每个块产生的新比特币从0.0021个直接减为0个,这样算一下,总共产生的比特币就是20999999.97690000个。

  思考

  1. 区块链技术重点是不可篡改的特性。

  2. P2P网络重点是全球匿名对等特性,这实现了基础上的公平。

  3. 共识机制可以实现分布式的一致性,p2p上的共识实现了公平的共识。

  从CAP的角度看,区块链技术在特定领域已经可以实现商业化应用,因为不是所有领域都需要强分布特性。

  比如银行结算系统,自建自管的大节点小网络,CA这两方面没问题,P只是起到数据备份的作用。

  如果各银行联合组建联盟链,这将是更好的方式。

  EOS的选超级节点也是通过降P来增加A的性能,用DPOS代替POW是通过降C来增加A的性能。

  由于CAP定理的限制,鼓吹的区块链3.0不过是CAP性能的一次重新划分,因为商业上真不需要那么P的特性。

  在CAP没有变动的情况下想加区块链系统的性能,只能通过增加网络性能来整体增强CAP的性能。

标签:

责任编辑:bozhihua
在线客服