2018-2-26 09:38
来源: 云心(xīn)区块链
八、区块、hash、挖(wā)矿
好了,明白了转账过程(chéng),我们要进一步讲(jiǎng)解(jiě)区块、区块链,只有(yǒu)这样我们才能真正明白“挖矿”的原理,了解比特币是如何创造出(chū)来的(de)。
我们先前是这样简(jiǎn)单描绘的:在比特币的世界里,每时(shí)每刻都会发生很多类似(sì)Alice转账Bob的交易,我们把每(měi)十分钟内的交易记录,就叫做区块。把比特币一诞生(shēng)就(jiù)开始的所(suǒ)有交易记(jì)录都链接起来,也就(jiù)是把这(zhè)些区块连接起(qǐ)来,就构成了(le)区块链——Block chain。整(zhěng)个网(wǎng)络(luò)上的电脑都在抢夺新生区块的记账权(quán)利(lì),谁抢到这(zhè)个(gè)记账(zhàng)的权利,谁就可以获得这个区块(kuài)创造出来的比特(tè)币。现(xiàn)在要对此(cǐ)深(shēn)入解读(dú)。
我们可以这样想象(xiàng),每(měi)一个区块就是(shì)一个块、一个方方的(de)区(qū)块;每个(gè)区(qū)块(kuài)都有自己(jǐ)的标记、也就是有(yǒu)自(zì)己ID。这个ID可不是随(suí)便定的,而是整个(gè)区块的hash值,也就是将这个(gè)区(qū)块(kuài)的所(suǒ)有信息hash之后所得(dé)的那个数(shù)字,这(zhè)个hash值是唯一(yī)的,并且(qiě)与此区块绑定;
每(měi)个区块(kuài)的(de)第一(yī)层是上(shàng)一个区块(kuài)的hash值,表(biǎo)明这(zhè)个区块排在上个区(qū)块后面,然后中间层是这一个区(qū)块的交易记录,底层是一个随机数。一到三层的内容会生成区块的hash值,即本(běn)区(qū)块的id。所谓挖矿,就是去猜底层(céng)的随机(jī)数,一旦才(cái)对了随机数,也(yě)就解(jiě)出来这个区块的(de)hash值。为什么(me)呢?因为(wéi)本区块的(de)前两层信息是公开(kāi)已知的(de),而只有底层(céng)随机数(shù)是(shì)不公开的,所以谁猜到了(le)随机数,也就可以解出本层的hash值。
那这个随机数又是怎么猜的呢?是(shì)用暴傻方式猜的(de),又暴(bào)力又傻逼的方式,此所谓(wèi)穷举暴力尝(cháng)试法。就是(shì)各位矿工一个数字一个数字地(dì)试(shì),直到有人到率先找(zhǎo)到第一个符合这个规则的hash值。简单地说,就是(shì)新(xīn)区块(kuài)的hash值(zhí)已被网络所确定,而矿(kuàng)工在不断计算、并核(hé)对,一旦哪位算(suàn)对了,网(wǎng)络就给予确认,然后奖励他比特币。更确切(qiē)地说,是(shì)网络事先定下了一个规则、一个(gè)公开的规则(zé),比(bǐ)如(rú)说:要求(qiú)这个hash值前面有15个0开头,哪个矿(kuàng)工率先找到第一个符合这个规则的随机数、就算猜出了这个hash值(zhí),他就会向(xiàng)全网广播“各位挖矿的labor们(men),你们(men)不用(yòng)算了,我算出来了(le),这(zhè)个(gè)随机数是xx,这个hash值是xxx”,正(zhèng)在埋头苦干的矿工们一验(yàn)算(suàn),发现这货算出来的hash值(zhí)果然满足规则,嘴里嘟(dū)囔了一句shit,赶紧把(bǎ)这个hash值作为(wéi)本区块的表(biǎo)示,并在这个区块(kuài)的基础上继续计(jì)算下(xià)一个区(qū)块的hash值,心中默念(niàn):下回就该我抢先一次(cì)了。
由于hash值是这个区块的唯一标识,而且(qiě)随意更改一点信息就(jiù)会显(xiǎn)著改变这个hash值,所以比(bǐ)特币(bì)世界(jiè)的历史交易记录是不可能被篡改的。具体来说,每一(yī)个区块的hash值=上一(yī)个区块hash值 本(běn)区块的交易记录+本区块的随机数。如果我们篡改了交(jiāo)易记录,这个hash值就会改变,这就不被认证,就不允许了。所(suǒ)以(yǐ)一旦(dàn)生成(chéng)一个(gè)区块,其配(pèi)套的hash值成为唯一标识,且不可更改。
估计很多朋友更关心区块底层的随(suí)机数,那(nà)到底起了一个(gè)什么作用。首先当然是(shì)让(ràng)矿工(gōng)去猜去计算(suàn)、去暴力(lì)尝试,另外它还起到一(yī)个(gè)作用(yòng),就(jiù)是去(qù)平(píng)衡算力,从而保证(zhèng)是平均每(měi)10分钟(zhōng)产生一个区块。如果矿工的设(shè)备变得(dé)先进了,引进了什么阿尔法狗呀(ya)、猫呀的都(dōu)来(lái)了,那全网(wǎng)算(suàn)力就(jiù)提高了;那怎么(me)办?很简单,就会增大随机数的难度,还是能(néng)平衡在每(měi)10分钟左(zuǒ)右产生一(yī)个区块。比如(rú),本(běn)来系统要(yào)求hash值前面(miàn)有15个(gè)0开头,但如果算力上升,系统(tǒng)就要求寻(xún)找hash值开头必须有20个0,难度就陡然加大了(le);反正是不(bú)能让你上房揭(jiē)瓦,好好(hǎo)挖(wā)矿,就是10分(fèn)钟一个区块。