比特币矿机挖矿的难度是如何规定的?
先占个坑,之后写详细的回答。
简单的说比特币的矿机挖矿,实际上是在节点组装好交易之后,矿机在不断重试不同的随机数,让包含这个随机数和交易的默克尔根、前一个区块哈希和其他一些数据的哈希值前面有若干个零。
考虑到哈希结果基本均匀分布,所以要一次算出前面好几个零是很难的,当前的矿机可能得算几十年。
解决办法就是多一些矿机,一起算,就能达到十分钟的平均出块时间。但是每个矿机都需要一个节点组装交易的成本就太高了。
因此就可以把多台矿机连接到一个节点上,分别算不同的随机数范围。这样就只要一个节点,千万台矿机。这样的节点(只有挖矿的才是节点,参见白皮书定义)就被称作矿池。
但是,这么千万台矿机怎么分挖出来的比特币呢?分配的方式需要公平合理。因此不能相信矿机自己报告的计算数量,而要依据矿机提交的有效结果。因此为了更好的估计出矿机的工作,矿池会把一个很高的难度的工作(比如20个零)转换为一个较低难度的工作(比如8个零)。可以被全网承认的更高难度的结果是包含在低难度结果中的,但是我们却可以依照低难度结果来推断矿机的贡献,用来在矿池中分配工作收益。
因此,矿机的工作难度,是由矿池分配的,调节到矿机恰好每分钟可以提交若干次有效的低难度结果。计算能力越强的矿机获得的难度越高。因为越频繁的提交越占用带宽,越不频繁的提交带来的估计工作量的难度越大。
先码著,空了答,终于看到币圈最踏实、不急躁的问题了
比特币主链上,每10分钟出一个块,随著挖矿人数的增加,挖矿算力难度也与日俱增。
我们可以从https://btc.com/上看出,截至今日全网算力已达88.22 EH/s。个体用户已经很难自己完成挖矿。
为了使产生区块的速度维持在每10分钟一个,每隔2016个区块(大约两周时间),网路会通过调整难度控制生成工作量证明(pow)所需的算力,重新计算打包区块的难度,也就是重新调整目标阈值target。如果算力提高n倍,难度值也应调高n倍。
主要运用的演算法公式为:
difficulty=[pre_target]*[前2015个区块生成所用的时间]/1209600
写死在代码里的一个规则,每个节点按规则计算出挖矿难度