大家好,书接前回……(真是隔了好久啊……我放个上次的链接在阅读原文里吧)
另外么,最近的风声大家了解的,所以……尽早阅读哦
上次说到,发起交易的节点会把交易信息向全网广播,收到信息的全节点(也就是保留比特币全账本的节点,目前的要求是几百G的硬盘空间和高速的网络,因此只有专业的矿工会做全节点了,一般用户只是装个钱包做轻节点而已)进行验证后,会把合法的交易记录到一个待打包记录的池子中。
这个池子里的数据会越来越多。同时,我们很久之前讲过,比特币协议里规定用来存放数据的空间是1M,而一笔交易大致是500字节左右,也就是一个区块只能存放2000笔左右的交易。到一定程度,矿工会从里面挑选一些交易(大家记得,交易方是可以提出给矿工手续费的,所以这时候肯定是手续费高的交易先被挑出来),打成一个包。这样的一个包就成为一个区块(block)。这个区块还会附加一些其他数据,比如最重要的是本区块的默克尔根hash,还有它是紧跟在哪个区块后面的,那个区块的默克尔根hash。
关于这些根hash我们这里不做技术解释,只需要知道如果区块里的数据有任何一点点改动,根hash就会完全不同。于是这样一个根hash紧跟着一个根hash的形式,保证了(1)所有区块的顺序都是确定的,(2)两个既定区块中间不能再插入新的区块,(3)任何一个已经确定的区块里面的数据不能被更改——否则根hash就会对不上。
这就是我们说区块链可追溯不可篡改的原因。
一个区块(block)紧跟一个区块,形成了一条链(chain),所以就叫区块链(blockchain)。
回到矿工部分。我们说过,如果是中心化的系统,那么系统管理者包里的数据就是整个系统的账本数据,但是在一个去中心化的系统中,每个矿工都会生成这样一个包,哪个包最终能作为系统账本的一部分被记录下来呢?这就需要共识机制。比特币系统使用的是PoW(Proof of Work)机制,具体我们之前在共识机制那篇里分析过,就是用算力这个门槛来确保矿工的诚实。
于是接下来,就是挖矿过程中最重要的部分,计算hash。这个算式是这样的,算式左边是包里的数据(交易及其他),加上一个随机数,右边是一个满足难度要求的hash数。
比特币系统设定的加密算法是SHA256。而难度要求表达为,小于一个十六进制数(写作0x000000XXXXXXX这样)。
这其中,交易数据是定的,Hash数要满足要求,而随机数nonce,就是矿工要找出来的。也就是说,要找到一个随机数,使得它加上交易等数据,经过SHA256计算,得到一个小于既定难度要求的Hash数。
又因为,SHA256是非线性的(其他加密算法也一样),无法直接知道怎样的nonce能满足要求,唯一的办法就是不断代入不同的随机数进行尝试。这就是这个系统消耗算力的地方,要求计算机不停做运算直接碰到合适的随机数,也就是比特币PoW的W。
显然,目标Hash数设置得越小,满足要求的随机数也就越少,需要进行的尝试也就越多,因此难度也就越高。至于为什么要调高难度,当然是因为矿工的设备在不断升级换代,算力越来越高啦。
关于比特币系统如何调整难度,以及具体的考量,小磕在之前专门花一篇写过,在此不重复。简单来说,比特币每2016个区块调整一次难度,保证每10分钟左右出一个块。
当一个矿工算出了合适的随机数,并且没有收到其他矿工算出来的通知时,他就可以认为自己首先找到了随机数(当然有时候可能是网络延迟他没有收到通知)。于是他要做的就是向全网广播,告诉大家他算出的随机数以及他这个包的数据。其他矿工收到这个消息后,如果这个时间段没有更早的消息,他们会验证这个随机数,以及这个包里的数据是否合法。验证通过的话,矿工们会接受这就是这个时间段的最终挖出区块,他们会把这个区块添加到自己的账本的末端,跟原来的账本chain在一起,并且停掉之前的计算随机数的进程,把自己那个包里包含的但未包含在新区块里的交易数据重新放到待打包交易池中,然后进行下一轮的挖矿。
因为每个矿工都保存了这么一份账本,并且同步更新,即所谓分布式账本,就保证了即使有部分矿工的账本丢失(主动或被动),整个系统的账本依然是安全的。
很明显,矿工在这个系统中的作用非常重要,也做了非常多的工作。那怎么激励节点来当矿工、努力工作呢?交易方提供的手续费是一部分,另外,每个区块记录的交易池里面第一笔交易会是,某某节点因为第一个找到随机数,系统给了它N个比特币。
(再次强调,矿工得到这个奖励是因为系统公认的区块链账本里记录了它得到奖励的这笔交易,而不是系统传送给了它“奖励的比特币”这样一个东西,大家一定要把传统货币概念改过来)。
在早期比特币交易没有手续费的时候,这个奖励就是对矿工的唯一激励了。因为整个过程是消耗大量算力最后得到奖励,就像费力挖矿最后挖出金子一样,所以这个过程会被成为“挖矿”——这是一个比喻,可不是真的“挖”出什么东西来了。
同样在之前一篇文章里,小磕分析了具体数字背后的逻辑,这里只是简述:最初每个区块的奖励是50个比特币,大约每四年减半一次,而且这是比特币发行的唯一机制(也就是唯一从0开始生成比特币的地方),最终比特币的数量大致是2100万不到。
随着交易的不断增加,矿工们的辛勤工作,比特币系统这条链也越来越长,随后又吸引了更多的交易和更多的矿工,最终使得它不仅是区块链领域最早的链,也始终是最大的链。
(读完之后,你选择点赞还是分享支持小磕呢~)
由“蒋博的多棱镜”原创,如需转载,请登录新榜网站版权频道( http://cc.newrank.cn )