挖矿二

作者: 风生水起_2018 | 来源:发表于2018-05-10 12:25 被阅读0次

专业挖矿设备连接着一个运行完整比特币节点的服务器。一些矿工是在没有完整节点的条件下进行挖矿,验证交易后,比特币节点会将这些交易添加到自己的内存池中。内存池也称作交易池,用来暂存尚未被加入到区块的交易记录。与其他节点一样,Jing的节点会收集、验证并中继新的交易。而与其他节点不同的是,Jing的节点会把这些交易整合到一个候选区块中。

区块头完成全部的字段填充后,挖矿就可以开始进行了。挖矿的目标是找到一个使区块头哈希值小于难度目标的nonce。挖矿节点通常需要尝试数十亿甚至数万亿个不同的nonce取值,直到找到一个满足条件的nonce值。挖矿的过程就是找到X,SHA256(SHA256(version+prev_hash+merkle_root+time+difficultyTarget+x))< TARGET

difficultyTarget:当前运算难度,最终反映结果为target,即所获得的奖励。是参考上两周产生的区块的平均生成时间而定的,两周内如果平均10分钟产生一个区块的话,两周会产生2016个区块,软件会计算最新的2016个区块生成的时间,然后做对比,随之调整难度,使得接下来产生的区块的预期时间保持在10分钟左右。因为最近的2016个区块已经确定,所以这个数字也是确定的。

上式的x的范围是0~2^32, TARGET可以根据当前难度求出的。除了x之外,你还可以尝试改动merkle_root和ntime。由于hash的特性,找这样一个x只能暴力搜索。

挖矿就是重复计算区块头的哈希值,不断修改该参数,直到与哈希值匹配的一个过程。哈希函数的结果无法提前得知,也没有能得到一个特定哈希值的模式。哈希函数的这个特性意味着:得到哈希值的唯一方法是不断的尝试,每次随机修改输入,直到出现适当的哈希值。这个数字可以变化,而且要从0试到最大值。直到最后出现的hash结果,其数字必须低于难度目标值。不过以现在的计算机算力,这个数字用不了一秒就把全部的变化可能计算完了,所以还需要改变区块内部的创币交易中的附带消息,这样就让merkle root也发生了变化,从而有更多的可能去找到符合要求的nonce。

0000000000000002a7bbd25a417c0374cc55261021e8a9ca74442b01284f0569小于难度目标值

0000000000000003A30C00000000000000000000000000000000000000000000 ,挖矿节点立刻将这个区块发给它的所有相邻节点。这些节点在接收并验证这个新区块后,也会继续传播此区块。当这个新区块在网络中扩散时,每个节点都会将它作为区块277,316加到自身节点的区块链副本中。当挖矿节点收到并验证了这个新区块后,它们会放弃之前对构建这个相同高度区块的计算,并立即开始计算区块链中下一个区块的工作。

1)

version+pre_hash+merkle_root+time+difficultTarget+nonce数据如下:

2/0000000000000002a7bbd25a417c0374cc55261021e8a9ca74442b01284f0569

c91c008c26e50763e9f548bb8b2fc323735f73577effbc55502c51eb4cc7cf2e  (merkle root的16进制)

2013-12-27 23:11:54 (utc时间)

419668748  (难度目标的十进制)

924591752  (随机数的十进制)

2)全部转换为16进制

3)为了让机器计算更快,从big-endian变为了更接近机器的编码方式little-endian.

4)拼接字符串,开始验证

在挖矿时,nonce随机数是未知的,要从0试到2^32,但是这个数字其实不大,只有4294967296,以现在的矿机动辄14T每秒的算力,全部算完到上限也不需要一秒。所以需要使用创币交易中的附带信息,额外的字符串成为extra nonce。

另外,创世区块也可以通过上面的方法来验证,有好奇的朋友可以尝试下。

1)对于创始区块,版本号是1;

2)前一区块的hash摘要,会是什么呢?

3)难度目标是1,这是定义为一个sha256结果的前32位是0,也就是对应的16进制字符串要有8个0,那么难度bits此时是0x1d00ffff。

然后再用上面的问题的解法去求解随机数就可以了。

挖矿难度调整公式

New Difficulty = Old Difficulty * (Actual Time of Last 2016 Blocks / 20160 minutes)

代码见AbstractBitcoinNetParams类里的checkDifficultyTransitions接口。

相关文章

  • 挖矿二

    专业挖矿设备连接着一个运行完整比特币节点的服务器。一些矿工是在没有完整节点的条件下进行挖矿,验证交易后,比特币节点...

  • IPFS&Filecoin常见问题都在这里

    IPFS挖矿篇 1.现在IPFS可以挖矿了吗? 答:官方2018才公布早期挖矿计划,现在未出正式通知,预计明年二、...

  • 一个10岁孩子的连载小说(二)

    今天发第二章:开始挖矿了

  • Ulord Linux挖矿教程

    Windows挖矿教程猫池官方QQ群:774881937 一、下载挖矿软件 二、解压 三、配置 把user项的内容...

  • 黄金挖矿(二)

    嗯哼~好了今天我就是B站学习区的李佳琦了! 第二位我十分想要金屋藏娇,但还是义正言辞地忍痛分享给各位的宝藏UP主就...

  • 宝二爷区块链投资实训总结 第七、八节

    第七节 矿业如何适应区块链的发展? 什么人适合挖矿? 挖矿要耗能,耗电,要挖矿就要去找电费便宜的地方。一开始宝二爷...

  • 力场的挖矿

    在力场,我们都是矿工,嘿哟嘿哟地进行着挖矿。 挖矿,我们都不陌生,有写文挖矿,权益挖矿,交易挖矿,算力挖矿等等,挖...

  • 王兴武:“消费即挖矿”,不是一个好的机制。

    在交易即挖矿后,出现了大量的行为即挖矿机制,比如消费即挖矿、阅读即挖矿、分享即挖矿等。 消费即挖矿,分两种情况。 ...

  • 闲置电脑电子货币挖矿教程(2018年2月)

    目录 一:当前区块链行业的概况和存在的商业机会 二:电脑CPU&GPU挖矿教程 三:区块链挖矿赚钱的心法​ ​一、...

  • 看小说还能挖矿赚钱

    看小说还能挖矿赚钱,这可能是今年最酷的看小说方式了。扫描二维码就可以打开阅读挖矿了。

网友评论

      本文标题:挖矿二

      本文链接:https://www.haomeiwen.com/subject/opezrftx.html