78

用最简单的图文带你看懂区块链 中国第一产品经理人气组织::专注于研究互联网产品

 6 years ago
source link: http://www.pmcaff.com/article/index/1081183945397376?from=selection
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

用最简单的图文带你看懂区块链

除非过着与世隔绝的生活,否则你或多或少有听说过比特币和区块链,毕竟,这可是当下媒体们最喜欢报道的话题,甚至连那些从未参与进来的人们也开始津津乐道了。很多不懂技术的朋友纷纷找我探听,我猜还有不少人想弄明白区块链是怎么回事儿,所以,是时候写篇通俗易懂的文章来解释一下了。

为什么我们需要区块链这么复杂的玩意儿?

区块链究竟是什么?为什么我们需要用到这么复杂的系统呢?

我想与其用一大堆专业术语来解释,倒不如先看看它解决了什么问题:

试想一下,你最好的兄弟小舟正在世界各地穷游,游到一半没钱了,便打电话找你救急,你二话没说就开始转钱。

先是打电话给银行客户经理,叫他帮你转1000美金到小舟账户上,经理收到通知后立马查看你的账户是否有足够的余额,作为大客户,你的存款绰绰有余,于是他便在账本上进行记录:

注释:为了简化问题,这里我们不打算涉及相关的计算机原理

然后你给小舟打电话:兄弟,我已经把钱汇过去了,请注意查收!

通常情况下,我们进行国际汇款时都需要经过银行这种第三方机构,有了银行之后你就不需要把真正的现钞寄到海外去了,只需要通过转账系统把余额的变动记录在银行的账本上就可以了,这看起来似乎很方便,不过由于银行这种中介的存在,也带来了另外的问题:这个第三方是否真的可靠?有没有可能出现差错呢?

完全有可能,比如说他们留存的账本因不可抗力因素毁掉了,再比如说你的客户经理不小心把你转的1000美金记成了1500美金,或者说他们背地里图谋不轨,营私舞弊?一旦你把鸡蛋都交到了第三方的篮子里,就一点办法都没有了……

那有没有可能去掉银行这种中心环节,直接让人们相互之间就可以转账呢?

有的!!!以分布式记账系统为工作方式的区块链正是来解决这个问题的,它意味着你不再需要银行等第三方系统的代劳,就可以轻松完成个人与个人之间的转账,神奇吧!

区块链运行原理

那么,这种神奇的区块链究竟是怎么运行的呢?其背后的原理又是什么呢?接着我们来看看其背后的简要原理。

区块链最神奇的地方在于它的运行方式——不依靠任何特定的机构运行,也就是说不依赖任何一个中心机构来记账,而是由参与者的电脑们来共同记账,所以只要有足够多的参与者,它就能够不断地自动运行下去。

那区块链系统的运行最少需要多少个参与者呢?超过3个就可以了!

我们来举个简单的例子,假设有10个人不想依赖第三方系统,于是有人组建了一个人人都可以复制的系统,并拟定了一份共同契约,基于这份契约,系统里的所有人都要进行公开记账,然后每个人都可以看到其他人所记的账户明细。

其运行过程大致是这样的:

开始的时候给每个人分配一个相同的空文件夹,人手一张空白的账单,一支记账专用的笔,以便记录这个系统里发生的每一笔交易,文件夹则主要用来收集不断产生的账单。

当有交易发生时,比如现在2号想要转10块钱给9号,为了达成这笔交易,2号就需要拿个喇叭向每个人宣告:"我要转10块钱给9号,请大家帮忙记录到手中的账单上。"

于是每个人检查了一下2号是否有足够的余额来给9号转10块钱。如果她有足够的余额,每个人就会在自己账单的空白处记录下这笔交易。

如果大家确认没有疑议,则这笔交易即被视为完成。

随着时间的逝去,系统中将会有更多的人需要转账,于是大家便会重复之前的步骤:交易者不断地对外广播,其他人不断地进行检查和记录,直到手头的那张账单用完。假设一张账单能够记下10笔交易,一旦第十笔交易达成,就需要把整张记录好的账单收进文件夹中保存,并准备一张新的账单。

将账单收进文件夹之前,我们需要在其底部粘上一种附有数字的特殊封印,它的两面都具有强大的附着力,不仅能牢牢附着在这张账单上,还能把下一张账单吸附在其上面,这样一来,一旦后续的账单贴上之后,前面的账单就很难再被做手脚了,因为所有的账单被牢牢地粘在一起了,偷偷篡改的话很可能将账单撕烂!所以,一旦账单记完并且所有人确认无误后,大家就会给它戳上这种封印并放到文件夹中封存起来,并且时间越久篡改难度越大,这种封存的方式正是区块链的关键所在。

注释:这一过程称为确保当前数据安全的封装行为,行业内称为挖矿,为了简明起见,我们且称之为账单的封存,由于后续的账单会包含上一张账单的简单摘要,无形之中就将所有帐单衔接起来了,所以要篡改某张账单的话,其后所有的账单也需要跟着进行更改,为此我们勉强用具有双面胶性质的封印作个简单的类比,以说明区块链中的区块是怎样串联在一起的

以上就是区块链系统大致的运行原理,早前我们还需要第三方系统来替我们担保交易记录,现在却只需运行一下这种去中心化的分布式系统,便足以提供安全一万倍的保障,神奇吧!

区块链如何封存交易记录

那么封存数据的具体原理是什么呢?就让我们来研究一下里面的黑科技吧!

在我们了解账单的封存之前,我们先要知道封存的具体原理,作为区块链系统的主要功能,我们可以把它想象成一个翻译装置,姑且称之为翻译黑箱吧,你甩给它一句话,它会立马吐出另外一句翻译好的话。

注释:这个装置其实叫做哈希函数,由于涉及到专业的数学及密码学知识,在此我们暂不展开

我们喂给它4这个数字,它便会吐出 'dcbea' 这一串加密字符,你可能会好奇它是怎样将数字4转化成这串内容的呢?由于里面涉及大量复杂的运算,具体细节我们在此没必要了解,只需知道这是一个不可逆的过程即可,也就是说如果只知道 'dcbea' 这串字符,我们是很难反向推导出4的。不过当我们得知输入4即可得到 'dcbea' 后,验证起来是非常简单的。不管你输入多少次4这个数字,这个装置都将吐出 'dcbea' 这串字符,几乎不可能有其它的输入也能得到相同的结果。

让我们试试别的数字吧,如26?

嗯,我们可以看到输出的是 '94c8e',有点意思,输出的字符串也可以包含数字。那么问题来了:假设有一串输出是以 000 为开头,比如 000ab 或 00098 或者其它以三个0开头的字符,我们有没有可能推导出其可能的输入呢?

前面我们说过这种装置的特性——几乎无法通过结果推导出原文,那我们又如何来解决这个问题呢?目前只能想到一种土办法,那就是一个一个地试,直到试出来为止……

经过了数千次的尝试,我们总算找出一个符合要求的数字 72533。

注释: "以三个0为开头"只是作为一个例子,用来说明哈希函数是如何工作的,由于只限定输出的前三位数是0,所以符合要求的当然也可以是别的数字,但同样需要经过大量的尝试才能得到。实际上,区块链具体的运算任务要比我们这边假设的例子复杂得多

可见通过给定的输出来推算输入是非常困难的,不过验证起来却是极其的简单,只要有人试出答案,其他人即刻便可完成验证,因为一种输出几乎只对应一种输入。比如说有人试出只要输入 72533 这个数字,便会得到一串以三个0为开头的字符,为了核实他的说法,我们只需要将 72533 这个数字丢进装置里便可立即知道结果是否如他宣称的那样。

这再次说明了这种装置最重要的特性,即正向推导验证容易,反向推导非常困难。那么,基于此类特性,我们该如何利用这种封存装置来封存一段数据呢?

先来看一个问题,假设我们手里有两段字符要输入,一段是数据 20893 ,另一段未知,如何才能推导出一串以三个0为开头的字符呢?

可见通过给定的输出来推算输入是非常困难的,不过验证起来却是极其的简单,只要有人试出答案,其他人即刻便可完成验证,因为一种输出几乎只对应一种输入。比如说有人试出只要输入 72533 这个数字,便会得到一串以三个0为开头的字符,为了核实他的说法,我们只需要将 72533 这个数字丢进装置里便可立即知道结果是否如他宣称的那样。

这再次说明了这种装置最重要的特性,即正向推导验证容易,反向推导非常困难。那么,基于此类特性,我们该如何利用这种封存装置来封存一段数据呢?

先来看一个问题,假设我们手里有两段字符要输入,一段是数据 20893 ,另一段未知,如何才能推导出一串以三个0为开头的字符呢?

在这种情况下,21191 这段数即被视为数据 20983 的特定封印。假设有一张纸上记录的是 20983 这段数据,为了封存这张纸(也就是说没有人能篡改里面的内容),我们需要在上面给它盖一个 '21191' 的封印,一旦这个封印戳上去,这张纸便被视为已封存。

注释:封存号码在区块链中叫做"工作量证明",用来证明某人为了试出该号码所做的计算,这种计算需要消耗大量的计算机算力及其运行所需的电力

如果有人想要验证这张纸上的数据是否被篡改过,他仅需将数据和封存号码一起丢进装置中,只要吐出的字符跟先前宣称的数字一样就能说明该数据是原始数据,如果不是则说明它已经被人动过手脚了,只能丢掉。

接下来,我们将使用同样的原理来封存所有的账单,我们可以把 21191 这段数据想象成是一整张账单,为了封存这张账单,我们需要算出一个数字——当它被附加到账单上并交给装置时,我们将得到一串以三个0开头的字符。

在耗费许多算力和电力把封存号码算出来后,账单将会被这段号码封存,也即意味着账单中的交易记录无法篡改,网络中的所有人都能通过封存号码验证交易记录是否准确。嗯,现在我们终于知道了账单是如何封存的了!

区块链的奖励机制以及安全性

我们知道,为了封存账单需要耗费大量的算力和电力,那么大家为什么有动力去参与这种运算呢?这种运算机制又有什么弱点呢?接下来我们就一起来详细分析一下。

先回过头来看看当一张账单记录下第10笔交易后的情况,这时每个人手中的账单都记满了,为了封存这张账单,我们需要计算这张账单的封存号码,但因为计算过程费时费力,大家都没有动力去计算。于是系统推出了一套激励机制——第一个算出封存号码的人可以得到系统产生的额外奖励,比如5号第一个算出并宣布了封存号码,其他人验证无误后,系统自动在5号的账户上增加了50个比特币。

注释:比特币的奖励机制被设计为速度递减模式,大约每四年奖励会减少一半,最初时为50个,2012年11月减半为25个,目前再次减半为12.5个……随着使用比特币人数的增加,比特币的价值也将大幅攀升,虽然奖励币数变少,但实际的价值并不会减少

这也即是比特币存在的意义——它是基于区块链的首个交易货币(系统中的通货),作为回报,参与其中运算的人将获得比特币作为奖励。当足够多的人持有时,比特币开始变得有价值,使得其他人也想要获得比特币;而当更多的人想要比特币时,比特币将变得更有价值(物以稀为贵),如此一来,基于区块链系统的比特币将越来越有价值……

所以,这种奖励使得大家一直在网络上计算下去,每当大家把记满的账单放入文件夹封存后,便会拿出一张空白的账单重复之前的整个过程,并一直持续下去,这即是区块链的本质。

注释:把区块链中每一个记录交易的区块想象成一张账单,把整个串起来的区块想象成文件夹,通俗一点我们可以把区块链想像成一个分布在大家电脑中的大账本,由参与者共同记账维护

嗯,这样的机制看起来确实不错,可是如果有人(比方说7号)质疑这一封存号码的正确性呢?系统出现这样的情况不在少数,不过通常的原因主要有以下几点:

- 可能7号收到的交易数据有误

- 可能7号记录的交易数据有误

- 可能7号为了一己私利而篡改了交易记录

不论何种原因,7号只有一种选择——放弃自己记录的账单并复制其他人的账单,不然的话没人相信他以后所记的账,毕竟系统的原则是少数服从多数,不管封存号码是什么,只要大多数人认同了,它便是最可靠的封存号码。这也引出了我们之前的另外一个疑问——区块链的运算机制存在什么弱点?

为了回答这个问题,我们先来想象一个场景:

假设现在大家的文件夹中已经有五张封存完毕的账单了,如果我为了个人利益去篡改第二张账单上的交易记录,势必导致封存号码与交易记录的不一致,很容易被别人发现。先前也讲过封存账单的原理——为了封存账单,我们输入装置的有两组内容,一组是包含交易记录的账单,另一组为封存号码。所以,只要我能动用了算力强大的计算机根据篡改后的交易记录重新算出了一组封存号码,便可以瞒天过海了。

可实际上,为了阻止某个算力强大的个人回去篡改交易记录和封存号码,区块链采用了更为巧妙的封存计算方式——摘取前一张封存账单的部分输出作为第三组的内容,与另外两组一道作为输入。

通过这种精巧的设计,我们确保了每张账单都是基于前一张账单而封存的,因此,如果有人想要篡改历史记录,则需要连同某张账单以后的所有账单一同更改,并重新计算这些账单的封存号码,方才能保持整个账本的一致性。我们已经知道算出一张账单的封存号码有多难了,更不用说要连续算出一连串的账单,简直不敢想象……

更何况,在这个系统中某个单一个人的工作量和速度是远远敌不过其它9个人的累计工作量和速度的,因此,就算有人在某张账单之后重新算出一连串的新账单,也几乎是不可能赶上原来那串账单的记账速度的。

除非出现另外一种情况,即系统中超过一半以上的人共同篡改账单,这种情况下,原先的那串账单将被废弃,然后大多数人转移到另外一串新的账单上记账。这也是区块链系统的唯一弱点,尽管这种情况不太可能发生,但我们还是要了解这种机制的不足,以便于防患于未然。

注释:这种情况即是所谓的"51%算力攻击",即当网络中的大部分人决定欺骗其他人时,原先的协议将无法达成

以上就是区块链的主要原理,看完之后相信大家就不难理解比特币的发明者中本聪在2009年发表的预言:基于区块链的比特币一旦流行开来,其现实意义将会变得非同凡响,就像自证预言一样,越多的人相信,这种自制体经济就越有可能变成现实。

注释:什么是自证预言?[罗伯特·莫顿教授](http://goo.gl/iuz03)发现了这种现象,并将其命名为[自证预言](http://goo.gl/RyWB),即如果人们相信某件事情会发生(事实上其原本并不见得一定会发生),那么这件事情最终真的会发生。比如,一家银行本来运作得很正常,但不知什么原因,出现了“这家银行要倒闭”的流言。流言越传越广,导致越来越多的人信以为真,有人为防意外而跑到银行把自己的存款提走。恐慌情绪蔓延,并且变得愈加真实,更多的人冲进银行提走自己的存款……最终,挤兑发生了,银行真的倒闭了

本文转载自区块网


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK