上一篇我们讲了区块链村诞生的故事,接下来我们依然会以这三个人为主角,继续区块链村讲述。但是希望大家能够理解一点,这个村子里是有很多人的,为了方便描述,我们只以这三个人作为代言人。接下来的文章也是这样子,希望大家能够保持着这一点清醒的认识。
在张三李四王五都有了自己的都有了自己的银行之后,他们就开始了新的运作模式。但是问题马上就又出现了,张三是银行的老手,他的记账快速而又准确,李四王五作为新手,他们经常记错账,而且一旦记错账,他们三个人就得不断开会,把三个人账本拉出来,然后一点一点地去校验,到底是谁的账本是错的。传统的记账方式是记录每一笔交易的内容以及每个人的余额,为了验证到底是哪里记错了,需要从头开始检查。这个工作,繁琐而又痛苦。后来张三实在受不了了,想出了一个绝妙的记账方法。于是张三把李四王五叫到一起开会。张三说:“你们两个太蠢了,老是记错账。从今天起我们要采取新的记账方式,一种全新的能够快速验证你们记账是否出错的方法。我们把每一笔交易都用一个虚拟的链条串联。
A,B指代交易双方,数字总额表示前面出现的数字的全部之和。如果没有上一块,那么上一块数字总额为0.
块1的数字总额:10 + 10 + 10 = 30.
块2的数字总额:30 + 5 + 5 + 5 + 5 = 50
记录每一笔交易的时候,我们都会生成这样一个块,然后去告诉其他两家银行,其他两家银行收到这个块之后,自己重新计算这个块的数字总额,如果发现自己算出来的数字总额和块里记录的数字总额不一样,说明这个块就是错的,需要马上通知其他银行,说你的块错了,然后不会把这个块链接到现有的链条上。
那么我们看具体他是如何工作的:
李四记录块2的时候,按照这样的写法:B给了A五块钱,于是数字总额肯定是30。遗憾的是,由于马虎,他的块写成了这样:
可以想到,当其他人收到这个块的时候,会轻易检测出20 + 5 = 25,而不是30.于是就知道对方记账错误了。
看到这里你会感到一些奇怪,比如他如果记录成:
这样子也符合标准,但是B就没有任何支出了,A无缘无故收获了5元,不是嘛?
于是新的规则诞生了,那就是所有的交易必须是支出=收入。这样子就可以判断出上面这种错误。
(当然你依然不罢休,你会说,李四心有不甘,擅自偷偷修改账本,我们暂时先不讨论,这个属于更加高级的作弊主题,我们会在以后的小故事中探讨,现在我们希望大家明白,实际的验证算法要更加复杂,但为了方便理解,我做了很多和实际情况有所出入的说明,但原理是一样的。)
就这样,虽然李四王五依然经常出错,但由于很快就能被张三验证出错误,并及时通知,于是少了很多查错工作,一切都进行的很愉快很顺利。
直到有一天,新的问题出现了…
领取专属 10元无门槛券
私享最新 技术干货