为何说区块链是“信任的机器”?它是如何工做的?这有篇最简单的解释!api
ll本文翻译自Authorito Capital CEO的博文《WTF is The Blockchain?》,略有删减。网络
ll原文连接:https://hackernoon.com/wtf-is-the-blockchain-1da89ba19348函数
区块链的游戏规则是必须有足够的人不想依靠第三方来进行交易。多少人才算“足够多”呢?最少三个。区块链
咱们假设有十个玩家想放弃银行或任何第三方,经相互赞成,他们在不知道对方身份的状况下,拥有对方帐户的详细信息。至此,游戏开始。翻译
一个空白帐本游戏
每一个玩家都从一个空白帐本开始,随着“游戏”的开始,每一个玩家不断往这个空帐本上记东西,交易愈来愈多,帐本的页数也在不断增长。这个帐本就是咱们追踪交易纪录的“寄存器”。资源
当有交易发生时it
系统中的每一个玩家都拥有一个空白帐本,每当有交易发生时,他们就将交易记录在帐本上。比特币
如今,假设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号玩家说“这个封印密码不正确,我验证不出来”时该怎么办?这种状况极少发生,若是发生了,那么可能有如下缘由:
一、他可能误解了网络中公布的交易;
二、他可能误写了网络中公布的交易;
三、他可能为了自身的利益缘由,试图搞欺诈。
无论缘由是什么,7号玩家只有一个选择——丢弃他的页面并从别人那里复制该页面,以便他也能够将它放在文件夹中。
若是他不把他的页面放在文件夹中,他就不能继续记录系统中交易,所以他也就不能继续成为这个系统中的一份子。
有一个问题,若是咱们都知道有一我的能算出密封号码并将它公之于众,为何还须要每一个人花费时间资源去算呢,坐着等结果不就行了吗?
由于有报酬!第一个算出来的人是能得到酬劳的。这就是区块链中的激励机制。
举个例子,假如5号玩家第一个算出了封印密码,他就能得到1块钱的奖金。在比特币区块链上,这个奖金就是比特币。奖金促使每一个玩家继续为系统工做。
朋友们,这就是区块链工做的原理。在这里,将帐本的每一个页面视为一个块,整个帐本视为一条链,这就是区块链。