Doraemonls

看懂这个故事,你就明白什么是区块链了

Doraemonls · 2017-07-05翻译 · 1534阅读 原文链接

http://www.forexnewsnow.com/top-stories/bitcoin-2016-summary-2017-forecasts/

除非你生活在桃花源,我想你一定听说过比特比和区块链。毕竟,这是当前最流行最火热的话题了,可以说是年度热词了。即便是从来没有挖过矿的人或者是不懂其中机制的人,也在谈论它。我朋友圈里的非技术人群比技术人群比多多了。他们都来问我这个词到底是什么意思。我猜也许有更多的人同他们一样好奇。这种情况发生时,我就有必要写点东西,给大家的灵魂一点指引,这也就是本文的目的:用平实的语言让普通互联网用户理解区块链。

顺便提一下,我是每周新闻Unmade的负责人,Unmade每周把一个未来的好想法发到你的邮箱。

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

每一个复杂问题背后都有一个简单明了和错误的答案。--H. L. Mencken。

和其他套路文章不同,在定义区块链之前,我们先看看它要解决什么问题.

假设乔是你最好的朋友。他出国旅游了,在他假期的第五天,他给你打电话说:“亲,我需要点钱。我的钱不够用了。”

你回复说:“马上转给你”,然后挂了电话。

然后你就打电话给账户经理说:“从我的账户给乔的账户转去1000块。”

你的账户经理回道:“好的,先生。”

他打开登记簿,检查的你的账户余额,看你有没有足够的钱可以转给乔。因为你比较有钱,余额充足,于是,他就在你的账户里记下一笔如下支出:

转账登记单

请注意:我们并不是说计算机让事情变的简单了。

你打电话给乔告诉他说:“我转账完了。下次你去银行的时候,就能拿到我给你转的1000块了。”

这内中隐藏了什么?你和乔都信任银行来管理你们的资产。并没有实际上物理的货币的转移。所需要的只是一条登记在册的记录。或者更准确的说,需要一条在登记册上的记录,这条记录并不是你或者乔所控制或拥有的。

这就是现在系统的问题。

要建立人与人之间的信任,我们需要依赖第三方的独立机构。

无数年来,我们都需要中间人来建立相互间的信任。你一定会问:依赖中间人有什么问题么?

问题就是他们在数量上是单一的。如果社会上一定会有混乱注入其中,那么它只需要腐蚀一个人,或者一个组织,无论是有意还是无意。

  • 如果这个记录转账的登记簿在大火中被烧毁了怎么办?

  • 如果你的账户经理错误的把转账金额的1000块写成了1500块怎么办?

  • 如果他写错金额是故意的呢?

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

是否有一个系统让我们不需要银行也能顺利完成转账操作的呢?

要回答这个问题,我们就需要深入研究一下,并给我们自己提出一些更深入的问题(毕竟,更好的问题能帮我们找到更好的答案)。

再认真回想一下,转账意味这什么?只是登记簿上的一条记录。这个问题可以转化成:

是否有一个在我们之间且可维护的转账记录的方式而不需要第三方替我们做记账这件事?

这个问题就很值得探索了。我想答案你已经猜到了。区块链就是这个具有深远影响问题的答案。

区块链就用于维护我们之间的转账登记信息并且省略掉中间方替我们管理记录的一个方法。

跟得上我的节奏吗?很好。因为现在起,就有很多问题在你的脑海里涌现,我们接下来学习这个分布式的登记册的工作机制。

好,告诉我,它的工作机制是什么?

这一方法的必要条件是需要有足够的人倾向于不依赖第三方背书。只有这样的群体才可能维护属于他们自己的登记簿。

“如果比特币流行起来了,那么获得一些币是有意义的。如果足够多的人也这么想,那它会变成一个自我实现的预言。”--中本聪,2009。

多少算足够呢?最少也是三个人。我们这里举个例子,假设有10个人希望放弃银行和第三方。在相互同意的基础上,他们可以了解每个账户的细节,而且不需要知道其他账户的身份。

1.一个空目录

初始阶段,每个人都有一个空目录。随着项目发展,每个人都持续在他们的空目录中加入一些页面。这些页面的集合就形成了记录转账的登记簿。

2.当有一笔转账时

接下来,网络中的每个人都有一张空白页和一支笔。每个人都能随时记录发生在系统中的任何一笔交易。

现在,假设2号要给9号转10块钱。

发生交易时,2号大声告诉所有人:“我要给9号转10块钱。请大家记录在你的空白页上。”

于是每个人都检查一下2号有没有足够的余额转给9号10块钱。如果他的余额足够,那么每个人都在自己的空白页上记录这笔转账交易。

空白页上的第一笔转账记录

这笔转账就可以认为是结束了。

3.转账持续发生

随着时间推移,越来越多的人需要给其他人转账。任何一笔交易,他们都需要给所有人广播通知。只有一个人听到了广播,那么他或她就需要在自己的页面上记录一笔交易。

这个实验会一直继续到每个人的页面没有足够的空间来记录交易假设一页最多可以记录十项,那么当第十笔转帐发生时,大家就没地方记录了。

当页面填满时

这时候就需要把目录里的页面收起来,拿出一个新空白页,重复第二步的过程。

4.收起记录页

在收起记录页的数据之前,我们需要用一个唯一的钥匙密封这一页,这个钥匙是这个网络中所有人都认可的。通过密封数据,我们需要保证一旦数据经过拷贝之后,不能有任何人可以修改,今天不行,明天不行,一年后更不行。一旦被收起来,这一页就永远都在这个目录里了--密封了。进一步说,如果大家都信任这个密封操作,那么大家都信任其中的数据。密封这一页就是这一方法的关键点。

[行话箱]密封页面这一行为称为“采矿”,但简单起见,我们会继续称之为“密封”。

早些时期,我们能信任第三方或者中间人,就是因为他们从不修改已经记下的记录。在一个分布式和去中心化的系统里,这样的密封操作就提供了信任的基础。

有趣!我们如何密封记录页

在学习如何密封页面之前,我们已经大概知道密封的含义了。在继续学习之前,还需要了解一个先决条件,我喜欢称之为:

魔法机器

想象有一个机器,四面被厚厚的围墙环绕。如果你从左边往里面放一个盒子,盒子里装了点东西,它也会吐出来一个盒子,只是这个盒子装的东西变了。

[行话箱]这个魔法机器就叫做“哈希函数”,但现在我们不想太学术。所以,现在暂时让我叫它“魔法机器”。

魔法机器(即哈希函数)

现在假设,你把数字4从左边放进去,我们会发现他会从右边吐出来一串字母组成的词:‘dcbea’。

它是怎样把数字4转化成一个词的?没人知道。但是,这个过程是不可逆的。即便知道‘dcbea’是吐出来的词语,我们也不可能知道最开始放进魔法机器的那个数字是什么。但是,如果你每次都是放一个4进去,它会一直吐出相同的词语,‘dcbea’。

hash(4) == dcbea

给定这个词,“dcbea”,我们不能判断从左边放进去这个机器的东西是什么。但是,如果你每次都是放一个4进去,它会一直吐出相同的词语,‘dcbea’。

我们尝试放进去一个不一样的数字比如说26?

hash(26) == 94c8e

这次我们得到‘94c8e’。有趣!所以这个词也可以包含数字了。

现在我向你提出以下问题:

你能告诉我,要从机器右边得到一个以三个零开头的词语,我应该从机器左边放什么进去呢?比如得到的词语是000ab,00098或者000fa ,或者其他类似的词语呢?

预测输入

想一想这个问题。

我告诉过你,这个机器有一个属性是我们无法通过机器右侧的输出计算出左边预期的输入。面对这样的机器,我们怎么能回答上面的问题呢?

我想到了一个办法。为什么不能尝试把宇宙中所有的数字都输入一遍,直到我们知道哪些数字输入后得到的词语是三个零开头的呢?

尝试每一个数字来获得输入

乐观点看,只需要几千次尝试,我们就能获得一个符合条件的数字了。

给定输出的情况下,要计算输入是在是太困难了。但与此同时,要验证预测的输入是否能够符合必要的输出,则是非常容易的。请记住,这个机器对同一个数字,每次都会产生一样的输出。

如果给你一个数字,比如说是72355,我的问题是:这个数字,从左边输入个机器,是否能返回一个以三个零开头的词语?你觉得这个问题有多难?

你只需要把这个数字放进这个机器,然后看看它从右边吐出了什么。就这么简单。

这类机器最重要的特性是:“给定输出,计算输入是非常困难的,但是如果给定输入和输出,很容易验证输入是否会产生输出。”

在本文后半部分,我们只要记住这个魔法机器的特性(或者说哈希函数)就可以了。

给定输出,计算输入是非常困难的,但是如果给定输入和输出,很容易验证输入是否会产生输出。

如何通过这个机器密封页面呢?

我们使用这个魔法机器来生成一个密封章。现在我们还是设想有这样的场景。

假设我给了你两个盒子。第一个盒子包含数字20893。然后,我问你:“你能不能自己找一个数字,第一个盒子里的数字加上这个数字以后,把这个数字放在魔法机器中去,魔法机器就可以产生一个以三个零为开头的词语呢?”

和之前看到的相似,我们已经知道,唯一的方法是通过预先尝试所有的数字,找到那些可以产生符合预期的部分。

在经过几千次尝试之后,我们在尝试一个数字时停了下来,假如说是21191,它加上20893(比如 21191 + 20893 = 42084),然后放到这个机器中去,得到了一个满足我们条件的词语。

在这种情况下,这个数字21191,就成了这个数字20893的密封章。假设有一个页面,上面记载着数字20893。要密封这一页(让别人都不能修改它的内容),我们就在这页上贴一个标签,写上21191。只要这个密封数字(这里就是21191)一直贴在页面上,这一页就是密封的。

被密封的数字

[行话箱]这个密封的数字就称作“工作量证明”,这个数字就代表你在计算这件事上花了多少努力。我们很擅长为了目的给它起名叫做“密封数字”。

如果有人想检查一个页面是否被修改过,那么他要做的很简单,就是把页面内容和密封数字加起来,然后放进魔法机器。如果机器给出的词语是以三个零开头的,那么这个内容就没有被修改过。如果输出的词语不符合我们的要求,那么我们就把这个页面丢弃掉,因为这个内容可能被修改过,没有用处了。

我们使用类似的密封机制,密封所有的页面,最终把它们放到我们各自的目录下。

最终,密封我们自己的页面

要密封自己的页面,我们需要找到一个合适的数字,把这个数字附加在列表最终记账数据后,再放入魔法机器,我们就能够得到一个以三个零开头的词语输出了。

注意:我说的要求“以三个零为开头的词语”只是一个例子。这是为了说明哈希函数的工作方式。实际中的要求要比这复杂的多

一旦花费了时间、电力资源通过机器计算得到了这个数字,那么这个页面就被这个数字密封了。假如有人尝试修改页面内容,那么通过这个密封数字,所有人都可以验证这个页面内容的真实性。

现在我们知道什么是密封页面了,我们再回过头看一下,我们已经在页面上写满了交易记录,现在我们没地方写了。

随着每个人都在自己的页面上写满了交易明细,那么他们就都开始为自己的页面找到一个密封数字,来密封内容,这样这个页面就可以收起来了。于是网络里的每一个人都开始计算。第一个找到密封数字的人,就把这个数字广播告诉所有人。

很快所有人都知道这个密封数字了,然后每个人就立刻用这个数字验证一下输出结果。如果这个数字是正确的密封数字,那么每个人就都把当前页面贴上这个数字标签,然后把这一页收起来

但假如说某个人,比如说7号,他广播的密封数字不能让得到符合条件的输出怎么办?这样的情况并不多建。可能的原因有以下几种:

  • 他可能听错了网络中发布的交易信息。

  • 他可能记错了网络中发布的交易信息。

  • 他有可能在记录交易的时候有欺诈行为,或者是为了他自己或者是为了网络中的其他人。

无论是那种情况,7号都只有一个选择,丢掉他的记录数据,然后从其他人那里拷贝一份,然后再放到自己的目录下。在他不把自己的数据丢掉之前,他都不能继续写下任何记录,也就是说,他被排除在网络之外了。

不论密封数字是什么样,只要大多数人认可了,那么这个密封数字就是诚实的。

那既然总有人会计算并通知广播,为什么要每个人都花费时间精力去重复计算呢?为什么不能坐等通知?

好问题。这其实就是系统中的激励机制。每个人都是区块链的一分子,都可能获得奖励。第一个计算出密封数字的人就能够免费得到一笔钱,以奖励他的付出努力(额外的CPU和电力)。

假设5号计算出了一页数据的密封数字,他就能免费得到一些钱,假如是1块钱,这就是凭空出现的钱。换句话说,5号的账户余额就能够增加1块钱,同时并不需要从其他人的账户减去一块钱。

这就是比特币如何存在的。这是在区块链(即分布式登记册)上处理的第一种货币。而作为保持人们网络中继续投入精力的回报,比特币就这样作为奖励发给大家

当有足够多的人拥有比特币时,他们的价值增长了,让其他的人希望拥有比特币,这让比特币的价值再进一步增长,吸引更多的人期望持有比特币,再一次抬高比特币的价值,如此循环往复。

奖励使每个人都能在网络中一直努力计算。

当所有人都把当前目录的页面收起来,他们就有了一个新的空白页,这样就从头开始重复前面的所有步骤,--永不停歇

「行话箱」把每一页都想象成一个交易记录区块,这个目录就是很多交易页的链条,这样就形成了区块链。

我的朋友们,这就是区块链的工作机制。


不过还有件小事我还没有告诉你的。暂时。

假设目录里已经有了五页,每一页都已经有密封数字了。假如我回到第二页,然后为了自己利益修改了一笔交易呢?这个密封数字就会让其他人都知道交易无效了,对吧?但是如果我继续给这个被修改的页面计算出一个新的密封数字,然后替换了原先的内容呢?

为了防止有人修改过去的区块和密封数字,对于密封数字的计算增加了一些小的改变。

保护密封数字以防修改

还请记住我给你说的吗?我给了你两个盒子,一个盒子里装着数字20893,还有里一个空盒子。实际上,要计算一个区块链的密封数字,一个有三个盒子,两个是预先带数字的,另一个是用来放计算出的数的。

当所有盒子的内容全部加起来,然后放入魔法机器的后,从右边出来的答案一定要满足比要的条件。

我们已经知道,一个盒子里装这所有的交易数据,一个盒子装这密封数字。第三个盒子就装着魔法盒子为之前所有页面计算出的结果。

有了这样的改变,我们就确保当前的新页面总是依赖于前一个页面的。因此,如果有人尝试修改历史内容,那么他就必须要修改之后的所有密封数字,以保证区块链的一致性。

如果这十个人中的一个,尝试修改区块链中的内容(交易记录中的某一页),他就需要调整其中某页的内容,然后计算给所有的页面计算新的密封数字。我们都知道计算密封数字是很难的。因此,一个不诚实的人无法打败其他9个诚实的人。

会发生的是,从这个骗子尝试修改的那一页起,他就需要在网络中创建另一个链条,但是这个链条永远无法赶上其他最诚实的链条,因为这个人精力和速度都无法战胜其他所有人九倍的努力和速度。这样就保证了网络中最长的链路就是最诚实的链路。

最长的链就是最诚实的链

最长的链就是最诚实的链

当我给你说最不诚实的家伙不能战胜9个诚实的人,你脑子里有没有觉得有什么不对劲?

假如,不是一个,而是六个人呢?

这种情况,这个协议就自己打自己的脸了。这就是所谓的“51%攻击”。如果网络中的大部分个体都决定变的不诚实,一起欺骗剩下的人,那么这个协议就不能达到其目的了。

这就是区块链的脆弱之处,它有可能崩溃。尽管知道这一点不太可能发生,但我们还是需要警惕系统的缺陷之处。它是建立在“大部分群体是诚实的”这一预设之上的。

好了,朋友们,这就是有关区块链的知识了。如果还有人问你“区块链到底是什么鬼”,你就知道该告诉他去哪找了。把本文链接马克下。

想到某人立马需要读本文的嘛?恩,分享按钮自己点吧!

关于作者

Mohit Mamoria是每周新闻Unmade的负责人,Unmade会把来自未来的点子发到你邮箱里。

相关文章