为什么说区块链是“信任的机器”?它是如何工作的?这有篇最简单的解释!
ll本文翻译自Authorito Capital CEO的博文《WTF is The Blockchain?》,略有删减。
ll原文链接:https://hackernoon.com/wtf-is-the-blockchain-1da89ba19348
区块链的游戏规则是必须有足够的人不想依靠第三方来进行交易。多少人才算“足够多”呢?最少三个。
我们假设有十个玩家想放弃银行或任何第三方,经相互同意,他们在不知道对方身份的情况下,拥有对方账户的详细信息。至此,游戏开始。
一个空白账本
每个玩家都从一个空白账本开始,随着“游戏”的开始,每个玩家不断往这个空账本上记东西,交易越来越多,账本的页数也在不断增加。这个账本就是我们追踪交易纪录的“寄存器”。
当有交易发生时
系统中的每个玩家都拥有一个空白账本,每当有交易发生时,他们就将交易记录在账本上。
现在,假设2号玩家想给9号玩家转10块钱。为了进行交易,2号在系统里吼一声“大伙儿,我要给9号妹子转10块钱,你们快在账本上记一下”。
接下来,每个玩家就开始检查2号是否真的有10块钱转给9号,如果她真的有足够的钱,那么所有玩家都会在账本的空白页记下这笔转账。这样,一笔交易就算完成了。
交易继续
随着时间的流逝,系统里有越来越多的玩家需要转账给其他人。无论他们什么时候想转账,都只需要在系统里告诉所有玩家,只要有一个人听到了,他/她就会将这笔交易记在账本上。
记账继续,直到所有玩家将当前的空白页用完。假设一页账本能记十笔交易,当十笔交易完成时,那么这个页面就不能再继续记账。
这时候只需将这页记录保存到文件夹中,然后翻到下一个空白页,继续记账就行。
那页被翻过去的页面
当我们将记满10笔交易记录的页面翻过去之前,需要使用系统中每个玩家都同意的“神秘锁(密钥)”来将它密封起来。通过密封,能够确保一旦将这页记录的副本发放到每个玩家的文件夹中后,任何人都无法对它做出任何更改。一旦进入文件夹中,它将永远被密封在里面。“密封”是这个游戏的关键所在。
如何密封页面
在我们了解如何封印页面之前,先来看看“封印”的工作原理。
魔法机器
想象一下,有一台被厚厚的墙壁包围着的机器,如果你从机器左边发送一个包含着内容的盒子进去,在右边,它会吐出一个包含其他内容的盒子。
这台机器被称为“哈希函数”,但我们不必那么学术,所以就叫它魔法机器吧。
假设你从左边输入数字4,我们会发现它从右边吐出下面的单词:'dcbea'。
它是如何将数字4转换成这个词的?没人知道。但我们需要知道这是一个不可逆转的过程。如果我们知道右边出来的词语是“dcbea”,是没法计算出从左边给机器输进了什么东西,但如果我们每次从左边给机器输进数字4,右边必然会出现词语“dcbea”。
让我们试试输进不同的数字,比如“26”。我们这次得到'94c8e'。有趣!
如果我问你下面这个问题:
你能告诉我应该从机器的左侧输进什么东西,以便我能从右侧得到以三个零开头的数字或单词?例如,000ab或00098或000fa或其他内容。
我之前说过,这个机器有一个奇怪的属性:如果我知道右边输出的东西,是没办法算出左边输进了什么东西的。有这样一台机器,怎么可能回答得出上面的问题呢?
我想到一个方法,逐一尝试每一个数字,直到我们得出以000开头的词语。或许经过数千次的尝试,我们能得到这样的结果。
当我们给定了右边的输出结果,要计算出左边输入的内容,是非常非常困难的。但与此同时,验证既定的输入内容是否能产生所需的输出结果却非常容易。请记住,这台机器每次都会针对一个词语给出相同的输出结果。
如果我给你一个数字,比如72533,然后问你“这个数字输进机器中,能得到一个以000开头的词语或数字吗?” 你所需要做的就是把数字扔进机器中,看看你在右边得到了什么就行。
这台机器最重要的特性就是:给定一个输出,计算输入非常困难,但如果有输入和输出,很容易就能验证输入是否能够得到这个输出。
如何用这台机器封存账本页
我们将使用这台魔术机器为我们的页面生成一个“印章”。
假如我给你两个盒子。第一个盒子包含数字20893。然后,我问你:“你能算出一个数字,使它加上第一个盒子中的数字,然后送入机器,最后会给我们一个以三个零开始的单词吗?”在之前我们说过了,算出这个数字的唯一方法就是遍尝宇宙中的每一个数字。
经过成千上万次尝试,我们偶然发现一个数字21191,当它加上20893(即21191 + 20893 = 42084)并送入机器时,会产生一个满足我们要求的词。
在这种情况下,数字21191就成为20893号的印章。假设有一个页面上记有数字20893,为了封印该页面,我们将在其上面放置一个标记为“21191”的徽章。一旦密封号码(即21191)能够恰好“卡”在页面上,页面就被密封。
密封号码被称为“工作量证明”,意思是这个数字是辛苦算出它来的证明。
如果有人想验证页面上的记录是否被更改,他所要做的就是将页面上的内容与密封号码一起添加到魔法机器中。如果机器得出的结果是以三个零的打头的字,则内容没有被修改过。如果出来的单词不符合我们的要求,那我们可以丢弃该页面了,因为它的内容已经被修改过了。
我们将使用类似的密封方法来密封我们所有的记录页面,并最终将它们安排在我们各自的文件夹中。
最后,封印页面
为了密封记录交易内容的页面,我们需要计算出一个数字将它附加到交易列表中,然后输入机器中,最后得出一个以000开头的结果。
注意:“以三个零开头的词”只是我举例来演示哈希函数的工作原理,真正的哈希结果比这更复杂。
一旦在机器上计算出该数字,该页面就被该数字封印了。随便一个人都可以通过封印密码验证页面内容的完整性。
现在让我们回到记录完第十条交易的时间。只要这个页面被用完了,每个玩家就会开始计算密封这个页面的“封印密码”。第一个计算出来的玩家会将封印密码告诉系统内的所有玩家。
一听到封印密码,每个玩家就开始验证这个密码是否正确,如果密码正确,每个玩家都用这个号码标记他们的页面,并将其放在他们的文件夹中。
但如果有人,比如7号玩家说“这个封印密码不正确,我验证不出来”时该怎么办?这种情况极少发生,如果发生了,那么可能有以下原因:
1、他可能误解了网络中公布的交易;
2、他可能误写了网络中公布的交易;
3、他可能为了自身的利益原因,试图搞欺诈。
不管原因是什么,7号玩家只有一个选择——丢弃他的页面并从别人那里复制该页面,以便他也可以将它放在文件夹中。
如果他不把他的页面放在文件夹中,他就不能继续记录系统中交易,因此他也就不能继续成为这个系统中的一份子。
有一个问题,如果我们都知道有一个人能算出密封号码并将它公之于众,为什么还需要每个人花费时间资源去算呢,坐着等结果不就好了吗?
因为有报酬!第一个算出来的人是能获得酬劳的。这就是区块链中的激励机制。
举个例子,假如5号玩家第一个算出了封印密码,他就能获得1块钱的奖金。在比特币区块链上,这个奖金就是比特币。奖金促使每个玩家继续为系统工作。
朋友们,这就是区块链工作的原理。在这里,将账本的每个页面视为一个块,整个账本视为一条链,这就是区块链。