也许很多人不了解区块链技术,但大多数人都早已对比特币有所知晓。事实上,人们对区块链的认知最早也就是从比特币开始的。在介绍区块链的时候,我们通常认为区块链起源于比特币。所以,为了更好的理解什么是区块链,笔者带大家了解比特币的挖矿原理:
为了更好的理解比特币挖矿原理,笔者先带大家了解一个名词哈希算法。
哈希算法是指一种用于加密的数学运算,也叫“杂凑算法”或“散列算法”,可以说成是计算机一些列算法的统称。
哈希算法的特点是等长性、无序性、单向性、一一对应性。
怎么理解呢,比如说一段论文通过哈希加密后(不管你的论文是长、是短),得到的哈希值是一段等长的、无序的毫无规律的字符,比如0000v5f03202…………。
通过得出的哈希值是没办法倒推出你论文的原文,这说的就是单向性。
并且,你这段论文如果改动哪怕一个字或者标点符号,对应的哈希值也会跟着改变,这就是所谓的一一对应性。
当然,在理论上,两段不同的明文有可能得出相同的哈希值(专业术语叫“哈希碰撞”),但是几率非常之小,不影响正常应用,可以忽略不计。
下面我们就开始介绍挖矿的过程:
比特币挖矿,本质上就是一个比拼算力,抢夺记账权的过程,谁先抢到记账权,谁就能获得比特币奖励,同时大家把这个区块(账本)同步到链上。
首先,我们来看看一个完整独立的“区块”上包括哪些基本要素:
当前区块的版本号
前一个区块整体哈希加密求得的哈希值A
打包系统广播池的交易记录(比特币用户转帐的记录)B
时间戳C
当前区块生成时的难度值(根据增加0的个数调节难度)D
Nonce(一个毫无实际意义的随机值)
了解到这些,笔者开始挖矿:
第一步:生成币基交易,同时把ABCD一起放在备选区块上。
第二步:根据备选区块生成的难度值D来猜测一个符合条件的Nonce。因为我们上面讲过哈希加密的单向性,是不能通过哈希值倒推的,所以这种猜测只能通过穷举Nonce并计算其对应的哈希值来进行。(也就是常说的工作量证明)
就像摇号一样,不停的尝试,直到摇出一个Nonce随机值哈希加密后小于或等于难度值D
(币基交易+A+B+C+D+Nonce)哈希加密=哈希值
难度值D取决于前面0的个数,比如难度值是000000jci65fdj.................,那么前面0的个数越多,符合条件的哈希值范围就越小,难度值就越大。这个难度值是根据全网计算能力来调整难度(全网算力越大,猜测出Nonce就越快,反之则越慢),使之在一个合理的范围内,保证每10分钟才能产生一个新的区块。而目前比特币挖矿的全网算力已经非常高,需要耗费巨大的计算能力才能产生新的区块,所以这是个极具耗电的过程!
第三步:假如笔者通过大量的”摇号“和哈希计算,终于找到一个符合条件的Nonce后(比如找到一个随机的Nonce使其整体哈希加密后得出的哈希值前面0的个数小于难度值“000000jci65fdj.................”),笔者必定特激动,“哈哈,我挖到了”,马上把这个区块广播到区块链网络中。(比方说我这个区块编号为W)
最后,网络中其他节点收到这个区块后,会对其进行验证,如果通过其他所有节点的检验,那么这个区块将被纳入区块链中。然后以我的区块W为前一个区块进行新一轮的挖矿。
同样的:
(生成币基交易
W区块哈希加密求得的哈希值
打包的交易记录
时间戳
当前区块生成时的难度值
Nonce)
放在新的备选区块上,继续需找符合条件的Nonce
.........
如此重复
以上就是比特币挖矿原理:简单说就是通过不断穷举找到符合条件的Nonce随机值,获得比特币奖励,当然,除此之外,还能获得比特币用户转账的“转账费”(打包交易记录的奖励)。
可以看出,生成一个新的区块里包含上一个区块的哈希值,上一个区块里包含上上一个区块的哈希值........,以此类推,数据是不是越埋越深,环环相扣,像链条一样?并且每个节点的矿工手里都有一份相同的账本,如果改动其中一个区块的数据,其他区块的哈希值就会跟着改变。也就是说你想要篡改数据的话,那么,至少要控制51%以上的节点,这几乎是不可能的,所以说区块链是去中心化(所有矿工参与记账)、不可篡改的共识账本。
比特币运行11年来,历史上没有出现过任何巨大的问题,可以想象,这套系统的安全性是毋庸置疑的。更重要的是,他向这个世界开启了区块链技术的启蒙应用。再次向比特币的神秘创始人中本聪大神致敬!
通过本篇文章的描述,你是否看懂比特币的挖矿原理?欢迎留言讨论