当前位置: > 快讯 > 正文

比特币矿机到底在计算什么|比特币挖矿到底在计算什么

比特币的挖矿计算其实就是大家一起做数学题,题干是需要被记录的交易,大家通过做题抢夺记账权,抢到的矿工就能获得系统奖励和交易手续费。

比特币用的SHA256算法的特点是已知答案验证正确很容易,但是要得到答案非常麻烦,需要一个一个数字去试。最先得到答案的矿工大家就都认可他是抢到了记账权,奖励就归他了。大家继续抢下一题的记账权。

简单来说这些计算的意义只在于保证整个系统的稳定安全,并没有更多的意义。把比特币看作是计算的副产品是不全面的,比特币的产生发行、比特币链上所有的交易流通、比特币系统的稳定性,都是计算的目的,是一体的。当然除了维护这个系统之外,的确并没有产生其他的价值和产物。这也是比特币被指责不环保浪费资源的一个黑点。

总的来说,比特币作为一个里程碑式的区块链数字货币,其源于大量的算力投入和用户信任的巨大价值。这一点还是毋庸置疑的。

区块链实质上是由一个个记录着交易信息的数据块链接而成的,生成一个新区块所需要完成的工作量证明,就是找到一个随机数,使得将这个随机数、上一个区块的哈希值、这个新区块的交易数据组成的字符串代入做哈希运算,所得到的哈希值符合目标难度要求。

哈希运算,简单来说,就是输入任意长度的字符串作哈希运算会得到一个较短的固定位数的字符串,称为这些输入信息的哈希值,并且不同的输入信息,哪怕是一个标点的不同,都会生成截然不同的哈希值。上一个区块的哈希值即是把上一个区块信息代入做哈希运算得到的唯一一个哈希值。

哈希值的表达是由0至9这10个数字以及abcdef这6个数字构成的,也就是说每一位有16种可能。而任何输入所生成的哈希值的表达是非常随机不可控的。具体的难度要求则是指限定一个哈希值表达的目标范围——哈希值开头连续多位数字是0。我们知道,随机代入数值,要实现开头1个字位是0的概率是1/16,而要实现开头8位都是0的概率则是1/2^ 32,也就是大约需要代入2^ 32个随机数才能够得到一个开头8位都是0的哈希值。所以记账节点们在耗费大量算力计算的过程,就是代入大量随机数进行哈希运算直到找到一个能够让其参与生成的哈希值实现要求数量的0作为开头。

而这个难度要求是根据全网算力的变化进行调整的,比特币网络共识每生成2016个区块后,全网节点重新评估算力水平确定新的难度要求,以保证找到一个目标随机数的时间大约是10分钟。

简单的说就是不停地拼凑字符串,计算的SHA256哈希值,直到找到产生合适的哈希的字符串,这个字符串就是解。

为什么要做这些计算?

本质上这个计算是为了解决分布式网络的同步问题,也常被称为”拜占庭将军问题“。中本聪曾经回复过这个问题 比特币采用了工作证明来解决拜占庭问题,而且中本聪选择了计算哈希来作为过程中计算的问题。

比特币网络的区块链实际上就是一个大账本,在分布式的网络中会存在多个版本的账本,怎么找最新的账本呢?你只需要找计算难度最大而且长度最长的账本,这样每个人都能安全地同步到同一个账本上来。

比特币到底在计算什么?

比特币矿工们通过计算,其目的在于找到一个计符合函数要求的随机数。一旦找到了这个随机数,就获得枝激型了链上打包铅物区块的资格猛猜,进而赚取交易手续费和比特币奖励。

比特币的挖矿到底在计算什么?

比特币的挖矿计算其实就是大家一起做数学题,题干是需要被记录的交易,大家通过做题抢夺记袜册账祥好链权,抢到的矿工就能获得系统奖励和交易手续费。比特币用的SHA256算法的特点是已知答案验证正确很容易,但是要得到答案非常麻烦,需要一个一个数字去试。最先得到答案的矿工大家就都认可他是抢到了记账权,奖励就归他了。大家继续抢下一题的记账权。简单来说这些计算的意义只在于保证整个系统的稳定安全,并没有更多的意义。把比特币看作是计算的副产品是不全面的,比特币的产生发行、比特币链上所有的交易流通、比特币系统的稳定性,都是计算的目的,是一体的。当然除了维护这个系统之外,的确并没有产生其他的价值和产物。这也是比特币被指责不环保浪费资源的一个黑点。总的来说,比特币作为一个里程碑式的区块链数字货币,其源于大量的算力投入和用户信任的巨大价值。这一点还是毋庸置疑的。

比特币挖矿究竟在计算一个什么问题?手动验证区块链给出答案

简单回顾下挖矿的流程。 首先先要对所有的交易做验证,剔除有问题的,然后通过一套自定义的标准来选择哪些交易希望打包进区块,比如说提供的交易费与交易占用的字节大小的比值超过某个门槛,这样的交易才被认为有利可图。当然,节点也可以特意选择要加入某条交易,或者故意忽略某些交易。如果是通过矿池挖矿的话,矿池的服务器会去筛选交易,然后分配给每个参与的矿机一个独立的任务。 一旦筛选好交易数据,层层约减,通过这些交易就可以计算出一棵Merkle树,可以确定一个唯一的摘要,这就是Merkl树的根。 然后我们再依次获取挖矿需要的其他信息,这些信息组成一个区块的头。 区块头的字节分配 区块头只有80个字节,挖矿只需要对区块头进行运算即可。交易数据都通过merkle树固定了下来,不需要再包含进来。 这些信息中大部分已经是固定下来的,或者是可计算的。 我们以区块277316为例,其信息来自网站 http://blockchain.info Bitcoin Block #277316blockchain.info 选择这个区块的原因是在《Mastering Bitcoin》一书中,中文社区译本和英文原版在介绍这部分内容时有出入,而且作者Antonopoulos并没有提到一个关键点,就是字节顺序的问题,相信很多人可能会踩这个坑。这里还原的细节可以帮助读者与书籍做相互参考。 请大家注意下面的每个步骤,注意每一个变化,这是比特币最核心的算法。 转换时间,记住,一定要转为utc的时间戳,此处遇到森纯雀过坑,小心。 这一步的发现异常艰辛,耗费了大量的查询,大坑,大坑,谨记。发明人中本聪可能为了让机器计算更快,而变为了更接近机器的编码方式little-endian. 最终得到的结果就是 16进制下前面15个0,然后是1; 而难度目标对应的数字是 16进制下前面15个0,然后是3. 计算结果小于难度目标,符合要求。这个结果与网站上公布的数字一致。 在挖矿时,nonce随机数是未知的,要从0试到2^32,但裤悔是这个数字其实不大,只有4294967296,以现在的矿机动辄14T每秒的算力,全部算完到上限也不需要一秒。刚才提到在这种情况下,需要使用创币交易中此早的附带信息,额外的字符串成为extra nonce。 另外,创世区块也可以通过上面的方法来验证,有好奇的朋友可以尝试下。 提示:

发表评论

  • 人参与,条评论

热门阅读

最新文章

取消
扫码支持 支付码