文|财神
2019年11月21日,全球第二大矿机厂商-——嘉楠耘智在美国纳斯达克上市,全球区块链第一股诞生。
2012年在北航读博的张楠赓准备休学创业,在与导师沟通未果的情况下,自己直接退学,随后创办嘉楠耘智研发比特币矿机,以对抗美国“蝴蝶实验室”对比特币算力的垄断。
嘉楠耘智转战七年,先后在A股借壳上市末果,新三板挂牌被拒,香港上市再被拒,最终打入纳斯达克资本市场。主要靠借研发比特币矿机最终上市,这也算是币圈一段佳话。
今天,我们就来学一学,什么是比特币挖矿,详细了解一下挖矿的过程。
第二课:比特币挖矿原理解密
引:
在现实中我们并不关心货币是如何发行的,因为央行就代表了权威。而在区块链世界里,比特币该如何出生,又如何将比特币公平的发放到参与者的手中,并且大家都能接受这种规则呢?
比特币的公平派发,以及派发的周期就是重中之重。
所谓公平派发,是能让所有人可参与,并无异议。
所谓派发周期,就是不能在很短的时间内,在还没有形成普通共识之前就派发完了,这对后期参与的人来说不够公平。
所以,比特币采用了公开区块链帐本,人人竞争记帐的方式,以工作量证明给予区块奖励,并每21万个区块奖励减半,这大概需要到2140年将所有BTC挖出,并达到总量限定在2100万枚。
这种挖矿叫作:工作量证明算法(Proof Of Work)
但是在开始之前,依然需要解释清楚相关的知识点。
1. 哈希函数SHA256
每一个区块都有一个唯一的哈希值,可以理解为区块的身份证号码。那这个哈希值就是通过SHA256这个加密算法来实现的。
比如比特币的第0个区块的哈希值是:
000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f
它只能是0-9和abcdef这16个值,用计算机术语叫“十六进制”。
比特币在很多的地方都使用了这个哈希函数,它的神奇就在于:它不管你的输入参数是什么,计算后的结果都是一个长度为256位的值,如果用十六进制表示长度就是64。
并且还有2个特征:
1、无法通过结果推导出输入,只是一个单向的过程;
2、结果很随机,只要输入变化一点,结果就相差万里。
2. 挖矿难度
如果你再看一眼上面财神发的创世区块(第0号区块)的哈希值,你就会发现前面有连续10个0, 其实这还隐含了挖矿的难度。
从0-9和abcdef这16个数里面随机抓一个出来,那么是0的概率为16分之一。
那要是前面2位都必须是0,就得16*16=256 分之一。
前三位都必须是0,就得16*16*16=4096 分之一。
不信,大家可以试着去算一下出现10个0的概率有多大,这大概就是中本聪最开始用电脑计算需要10分钟才能找出的值。
随着比特币全网算力的大幅提升,【区块哈希】前的0越来越多了,每增加一个0需要16倍的算力。
第600,000区块的哈希为:
00000000000000000007316856900e76b4f7a9139cfbfba89842c8d196cd5f91
3. 将难度值转变成目标值
比如难度值为0x1903a30c,它的意思是0x19 为 幂,而 0x03a30c 为系数。
计算难度目标的公式为:
target = 0x03a30c * 2^(0x08 * (0x19 - 0x03))
target = 0x03a30c * 2^(0x08 * 0x16)
转为十进制的话:
target = 238,348 * 2^176
对数学不好的来说,不要紧,只要知道难度值为0x1903a30c最后计算出来的结果是:
0x0000000000000003A30C00000000000000000000000000000000000000000000
也就是说当前难度,生成的【区块哈希】必须满足前15位为0,这是区块277316的难度。(来源:精通比特币)
4. 工作量证明的挖矿过程
那么,当我告诉你,挖矿的意思就是找到一个随机数,并使它是满足一个这样的公式来的:
SHA256(区块头+随机数)<目标难度
这个区块头包括的信息就比较多了,有Merkle 树根,前一个区块的哈希,区块时间戳等,Merkle 树根是通过将当前区块内所有交易的哈希两两配对生成的另一个哈希值。(学习过第一课的人应该都知道这些背景知识)
在这个公式当中,【区块头】的信息是固定的,【目标难度】也已经定下来了。
矿工只要用穷举法不断的尝试新的随机数,也称为Nonce,比如从0开始计算出哈希值,并检查它是否满足难度,即前面有多少个0。
是这么一个循环的过程:
区块头+0计算哈希值是否小于目标难度?
区块头+1 计算哈希值是否小于目标难度?
区块头+2 计算哈希值是否小于目标难度?
区块头+1000000... 计算哈希值是否小于目标难度?
直到尝试了数百亿次计算后,终于找了一个数字888888888888888888发现满足目标难度公式了,于是生成这个区块,并马上广播给相邻的节点:大家好,我挖到矿啦!你们可以歇歇了。
其它节点一收到别人发过来的区块,马上验证这个区块是否合格,这个过程非常快,因为只要验证里面的所有交易是否合法,并计算一次哈希检查难度是否合适就可以了。
要么不合法,你丫的居然骗我,丢掉!
要么合法,赶紧暂停手中的活,把新区块追加到自己的帐本后面,并基于新的区块上面开始竞争下一个区块,不然又输在起跑线上了。
以上知识是挖矿原理的介绍。现在你终于明白了,原来挖矿就是这样的:找到随机数,满足目标难度,生成新的区块并广播给其它节点。
矿工相互公平竞争的获取生成新区块的权利,在验证交易,记录帐本,保存帐本等方面作出了贡献并以此获得BTC作为报酬。
今天留下一个疑问:
比特币矿工争夺到新区块记帐权后,会第一时间广播给相邻节点,但是网络传输是有一点点延迟的,如果有2个矿工同时挖到矿了,会发生什么神奇的事呢?
-完-
————————————————————
财神下山:
2013年进入币圈,最会炒币的程序员,曾是某公有链项目核心开发之一,多家区块链平台专栏作者。