LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 区块链资产 > 比特币挖矿,为什么矿工不偷矿呢?(No.130)

比特币挖矿,为什么矿工不偷矿呢?(No.130)

2019-12-29 林汐颜 来源:区块链网络

今天12月29日,金赞第四天...

★第一部分:偷矿问题

【问题源】比特币挖矿,为什么矿工不偷矿呢?

【问题补充】:大家都知道比特币挖矿是通过pow来寻找合适的解得到的,这个是通过一个(随机数+解)哈希后得到的数值小于系统设定值,那就为合理解!这里我困惑得有几点,这个随机数是谁来产生,如果是本机产生,那们我们自己本身每次都用同一个随机数+之前已经找到的解不就不用计算了吗,其它节点怎么知道我这个随机数是不是真的随机数,如果说随机数由系统产生,每次随机数都会改变,那么在一次挖矿中,所有节点的随机数都是一样的,那假如我是一个节点,我收到了其它节点发给我的正确的解,我为什么要帮他转发呢,我把他的解用我的身份签名(私钥),然后转发出去不可以吗?相当于偷矿,虽然是他先发现的,但是假如我传播出去的速度比他快,更多的得到了其它节点的认可,那么就相当于这个矿就是我挖出来的!而且从我本身节点来说,我不用耗费大量的算力挖矿,只需不停的去偷别人发来的解,是不是会有更高的成功率呢!

————以上是问题源————

★第二部分:直接解矿

首先解释一下这个问题,这是我在网上看到的。不得不说这真是个天才,矿圈的确有一种偷矿的操作,拦截主节点收益!哈哈,乖乖...

挖矿不是用一个数做哈希,是用你打包好的整个一个区块做哈希,打包的交易记录里面第一条是“矿工XXX得到12.5个币”,这一条就是所谓的挖矿奖励。

区块包里面还有个随机数的位置,这个随机数不是随便一个数的意思,矿工一般是顺列这个数(而不是随机跳着选数)来做整个块的哈希计算,以找出满足“这个区块的哈希值小于特定值”这一目标的数。

当矿工XXX找到这个数并把整个块以及哈希值广播出去以后,矿工OOO想偷这个包?就必须把里面的那一条“矿工XXX得到12.5个币”改写成“矿工OOO得到12.5个币”,这样才能偷到奖励嘛,然后整个块的哈希值就变了啊!!!不再满足“这个区块的哈希值小于特定值”这个条件了。

总结出来的重点:

? :每次挖矿做哈希的源是(各个交易+解+随机数),随机数是由本地节点自己选取,说是随机数,其实是本节点可以任意选定,由于交易中有一条交易是12.5btc指向自己,导致其它接到消息的节点,如果想偷解,就必须把12.5btc指向自己,这样会导致整个源发生变化,所以应该不存在偷矿的…

? :如果你能找到把 XXX改成OOO还能保证原哈希值的方法,那么恭喜你,你已经是世界顶级数学家了,在中国能当院士了。有兴趣可自行搜索“???院士破解MD5和SHA1加密算法”的新闻。比特币用的是SHA256(哈希256算法),是SHA1的升级版。

★第三部分:科普挖矿

最后我们来科普下比特币挖矿的知识:

▼ 挖比特币到底是在干什么?

挖矿是增加比特币货币供应的一个过程,同时还保护着比特币系统的安全,防止欺诈交易,矿工们通过为比特币网络提供算力来换取获得比特币奖励的机会。

比特币是一个点对点的支付系统,其核心是交易。就是你给我发一笔交易,我给你发一笔交易。这些交易得有人来帮我们记账。就像支付宝公司会帮用户记账,我们在银行转账会由银行来记账。那比特币里是由一个叫矿工的人来记账的。

矿工怎么记不要紧,反正是有记账办法对吧。但由哪个矿工来记才是关键。由于比特币是系统没有银行那样的中心节点,所有人都可以来竞聘这个矿工的职位,获得给比特币系统记账的权利。但是大家都来竞聘,到底这个记账的权利给谁呢?怎么证明你这个矿工确实干了活呢,怎么确保这个矿工不记假帐呢?比特币的发明者中本聪搞了一个非常聪明的办法,这个办法叫做工作量证明机制,也就是我们常说的POW。

其实非常简单,就是猜,像买彩票一样,不停猜一个哈希值,没有捷径,就是不停的猜,谁先猜对了,给比特币系统新增一页账本的记账权就是这个人的,这个猜题的能力,或者速度,就叫做算力。

解数学题争夺记账权,然后给账本记账的这个过程呢,就是我们常说的挖矿了。为什么叫挖矿?因为这个记账的奖励,从最初的每记一页账本给会计50个比特币的奖励额度,会逐渐变成每记一页给会计25个,然后是12.5个。而每记录21万页账本后,每记一页账本的比特币奖励就会减少一半……

有点像挖贵金属,比如挖金子,都是随机的,一开始金子多,很容易挖,慢慢越挖越少,然后越难挖,所以,这个过程就被人形象的叫做挖矿。

▼ 比特币产量减半

每记一页新增奖励变成之前的一半这个时间点呢,就叫比特币减半,基本上4年左右会有一次。第一次减半是在2012年11月,下一次减半预计大概在2020年5月份前后,以此类推,大概在2140年左右呢,比特币系统将不在有新生成的比特币产生。

比特币确切的理论总量209999999.7690000个,这个数字接近2100万,所以我们基本上也就会常常说比特币总量就是2100万个,其实不到。

比特币2100万个挖完了怎么办?别担心,矿工的奖励除了新增加的比特币,还有每个区块里的交易手续,目前新增奖励是大头,未来比特币系统的交易手续费才是矿工的主要收入,2100万个比特币全挖出来后,矿工将只靠比特币手续来获得收益。

▼ Hash计算

我们先回顾下单向散列hash算法。所谓单向散列hash,是指一段信息经过单向散列hash后得到一个特定长度的二进制位(bit)。这个过程是单向的,即只能通过原始信息计算出二进制hash值,不能通过二进制hash值反算出来原始信息,而且原始信息的任何微小变动都会引起散列后的二进制hash值的巨大不同。

? 单向散列hash

常用的单向散列hash算法有MD5,SHA256等,比特币使用了SHA256。

当一个区块打包节点试图对一组交易打包的时候,需要寻找一个随机数(nonce)跟区块头的其他一些信息一起计算出一个SHA256hash值。比特币协议对这个hash值有一个难度要求,比如hash值的前若干位必须为零(对hash值的约束事实上是通过调整一个难度系数计算得到的,比特币通过调整这个值使得即使在算力提升的情况下,仍然需要十分钟才能计算出来符合条件的hash值)。

因此区块打包之前必须大量重试随机数nonce,不断进行hash计算,以求能够计算出满足难度条件的hash值,这个过程就是比特币的工作量证明,通过调整难度系数,将区块的打包速度维持在10分钟左右。所谓挖矿就是重试随机数以计算符合难度条件的hash值的过程,一旦找到了这个随机数,就获得了打包区块的资格,进而赚取交易手续费和比特币奖励。

这种激励条件激发出人们挖矿的热情,不断将更强大的计算资源投入到比特币的网络中。最早的时候人们用计算机的CPU进行hash计算,后来改用GPU计算,最后生产出专用的ASIC矿机。组织方式也越来越精密庞大,开始的时候个人将自己的计算机接入比特币网络进行挖矿,这个时候打包区块的节点和hash计算的节点在一起的。后来发现困难的是hash计算,于是打包区块和hash计算分离开来,由一个随机数分配中心将随机数分片后分发给多个hash计算节点进行分布式hash运算。

? 分片hash架构

这种架构引出了一种新的挖矿模式,即矿池,矿池主人维护区块打包节点和随机数分片,愿意加入矿池的人,将自己的矿机接入矿池参与hash计算,整个矿池中只要有一个hash计算节点计算出符合条件的hash值,矿池就可以打包区块获得奖励,然后把奖励按照加入矿池的矿机的计算能力分配给所有参与的矿工。

如果说矿池是小矿工的联盟,小矿工们携带矿机联合挖矿的话,那么矿场就是大企业的集团化挖矿作业了。矿场在电力充裕便宜的地方,建造仓库,购置大量矿机进行集群化挖矿。

—-

编译者/作者:林汐颜

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...