什么是TMD区块链
除非你藏在石头缝里,不然我确信你肯定听说过比特币(Bitcoins)和区块链(Blockchain),毕竟,他们是当下的趋势和媒体们热议的话题——年度流行语。甚至那些从来没挖过加密货币(cryptocurrency?)或者不理解它工作原理的人都在讨论它。对于我来说,非技术朋友偏多。几个星期以来,他们缠着我让我为他们解释这些流行语。我想成千上万的人的想法和他们是一样的。我觉得是时间写点东西了。为了能让每个人可以指引那些无助的人,这就是写这篇文章的目的——用简单的英语使得任何普通的互联网用户都能理解。
“对于每个复杂的问题,都有一个明确的,简单的和错误的答案” ——H. L. Mencken
不同于其他互联网的文章,我不打算先介绍区块链是什么,而是先理解它能解决什么问题。
想象一下,Joe是你最好的朋友。他正在国外旅行,假期的第5天,他打电话给你说,“伙计,我钱花光了,我需要点钱”。
你回答说“立马转你”,就挂电话了。
你打电话给你的银行账户经理告诉他说,“从我的账户转$1000到Joe的账户”。
你的账户经理回答,“好的,先生”。
他打开登记表,检查你的账户余额看是否有足够的余额能够转给Joe$1000。因为你是一个土豪,你有充足的金钱,所以,他在登记表中做了一个如下的记录:
注意:我们现在不讨论计算机他的真实工作流程,只是为了让事情简单
你可以打电话个Joe并且告诉他,“我已经转给你钱了,你只需去银行就可以取出我给你转的$1000”
刚才发生了什么?你和乔都信任银行来管理你的钱。没有实物票据(physical bills)的真正移动来转移这些钱。只要在登记簿上登记一下就行了。或者更精确地说,注册表中您和Joe都不控制或拥有的一个条目。
这就是当前系统的一个问题。
为了在我们之间构建信任,我们依赖于第三方
多年来,我们一直依赖这些中间商来相互信任。你可能会问,“依赖他们有什么问题?”
问题是它们的数量是单一的。如果要在社会中注入混乱,只需要一个人或一个组织有意或无意地走向腐败。
如果记录事务的那个登记表在火灾中烧毁了怎么办?如果你的客户经理写错了1500美元而不是1000美元怎么办?如果他是故意的呢? 这些年,我们一直将所有的鸡蛋放在一个篮子里,并且篮子还是别人的。
有没有这么一个系统,我们可以不需要银行而转账?
为了回答这个问题,我们需要更深入并且询问自己一个更好的问题(毕竟,只有更好的问题才会有更好的答案)
想一下,转账意味着什么?仅仅是账簿(register)上的一个条目吗?更好的问题是:
有没有一种方式可以保存我们的账簿而不需要第三方?
现在,这是一个值得探索的问题。也许你已经猜测出了答案。区块链就是这个深奥问题的答案。
这是一个方法来维护我们的账簿,而不需要其他人来做。
你还在听吗?好的。因为当许多问题已经开始浮现在你的脑海后,我们将开始学习这个分布式账簿是如何工作的。
这个方法的要求是:有足够多的不想要第三方的人。只有这样,这个组才能维护他们自己的账簿。
“为了防止比特币流行起来,获得一些比特币是一件有意义的事情。如果足够多的人都这么认为,它将变成一个自我实现的预言”—?中本聪?2009
多少人算足够?至少三人。举个例子,我们将确定10个个体想放弃银行或者其他的第三方。双方达成协议后,他们将获得彼此的锁有时间的账号信息-但不知道账号的主人是谁。
每个人包含一个空的文件夹,以它们作为开始。随着我们的发展,这10个人将不断地向他们当前的空文件夹中添加页面。这些页面的集合将形成记录交易的登记簿。
接下来,网络中的每个人手里有一张白纸和一个笔。每个人将准备往白纸上写入要发生的交易。
现在,假如#2想给#9转账$10
为了完成交易,#2喊话每个人,“我想给#9转出$10。因此,每个人请在自己的纸上做上记录”
每个人检查#2是否有足够的余额可以转给#9 10$。如果有足够余额,那么每个人在自己的空白纸上记录一条交易。
此时,交易就算完成了。
随着时间的流逝,网络上越来越多的人感到有必要把钱转给别人。每当他们想要进行交易时,他们就会向其他人宣布。一个人只要一听到广播,就会把它写在他/她的页面上。
这个练习一直持续到每个人都用完当前页面上的空间。假设一个页面有足够的空间来记录10个交易,那么一旦完成了第10个交易,每个人都会用完这个空间。
现在是时候把页面放到文件夹中,然后拿出一个新页面,重复上面步骤2中的步骤
在我们将页面储存在我们的文件夹之前,我们需要用网络中每个人都同意的的唯一秘钥老封存它。通过封口,我们将确保一旦它的副本被放入每个人的文件夹,任何人都不能对它做任何更改——不是今天,不是明天,甚至不是一年后。一旦放在文件夹里,它就会永远封在文件夹里。而且,如果每个人都信任印章,那么每个人都信任页面的内容。而封口是这种方法的关键
术语
它在页面上被称为“采矿”来保护它,但是为了简单起见,我们将继续称它为“密封”。
早些时候,第三方/中间人给了我们信任,无论他们在登记册上写了什么,都不会被改变。在我们这样的分布式分散系统中,这个印章将提供信任。
在我们学习如何密封这一页之前,我们将大致了解密封的工作原理。它的前提是学习一些我称之为…
想象一个被厚墙包围的机器。如果你从左边发送一个里面有东西的盒子,它会吐出一个里面有别的东西的盒子
术语
这台机器叫做“哈希函数”,但我们不想太技术化。所以,今天,我们先叫它 “魔术机器”。
假设你从左边输入数字4,我们会发现它在右边吐出了一个词:“dcbea”。
它是如何把数字4转换成这个单词的?没有人知道。而且,这是一个不可逆的过程。有了“dcbea”这个词,我们就不可能知道左边的机器被输入了什么。但每次你把数字4输入电脑时,它总会吐出同一个单词“dcbea”。
让我们试着输入一个不同的数字会怎么样? 输入26
这次我们得到了94c8e。有趣!所以,单词也可以包含数字。
如果我现在问你以下问题会怎么样?
你能告诉我我应该从机器的左边发送什么,这样我就能从右边得到一个以三个0开头的单词吗?例如,000ab或00098或000fa或其他任何东西
思考一下这个问题。
我已经告诉过你,机器有一个特性,我们期望右边得到一个输出时,我们无法计算我们左边必须发送什么。有了这样一台机器,我们怎样才能回答我提出的问题呢?
我能想到一个方法。为什么不一个一个地尝试宇宙中的每一个数字,直到我们得到一个以三个前导0开头的单词?
乐观地说,经过几千次尝试之后,我们将得到一个将在右侧产生所需输出的数字。
根据输出来计算输入是非常困难的。但与此同时,要验证预测的输入是否产生所需的输出总是非常容易。记住,机器每次吐出的都是同一个数字。
如果我给你一个数字,比如72533,然后问你一个问题,“这个数字输入机器后,会产生一个以三个前导0开头的单词吗?”
你所要做的就是把数字输入机器,看看你得到的结果是否正确。就是这样。
这类机器最重要的特性是——“给定一个输出,要计算输入是非常困难的,但是给定输入和输出,要验证输入是否导致输出是非常容易的。”
在这篇文章的其余部分,我们将记住神奇机器(或哈希函数)的这个特性:
Given an output, it is extremely difficult to calculate the input, but given the input and the output, it is pretty easy to verify if the input leads to the output.
如何使用这些机器封存页面呢?
们将使用这个神奇的机器为我们的页面生成一个印章。和往常一样,我们从一个假想的情况开始。
假设我给你两个盒子。第一个框包含数字20893。然后,我问你:“你能想出一个数字吗?当它与第一个盒子里的数字相加,然后输入到机器里,它会给出一个以三个前导0开头的单词。”
这是一个类似的情况,正如我们之前看到的,我们已经知道,计算这样一个数字的唯一方法是尝试整个宇宙中所有可用的数字
经过几千次尝试之后,我们将偶然发现一个数字,比如21191,当它被添加到20893(即21191 + 20893 = 42084)并输入机器时,将产生一个满足我们要求的单词。
在这种情况下,这个数字21191将成为数字20893的印章。假设有一个页面上写着数字20893。要封印该页(即任何人不得更改该页的内容),我们会在该页上方贴上“21191”的标签。封口号(即21191)一贴在页面上,页面即被封口。
密封的数字被称为“工作证明”,意思是这个数字是努力计算它的证明。出于我们的目的,我们很擅长称它为“密封号
如果有人想要验证页面是否被修改过,他所要做的就是——将带有封号的页面内容添加到魔法机器上。如果机器给出一个带三个前导零的单词,内容则不会受到影响。如果出现的单词不符合我们的要求,我们可以丢弃页面,因为它的内容被破坏了,没有任何用处
我们将使用类似的密封机制来密封所有页面,并最终将它们安排在各自的文件夹中。
要封住包含网络交易的页面,我们需要计算出一个数字,当将这个数字添加到交易列表并输入到计算机时,我们将得到一个以右侧三个前导零开头的单词
注意: 我一直使用“单词以三个前导0开头”作为例子。它说明了哈希函数是如何工作的。真正的挑战远比这复杂得多
现在我们知道了如何封页,我们回到我们在页面上完成第十个交易,当我们没有足够的空间来写更多的交易。
当每个人都用完页面来编写更多的交易时,他们就会沉迷于计算页面的封入编号,以便将其隐藏在文件夹中。网络中的每个人都做了计算。第一个在网络中计算出封号的人会通知其他人。
一听到密封号,每个人都立即验证它是否产生了所需的输出。如果是这样,每个人都用这个号码标记他们的页面,并把它放在文件夹里
但是,如果有人,比如7号,所公布的密封数没有达到期望的输出,该怎么办?这种情况并不罕见。可能的原因是:
他可能听错了网络上公布的交易他可能把网络上公布的交易写错了他可能在写交易时试图欺骗或不诚实,以使自己或网络中的其他人受益 不管原因是什么,#7只有一个选择——放弃他的页面,从别人那里复制,这样他也可以把它放在文件夹里。除非他不把他的页面放在文件夹中,否则他就不能继续写其他交易,从而禁止他成为网络的一部分。
无论多数人同意的封号是什么,都成为诚实的封号
那么为什么每个人都把资源花在计算上,而他们知道别人会计算并告诉他们呢?为什么不坐等通知呢?
好问题。这就是动机所在。每个参与区块链的人都有资格获得奖励。第一个计算密封数的人会因为他的努力而得到免费的钱(即消耗CPU功率和电力)。
简单地想象一下,如果#5计算一页的密封数,他会得到一些免费的钱,比如1美元,这些钱是凭空造出来的。换句话说,#5的账户余额以$1递增,而不会减少其他人的账户余额。
比特币就是这样诞生的。它是在区块链(即分布式寄存器)上进行交易的第一种货币。作为回报,为了让网络继续努力,人们获得了比特币。
当足够多的人拥有比特币时,它们的价值就会增长,让其他人也想要比特币;让比特币的价值进一步增长;让更多的人想要比特币;使它们的价值进一步增长;等等
奖励让每个人都在网络中工作
一旦每个人都把这一页放到文件夹里,他们就会拿出一个新的空白页,然后重复整个过程——永远这样做下去。
将单个页面视为一个交易块,而文件夹视为页面(块)链,因此将其转换为区块链
朋友们,这就是区块链的工作原理。
除了有一件小事我没告诉你。然而。
想象一下,文件夹里已经有五页了——都用封号封好了。如果我回到第二页,修改一笔交易,让它对我有利呢?封号会让任何人发现交易中的不一致,对吗?如果我继续为修改后的交易计算一个新的密封号,并用它来标记页面,会怎么样呢?
为了防止有人返回并修改页面(块)和封号的问题,在如何计算封号上有一个小的变化。
还记得我是怎么告诉你的吗?我给了你两个盒子,一个盒子里装着数字20893,另一个空着让你计算。在现实中,要计算一个区块链的密封数,不是两个盒子,而是三个-两个预充,一个待计算。
当所有这三个盒子的内容被添加并输入机器时,从右边出来的答案必须满足要求的条件。
我们已经知道一个框包含交易列表,另一个框将包含密封号。第三个框包含前一页的神奇机器的输出。
使用这个简单的技巧,我们可以确保每个页面都依赖于它的前一个页面。因此,如果某人需要修改历史页面,他还需要修改之后所有页面的内容和封号,以保持链一致。
如果一个个体,我们想象他从十开始试图欺骗和修改内容区块链(包含页面的文件夹的列表交易),他将不得不调整几页,还计算出新的密封编号为所有这些页面。我们知道计算密封数有多难。因此,网络上一个不诚实的人无法打败九个诚实的人。
会发生什么,从页面不诚实的家伙试图作弊,他会创建另一个链的网络,但这链永远无法赶上诚实的链,仅仅因为一个人的努力和速度无法打败九累积的努力和速度。因此,保证网络中最长的链是最诚实的链。
最长的链是最诚实的链
当我告诉你一个不诚实的人打不过九个诚实的人时,你有印象吗?
如果不是一个,而是六个不诚实的人呢?
在这种情况下,协议将完全失败。它被称为“51%攻击”。如果网络中的大多数个体决定变得不诚实并欺骗网络的其余部分,协议将无法达到其目的。
这也是区块链崩溃的唯一脆弱原因。要知道,这是不可能发生的,但我们都必须知道系统的弱点。它建立在大多数人都是诚实的假设上。
朋友们,这就是区块链的全部。如果你发现有人觉得自己被抛在了后面,并且在想:“区块链到底是什么?”,你知道你可以把他们指向哪里。书签的链接。
现在能想到谁应该读这篇文章吗?“分享”按钮全是你的。
原文链接:https://hackernoon.com/wtf-is-the-blockchain-1da89ba19348