共识与工作量证明:为什么要工作量证明,如何证明工作量
挖矿难度:为什么大约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的性能。