比特币的制造:区块链与挖矿
大家从上篇文章听到这里,相信已经对比特币转账的方式有了大体的感觉,如果你还没看过上篇文章真正的比特币注解1,请先阅读。接下来我们谈谈为什么要称比特币挖矿。
之前我们略微谈了点区块链的构成,而每一个区块是由每十分钟的交易信息被打包记录组成;整个网络上的电脑都在抢夺这个区块的记账权利,谁抢到这个记账的权利,谁就可以获得这个区块创造出来的比特币。2009年,中本聪创造了第一个区块,被称为“创世区块”,其本人就获得了第一个区块奖励的50枚比特币,这也是比特币世界的第一笔交易记录,永远载入这个区块里。
所谓挖矿,就是抢夺记账权利,从而获得奖励,奖励就是比特币。为什么会有人不停的挖,因为比特币世界里每十分钟生成一个区块,哪个电脑抢到了记账权、构建了这个区块,哪个电脑就获得该区块的奖励,这就是挖矿。比特币这种矿是越挖越少,中本聪设计的特别妙,就是每个区块的奖励每四年减半。中本聪造出第一个区块的时候、获得50枚的奖励,四年后的2013年奖励就减半了,2017年再次减半。等到了2140年比特币产量就将趋于0,从而将比特币的总量恒定在2100万枚。
挖矿抢夺生成区块的权利、抢夺记账的权力,也就是抢夺为全网服务的权力。一旦抢到这个权利,所奖励的比特币就写在得到的区块上,然后系统告知整个区块链的所有节点,获得全网确认后,这个区块便成为合法的新增区块,整个区块链又多了一个区块。
现在大家关心的是,既然那么多电脑都争夺记账权,那系统是如何决定谁来记账的呢?中本聪的设计是出一道很难的数学题,谁最先算出来,谁就创立了这个区块,谁就获得奖励。这可不是一般的数学题,是一种很傻很傻的数学题,名字叫hash算法。
比特币转账——签名认证:hash算法
hash算法是只能验证不能求解,什么意思?我们举个简单的例子,体会一下hash算法的精神;比如根号17202这个数的后几位小数是9291430,系统只发送9291430这个数,有没有可能猜到是哪个数的开平方后的后几位小数呢?这就太难了。但也有办法,那就是穷举法,一个数一个数去尝试,说个最笨的方式,你就从1开始尝试,最后终于尝试到了17202,惊喜地发现,这位仁兄的开根号后几位就是9291430,然后你就很激动地告诉大家:这个数就是17202。大家一算果然是,你好牛啊,你是花魁啊!
咋样,这就是hash算法,它的加密规则是公开的,就是将原本的数字开根号取后几位小数,但你很难靠这几位小数推测出来原本的数字,唯一的方案就是暴力破解、穷举法,最终可以将原本的数字验证出来,这就叫hash算法。注意,刚才只是说的一个简单的例子,真正的hash是很复杂的,超级复杂。
区块、hash、挖矿的关系
在比特币的世界里,每时每刻都会发生很多转账的交易,我们把每十分钟内的交易记录,就叫做区块。把比特币一诞生就开始的所有交易记录都链接起来,也就是把这些区块连接起来,就构成了区块链。整个网络上的电脑都在抢夺新生区块的记账权利,谁抢到这个记账的权利,谁就可以获得这个区块创造出来的比特币。
每个区块的第一层是上一个区块的hash值,表明这个区块排在上个区块后面,然后中间层是这一个区块的交易记录,底层是一个随机数。一到三层的内容会生成区块的hash值,即本区块的id。所谓挖矿,就是去猜底层的随机数,一旦才对了随机数,也就解出来这个区块的hash值。为什么呢?因为本区块的前两层信息是公开已知的,而只有底层随机数是不公开的,所以谁猜到了随机数,也就可以解出本层的hash值。
由于hash值是这个区块的唯一标识,而且随意更改一点信息就会显著改变这个hash值,所以比特币世界的历史交易记录是不可能被篡改的。具体来说,每一个区块的hash值=上一个区块hash值 本区块的交易记录+本区块的随机数。如果我们篡改了交易记录,这个hash值就会改变,这就不被认证,就不允许了。所以一旦生成一个区块,其配套的hash值成为唯一标识,且不可更改。
估计很多朋友更关心区块底层的随机数,那到底起了一个什么作用。首先当然是让矿工去猜去计算、去暴力尝试,另外它还起到一个作用,就是去平衡算力,从而保证是平均每10分钟产生一个区块。如果矿工的设备变得先进了,引进了阿尔法狗,全网算力就提高了,就会增大随机数的难度,还是能平衡在每10分钟左右产生一个区块。比如,本来系统要求hash值前面有15个0开头,但如果算力上升,系统就要求寻找hash值开头必须有20个0,难度就陡然加大了;反正是不能让你上房揭瓦,好好挖矿,就是10分钟一个区块。
再次,hash函数牵一发而动全身的特点让它特别适合做验证。只要交易记录里有一点点改动,哪怕只有一个字符,这个区块里的交易信息经过hash函数后的结果与原hash值相差极大。这样新区块就会发现前方区块已经被篡改,就不会委身接在这个被篡改的区块后面。
双花问题
有了这个区块链,意味着网络的每一个节点都存储了本聪开创比特币以来的所有交易记录,每一条信息谁都可以查。这个系统可真是太棒了。但它有没有漏洞呢?当然有,这个漏洞就是双花,既然有人在抢着记账、记好的账本又不能篡改,我们还可以验证每条消息的真伪,这似乎很完美了啊,但为何还有双花呢?我们举例说明之。
比如我只有5个比特币,我先向老张转账5btc,同时再向老赵转账5btc。这就是双花,我把5个比特币花了两次。这就是所谓的双花问题,这是一种诈骗行为,如何预防?
正常情况下,一定是先有一条信息被大家打包,然后第二条信息由于与第一条信息冲突而无效。但是,我如果是同时双花的,也就是一边广播:我向老张转账5btc,与此同时又广播:我向老赵转账5btc。这样,就会有两个矿工分别打包了这两笔记录,这就叫做分叉,即同时有两个区块生成了。如果要真是如此,大家都去双花了,5个比特币能花两次5个比特币,岂不就乱套了,比特币系统成了骗子横行的世界了。
比特币的规则是只有最长的区块链得到确认,最长的区块链才会有挖矿奖励。所以正常大家都会切换到长链上挖矿而将短链废弃掉,这样就会有一笔交易作废了。所以一般转账之后比特币网络建议大家等到一个区块确认了,此时再发货就比较安全。
若想万无一失,就不能急着发货,一般来说再等上六个区块的形成,就已经很保险了。坏人想废掉已经又加长了六个区块的长链,就必须自己加长自己的短链,来超越那个长链。为什么非要自己加上呢?因为矿工都会在长链上挖矿,只有最长的区块链才能得到确认,才会有挖矿奖励。要凭一己之力,让自己的短链超过长链的前提是计算能力强大无比,因为区块由谁所生成,决定于谁最先算出Hash值,也就是要决定于算力——计算的能力。
如果掌握了全网51%的算力,那么就有51%的概率抢夺到下一个区块的记账权,当在对自己有利的那个区块后继续生成区块的时候,他就会让对方收不到那5个btc,这就是所谓的“51%攻击”。这似乎是可行的?但是,如果不是等一个区块就发货,而是等了六个区块的确认才发货,因为已经生成了六个区块,那这一定是主链,关键是矿工也都相信这是主链,所以都会在这个链上继续挖矿来获得奖励。一旦长链至少有6个区块的领先,再想要追赶这个长链、以便让这些交易记录作废就会非常非常难。即便神通广大到掌握了全网51%的算力,抢夺记账权的几率就是51%,连续六次都成功的概率就是0.51^6=1.7%,这就是所谓51%攻击,如果仅仅掌握三成算力,那么这个概率就是0.07%了。
2140年后,记账没有奖励了,系统如何进行
反正是,双花这个漏洞可以通过交易的等待来阻止。但比特币系统似乎还有一个漏洞,就是到了2140年,比特币的总量已经到达了事先规定的上线——2100万枚,那么抢夺到记账权也没有比特币可以奖励了,那谁还会去记账呢?这个本聪早就想到了。到那时,比特币世界的每一笔交易就需要交一定的手续费,交给谁呢?交给了抢夺区块记账权的人。也就是说,挖矿从过去的获得比特币的奖励,变成了获取交易的手续费,所以照样有矿工去挖矿。
现在大家都清楚了,所谓比特币挖矿,实质就是中本聪巧妙地设计了一个激励机制,给维护这个去中心网络的人的奖励,同时也解决了货币如何分配的问题,因为每个人都有挖矿的权力,至少从理论上这是相对平等的说法,人人都有机会去挖矿,去获得比特币。
区块链技术引领未来
到现在为之我们基本讲述完了比特币的前世今生。不得不承认,比特币的技术构想很美,像一个没有强权,没有管制完全自由的新世界。尤其是去中心化的账本,资产公开透明可查的性质,吸引了大批人开始关注比特币的底层技术——区块链技术。在一个去中心化网络里,相互不信任的节点之间,谁能解决信任问题呢?区块链技术可以解决。
中本聪发明的比特币系统其实就是发明了区块链技术,可以认为比特币是区块链技术的1.0版本,或者说支付系统非常适合区块链技术的应用。区块链的2.0版本是智能合约,太长,太长,我们下节再谈。
订阅我们公众号,请多多支持哦!
领取专属 10元无门槛券
私享最新 技术干货