当前位置: 源码链 > 挖矿攻略 >

区块链“挖矿”到底在挖什么?哦,原来是这么

近一段时间,随着区块链技术持续升温,对这一并不新鲜的技术再次探索的劲头又被提了起来。刚开始也和很多朋友一样,对“挖矿”这一引伸词很不理解,虽然我也知道“挖矿”成功可以获得奖励,但具体是怎样的一种算法始终云里雾里。在网上一番搜索,也许是大神不屑说,也许是重心不在技术,也许是自己理解能力差,花了很长一段时间整理相关资料,并对照源码,总算对“挖矿”有了一个比较清晰的理解。

要理解“挖矿”,必须得先搞清楚区块链的结构。

区块:可以理解为一张空白纸。正如一张白纸不能无限大一样,区块也有大小限制,比特币最初的大小限制在1M字节,一个区块就是存在电脑上的一个文件。一个区块分为两部分,分别是“区块头”和“区块体”,其中区块头用来记录一些说明信息,而区块体是用来记录“交易”的列表。注意,是列表,真正的数据记录在客户端的数据库中。

区块头:区块头共有六个字段,分别是版本号、前一区块的哈希值、梅克尔根、预设的难度值、时间戳、要寻找的随机数。

(1)版本号:用于区分软件的升级换代。在一段时间内不变且相同。

(2)前一区块的哈希值。实际就是前一区块头的哈希值。成链就靠它了,10分钟的“挖矿”过程,所有“矿机”中这个值不变且相同。

(3)预设的难度值。10分钟内所有“矿机”中这个值不变且相同。

(4)梅克尔根。这也是一个哈希值,它是由列表中的每个交易两两递归生成的一个总哈希值。交易随时在到来,因此这个总哈希随时在变,而且因为网络延迟、交易优先级等诸多问题,每个结点记录的列表不一定相同。因此,梅克尔根是一个变化值且与其它节点不相同。

(5)时间戳。这也是一个变化值,几秒钟就会改变。

(6)要寻找的随机数。这个就是要获得挖矿奖励的核心要素,也就是“矿机”穷尽算力要寻找的那个随机数值。

挖矿过程就是对以上这六个字段进行一系列的转换、连接和哈希运算,并随着不断一个一个试要寻找的随机数,最后成功找到一个随机数满足条件:经过哈希运算后的值,比预设难度值的哈希值小,那么,就挖矿成功了,节点可以向邻近节点进行广播该区块,邻近节点收到该区块,对以上六个字段进行同样的运算,验证合规,再向其它结点转播,其它结点也用同样的算法进行验证,如果全网有51%的结点都验证成功,这个区块就算真正地“挖矿”成功了,每个结点都把这个区块加在上一个区块的后面,并把区块中与自己记录相同的列表删除,再次复生上述过程。

另外要说的是,不管挖矿成不成功,每个节点都预先把奖励的比特币50个、所有交易的手续费(总输入-总输出)记在交易列表的第一项了(这是“挖矿”最根本的目的,也是保证区块链能长期稳定运行的根本原因),输出地址就是本结点的地址,但如果挖矿不成功,这笔交易就作废了,没有任何奖励。而且这笔叫作“生产交易”的交易不参与“挖矿”计算。

其它加密数字货币的“挖矿”大同小异。这么看,手机APP的“挖矿”根本就不叫“挖矿”,只不过是免费派发“糖果”罢了。

来源:源码链 返回首页  <<