“人话”解释区块链

本文根据Medium文章翻译,仅作为学习交流使用。

Authored by Mohit Mamoria

如果你不是过着与世隔绝的生活,那你肯定听说过比特币和区块链。毕竟,它们最近超流行,在各大媒体上超火,是今年的流行词。即便是从来没有挖过矿、不懂区块链怎么运作的人,也在讨论这两个事儿。

我的朋友中,非技术人员多于技术人员。他们一直嚷嚷着让我给他们解释这俩新的流行词儿。我想肯定还有千千万万有这个需求的人。想到这里,我就抽空写了这篇文章,用每个互联网用户都容易理解的“人话”给大家解释一下

区块链:我们为什么需要这么复杂的东西?

“对于每个复杂的问题,都有一个清晰、简单、又错误的答案。”

—H·L·门肯

跟别的文章不同,我们这篇文章不会先定义区块链是什么。我们首先了解一下区块链能解决什么问题

设想一下,Joe是你最好的哥们儿。他正在国外旅行,到旅行第5天,他给你打电话说:“哥们儿,我没钱了,得跟你借点儿。”

你回复说:“马上给你打钱”,就把电话挂了。

然后你给你的账户经理打电话,跟他说:“请从我的账户里给Joe打1000块钱。”

“你的账户经理回复说:好的先生。”

他打开登记簿,查看你的余额,看你还有没有足够的余额给Joe打1000块。因为你是个壕,还有好多钱;他就按以下方式在登记簿里写下一条:

转账登记簿

备注:我们没把电脑扯进来,是想叙述起来更简单。

你给Joe打电话告诉他:“我给你打钱了。有时间你就去银行,把打给你的1000块取出来就好了”

刚发生了什么?你和Joe都信任银行来管理你们的钱。

其实在转账过程中,钱没有真正发生转移。只需要在登记簿里记上一条。更精确地说,是一个不属于你和Joe,你们两个人也不能控制的登记簿。

而这就是当前系统的问题所在

为了建立信任,我们需要依赖第三方。很多年以来,我们都依赖这些第三方来建立信任。你可能会问:“依赖他们有什么问题?”

问题在于,他们是单个的组织或个人。一个人或者组织的腐败或失职,不管是有意还是无心,都能引发社会的混乱

记录这笔交易的账簿被烧了怎么办?

你的账户经理不小心把1000块写成1500块怎么办?

如果他故意写错呢?

多年以来,我们都把我们所有的鸡蛋放在一个篮子里,而且是放在别人的篮子里。

有没有一个系统,不需要银行的参与,就完成转账?

为了回答这个问题,我们要深挖下去,问自己一个更好地问题(毕竟只有更好的问题才会有更好的回答。)

试想一下,转账是什么意思?只是账簿上的一条记录。所以更好的问题应该是:

有没有一种方式,让我们自己持有账簿,而不是放在别人那?

那这个问题才是值得探讨的。而且答案你很可能猜到了。区块链就是这个问题的答案

用这个方法,我们自己持有账簿,而不依赖别人替我们记账。

还能跟上吧?很好。因为现在,当很多问题在你的脑海中浮现的时候,我们要来学习一下这个分布式的账本是如何运作的。

这个方法的必要条件是,需要足够的人愿意摆脱对第三方的依赖。只有这样,这个团体才能各自独立持有账本。

“可能人们会觉得,搞点比特币,万一火了呢。如果有足够的人这么想,它就会变成一个能自我验证的预言”

—中本聪,2009年

有多少人算足够呢?至少3个。我们举个例子,设想有10个人想放弃银行和任何形式的第三方。大家达成共识,能够一直获取每个人的账户详情,但是并不知道对方的真实身份。

1.空的文件夹

开始的时候,每个人都有一个空的文件夹。慢慢的,10个人都会往空的文件夹里增加纸张。这些纸张就会记录跟踪所有的交易。

2.当交易发生时

然后,这个网络中的每个人都坐在那,手里拿着空白的纸张和一支笔。每个人都准备好记录系统里发生的交易。

现在,如果2号想给9号转账10块钱。

为了完成交易,2号对大家喊:“我想转10块钱给9号。所以,请每个人都在纸上做一下记录。”

每个人都去检查2号是否有足够的余额给9号转账10块钱。如果有,每个人就在他们空白的纸张上记下一条转账。

纸张上第一条交易记录

大家就公认这条交易完成了。

3.交易继续发生

随着时间推移,这个网络中越来越多人有转账需求。每当他们要促成一笔交易,都会宣布给其他人。每当听到宣布,他/她就会写在纸上。

这个步骤一直进行,直到每个人当前的纸张都没有空余的位置。假设一张纸上能记录10笔交易,每当第10笔交易完成时,每个人的纸上都没有位置了。

当纸张满了之后

这时候,要把这张纸放进文件夹,拿出一张新的,然后重复2的步骤。

4.把纸张收起来

在把纸张放进文件夹之前,我们需要用一个特别的、大家都认可的钥匙把它封印起来。通过封印,我们确认一旦这些写满记录的纸张一旦被放进各自的文件夹,没有人能改动它们 。今天不能,明天不能,一年后也不能。一旦进入文件夹,它就一直在文件夹里保持封印的状态。另外,如果每个人都信任这个封印,就代表每个人都信任这张纸上的内容。

那其实,封印就是这个方法的关键

【专业术语解读】在纸张上封印的动作叫做“挖矿”,但是为了理解起来简单,我们还是叫它“封印”。

之前我们信任第三方,相信他们写在账簿里的内容不会被篡改。但是在我们这种分布式、去中心化的系统中,这个封印会提供这样的信任。

有意思哦!那我们如何封印这张纸呢?

在学习如何封印之前,我们需要知道这个封印是如何运作的。而且也作为我们学习以下这个东西的先决条件,我把这个东西称作:神奇机器

想象一个被厚厚的围墙环绕的机器。如果你把一个装有东西的盒子从左边喂给机器,它会吐出一个装有别的东西的盒子。

【专业术语解读】这个机器被称作“哈希函数”,但是我们不想搞得那么学术。所以,今天我们还是称它们“神奇机器”。

神奇机器(又称哈希函数)

假设,你把一个装有数字4的盒子从左边喂给机器,我们会发现机器从右边吐出了一个词:“dcbea”。

它是如何把数字4转换成这个单词的?没人知道。而且,这个过程是不可逆的。如果给出单词“dcbea”,没办法推算出机器左边放进去的是什么。但是每次你把数字4从左边放进去,它都会吐出“dcbea”这个词。

哈希(4)=dcbea

我们试个别的数字。26怎么样?

哈希(26)=94c8e

这次我们得出的是“94c8e”。有意思啊!

你可能问以下问题:

“如果我想从机器右边得到3个打头的词,左边需要放什么进去?例如,000ab,00098,000fa,或者别的这样的东西。”

推测输入内容

这个问题你先思考一会。

我跟你说过,这个机器有一种特征,就是没办法从右边的结果推算出左边输入的是什么。用这样一个机器,怎么回答我刚问的那个问题?

想尽一切办法来计算输入值

乐观的话,在几千次尝试之后,我们能够得出一个右侧结果需要的左边的数字。

通过输出值来计算输入值极为困难。但验证结果又很简单。还记得吗?喂给机器一个数字,它会多次吐出来相同的词。

设想我给你一个数字,比方说72533,问你: “把这个数字喂给机器,会不会吐出一个3个打头的词?”你觉得这个问题难度有多大。

你要做的就是,把这个数字喂给机器,再看机器右边吐出什么。这样就行了。

这个机器最重要的特质就是,“给你一个输出值,要去推测输入值极为困难,但是又很容易检验输入值能得出什么输出值。”

我们可以通过以下内容来记住神奇机器(或者哈希函数)的这个特质:

“给你一个输出值,要去推测输入值极为困难,但是又很容易检验输入值能得出什么输出值。”

我们如何用这些机器来封印纸张呢?

我们要用这个机器生产封印纸张的印章。还是从一个设想的情景说起。

设想我给你两个盒子。第一个盒子里有数字20893。然后我问你:“20893加一个什么数字,喂进机器之后能得出一个3个打头的词?”

这是一个跟之前相似的情形,我们知道要计算出这个数字,需要把全宇宙的数字试个遍。

试了几千次之后,我们偶然发现了一个数字,比如21191,它加上20893(21191 + 20893 = 42084),喂给机器,产出一个符合要求的词。

这个情况下,21191就是数字20893的封印。设想有一张纸上写着20893。要封印那张纸(没人能篡改纸张上面的内容),我们会把标记了“21191”的印盖在上面。一旦封印数字(例如21191)盖在上面,这张纸就被封印了。

被封印的数字

【专业术语解读】封印的数字被称作“工作证明”,意思是,这个数字证明了为了算数做出了努力。这篇文章里我们还是称之为“封印数字”。

如果有人想检验这张纸上的内容有没有被篡改,他要做的是:把带有封印的纸张喂给机器。如果机器产生以3个打头的词,内容就没有被篡改。如果不符合要求,我们可以把这张纸扔掉,因为纸上的内容被篡改了,就没用了。

我们会用类似的封印机制把所有的纸张都封好,最后把它们放进相应的文件夹。

最后,封印我们的纸张。

要把网络中包含的交易内容的纸张封印,我们需要算出一个数字,这个数字被喂进机器的时候,能得出一个以3个打头的词。

批注:我一直用“以3个打头的词”,只是作为一个例子。它解释了哈希函数运作的方式。真实情况下,挑战要比这个大的多。

在机器花费了时间和电力计算出数字后,这一页就被计算出来的数字封印了。如果有人试图篡改这一页的内容,封印的数字能允许大家检验这一页是否还是原样。

现在了解了封印,我们再回到在纸上写完第10笔交易,没有地方再写别的交易的时候。

当所有人都没有地方写更多交易的时候,他们就开始计算封印数字,从而把这一页放进文件夹。这个网络中每个人都会做计算。而网络中第一个算出封印数字的人会宣布给所有人。

当大家听到封印数字时,他们会进行验证,看这个数字会不会得出符合要求的结果。如果符合,那每个人都会用这个数字来标记他们的纸张,然后把它放进文件夹里。

但是如果有人,比如7号吧,宣布的封印数字跟结果不符怎么办?这种情况也很常见。原因可能是:

他可能误听了网络中的交易详情;

他可能误写了网络中的交易详情;

他写交易的时候想作弊,为了自己的利益或网络中其他人的利益。

不管原因是什么,7号只有一个选择:丢掉自己那一页,抄写其他人的交易记录,然后把新的放进自己的文件夹。除非他一直不把纸张放进文件夹,他就没办法继续记录其他的交易,但如果这样,他就被这个网络封禁了。

那为什么明明知道有人能算出封印数字,并且能宣布给他们,大家还要花资源计算?为什么不悠闲地坐等别人宣布呢?

好问题。这就是这个体系里的激励机制。区块链中的每个人都有资格竞争获取奖励。第一个计算出封印数字的人都会因为他付出的努力而获得金钱的奖励。

简单设想一下,5号计算出了某一页的封印数字,他就会得到一笔金钱奖励,就比如1块钱,这一块钱是凭空冒出来的。换句话说,5号的账户里会多出一块钱,但同时,也不会有人的账户随之减掉一块钱。

这就是比特币形成的过程。它是第一个在区块链上交易的货币(分布式记账)。作为回报,为了鼓励大家工作的积极性,系统会用比特币奖励大家。当有足够的人都持有比特币,比特币就会升值;会让别人也想持有比特币;比特币会升值更多;会有更多人想持有比特币;比特币会继续升值;以此类推。

奖励会激励每个人继续在这个网络中工作。

每个人把一页放进文件夹后,他们会拿出新的一页并且重复之前的过程,并一直循环往复。

【专业术语解读】把单个纸张想象成交易的一个区块,把文件夹想象成纸张(区块)之间的链,这样就能把它转换成区块链了。

那这个,就是区块链如何运作的。

除了有个小问题我还没告诉你。

设想文件夹里已经有五张纸了,每一张都被一个数字封印好了。如果我想拿出第二页,把交易改成对我有利的内容怎么办?封印数字会让每个人监督交易记录的完好性,对吧?如果我算出了一个新的封印数字来封印改动的交易呢?

为了阻止有人回到已经封印好的纸张(区块)进行改动,系统在计算封印数字这里设有一个玄机。

保护封印数字不被篡改

记得我跟你说过,我给你2个盒子:一个有数字20983,另一个是空的,需要你来计算对吧?现实中,要计算在区块链上的封印数字,其实不止需要2个,需要3个。2个预先设置了数字,一个需要计算。

当这三个盒子都被喂进机器,机器右边吐出来的答案必须符合要求。

我们已经知道,一个盒子里有交易列表,一个盒子里有封印数字。第三个盒子里包含前一页中,机器产出的结果。

有这么一个精巧的小心机,我们能确保每一页都要依赖于之前的页面。这样,如果有人想篡改历史页面,他必须要改动后一页的内容和封印数字,来保证这条链的完整性。

如果10个人里面有1个人想作弊,要篡改区块链上的内容(包含交易内容的文件夹),他需要修改几页,并且要计算出这几页的新的封印数字。我们知道计算封印数字有多困难。所以,网络中1个不诚实的人没办法打败9个诚实的人。

将会发生的是,从这个不诚实的人试图篡改的那一页起,他需要在网络中创建一条新的链,但是这条链永远没办法追上诚实的链。原因很简单:一个人的努力没办法打败9个人的合力。所以就保证了网络中最长的链就是诚实的链。

最长的链就是诚实的链

当我跟你说1个不诚实的人没办法打败9个诚实的人,你脑子里想到什么?

如果不是1个人不诚实,而是9个人呢?

这样的话,协议就会崩溃。这个被称作“51%算力攻击”。如果网络中的大部分人决定作弊,那协议就会崩溃。这也就是如果区块链可能会崩溃的唯一弱点。我们知道,这个不太可能发生,但是我们要了解系统的弱点所在。这个系统建立在一个假设上,即系统中大多数人都是诚实的。

那这些呢,就是关于区块链的一切。如果你身边还有人不了解区块链,问你:“区块链到底他喵的是什么东西?”你知道给他们发什么文章了吧。

你能想到谁应该读这篇文章吗?赶紧点击分享按钮吧。

链上科技为全球区块链技术提供商

核心产品:

现货交易系统

期货交易系统

场外OTC系统

机器⼈系统

钱包服务解决方案

公链、联盟链系统解决方案

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

扫码关注云+社区

领取腾讯云代金券