第0章引言
比特币的挖矿收益包含两部分,第一是区块奖励;第二是交易手续费。如果打空块,就收不到交易手续费,为什么有矿池会不要手续费来打空块呢?
第1章POW挖矿原理
工作量证明POW挖矿就是区块链生成新的区块的过程。包括BTC、BCH、ETH、LTC……在内,POW挖矿都是按以下逻辑来。
挖矿是这样的,系统会给出一个目标值,这是一个数,比如前面有18个零。挖矿就是找出一个小于这个目标值的随机数,比如前面有19个零。找到了,就挖到了区块。关键字:随机数。关键问题:这个随机是怎么计算?
这个随机数是对矿池对最新高度的区块链进行哈希得来的。关键字:最新高度。关键问题:什么是最新高度?
现在有一个矿池挖到了一个区块,并且广播出去,我们假定这个区块高度是50W高度。接下来所有矿池就会在这个50W高度后面继续挖矿,具体动作是矿池先组装一个新的区块,这个新的区块包含了“区块头”和“填充交易的区块体”。区块头里有两个需要特别说明的,第一个是父块哈希值,这里是50W高度的hash值;第二个是Nonce,这是一个数,一个可以调整的数,从0开始。
币安将移除POWR、STEEM等4组BUSD相关现货交易对:7月3日消息,据官方公告,币安将于7月5日11:00移除POWR/BUSD、QKC/BUSD、SC/BUSD、STEEM/BUSD现货交易对并停止交易。[2023/7/3 22:15:11]
组装好这个新的区块后,矿机就对这个新区块加上前面50W高度的区块进行哈希。这个新的区块就是上面的“最新高度”。
矿机执行哈希一次,就得到一个哈希值,这是一个二进制数。矿池会拿这个值和目标值对比,如果小于目标值,就恭喜你,成功挖到矿,否则就将Nonce加1,再哈希,再对比,……
显然一台矿机来哈希,你要试出满足目标值的Nounce值,那真是要慢死了。但矿池可以将不同的Nounce划分给不同的矿机来试。比如矿池一共有1000台矿机,将0到1000,给第1台试;10001到2000给第2台试……这就是挖矿的并行。
第2章POW挖空块的原理
针对上面50W高度和最新高度区块,我们需要进一步详说。在矿池在对最新高度区块链进行挖矿之前,是要对50W高度这个区块进行验证的。如果验证成功,在“50W+1”这个新组装的区块高度上挖矿才是合法的,如果50W高度是一个非法的区块,那所有的矿池是要回到“50W”高度去挖矿的。
以太坊开发者:未知攻击者试图通过发布包含无效PoW长区块攻击以太坊,但并未成功:9月14日消息,以太坊开发者MariusVanDerWijden表示,今天有人试图通过发布包含无效PoW长区块(约550个),攻击以太坊,但并未成功。仅一部分Nethermind节点切换到这个无效链。所有其他客户端都因为无效拒绝了该长侧链。良好的链在长度上已经上述侧链。看起来攻击者没有在他发布的无效链上进一步挖掘。客户端多样性使以太坊更强。[2021/9/14 23:24:10]
但验证区块是需要时间的,因为各个矿池的软硬件不同,我们假定一个平均时间,10秒钟验证1M的区块。在验证结束之前,矿池是无法确认这个区块是不是合法,也就无法确认是否应该添加“50W+1”高度的最新区块。
而组装一个最新高度的区块也是需要时间的,拿到一个区块模板开始组装,往里填写父区块哈希值和在内存池里挑选交易填充进区块体,这都是需要时间,我们假定需要0.1秒。
在验证“50W”高度区块时,和填充交易进“50W+1”区块里,有一个提前,填充的交易是绝对不能和50W高度里已经打包的交易相重的。不然你这个最新高度区块就会是非法的。
以太坊独立研发人员:ProgPoW算法恐不能实现抗ASIC:以太坊独立研发人员Kikx声称以太坊ProgPoW算法不能实现抗ASIC挖矿。根据Kikx的说法,可以修改ProgPoW算法操作的散列函数代码,以允许特定于应用程序的集成电路参与挖矿。Kikx注意到,64位的“种子”太小了,这使得ASIC可以在不访问内存的情况下计算散列。因此,ASIC的所有者可以通过三个简单的步骤来修改代码,从而在挖矿利润方面获得优势。Kikx在他的GitHub上分享了自己的建议,包括漏洞的本质、代码易受攻击的地方以及一个可能执行的现场演示。知名以太坊开发人员Hudson Jameson和James Hancock讨论了Kikx的结论,后者认为该漏洞“非常少见”,不会对其他挖矿算法构成威胁。此外,ProgPow开发人员Kristy-Leigh Minehan强调称,这是一个非常酷的技巧——尽管我们还没有证实它在实践中是否有效。(U.Today)[2020/3/6]
而“50W”高度这个区块从挖出到广播到所有的矿池中也是需要时间的,广播区块有分两步。第一步是广播区块头;第二步是广播区块体。区块体非常小,只有80字节,比一笔交易还小,广播特别快,所有矿池可以非常快拿到区块头。有了区块头就可以拿到组装新高度区块的“父哈希值”。区块体是包含所有交易的那部分,一般非常大,比如2500笔交易就接近1M了。BTC最大可以接近1M,加外3M的隔离见证区块。而BCH曾经打包出21M的区块体。所有矿池收到区块体就要时间更长了,这叫网络延迟。我们假定网络延迟平时是0.5秒。
声音 | 分析师:比特币矿工每天所获报酬占主流PoW矿工报酬总额的逾80%:ARKinvest的加密分析师Yassine Elmandjra今日发推称,比特币矿工每天获得1500万美元的报酬,作为保护网络安全的奖励。这占到了主流PoW矿工所获报酬总额的逾80%。自2017年年中以来,比特币矿工获得的报酬份额增长了约250%,接近以太坊之前的水平。[2020/1/11]
矿池挖矿最简单的做法是:一个矿池只要在拿到区块体,才能确认区块体里有哪些交易。而只有验证完整个区块,才能知道这个“50W”高度的区块是否合法。然后再开始组装最新高度区块,然后再挖矿计算小于目标值的哈希值。那在拿到区块体,和验证完整个区块,再加上组装最新高度区块,的时间长度是多少?0.5+10+0.1=10.6秒。
如果一个矿池按上述过程来挖矿,那就在这10.6秒钟的时间内是无法挖矿的,矿机是无效工作时间。而且矿机还是在开机耗电的。
如果一个矿池按下面的过程来工作:拿到区块头,就开始组装一个新的“50W+1”高度的区块,但因为无法确认这个50W高度区块里的交易和是整个区块是否合法,所以这个“50W+1”高度的区块,矿池并不对区块体填充额外的交易,只填充一个Coinbase奖励交易。这个“50W+1”高度的区块,只有区块头,外加一个Coinbase奖励交易——这就是一个空块——然后就直接开始挖矿。这样操作,在全网出现一个新块时,矿也只需要等待拿到区块头和组装空块的时间,就可以开始挖矿。这个时间就非常短了,平时不到0.5秒。这样就比10.6秒,节省了10秒多的时间。
人物丨赵东:公链应该用POW 联盟链、私链服务具体应用可以POS:据赵东微博最新消息,比特币的“挖矿”、共识机制是POW。POW用机器的计算提供了一个不可篡改、伪造(因为篡改、伪造代价极其高昂)的时间戳服务,一笔笔交易被机器盖戳,形成不可逆的序列。POW = Proof of work,work 这里指计算机的计算,同时也可以理解为物理学上的做功(计算机计算需要消耗大量能源),做功的过程,熵增不可逆。 所以,本质上POW 是用熵增不可逆的热力学原理确保了账本不可篡改。
而POS则是权益证明,账本是用人来盖戳,POS实际上是Proof Of Human,人商量好、账本就成立。这就是为何做公链,POW比任何POS都靠谱的原因。 但是私链、联盟链用POS没问题,因为本来就是中心化的,以中心化提升效率、性能,来服务具体应用。
总之,公链不应该相信人,应该相信数学和机器,应该用POW。联盟链、私链服务具体应用,不需要去中心化,可以POS。[2018/6/25]
而按上述过程挖矿,矿池在收到完整50W高度区块体和验证完50W高度区块,这个过程是10.6秒。在上述0.5秒到10.6秒的时间里,矿机如果计算出了一个随机数小于目标值,那矿池就成功挖到了一个空块。如果矿机没有计算出小于目标值的随机数,那矿池就会放弃这10.1秒的挖矿时间,然后改成组装一个填充了交易的“50W+1”高度的最新高度区块进行挖矿。
上述就是挖空块的全部逻辑。
第3章优化挖矿原理
上述挖空矿的原理中,确认“50W”高度区块里的交易是一个重要的工作,如果能够提前知道这些交易,那组装“50W+1”高度的区块,不就可以避开这些交易,去组装另外一些交易了吗,这样就可以不用打空块了。
现在BTC和BCH网络有两个技术可以优化这个区块体的传播,也就可以让所有矿池更快知道“50W”高度里有哪些交易。第一个技术叫布隆过滤器;第二个叫致密区块(Compactblock)和瘦区块。
布隆过滤器是用来标记“50W”高度的区块有哪些交易的,只是标识。矿池拿到这个标记就知道了里面有哪些交易,然后矿池会去自己的内存池查找这些交易,并列出自己没有的交易,然后向其他节点索要自己没有的交易。要到这些没有的交易后,就在本地重新组装一个“50W”高度的区块,而不是从网络上下载一个“50W”高度区块。这个过程就是Compactblock和Xthinblock的原理。
通过这两个技术就可以压缩网络延迟时间,但依然压缩不了验证“50W”高度区块的时间,而前者只有0.5秒,后者有10秒。
这样的时间差距,矿池还是要去挖空块,不然整个矿机就在白白浪费电,要知道这个浪费10秒对全网来说是无比巨大的能源。
那怎么办?
第4章彻底解决挖空块的办法
上述分析了挖空块的原理和优化挖矿的原理,挖空块的核心原因是矿池不敢往“50W+1”这个空块中填充和“50W”高度里已经有的交易。
如果有一种办法可以保证矿池组装的“50W+1”高度的空块里绝对没有“50W”高度里出现过的交易,不就可以解决问题了吗?
一种办法是,矿池自己生成一些交易,不广播,只保存在自己的内存池里,用来填充“50W+1”高度的空块区块,就可以了。
但矿池不能生成一些无意义的交易,不然就是一些垃圾交易,这是对网络的浪费。打包用户发的交易肯定是有意义的,但用户发的交易往往都是经过广播的,打包就和“50W”高度区块里的交易相冲突的风险。
一定要找那些没有经过广播的交易。
一种方法是矿池和交易所合作,用户在交易所发起的提现交易,交易所不去广播,而是通过IP到IP的方式,以加密的方法直接发给矿池,这些交易绝对不会被“50W”高度区块打包的。这些交易就可以100%没有冲突的打进“50W+1”高度。
如果有交易所和矿池是同一个公司主体,那这种方法就非常好执行了。不是同一个主体,矿池还是怕被交易所坑,万一交易所塞一个经过广播的交易就可能被浪费掉一个空块的区块奖励。
但这种方法会让交易所的用户体验有所下降,因为打空块的概率低啊,这些交易得何年马月才能被打包,虽然矿池可以在挖非空块中打包,但用户也得等这个矿池出块才有确认,这和全网有出块是差好长的时间的。
另一种方法是让交易所给矿池提交的保密交易不是用户的提现交易,而是一些零散UTXO拼凑成大UTXO的交易。这种交易是对整个UTXO体积有很大的优化的,而且这些交易都没有非常强烈的时间要求。适合被空块打包。
第5章结束语
只需要考虑经济因为的POW挖矿机制是最优的设定,道德不应该被掺进来。所有批评矿池打空块的言论,都是对POW挖矿机制没有信心的。
来源:闪电HSL
Telegram由俄罗斯人开发,是一个非盈利方式运作的即时通讯软件,其Logo是一个纸飞机,截止目前全球已有超过1.8亿用户.
1900/1/1 0:00:00以比特币为代表的加密数字货币到底是什么?一种具有不断增值潜力的数字资产?一种重塑社会形态的革命性技术?还是一个即将破灭的巨大泡沫?对这些问题,噪音比声音多,争议比答案多,但两岸猿声啼不住.
1900/1/1 0:00:00核财经APP独家 文︱艾特 孙中山说:“世纪潮流,浩浩荡荡,顺之则昌,逆之则亡。”但是,对立于潮头的人来说,“两眼一抹黑”,扑面而来的是太多的未知和变数。到头来,谁都是摸着石头过河.
1900/1/1 0:00:00今天上午,各大区块链媒体纷纷推送了一条消息:韩国庆尚北道将用数字货币取代当地货币。乍一听,顿觉数字货币将迎来春天,毕竟韩国当地货币是法币韩元,这是一场数字货币对法币的胜利.
1900/1/1 0:00:00《核财经》编译 如果你曾经遇到过“加密货币”或“比特币”这个词,那么很有可能在同一个段落甚至句子里也能找到“泡沫”这个词.
1900/1/1 0:00:00核财经App5月22日报道作为一线城市和金融中心,北京上海充斥着金融巨头龙虎相争的故事,而发迹于草莽的温州商人和温州资本,则更像是成群结队的狼群,在财富丛林中疯狂攫取他们的猎物,2018年.
1900/1/1 0:00:00