针对上面50W高度和最新高度区块,我们需要进一步详说。在矿池在对最新高度
区块链进行挖矿之前,是要对50W高度这个区块进行验证的。如果验证成功,在“50W+1”这个新组装的区块高度上挖矿才是合法的,如果50W高度是一个非法的区块,那所有的矿池是要回到“50W”高度去挖矿的。
但验证区块是需要时间的,因为各个矿池的软硬件不同,我们假定一个平均时间,10秒钟验证1M的区块。在验证结束之前,矿池是无法确认这个区块是不是合法,也就无法确认是否应该添加“50W+1”高度的最新区块。
而组装一个最新高度的区块也是需要时间的,拿到一个区块模板开始组装,往里填写父区块哈希值和在内存池里挑选交易填充进区块体,这都是需要时间,我们假定需要0.1秒。
在验证“50W”高度区块时,和填充交易进“50W+1”区块里,有一个提前,填充的交易是绝对不能和50W高度里已经打包的交易相重的。不然你这个最新高度区块就会是非法的。
而“50W”高度这个区块从挖出到广播到所有的矿池中也是需要时间的,广播区块有分两步。第一步是广播区块头;第二步是广播区块体。区块体非常小,只有80字节,比一笔交易还小,广播特别快,所有矿池可以非常快拿到区块头。有了区块头就可以拿到组装新高度区块的“父哈希值”。区块体是包含所有交易的那部分,一般非常大,比如2500笔交易就接近1M了。
btc最大可以接近1M,加外3M的隔离见证区块。而BCH曾经打包出21M的区块体。所有矿池收到区块体就要时间更长了,这叫网络延迟。我们假定网络延迟平时是0.5秒。
矿池挖矿最简单的做法是:一个矿池只要在拿到区块体,才能确认区块体里有哪些交易。而只有验证完整个区块,才能知道这个“50W”高度的区块是否合法。然后再开始组装最新高度区块,然后再挖矿计算小于目标值的哈希值。那在拿到区块体,和验证完整个区块,再加上组装最新高度区块,的时间长度是多少?0.5+10+0.1=10.6秒。
如果一个矿池按上述过程来挖矿,那就在这10.6秒钟的时间内是无法挖矿的,矿机是无效工作时间。而且矿机还是在开机耗电的。
如果一个矿池按下面的过程来工作:拿到区块头,就开始组装一个新的“50W+1”高度的区块,但因为无法确认这个50W高度区块里的交易和是整个区块是否合法,所以这个“50W+1”高度的区块,矿池并不对区块体填充额外的交易,只填充一个Coinbase奖励交易。这个“50W+1”高度的区块,只有区块头,外加一个Coinbase奖励交易——这就是一个空块——然后就直接开始挖矿。这样操作,在全网出现一个新块时,矿也只需要等待拿到区块头和组装空块的时间,就可以开始挖矿。这个时间就非常短了,平时不到0.5秒。这样就比10.6秒,节省了10秒多的时间。
而按上述过程挖矿,矿池在收到完整50W高度区块体和验证完50W高度区块,这个过程是10.6秒。在上述0.5秒到10.6秒的时间里,矿机如果计算出了一个随机数小于目标值,那矿池就成功挖到了一个空块。如果矿机没有计算出小于目标值的随机数,那矿池就会放弃这10.1秒的挖矿时间,然后改成组装一个填充了交易的“50W+1”高度的最新高度区块进行挖矿。
上述就是挖空块的全部逻辑。
版权申明:本内容来自于互联网,属第三方汇集推荐平台。本文的版权归原作者所有,文章言论不代表链门户的观点,链门户不承担任何法律责任。如有侵权请联系QQ:3341927519进行反馈。