Login
欢迎来到未来世界

您现在的位置是: 首页 > 计算机 > 区块链

区块链

参与pow挖矿的几种方法(参与pow挖矿的几种方法)

区块链 加入收藏
引言比特币的挖矿收益包含两部分,第一是区块奖励;第二是交易手续费。如果打空块,就收不到交易手续费,为什么有矿池会不要手续费来打空块呢?POW挖矿原理工作量证明POW挖矿就是区块链生成新的区块的过程。包
引言比特币的挖矿收入由两部分组成,第一部分是区块奖励;第二是交易费用。 打空块,就拿不到交易费了。为什么有些矿池打空块不需要费用?粉矿原理工作量证明,粉矿就是区块链生成新区块的过程。 包括btc、BCH、ETH、LTC等。,POW采矿基于以下逻辑 挖矿就是这样,系统会给出一个目标值,是一个数字,比如前面18个零。 挖掘就是找一个小于这个目标值的随机数,比如前面19个零。 我找到了它,我挖了块。 关键词:随机数 关键问题:这个随机性是怎么算出来的?这个随机数是通过散列挖掘池中的最新区块链获得的。 关键词:最新身高 关键问题:最新身高是多少?现在一个矿池挖了一个块播了。我们假设这个块的高度是50W。 接下来,所有的矿池将在这个50W的高度后面继续开采。具体动作是首先在挖掘池中组装一个新块,这个新块包含“块头”和“填充了事务的块体” 标题中有两项需要特别说明。第一个是父块的哈希值,这里是50W height的哈希值;第二个是Nonce,它是一个数字,一个可调的数字,从0开始。 在组装这个新块之后,采矿机器散列这个新块(“50W+1”高度)加上先前的50W高度块。 这个新块是上面的“最新高度”。 机器执行一次hash,得到的是一个hash值,是一个二进制数。 矿池会将该值与目标值进行比较。如果小于目标值,恭喜你。如果你成功地挖到了矿,否则,你就要给Nonce加1,再散列一次,再比较一次...显然,当矿机散列它时,你必须尝试符合目标值的Nounce值。真的会慢到死。 但是矿池可以把不同的Nounce分成不同的矿机来试。 比如矿池共有1000台矿机,首测会给0到1000台;第二次测试为10001至2000...这是采矿的类比。 POW挖空 block 原理对于上面的50W高度Block和最新的高度Block,我们还需要进一步阐述。 在开采矿井池中的最新高度区块链之前,需要验证50W高度块。 如果验证成功,以“50W+1”的新组合块高度开采是合法的。如果50W的高度是非法块,那么所有的矿池都得回到“50W”的高度才能开采。 但是验证区块是需要时间的,因为每个矿池的软硬件都不一样。我们假设验证1M数据块的平均时间为10秒。 在验证结束之前,矿池无法确认这个区块是否合法,所以无法确认是否要添加最新的“50W+1”高度的区块。 组装最新高度的积木也需要时间。获取块模板开始组装、填充父块的哈希值以及在内存池中选择事务来填充块都需要时间。我们假设需要0.1秒。 在验证“50W”高度块时,已填充的交易会提前进入“50W+1”块,并且已填充的交易绝不能与50W高度的打包交易相同。 否则,你的最新身高块将是非法的。 “50W”高度块挖掘并广播到所有矿池也需要时间。广播块分为两个步骤。 第一步是广播块头;第二步是广播该块。 块很小,只有80字节,比一个事务还小。广播很快,所有矿池都能很快拿到块头。 有了块头,就可以得到新高度的块的“父哈希值”。 块是包含所有事务的部分,通常非常大。比如2500笔交易接近100万。 最大btc可以接近1M,加上3M隔离见证块。 BCH曾经包了一个21米的街区。 所有矿池接收块的时间会更长,这就是所谓的网络延迟。 我们假设网络延迟通常为0.5秒。 在池中挖掘最简单的方法是:只有当池获得块时,它才能确认块中有什么事务。 只有对整块进行验证,才能知道这个“50W”高的块是否合法。 然后开始组装最新高度的块,然后挖掘计算出小于目标值的哈希值。 拿到块体,验证整块,组装最新高度块,需要多长时间?0.5+10+0.1=10.6秒 如果一个矿池按照上述流程采矿,就无法在这10.6秒的时间内采矿,矿机就失效了。 而且,矿机还开着电。 如果一个矿池按照以下流程工作:一旦获得块头,就会组装出一个新的“50W+1”高的块。但是,由于无法确认这个高度为50W的区块中的交易金额是否合法,因此高度为“50W+1”的矿池不会填充额外的交易,而只会填充一个比特币基地奖金交易。 这个“50W+1”高的区块只有区块头,加上一个比特币基地奖励交易——这是空区块——然后直接开始挖矿。 这样,当全网出现新的区块时,矿方只需要等待时间拿到区块头,组装空区块,就可以开始开采了。 这个时间很短,一般不到0.5秒。 这比10.6秒节省了10秒多。 按照上述流程,领取完整的50W高度块,验证50W高度块后,挖矿的流程为10.6秒。 在上面的0.5秒到10.6秒内,如果矿机计算出的一个随机数小于目标值,则矿池将成功挖到一个空块。 如果矿机没有计算出小于目标值的随机数,矿池将放弃10.1秒的开采时间,然后组装一个新的填充有交易的“50W+1”高度的高度块进行开采。 以上就是挖空 block的全部逻辑。 优化挖掘原则 在上述挖掘原则空中,确认“50W”高度块中的交易是一项重要的工作。如果能提前知道这些事务,难道不能通过组装“50W+1”高度块来避开这些事务,组装其他事务,这样就不用打/ 现在btc和BCH网络有两个技术可以优化这个区块的传播,让所有的矿池更快的知道“50W”高度有哪些交易。 第一种技术叫做Bloom filter第二种叫做紧致块和Xthin块。 (compact block是Core dev开发的,Xthin是unlimited dev开发的。两种功能是一样的。 )Bloom filter用来标记高度为“50W”的区块的交易,这只是标识。 当挖掘池获得这个标记时,它将知道其中有哪些事务,然后它将在自己的内存池中查找这些事务,列出它没有的事务,然后向其他节点请求它没有的事务。 在这些交易之后,在本地重新组装“50W”高度块,而不是从网络下载“50W”高度块。 这个过程就是Compact block和Xthin block的原理。 这两种技术都可以压缩网络延迟时间,但仍然无法压缩验证“50W”高度块的时间,而前者仅为0.5秒,后者为10秒。 这样的时间差距,矿池还是要挖空块的,不然整个矿机白白浪费电。要知道,这10秒钟的浪费,对于整个网络来说,是巨大的能量。 然后呢?彻底挖空块的解决方案 以上对挖空块原理和优化开采原理的分析,挖空块的核心原因是矿池不敢填和[/k0/]块“50W+1” 如果有办法保证矿池组装的空块在“50W+1”的高度绝对没有交易,那不就解决问题了吗?一种方式是挖矿池自己生成一些事务,不广播,只保存在自己的内存池中填充“50W+1”高空块,仅此而已。 但是矿池不能产生一些无意义的交易,否则就是一些垃圾交易,浪费网络。 用户发送的打包交易肯定是有意义的,但是用户发送的交易往往是广播式的,所以存在打包会和“50W”高区块的交易冲突的风险。 一定要寻找尚未播出的交易。 一种方法是矿池和交易所合作。交易所不广播用户在交易所发起的提现交易,而是以IP到IP的方式直接发送给矿池。这些交易永远不会被“50W”的高区块打包。 这些交易可以达到“50W+1”100%不冲突的高度。 如果交换和挖掘池是同一个公司实体,那么这种方法很容易实现。 不是同一个题材,矿池还是怕被交易所坑。如果交易所取消广播交易,可能会浪费空的块奖励。 但这种方式会降低交易所的用户体验,因为命中空块的概率较低。这些交易打包需要多长时间?虽然挖矿池可以用非空块打包,但是用户要等这个挖矿池出来一个块才能确认,离全网还有一段距离。 还有一种方法是让交易所提交给矿池的保密交易不是用户的提现交易,而是把一些零散的UTXO的交易拼凑成一个大的UTXO。 这种事务极大地优化了整个UTXO卷,并且在这些事务中没有非常强的时间要求。 按空块打包 总之,我们只需要考虑经济,因为挖矿机制是最优设置,道德不应该涉及。 所有针对空区块批评矿池的评论,都是对POW的挖矿机制没有信心。
图集详情底部广告位