区块链【3】账单打包以谁为准?

文接上回,因为有打包奖励和手续费奖励,大家就会抢着要打包,那么问题来了,以谁为准呢?

这个权利给谁,中本聪想到一个办法叫工作量证明,就是说每一个参与的用户他都要去做一个很难的数学题,谁第一个做出了这个数学题,谁就有权利进行打包。

这个很难的数学题难到什么程度呢?难道没有任何一个人能够直接通过人脑思考把它做出来,我们必须一个一个数的去尝试,直到你把它尝试出来了,你就获得这个奖励,这个过程我们称之为挖矿。

那么具体这个数学题到底是怎么回事呢?咱们来往下继续说,首先介绍一下哈希函数,也可以叫做数字摘要或者散列函数,它的意思是说,我们可以把一个字符串通过一定的运算,转化成一个摘要的形式,而且呢正着算容易,反着算很难。

比如说哈希算法里面有一个很著名的算法叫SHA256,这是美国国家安全局发明的一种算法,如果我把一个字符串输入到这个SHA256函数里边,比如:“apple”,输出的是一个二进制数,这个二进制数有256位,而且这个算法不管你前面输入的是什么,它的结果都是一个256位的二进制数,你把一部10个G的电影放进去,它最后输出的还是256位的数,而如果你改一点点,它的输出数字都不一样,比如在“apple”结尾加1个点,最后每一位的数字都有可能会发生变化。

哈希算法的难度就在于它正向算比较容易,但是反向算非常的困难。我们举个例子,比如有这么一个函数,y=x^3+log2(x)+sin(x),你给我一个x,让我算出y来,并不难,但是你给我一个y,问我x是几,这就很困难,哈希函数比这个还要复杂得多,所以反算基本上是不可能的,我们只能一个一个去试。

挖矿就是基于SHA256的一个运算,假设这个区块链已经链接到了某一个位置,现在有很多人都想进行打包,获取奖励。

 

但是在接块的时候,他必须要算一个数学题。

首先,会有一个字符串,包含最新区块的头部,身部,时间,以及一个随机数。

 

现在你对这个字符串做两次SHA256运算,得到一个256位的数,要求它的前n位必须是0,如果达到了要求,你就有资格打包,将算出的数作为新块的头部,你记录的账单作为身部,链接到区块链末尾。

 

那么我们怎么能算出来前面这几位都是0呢,就要改变一个内容,改变这个随机数,其他的内容你是改不了的。随机数从0开始,0算一次,看看是不是满足条件,不满足算1,1不行算2,2不行算3,不停的试,直到把它试出来为止。

大家要注意,每个人在计算的时候,它的难度是不一样的,虽然字符串的头部是一样的,但是你所打包的这个账单可能是不一样的,你的时间,还有你的个人信息也是不一样的,所以造成了这个随机数大小不同,有人运气好,第一个数就算出来了,直接打包起来了,有人运气不好,他虽然计算能力强,算了好长时间,最后也算不出来。不过平均来讲,谁的计算能力更强,谁就更有希望打包这个块。

回过头来,满足条件里的位数n是怎么确定的呢?显而易见,前面的这个0它个数越多,这个问题它就越难。在这个问题中你不可能反算,只能是一个一个

去试,得到的结果每一位上出现0的概率和出现1的概率各是50%,那么前n位都是0的概率就是(1/2)^n,即二分之一的n次幂,这个n越大,难度就越高,n越小,难度就越低。

中本聪当时在设计的时候,想要保证每十分钟出一个块,然后打包几千条信息,怎么去保证呢,就是调整这个n的数字,比如说这个世界上有1万台矿机,每一台的计算能力是14个T每秒,也就是每秒钟可以计算14T次哈希运算,14T是多少,1T是10的12次方,14T即1.4*10^13次每秒,那么10分钟能算多少次,我们算一下,1.4*10^13*10^4*600=8*10^19,而在概率等于(1/2)^n的情况下,算出所需数字的平均次数是2^n,那么保证10分钟出一个块的条件就是,总计算能力等于2的n次幂,通过计算可得n=66。

今天解决了以谁为准的问题,下一期将介绍如何防伪,期待您的关注。

官网:http://www.lenbor.com
原文地址:https://www.cnblogs.com/lenbor/p/12609389.html