首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

区块链村张三李四之-账本的设计

上一篇我们讲了区块链村诞生的故事,接下来我们依然会以这三个人为主角,继续区块链村讲述。但是希望大家能够理解一点,这个村子里是有很多人的,为了方便描述,我们只以这三个人作为代言人。接下来的文章也是这样子,希望大家能够保持着这一点清醒的认识。

在张三李四王五都有了自己的都有了自己的银行之后,他们就开始了新的运作模式。但是问题马上就又出现了,张三是银行的老手,他的记账快速而又准确,李四王五作为新手,他们经常记错账,而且一旦记错账,他们三个人就得不断开会,把三个人账本拉出来,然后一点一点地去校验,到底是谁的账本是错的。传统的记账方式是记录每一笔交易的内容以及每个人的余额,为了验证到底是哪里记错了,需要从头开始检查。这个工作,繁琐而又痛苦。后来张三实在受不了了,想出了一个绝妙的记账方法。于是张三把李四王五叫到一起开会。张三说:“你们两个太蠢了,老是记错账。从今天起我们要采取新的记账方式,一种全新的能够快速验证你们记账是否出错的方法。我们把每一笔交易都用一个虚拟的链条串联。

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元,不是嘛?

于是新的规则诞生了,那就是所有的交易必须是支出=收入。这样子就可以判断出上面这种错误。

(当然你依然不罢休,你会说,李四心有不甘,擅自偷偷修改账本,我们暂时先不讨论,这个属于更加高级的作弊主题,我们会在以后的小故事中探讨,现在我们希望大家明白,实际的验证算法要更加复杂,但为了方便理解,我做了很多和实际情况有所出入的说明,但原理是一样的。)

就这样,虽然李四王五依然经常出错,但由于很快就能被张三验证出错误,并及时通知,于是少了很多查错工作,一切都进行的很愉快很顺利。

直到有一天,新的问题出现了…

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

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券