区块链,一切源于比特币(2)

作者:衡客慕白  时间:2019-11-09  分类:区块链Blockchain新闻  

  这回咱来说“挖矿”

  从字面上来看,应当是通过投入某种工作,然后能得到一个“宝贝”,也就是矿。当然了,“挖矿”自然不是我们通常认为的那个挖矿,它只是一套算法,在介绍算法过程前,我们先来了解下挖矿在比特币软件中主要都有哪些用途:

  ·抢夺区块打包权

  ·验证交易事务

  ·奖励发行新币

  ·广播新区块

  比特币是一个对等网络,每个节点都可以独立维护自己的数据副本,那么问题就来了,怎么来保证彼此之间的数据一致呢?既然没有一个中心服务器,自然也就没有一个传统意义上的权威数据来源了。这就得有一个约定的规则,大家共同按照这个规则来进行竞争,谁竞争成功了谁就有数据的打包权,也就是记账权,打包完成后广播给别人,别人只要验证一下有无问题即可,没有问题就存入到自己的数据文件中。这个思路不错,等于就是大家来竞争临时中心服务器的资格,那么比特币中实行了一种什么样的规则呢?那就是被称为工作量证明(Proof of Work,PoW)的一种算法,其实就是类似于掷骰子的一种游戏。

  1、至于在比特币中具体是怎么来掷出这个骰子的不在我们讨论的兴趣范围,固此处省略几万字。不过这里有个小贴士:在比特币诞生初期,当时的全网算力,大约需要10分钟左右的运算能得到一个符合最初设置难度要求的值,这也是我们常常说比特币网络每隔大约10分钟出一个区块的来源。可以简单的理解为,首先设定一个难度值,然后就是通过工作量证明算法,也就是比特币中的挖矿算法来计算出一个结果,这个结果要小于这个难度的目标值。这些信息可以通过比特币支持的JSON-RPC中的getblock命令方法获得。比如,我们看下0区块的难度信息:

  "nonce": 2083236893,随机数

  "bits": "1d00ffff",目标值

  "difficulty": 1,难度值

  2、挖矿计算

  首先,我们说了挖矿是要抢夺区块打包权,那就得收集需要打包进区块的那些交易事务,那这些数据从哪来呢?(这里有个概念需要大家注意,打包就像是记账,是把发生的交易事务记录下来存档,但是无论什么时候打包、谁打包,在网络中发生的交易是持续不断的。)

  在比特币系统中,每个人都会将通过钱包进行的转账交易数据广播到网络中,这些都是属于等待打包的未确认交易数据。这些数据都会放在一个内存池中,总之就是一个缓冲区,当然,这些数据都会被接受基本的验证,用以判断是否是不合法的或者是不符合格式的交易数据。挖矿程序从内存池中获取用来打包区块的交易数据,接下来就要干活啦!至于怎么干,此处又要省略一万万字,因为当你听到诸如哈希算法、梅克尔根、区块时间戳等等字眼儿时估计又会失去兴趣。你只要知道这个过程就是对应上面那个设定的难度值对应的目标值进行匹配就可以了。简单地说,挖矿就是重复计算区块头的哈希值,不断修改该参数,直到与难度目标值匹配的一个过程。

  一旦匹配成功,就可以广播一个新的区块,其他客户端会验证接收到的新区块是否合法,如果验证通过,就会写入到自己的区块链账本数据中。那么,挖矿的奖励在哪儿呢,不是说矿工成功出一个区块就能得到比特币作为奖励的吗?那么这个奖励在哪呢?这个奖励其实是作为一条交易事务包含在区块的交易事务中的,相当于系统给矿工转账了一笔比特币,这种交易事务由于特殊性,通常称为coinbase交易,这个交易一般是位于区块中的第一条,比特币系统也正是通过这种挖矿奖励的方式发行新的比特币,就像央行发行新钞一样。

  这个奖励不是无限的,从2009年1月创建出第一个区块,每个区块奖励50个比特币,然后每21万个区块(大约4年)产量减半,到2012年11月减半为每个区块奖励25个比特币,然后在2016年7月减半为每个新区块奖励12.5个比特币。基于这个公式,比特币挖矿奖励逐步减少,直到2140年,所有的比特币(20999999.98)将全部发行完毕,到那个时候挖矿就只能收入一些交易手续费了。彼时,比特币网络是否还能保持运行,我们目前也只能持保留意见了。矿工在没有明显的激励情况下,是否还愿意通过挖矿承担区块打包的责任,现在也很难说。

  善于思考的你可能会问这样一个问题:挖矿算法虽然能够提供工作量证明,表明矿工确实是投入了相当的算力的,但是却不能保证只能是一个矿工能挖到啊,如果在同一时间内多个矿工都计算出了符合条件的值,都拥有了打包权,那以谁的为准呢?比特币中的解决方案,竟然是那么简单,人家没用什么复杂的算法,就是让节点自己选择,最终传播最广、处于最长链中的区块将被保留,因此到底谁的区块会被保留下来,可能还真得看看运气了。

留给我们的思考和启发:在分布式系统中有一个重要的原理叫FLP不可能原理,由Fischer、Lynch和Patterson三位科学家于1985年发表的论文《Impossibility of Distributed Consensus with One Faulty Process》提出:在异步模型中,分布式系统中只要有一个进程不可用(失去响应或暂停),就可能无法达成整体的共识。比如,A投票0,B投票1,C收到了然后睡着了(类比节点失效了),则A和B永远无法在有限时间内和C共同获得最终的结果。看到这里,我们也就明白了挖矿的作用了,除了发行新的比特币外,主要就是维持网络共识,让每个节点对区块链的数据保持最终一致性。同样我们再回到市场交易的环境,就会理解:试图在任意场景下都能实现共识性的算法是不可能的,而比特币提供的解决方案,即让每个节点自己选择那些传播最广、最长的链将被保留。这也就帮助我们理解了,在市场交易的过程中,为什么要对那些有长时间影响、同时赚钱效应持续的时间长的群体给予重视?因为他们维护共识性的成本最低。
版权信息
作者:衡客慕白
来源:衡客

关于我们

联系我们

作者进驻

公众号

Copyright © 2013 比特巴 www.btb8.com
只为您提供客观公正有用的比特币 区块链 加密数字货币新闻、技术教程、行情分析、行业人物资讯
手机版