第一章 一笔存款引发的悲剧(关于去中心化,分布性共识)
故事开始之前,先介绍一下我们的两位主人公,第一个叫大聪明,她确实是一个很聪明的人,亦是一个技术宅女。第二个叫小笨,他是大聪明的……好朋友,一个可爱的男孩子,经常会问大聪明各种问题。
这一天,大聪明气冲冲地来找小笨,尽管看到她的样子,小笨下意识的想找个地方躲起来,然而作为朋友的身份还是让他主动问了一声:“怎么啦?”这一下大聪明可打开了话匣子,一股脑儿的向小笨大倒苦水:“哎呀你是不知道我都遇上了一些什么奇葩,今天我去银行取钱,他们居然告诉我存款消失了,我最近也没遇到骗子也没用过那个账户里的钱,怎么就会消失了呢,我让他们想想办法他们只会说这种情况很罕见他们也没办法,你说为什么这么罕见的事偏偏让我遇上了,要这样还不如让我被雷劈一下呢,没准还能觉醒成雷神什么的……”还没说完,只见窗外忽然劈来一道闪电到大聪明身上,打断了她的抱怨。小笨看到却并不担心,只是微笑着问道:“怎么样,你有觉醒吗?”被劈倒的大聪明缓缓地坐了起来,说:“这道雷可算是把我劈醒了,抱怨不符合我大聪明的气质,我要做点更有意义的事。”“好啊。”小笨问,“你要做点什么呢?”大聪明正色道:“我要成为海……不对,我要打篮……也不是,我要建立一个更可靠的账户系统。”
“哇,听起来好厉害,可要怎么做?”小笨一副不明觉厉的样子。
“首先,要编写一个系统,我们就要用计算思维,把账户这种东西抽象成计算机能理解的模型。”大聪明解释道,“那么,账户的本质其实就是一个数字,在现实中,它就代表着一个余额。”
“也就是说,这个系统的本质就是一个数据库啦?”小笨问道。
“对。”大聪明说,“但是只记录余额还不够,这个系统还要能记录不同账户之间的交易,也就是一个账户数字的减少,以及另一个交易方数字的增加。”
“嗯,真的是很基础的模型啊,可然后呢,现在这个系统也太粗糙了吧,这样每个人的账不是随便改的吗。”
“别急嘛,你也不想想我是谁,我大聪明那么聪明,这种问题还不是小菜一碟,只要我们……”
“找个人来监督?”小笨抢答。
“你这样做跟建个银行有什么区别,我才不要变成那些愚蠢的第三方,就是他们丢了我那10块钱……”
“所以你存款只有10块啊!”小笨满脸黑线的吐槽。
“这不是重点啦!”大聪明红着脸说,“重点是要使得这个系统更加可靠,最好能避免第三方,或者说,一个第三方。”
“那么你的意思是……”小笨似乎猜到了那个答案。
“嗯,就是让其他所有人来记录这笔交易。”
“你等会,让我先想一下。”小笨闭上眼,竖起食指轻轻地点着眉心,这是他思考时的习惯动作,“嗯,确实没有其他所有人的共同监管更可靠的了。不过还是有几个问题,首先,别人为什么要帮你记啊?”
“很简单啊,那就直接给钱呗,系统给记账的人钱不就行了。”
“我竟无言以对……可是,万一其他人中有坏人呢,他们就是捣乱不给你记,或者与交易方串通好了记假账怎么办。”
“我们要相信这世上还是好人多……好吧,其实这个问题早就有人研究过了,根据拜占庭将军问题,只要坏人数量不超过好人的一半就没问题啦。”
“我怎么觉得至少好人坏人数量会对半分呢。”小笨弱弱地说。
“你这人真悲观……好吧,那么我们就给每一笔交易做上标记,记下这笔交易所依赖的上一笔交易,也就是说,你这笔钱是谁给的,从而让人们能够验证其来源,这样的话如果记录的人有造假的,就会轻易的被他人验证出来,这样的话他就拿不到奖励了。”
“你等等让我捋一捋,这样的话你就创造了一个没有第三方机构账本,这个帐本上记载的每笔交易信息都记录了其所依赖的上一笔交易,这样所有人都可以对其进行验证,从而避免有人制作假账,同时好好记账的人可以以此得到系统奖励,所以大家也有动力去共同维护这个系统。”
“对,怎么样,厉害吧,事实上,用更专业的说法,没有第三方就是去中心化,而所有人都会好好记账就是一个分布性共识,这也就是一个去中心化的分布性共识系统!”
第二章 还有一个问题(关于密码学基础)
“然而我还是有问题。”小笨突然说道。
“还有什么问题啊?”大聪明不解。
“就是如果有人发出的交易被篡改了怎么办,这样的话,目前的机制还没法阻止啊。”
“这倒是个问题。”大聪明愣了一下,“不过也很好解决啊,只要让交易方在交易的同时再发送一份证明,这个证明同时包含了交易方的身份以及本次交易的信息,这样上面的问题就解决啦。”
“对哦,不过听起来变的更复杂了。”
“其实并不,刚好有一个很棒的函数,SHA256函数。它可以任意长度的字符串、甚至文件体加工成一个固定长度的字符串;只要输入的字符串或者文件有一点点的改动,输出结果都会完全不同。”
“那么我们就可以直接把交易信息用这个很厉害的函数加密成一段字符串了,这样只要交易被篡改,生成的字符串就会完全不同了。”
“对。”大聪明得意的说。
“但是,还有一个问题。”小笨再次弱弱地举起了手
“哎呀,你怎么这么多的问题啊”
“但这是很重要的问题啊,我们还没有讨论过如果有人伪造了交易方的身份该怎么办。”
“这个没关系,先人的经验是伟大的,刚好有一个非对称加密系统,可以制造两把‘钥匙’,其中一把只有自己知道,叫做‘私钥’,以及一把可以公布于众,叫做“公钥”;通过私钥加密的信息,必须通过公钥才能解密,连自己的私钥也无解。而公钥可以通过私钥生成多把。结合上面的两个工具,就可以保证交易双方的身份,以及交易的不可篡改了。”
“让我想想。”小笨又下意识地进入了思考模式,“这样一来,每次交易方只要用SHA256函数对交易记录进行处理,得到一个固定长度的字符串,再使用只有自己知道的那一把私钥,对上面固定长度的字符串进行再加密,然后将这些打包一起发给另一方,当其收这些东西,首先会将交易记录进行SHA256()处理,得到一个字符串,然后再使用公钥,对发过来的被私钥加密过的字符串进行解密,得到另一个字符串。最后只要对比两个字符串是否一样就可以了。没错,完美的解决方案。”
第三章 向全球进发(关于区块链)
“但是,我还有一个最后的问题不知当讲不当讲。”
“行行行,当讲,你说吧。”
“虽然你说了这么多,但是这还只是微观层面上,就是只讲完了针对一个人的交易,可是,其他所有人不止是监督和记账的NPC啊,他们也会产生交易,在宏观上的系统运作又该如何解决呢。”
大聪明一愣:“好像是哦。”不过很快又恢复了镇静,没关系,有着之前的基础,只要再进一步就行了。”
“那么,请开始你的表演吧。”小笨笑着说。
“那么,在变成了全球级别后,系统要处理的就不仅仅是一个人的交易记录了,但是交易总是有先后的,那么,针对一定时间内全球发生的所有交易的加密信息,我们将其作为一组打包处理。或者称之为——一个区块。”
“接下来,在所有人都在产生交易的情况下,要保证整个账本的一致性,就要保证每次只有一个人在添加区块,不然的话,如果每个人都各加各的,最后肯定会有无数的分支。”
“可是,那怎么可能保证呢?全球可是有几十亿人呢。”
“嗯,那么我们就让每个区块上要有一道很难算的题,这道题只能死算解出,而且即使是计算机,也必须要相当一段时间才能给出结果,同时,这道题的难度还会根据当前的计算力进行调整,这样就保证一定时间内只有一个人能算出区块。刚好有一个叫哈希函数的东西,算它的函数值就足够复杂。”
“可是,万一就是有两个人恰好同时算出来了呢?”
“那我们就再加一条规则:只有最长的一支才会被保留,这样的话,就算有一个时间真的出现了分支,但是在以后总有一个时间段只会产生一个区块,此时就一定会有一条分支变得更长,而其他的所有分支也会同时消失。最终,我们就得到了一条由区块组成的链——区块链。”
“嗯,然后那个算题取得权限的过程就称之为挖矿吧。”小笨说。
“这个名字倒不错,你是怎么想到的?”这次换大聪明问了。
“没什么,只是觉得有点相似而已。”
“好啦,现在总没问题了吧。”
“不,我还有最后一个问题,你到底为什么要去取10块钱现金啊?”
“因为,人家之前看到了用纸币做三角插,所以想换1000张一角来试试嘛。”
“哦,是这样吗。”小笨笑了笑,“那我倒是确实很想看看呢。”
这个笨蛋,大聪明心想,本来就是给你的嘛,毕竟马上,就是你的生日了啊。
现在换什么礼物好呢?
不如就把区块链产生的第一批奖励给你吧。
就把这个礼物叫做……
比特币!