fx168财经网

POW挖空块的原理与彻底解决挖空块的方法

矿业前瞻 2021-07-12 16:0075www.yaxuan2010.com未知

POW挖矿原理

原作者:黄世亮

原标题:POW矿池挖空块原理和解决方法

那如何解决?

上述剖析了挖空块的原理和优化挖矿的原理,挖空块的核心缘由是矿池不敢往“50W+1”这个空块中填充和“50W”高度里已经有些买卖。

假如有一种方法可以保证矿池组装的“50W+1”高度的空块里绝对没“50W”高度里出现过的买卖,不就可以解决问题了吗?

一种方法是,矿池自己生成一些买卖,不广播,只保存在我们的内存池里,用来填充“50W+1”高度的空块区块,就好了。

但矿池不可以生成一些无意义的买卖,不然就是一些垃圾买卖,这是对互联网的浪费。打包用户发的买卖一定是有意义的,但用户发的买卖总是都是经过广播的,打包就和“50W”高度区块里的买卖相冲突的风险。

必须要找那些没经过广播的买卖。

一种办法是矿池和交易平台合作,用户在交易平台发起的提现买卖,交易平台不去广播,而是通过IP到IP的方法,以加密的办法直接发给矿池,这部分买卖绝对不会被“50W”高度区块打包的。这部分买卖就可以100%没冲突的打进“50W+1”高度。

假如有交易平台和矿池是同一个公司主体,那这种办法就很好实行了。不是同一个主体,矿池还是怕被交易平台坑,万一交易平台塞一个经过广播的买卖就可能被浪费掉一个空块的区块奖励。

但这种办法会让交易平台的客户体验有所降低,由于打空块的概率低啊,这部分买卖得何年马月才能被打包,虽然矿池可以在挖非空块中打包,但用户也得等这个矿池出块才有确认,这和全网有出块是差好长的时间的。

另一种办法是让交易平台给矿池提交的保密买卖不是用户的提现买卖,而是一些零散UTXO拼凑成大UTXO的买卖。这种买卖是对整个UTXO体积有非常大的优化的,而且这部分买卖都没很强烈的时间需要。合适被空块打包。

仅需考虑经济由于的POW矿机制是最佳的设定,道德不应该被掺进去。所有批评矿池打空块的言论,都是对POW矿机制没信心的。

工作量证明POW挖矿就是区块链生成新的区块的过程。包括比特币、比特币现金、以太币、莱特币……在内,POW挖矿都是按以下逻辑来。

挖矿是如此的,系统会给出一个目的值,这是一个数,譬如前面有18个零。挖矿就是找出一个小于这个目的值的随机数,譬如前面有19个零。找到了,就挖到了区块。关键词:随机数。重要问题:这个随机是如何计算?

这个随机数是对矿池对最新高度的区块链进行哈希得来的。关键词:最新高度。重要问题:啥是最新高度?

目前有一个矿池挖到了一个区块,并且广播出去,大家假定这个区块高度是50W高度。下面所有矿池就会在这个50W高度后面继续挖矿,具体动作是矿池先组装一个新的区块,这个新的区块包含了“区块头”和“填充买卖的区块体”。区块头里有两个需要特不要说明的,第一个是父块哈希值,这里是50W高度的hash值;第二个是Nonce,这是一个数,一个可以调整的数,从0开始。

组装好这个新的区块后,矿机就对这个新区块(“50W+1”高度)加上前面50W高度的区块进行哈希。这个新的区块就是上面的“最新高度”。

矿机实行哈希一次,就得到一个哈希值,这是一个二进制数。矿池会拿这个值和目的值对比,假如小于目的值,就恭喜你,成功挖到矿,不然就将Nonce加1,再哈希,再对比,……

显然一台矿机来哈希,你要试出满足目的值的Nounce值,那真是要慢去世了。但矿池可以将不一样的Nounce划分给不一样的矿机来试。譬如矿池一共有1000台矿机,将0到1000,给第1台试;10001到2000给第2台试……这就是挖矿的并行。

针对上面50W高度和最新高度区块,大家需要进一步详说。在矿池在对最新高度区块链进行挖矿之前,是要对50W高度这个区块进行验证的。假如验证成功,在“50W+1”这个新组装的区块高度上挖矿才是合法的,假如50W高度是一个非法的区块,那所有些矿池是要回到“50W”高度去挖矿的。

但验证区块是需要时间的,由于各个矿池的软硬件不同,大家假定一个平均时间,10秒钟验证1M的区块。在验证结束之前,矿池是没办法确认这个区块是否合法,也就没办法确认是不是应该添加“50W+1”高度的最新区块。

而组装一个最新高度的区块也是需要时间的,拿到一个区块模板开始组装,往里填写父区块哈希值和在内存池里挑选买卖填充进区块体,这都是需要时间,大家假定需要0.1秒。

在验证“50W”高度区块时,和填充买卖进“50W+1”区块里,有一个提前,填充的买卖是绝对不可以和50W高度里已经打包的买卖相重的。不然你这个最新高度区块就会是非法的。

而“50W”高度这个区块从挖出到广播到所有些矿池中也是需要时间的,广播区块有分两步。第一步是广播区块头;第二步是广播区块体。区块体很小,只有80字节,比一笔买卖还小,广播特别快,所有矿池可以飞快拿到区块头。有了区块头就可以拿到组装新高度区块的“父哈希值”。区块体是包含所有买卖的那部分,通常很大,譬如2500笔买卖就接近1M了。比特币最大可以接近1M,加外3M的隔离见证区块。而比特币现金过去打包出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”高度的最新高度区块进行挖矿。

上述就是挖空块的全部逻辑。

上述挖空矿的原理中,确认“50W”高度区块里的买卖是一个要紧的工作,假如可以提前知晓这部分买卖,那组装“50W+1”高度的区块,不就可以避开这部分买卖,去组装另外一些买卖了吗,如此就可以不需要打空块了。

目前比特币和比特币现金互联网有两个技术可以优化这个区块体的传播,也就可以让所有矿池更快知晓“50W”高度里有什么买卖。第一个技术叫布隆过滤器;第二个叫致密区块(Compact block)和瘦区块(Xthin block)。(compact block是Core dev开发的,Xthin是unlimited dev开发的,两者功能一样。)

布隆过滤器是用来标记“50W”高度的区块有什么买卖的,只不过标识。矿池拿到这个标记就知晓了里面有什么买卖,然后矿池会去我们的内存池查找这部分买卖,并列源于己没的买卖,然后向其他节点索要自己没的买卖。要到这部分没的买卖后,就在当地重新组装一个“50W”高度的区块,而不是从互联网上下载一个“50W”高度区块。这个过程就是Compact block和Xthin block的原理。

通过这两个技术就可以压缩互联网延迟时间,但依旧压缩不了验证“50W”高度区块的时间,而前者只有0.5秒,后者有10秒。

如此的时间差距,矿池还是要去挖空块,不然整个矿机就在白白浪费电,要知晓这个浪费10秒对全网来讲是无比巨大的能源。

fx168财经网-虚拟货币|数字货币|区块链技术新闻资讯网站 Copyright © 2002-2021 fx168财经网 (http://www.inclusivedesignresearch.com) 网站地图 TAG标签 备案号