区块链真的不会分叉吗?

前面讲过,区块链其实就是一个账本,而比特币就是记账成功的奖励。

比如:在比特村里,老王准备给老张5个比特币,于是他高喊了一声:我准备给老张5个比特币。村里的会计们(矿工)听到以后,纷纷拿出小本本和笔,开始飞速记账。

经过一番比拼之后,赵会计最先完成了记账工作。其他会计一看:字迹清晰,格式正确,完全符合系统要求,便确认了赵会计的账单。于是,赵会计获得了比特币奖励,其他会计只能停下手头的工作,以赵会计的账单为基础,开始新的记账工作。

那么问题来了:如果孙会计和赵会计同时完成记账工作,那奖励该给谁呢?村子里面的会计有很多,账单并不能在第一时间被所有会计看到。如果有一半的会计认可了孙会计的账单,而另一半会计则认可了赵会计的账单,那总账本(区块链)岂不是要分叉了?

按照中本聪的设想,区块链应该是一个能把所有信息串联起来的单一链条。如果分叉了,而且两条支链的内容还有出入,那还玩个毛啊?

为了防止这种情况的出现,中本聪设置了一个规则——工作量证明

比如:老王准备给老张5个比特币,众多会计正准备开始记账的时候,中本聪跳出来宣布:为了区分大家的记账能力,我准备了一个新的记账规则:大家必须用左脚夹着毛笔,用五号楷体进行记账。

大家为了获得比特币奖励,只好脱掉鞋袜,用脚记账。这样一来,大家记账的速度和质量有了明显的不同:有的人刚脱了袜子,有的人已经写完了一半;有的人写得歪歪扭扭像鬼画符,而有的人则写得非常工整。

总有一个人写得最快最好,然后获得比特币奖励。

这个“用脚写五号楷体”的蛋疼规则,就是工作量证明。

在现实中,如果一个区块想要被区块链接纳,就必须拥有一个合规的区块头。这个区块头的长度为80字节,包括:版本号、上一个区块的散列值、当前交易列表的散列值、时间缀、当前难度值,以及随机数组成。想要得到一个合格的区块头,就要投入大量的运算。

也就是说,想要制作一个合格的区块,就要把最近生成的交易列表打包,然后通过哈希函数运算出散列值,然后加上时间缀、难度值、随机数等元素,组成一个80字节的区块头。

然后再次对区块头进行哈希运算,直到找出一个合格的哈希值(该哈希值前面有一定数量的0,0越多,难度越大,需要的工作量也就越多),才算生成了一个合格的区块。只有运算速度足够快的矿机,才能在竞争中率先做出区块,完成挖矿

工作量证明,保证了区块链不会在某一节点一分为二,也让很多别有用心的攻击者无从下手。

其实,我们的生活中有很多“工作量证明”,只是我们没意识到而已。我们甚至可以认为,任何具有概率性事件的累计,都是工作量证明。

比如,一个人能熟练掌握一门外语,或者一门乐器,这就是工作量证明。因为掌握这些技能,需要在上面投入大量的时间和经历,也就是工作量。

英语的四六级证书、大学成绩单、会计证……都是工作量证明。因为在不能作弊的考试中,做对足够多的题,就能证明自己在学习中投入了足够多的工作量。因为一个人不能连续蒙对大量的考试题。

司机的安全驾驶公里数,以及飞行员的飞行时长,都是同样的道理。如果一个人飞了一万小时还没有出事儿,那肯定不是只凭着运气。

再比如,在网络游戏中,你的装备、等级、排名,以及技巧,都是一种工作量证明。你的等级和经验,意味着你的在线时长;你的装备,意味着你做任务的数量;技巧也是大量操作的堆积结果。

所以,很多人在选择队友时,都会选择等级高,排名靠前的人,因为等级和排名意味着他们投入了相对较多的工作量,而这样的队友,也会更加靠谱一些。

因此,工作量可以用结果证明(游戏的过关数量),也可以用概率表示(每过一关的概率为0.0000001%)。对于由小概率事件累计的工作,出示结果等同于证明了工作量。因为几乎不可能直接就得到小概率结果。就像买彩票一样,几乎没有人能买一次就中五百万大奖。

想要完成一个合格的区块,同样是小概率事件的累计。只有通过大量的计算,才有可能得到一个合格的哈希值。反过来,得到一个合理的运算结果,就能证明他进行了一定的计算量。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180717G1EPOH00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券