您的位置:首页 > 其它

区块链到底是个什么玩意儿?

2017-07-25 00:00 393 查看
摘要: 除非你远离尘世,否则你肯定听说过比特币和区块链这两个名词。毕竟,它们是媒体热捧的金融科技弄潮儿。无论是挖过加密货币,亦或者是完全不理解它们原理的人都在热烈讨论。

写在前面,本文原作者Mohit Mamoria,原文登于hackernoon网站,由万向区块链业务专家任重远翻译。另,我们在9月份将举办第三届区块链全球峰会,到时圈内的大神诸如Nick Szabo,Daniel Larimer(网名BM),Patrick Byrne,Vitalik Buterin都会来,感兴趣的朋友可以咨询我。

-------------------------------------------------------------------------------------------------------------

除非你远离尘世,否则你肯定听说过比特币和区块链这两个名词。毕竟,它们是媒体热捧的金融科技弄潮儿。无论是挖过加密货币,亦或者是完全不理解它们原理的人都在热烈讨论。我有很多非技术领域的朋友缠了我几周要我解释一下什么是比特币和区块链。而市面上和他们一样的人成百上千。我将用朴实无华简单可懂的词汇,向大家解释一下。

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

不像其他那些网络上的帖子,会从原理上循循渐进,定义区块链是什么。我们将从问题入手,理解什么是区块链。

想象一下,JOE是小编我最好的朋友,他喜欢满世界旅行。某次旅行的第五天,他打电话给我说:“哥们,江湖救急,我的钱要花光了!”

我回答:“马上打来!”然后就挂断了电话。

然后我跑去银行柜台,排了四个小时队,终于来到了柜员面前,说:“请你帮我转1000块钱给JOE”。

柜员看了下我的账户余额,检查下我是否有1000块钱用来转账。(当然有了)然后就帮我执行转账。(有人可能会问为啥不用支付宝?不要在意这些细节嘛,我只是想把场景描述得更简单清晰一些。)

我打电话跟JOE说:钱转你了,接下来你去银行看看,顺便把我转你的1000元拿出来。

发生了什么?我和JOE同时信任银行来管理我们的钞票。期间并没有任何纸质的钞票进行转移。仅仅需要在账本上面记了笔账。更准确得说,账本上面的这笔钱其实并不属于我或者JOE。

这也是现有系统的问题:人们之间想要建立信任,必须要依赖于第三方机构。

多年以来,我们都是依靠着这些第三方机构来实现互现信任。现在问题来了:依赖这些第三方机构会有什么问题?

万一第三方机构中由于各种政策、市场、系统等因素,发生了点小问题;万一银行机房着火了,银行系统瘫痪;万一柜员输入的不是1000元,而是1500元;万一他想拿着你的账户做点其它事情......

有没有一种系统可以让我们撇开银行仍然可以进行转账交易?

为了回答这个问题,我们必须仔细想想,静下心来问一个更清晰明确的问题。

想象一下,转账是什么?转账就是在账本上面记了笔账。所以这个问题可以变得更加直接了。

有没有一种方法能让我们自己来记账而不需要其他人来介入?

现在我们的问题更加值得探索了。你可能已经猜到答案,区块链就是这个问题的答案。

区块链能够让我们来自己控制记账,而不是让给其他人来替我们做。

大家还智商在线吗?因为接下来几个问题可能会冲击你的思维,我们将学习分布式的记账是如何工作的。

告诉我吧,这货是如何工作的?

如果我担心被人逮住的话,我会私藏些比特币。如果有足够多的人这样去想,这预言本身就能成为事实。—— 中本聪,2009年

这种方式需要有足够多的人一起参与,这些参与者们都不想要依赖第三方进行转账。因为他们自己能够完全管理自己的账本。

需要多少人?至少三个。

我们假设10个人想要从银行或者其他任何第三方机构抽身。按照共识,他们可以一直拥有各方详细的账户内的信息,而并不需要知道对方的身份信息。

1.一个空的文件夹

起初,每个人都有一个空文件夹。活动继续,所有这10个人开始往自己的空文件夹里面塞纸。这一堆纸将形成用来记录并追溯交易的账本。

2.当一笔交易发生的时候

接下来,这十个人每个人都拿着一张白纸和一支笔。每个人都准备记录发生在他们之间的任意交易。

现在,如果2号想要给9号十块钱。为了实现这笔交易,2号对着每个人大喊:“我要转10元给9号啦!请大家每个人都帮我记录在你们的纸上!”

每个人检查了一下自己手头的账本(这些账本都一样),是否2号有够10块钱来转给9号。如果她的余额足够,每个人都提起笔,把这件事记录到了他们各自的白纸上。

每个人都记录完成以后,这笔交易才被认为是完成了。

3.交易持续发生

时光荏苒,越来越多的人参与进入这个组织,并想要把钱转给其他人。无论何时,只要他们想要达成一笔交易,他们就会把消息告诉给所有人。只要一个人听到了这个消息,他/她就会将其记录在自己的纸上。

这样的练习,将会持续到每个人把自己手上的账本全部写满。假设一页纸能够记录十笔交易信息,只要第十笔交易完成,那每个人的空间都会被写满。

是时候把这张纸塞进文件夹,然后拿出来一张新纸来重复刚才步骤2中的流程了。

4.把纸塞进文件夹

在我们把纸塞进我们的文件夹之前,我们需要用一个特殊的钥匙将这张纸戳上一个印章,这也是所有参与者都需要达成协议的操作。通过戳印,我们将确保,一旦这张纸的副本被塞进其他人的文件夹,没有其他人能够修改这张纸上的内容,无论今天,明天,还是在一年以后都没有人可以更改。一旦纸张放进文件夹,它将永远静静得躺在文件夹中,保持戳印状态。如果每个人都信任这个文件夹,那他们也都能够信任文件夹中的纸张以及纸张上的内容。这个戳印,就是这种方法的核心所在。

【Jargon Box】用来保护文件信息的工作叫做“挖矿”,为了尽量易于理解,我们暂时称之为戳印。

早期,第三方机构/中间人获取了我们的信任,让我们以为无论他们在账本上记了啥,我们都可以被及时通知并知晓一切。在一个分布式以及去中心化的系统中,戳印将替代他们提供信任。

有意思!那我们如何在纸上戳印?

在我们开始学习纸上戳印之前,我们先要理解印章大概是如何发挥作用的。作为知识点的预习,我想先让大家了解一下一个有趣的新玩意,我称之为 —— 魔法机器。

想象一下,一台机器被周围厚厚的围墙上下覆盖。如果你拿个装着东西的箱子,想要从左边放进机器,机器会帮你把它变成另一个装着其他东西的箱子并从右边传送出来。

【Jargon Box】这个机器被称为“哈希公式”,但在这里实在是不适合讨论具体的技术细节,所以今天我们称之为“魔法机器”。

你把一个数字4从左边放进机器,然后你会发现右边传送出了一些单词“dcbea”。

机器是如何把4变成这些单词的?没人知道。但是,这个过程是不可逆的。如果你把单词“dcbea”再从右边塞回机器,无论如何都没有办法逆推出左边输入的信息。但是每次你把数字4从左边塞进机器,从右边输出的始终是这些单词“dcbea”。

让我们试一下把其他数字塞进机器,比如26。

这次从机器的右侧,我们得到的结果是单词“94c8e”。非常有趣吧!单词中也能包含一些数字。

现在问题来了:

如果我想要在机器的右侧得到以三个0为开头的五位单词,比如说000ab,00098或者000fa之类的,我们需要从左边把什么样的信息输入给机器呢?

请先想一想这个问题的答案。

前面已经提到过,这个机器有个机制,就是我们知道了右边输出结果,但是没有办法去逆推左边输入的信息是什么。所以我们如何回答刚才问的这个问题?

我能想到的方法,就是把所有的数字一个个从左边往机器里面塞,直到我们看到机器右边给出的结果是以三个0开头的。

乐观得来看,可能只需要尝试几千次,就能够找到问题的答案啦。

虽然想要找到这个问题的答案需要花费大力气,来验证左边的数字是不是正确答案。但机器可不会犯错,只要左边数字不变,右边输出也不会变,所以想要验证左边是不是正确答案非常简单。

如果我给你一个数字,72533,然后问你:“这个数字如果塞进机器的话,右边输出的结果是不是以三个0开头?”

你所需要的,只是把72533从左边扔进机器,然后在右边看机器输出什么。哦,就是它!

这个机器最重要的原理就是 —— “已知一个输出,想要得到原始的输入结果是非常难的。但是有了输入,想要计算出输出结果是非常简单的”。

让我们再次铭记魔法机器的这一特性(或者哈希公式):

已知一个输出,想要得到原始的输入结果是非常难的。但是有了输入,想要计算出输出结果是非常简单的。

如何使用这些魔法机器来给纸张戳印?

我们将使用魔法机器来为纸张生成一个戳印。和先前一样,我们会从易于理解的场景来进行描述。

想象一下,我给了你两个盒子。第一个盒子里面装着数字20893。然后问你:你能够帮我找到这样一个数字吗?它加上20893,得到的结果塞进魔法机器,然后会输出一个以三个0开头的结果。

这个场景和我们前面描述的很像,也就是只有我们不停尝试,才可能找到一个数字的输出结果是以三个0开头。

通过几千次的尝试,我们终于找到了这样一个数字:21191,因为21191+20893=42084,把42084从左边塞进魔法机器,右边的到的结果能够满足要求。

在这样的场景下,数字21191成为了20893的戳印。假设有一张记录纸,上面写着20893。为了把纸张给戳印(保证没有人能够修改内容),我们将把一个印着21191的徽章戳在纸上。一旦戳印数字21191被印在了纸上,这张纸就被戳印了。

【Jargon Box】这个戳印数字被称为“工作量证明”,意味着这个数字是经过不懈努力的计算得到的证明结果。在这里,我们习惯称它为“戳印数字”。

任何人想要验证这张纸是不是被人改动过,他只需要这样做 —— 把纸上的信息,加上戳印数字放进魔法机器里。如果机器给我们的结果以三个0开头,那我们认为纸上的内容没有被改动过。如果结果不是以三个0开头,我们就可以把这张纸给扔了,因为内容一旦被改动过,这张纸就完全没有价值了。

我们将使用一种相似的戳印机制来把我们所有用来记账的纸给戳印一遍,然后把这些纸放进对应的文件夹里面。

终于,可以在纸上戳印了......

为了把这些记录着网络内交易信息的纸张戳印,我们需要找到一个数字,当它加上交易清单然后塞进魔法机器以后,我们可以在机器的右侧得到一个以三个0开头的单词输出。

(注:我前面使用短语“三个0开头的单词”只是举个例子。用来解释哈希公式是如何工作的。真实的场景远远要比这复杂的多。)

机器花费时间和电能来计算输出结果,从而去寻找正确答案,一旦找到正确的答案,这张纸就会被带着答案数字一起戳印。如果有人想要去更改纸张上的内容,戳印数字允许大家去魔法机器验证纸张是否被人更改过。

既然我们已经了解过纸张戳印了,我们回过头来继续看看刚才提到的在纸上已经记录的十笔交易,现在已经写满了,没有空间再记录新的交易。

一旦每个人用完了纸,没法记录更多的交易。大家一起使用魔法机器计算戳印数字。第一个在网络中找到正确戳印数字答案的人,会把这个答案告诉网络里所有其他的人。

一听到戳印数字,每个人验证一下这个数字是不是正确的答案。正确的话,每个人把这个数字戳印在自己的记录纸上,然后放进自己的文件夹。

但是如果有个人对给出答案的7号小李说,这个戳印数字不能得到三个0开头的输出,不是正确答案,会怎么办呢?这种情况很少见,可能的原因如下:

小李可能听错了网络中的交易。

小李可能听漏了网络中的交易。

小李可能尝试作弊,或者偷改交易内容。

无论是什么样的原因,7号小李只有一个选择,把自己的记账纸作废,然后把别人的纸张复制一份,让他放进文件夹。只有他把正确的记账纸放进文件夹,否则他无法继续记录任何交易,也就是说他被记账网络给驱逐了出去。

只要大部分人认可这个数字戳印,那就是个诚实的戳印数字。

当大家都知道其他人会计算,并通知大家戳印数字的结果,那为什么每个人都要花时间精力去计算一遍呢?为什么不找个沙发躺下来,舒舒服服等别人来宣布结果?

这是个好问题。其实这也是全局中非常刺激的一点。区块链网络中的每个人都渴望获得奖励。第一个把正确的戳印数字计算出来以后,将会为他的付出获得奖励。(付出包括电脑的使用成本和电费)

想象一下,如果5号小张计算出来了正确的戳印数字,他得到了一笔奖励,例如奖励1元钱。这1元钱是凭空产生的,换句话说,5号小张的账户余额就会增加1元,而不需要任何人的账户里减少1元。

这也就是比特币存在的意义。比特币是区块链(又或者称为分布式账本)上的第一种交易货币。越来越多的人愿意付出自己的能力,维护比特币网络的稳定,从而获得比特币作为奖励。

当足够多的人拥有了比特币之后,比特币的价值就提升了,使得更多的人想要拥有比特币;这也正向提升了比特币的价值;价值提升吸引了更多人;而更多人带来了比特币价值的提升。

这是一种循环。

奖励使得大家都愿意努力维护区块链网络的稳定。一旦每个人把记账纸塞回文件夹,他们拿出了一张新的白纸,然后一遍遍重复前面所有的操作。

【Jargon Box】把这张记账纸想象成拥有一堆交易信息的区块,把文件夹想象成一张张纸(区块)形成的链条,他们的组合成为了区块链。

所以,区块链其实就是这样工作的......

想先一下,文件夹里面已经有五张纸了 —— 每张纸都打上了戳印数字。要是我回去找到第二张纸,然后改动了纸上的一笔交易信息呢?戳印数字是不是允许任何人来检测交易信息中的错误?那如果我为了更改后的结果,再计算一个新的戳印数字,再重新戳在记账纸上面呢?

为了避免类似的问题,也就是有人会回去修改某张记账纸(区块)以及戳印数字,在计算戳印数字的时候其实有个小小的技巧。

保护戳印数字免于更改

还记得我告诉你 —— 我给你两个盒子,一个放着数字20893,另一个是空的数字等你自己去用数字做尝试,来找到戳印数字。事实上,为了计算区块链上的戳印数字,其实一共有三个盒子(而不是两个) —— 其中两个是预填充的,一个是需要被计算的。

当这三个盒子的内容都被填写,并送入魔法机器,右侧的输出结果必须满足几个条件。

我们已经知道,一个盒子包含交易清单,一个盒子将会装着戳印数字。第三个盒子,包含着前一张记账纸经过魔法机器输出的结果。

通过这个小把戏,我们确保了每张纸都需要紧密和前一张纸关联。所以,如果一个人想要更改一张历史记账纸,他必须去改变这张纸以后所有记账纸上面的信息,来保证他的更改是可信的。

如果我们在文章中假设的十个人中,有一个想要作弊,更改区块链(包含所有记账纸交易信息的文件夹)里面的信息,他必须去调整好几张记账纸,并且计算出新的戳印数字。这样的工作量是相当大的。基本上,网络中的一个不诚实的人,很难击败剩下那九个诚实的人。

如果不诚实的人想要篡改记录,会发生什么呢?从那张被篡改信息的纸开始,他将会网络中创造另一条区块链,但这条链,永远不会被其他诚实的人所接受 —— 因为一个人计算的速度不可能打败另外9个诚实人共同的努力。所以,这样保证了区块链网络中最长的链其实就是最诚实的链。

当我告诉你不诚实的人,无法打败9个诚实的人,你的脑中是不是又有啥新想法了?

假设,不止一个人,而是6个人都变得不诚实呢?

在这种情况下,原有的协议将会彻底崩塌。这也是常说的“51%攻击”。如果网络中大部分人都决定要进行欺诈行为,那这协议就被人故意撕毁了。

这也是唯一已知的造成区块链崩溃的原因。不过,这点基本不太可能发生,因为这是建立在大部分都是不诚实的基础上的。

所以,这就是区块链。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息