挖矿与共识

挖矿是增加⽐特币货币供应的⼀个过程。挖矿同时还保护着⽐特币系统的安全,防⽌欺诈交易,避免“双重⽀付”,“双重⽀
付”是指多次花费同⼀笔⽐特币。矿⼯们通过为⽐特币⽹络提供算⼒来换取获得⽐特币奖励的机会。

“挖矿”的原理,就是计算一个HASH值<=TargetHash的过程;

FAQ

比特币“挖矿”的平均时间为何规定成“10分钟”?

10 分钟是系统找到一个有效的交易链块所需要的平均时间(这个时间不是固定的);

基于运气这个时间实际上会稍长或稍短,比如突然间网络中,算力急速增加,那么生成新区块的时间就会变短;这个平均时长”力图逼近10分钟”,当然,这个出块速度是系统每生成2016个块之后自动调整的,通过调整难度系数difficulty(前序文章中有讲过),大致参考源代码:

1
2
3
static const int64 nTargetTimespan = 14 * 24 * 60 * 60;    //目标时间窗口长度:两周
static const int64 nTargetSpacing = 10 * 60;    // block频率,每10分钟一块
static const int64 nInterval = nTargetTimespan / nTargetSpacing;    // 每两周的产量2016,也是调节周期

10分钟—>1分钟会如何?

1)间隔太短,易导致较多孤块的出现,不安全,不利于交易确认,还浪费资源;

原因是:每一个“矿工”都需要时刻确认自己是否在主链上,那么就需要矿工之间时刻交流,交流受网速影响(在网络情况不良时,间隔时间越短,这个网络不良的影响对最终的结果影响越大),当有“矿工”生成新的区块,发现它们不在主链上,也就是孤块,只能丢弃,造成浪费。

2)如果出块间隔太短,侧面的也就说明,出块的难度太低;

当出块的频率变高的时候,块与块之间的碰撞频率也就变高,碰撞次数越高,主链被fork(分叉)的概率就越大,fork越多,链结构就会变成树结构。而且每当出现分叉的时候,系统需要花费性能去选出bestChain(bestChain被当做Main链,被各节点认可);

PS:fork即为分叉,分叉分为软分叉和硬分叉,关于分叉和bestChain的选择相关知识点会在本系列的其他文章中讲述。

参考