原文作者:Mohit Mamoria
原文地址:https://hackernoon.com/wtf-is-the-blockchain-1da89ba19348
译者微博:@从流域到海域
译者博客:blog.csdn.net/solo95
除非你活在石器时代,否则我相信你已经听说比特币和区块链的。毕竟,它们是当今流行趋势和媒体最喜欢的话题 - 今年的流行语。即使是那些从未挖掘过加密货币或者去了解它如何运作的人,也在谈论它。我有更多非技术方面的朋友,而不是技术方面的朋友。他们几个星期以来一直在恳求我向他们解释这个新的流行语。我猜有成千上万的人深有同感。当这种情况发生时,正好有一段时间我可以写出来一些东西,让每个人都可以为其他迷失的灵魂作出指引 - 这正是这篇文章的目的 - 用普通的英文写成,任何普通的互联网用户都能理解。
“对于每一个复杂的问题,都有一个明确,简单和错误的答案。” - HL Mencken
与互联网上的其他帖子不同,(这篇文章中)我们不会首先定义区块链,而是了解它解决了什么样的问题。
想象一下,乔是你最好的朋友。他正在海外旅行,在他休假的第五天,他打电话给你说:“老哥,我需要一些钱。我已经把自己的花光了。“
你回复,“马上打给你”,然后挂断电话。
然后,你打电话给你的银行的客户经理并告诉他:“请将我账户中的1000美元转账到乔的账户。”
您的客户经理回复说:“是的,先生。”
他打开存款记录,检查您的账户余额,看看您是否有足够的余额向Joe转账1000美元。因为你是个有钱人,你有很多钱; 因此,他在记录中输入如下内容:
交易记录
注意:我们不是在谈论电脑方面的问题,这样做是为了尽可能简单的进行说明。
你打电话给乔,告诉他,“我已经转账了。下一次,你可以去你的银行,提走我刚刚转账的1000美元。
刚刚发生了什么?你和乔都信任银行管理你的钱。实物账单并没有真正的转移资金。所需要的只是(修改)记录中的一个条目。或者更确切地说,是记录中的一个条目,(这个条目)既不是你也不是Joe控制或拥有的。
这是目前(银行)系统存在的问题。
为了建立我们之间的信任,我们依靠了独立的第三方。
多年来,我们依靠这些中间人来构建相互信任。你可能会问,“依赖他们的是什么问题?”
问题在于它们数量上是单一。如果要在社会中注入一点点混乱,只需要一个人/组织有意或无意就可以进行腐败活动。
多年来,我们一直把所有的鸡蛋放在一个篮子里,而且这个篮子又放在另一个人的篮子里。
有没有一种系统可以让我们在不需要银行的情况下转账?
为了回答这个问题,我们需要进一步深入研究并问自己一个更好的问题(毕竟,只有更好的问题才能带来更好的答案)。
想一想,转移金钱意味着什么?只是记录中的一个条目。那么更好的问题是 -
有没有办法维护由我们自己而不是别人为我们做的记录?
现在,这是一个值得探讨的问题。答案就是你可能已经猜到的。区块链正是这个深刻问题的答案。
区块链是一种在我们自己之间保持这种记录的方法,而不是依赖别人来为我们做。
你还能跟上我的节奏吗?好。因为现在,当几个问题开始出现时,我们将学习这个分布式记录系统是如何工作的。
这种方法的要求是必须要有足够的人不想依靠第三方。只有这组人可以靠自己来维护交易记录。
“为了以防万一先获得一些比特币是有意义的。如果有足够多的人以相同的方式思考,那这就成为一种自我实现的预言。“ - 中本聪于2009年
有多少够了?至少三个。就我们的例子而言,我们假设有十个人想要放弃银行或任何第三方。经双方同意,他们就能够始终拥有对方账户的详细信息 - 在不知道对方的身份的情况下。
首先,每个人都有一个空的文件夹。随着我们的(系统)不断向前发展,所有这十个人都将不断添加页面到他们手上的空文件夹。这个页面集合将会形成追踪交易的记录。
接下来,网络中的每个人手中都有一张空白页和一支笔。每个人都可以编写系统内发生的任何交易。
现在,如果#2想要转账10美元给#9。
为了进行交易,#2大声喊叫,并告诉大家,“我想将10美元转给#9。所以,每个人,请在你的纸上记下它。“
每个人都会检查#2是否有足够的余额将10美元转给#9。如果她有足够的余额,每个人都会在其空白页面上记录这笔交易。
页面上的第一笔交易
交易随之被认定为成功完成。
随着时间的推移,网络中的更多人需要将钱转移给其他人。每当他们想进行交易时,他们都会向其他人宣布。只要一个人听到了该声明,他就会将其写在他/她的页面上。
这个实例将继续进行,直到所有人都用完当前页面上的空间。假设一个页面只有有足够的空间来记录十笔交易,只要第十笔交易完成,每个人都会用尽空间。
当页面被填满时
现在是时候将页面放在文件夹中,并拿出一个新的页面,并重复上述步骤2中的过程。
在将页面放到的文件夹之前,我们需要用独有的密码来_加密它,并且该密码已经被网络中的所有人公认。通过加密它,我们将确保一旦将其副本放置在每个人的文件夹中后,任何人都无法做出任何更改 - 今天不行,明天也不行,甚至一年之后也不行。一旦进入文件夹,它将始终保持在文件夹中 - 保持密封状态。进一步说,如果每个人都相信加密,那表示每个人都信任该页面的内容。这个页面的加密是这种方法成功的关键。
Jargon Box'保护页面的方法称作在页面上'挖掘‘’(即通常说的挖矿,译者注),但为了简单起见,我们将继续称其为'密封'。
在之前,第三方/中间人给了我们信任,我们相信他们在记录中写的任何内容都不会被改变。在像我们这样的分布式并且去中心的系统中,这层加密将作为第三方的替代为我们提供信任。
在我们了解我们如何加密页面之前,我们一般都会知道密封条是如何工作的。作为一个先决条件,需要先学习一些我喜欢称之为......的东西
想象一下被厚厚的墙壁包围着的机器。如果你从左边送进去一个装有东西的盒子,它会吐出一个装有其他东西的盒子。
Jargon Box这台机器被称为“散列函数”,但我们没有心情讲得过于技术化。所以,就今天来说,它们都是'魔法机器'。
魔法机器(又名哈希函数)
假设你从左边送进去数字4,我们会发现它在右边吐出下面的词:'dcbea'。
它是如何将数字4转换成这个词的?没人知道。而且,这是一个不可逆转的过程。仅仅给出'dcbea'这个词,就不可能判断出机器在左边被送进去了什么东西。但是每次你把数字4送到机器上时,它总是会吐出同样的词'dcbea'
散列(4)== dcbea
仅仅给出'dcbea'这个词,就不可能判断出机器在左边被送进去了什么东西。但是每次你把数字4送到机器上时,它总是会吐出同样的词'dcbea'
让我们尝试以不同的号码发送。26怎么样?
哈希(26)== 94c8e
我们这次得到'94c8e'。有趣!所以,词也可以包含数字。
如果我现在问你下面的问题怎么办:
“你能告诉我应该从机器左侧送进去什么东西,就可以在右侧得到一个以三个前导零开始的词吗?例如,000ab或00098或000fa或其他内容。“
对输入进行预测
花点时间想一想这个问题。
我已经告诉过你,机器有一个属性,我们无法计算出给定右侧所期望的输出后我们必须从左边发送的内容。有了这样的一个机器,你会怎么回答我之前提出的问题?
我可以想到一种方法。为什么不一个一个地尝试宇宙中的每一个数字,直到我们可以得到一个以三个前导零开始的词?
穷举法来计算输入
经过数千次尝试后,我们仍旧乐观地认为,我们最终会得到一个能够产生正确结果的数字。
给定输出去计算输入是非常困难的。但同时,去验证预测的输入是否能产生所需的输出总是非常容易。请记住,机器每次都会针对同一个数字吐出相同的词。
如果我给你一个数字,比如说72533,然后问你这个问题:“这个数字被送入机器后,能否产生一个以三个前导零开始的词?”你觉得回答这个问题有多难?
你所需要做的就是把数字扔到机器上,看看你在右边看到了什么。仅此而已。
这种机器最重要的特性是 - “给定一个输出去计算输入非常困难,但考虑到输入和输出,很容易验证输入是否能产生对应的输出。”
在阅读其他文章时请无比记住Magic Machines(或者Hash Functions)的这个属性:
给定一个输出,计算其输入是非常困难的,但是给定一个输入和输出,很容易验证输入是否导致相应的输出。
我们将使用这台魔术机器为我们的页面生成一个封条。像往常一样,我们将从一个想象出来的情境开始。
想象一下,我给你两个盒子。第一个盒子包含数字20893.然后,我问你:“你能算出一个数字,当它加到第一个盒子中的数字上并送入机器时,会给我们一个以三个前导零开始的词吗?”
这与我们之前看到的情况类似,我们已经了解到计算出这个数字的唯一方法是尝试整个宇宙中可用的每个数字。
经过几千次尝试后,我们会偶然发现一个数字,比如说21191,当它加到20893(即21191 + 20893 = 42084)并加到机器上时,会产生一个满足我们要求的词。
在这种情况下,这个数字21191就成为20893号的封条。假设有一个页面上写有20893号码。为了加密该页面(即没有人可以改变其内容),我们将在其上面放置标记为“21191”的封条。一旦密封编号(即21191)贴在在页面上,页面就将被加密。
密封编号
Jargon Box加密数字的那一刻被称为“Proof Of Work”,意思是这个数字证明为了计算它已经做出了努力。对于我们的目标,我们称之为'加密数字的那一刻'是很好的选择。
如果有人想验证页面是否被更改,他所要做的就是 - 将页面内容与密封编号一起添加到魔法机器中。如果机器发出三个前导零的字,则证明内容没有改变过。如果出来的词不符合我们的要求,我们可以丢弃该页面,因为它的内容已被解密,并且已经没用了。
(这是密码学的加密概念,数字签名使用类似的机制来实现,译者注)
我们将使用类似的加密机制来加密我们所有的页面,并最终将它们安排在我们各自的文件夹中。
为了加密包含了网络上交易的页面,我们需要计算出一个数字,当它附加到交易列表并提供给机器时,我们会在右边得到一个以三个前导零开头的词。
请注意:我一直只使用“以三个前导零开始的词”这个短语作为例子。它演示了哈希函数的工作原理。真正的挑战比这要更加复杂。
一旦在机器上花费时间和电力后计算出该数字,该页就被该数字加密。如果有,任何一个人都可以尝试改变页面的内容,但加密数字的那一刻将允许任何人验证页面的完整性。
现在我们知道如何加密页面,我们退回将回到写完页面上第十个交易的时间,并且我们以用尽了所有空间,不能再填写交易。
只要每个人都用完了用来编写进一步的交易页面,他们就会沉迷于计算页面的加密数字,以便将其隐藏在文件夹中。网络中的每个人都会进行计算。网络中第一个计算出加密数字的人将该加密数字公布给其他人。
听到加密数字的那一刻,每个人都会验证它是否产生所需的输出。如果是这样,每个人都用这个号码标记他们的页面,并将其放在他们的文件夹中。
但是如果对某人说,#7公布的加密数字并不会产生需要的输出?这种情况并不罕见。可能的原因可能是:
不管什么原因,#7只有一个选择 - 丢弃他的页面并从别人那里复制一份,以便他也可以把该页面放在文件夹中。除非他不把他的页面放在文件夹中,否则他不能继续写更多的交易,因此他将被禁止成为网络中的一部分。
不管大多数人同意的加密数字是什么,它都变成了真实的加密数字。
那么为什么每个人在知道其他人会计算并向他们宣布这个加密数字时花费资源进行计算呢?为什么不坐下来等待(其他人的)公告?
很好的问题。这就是激励机制出现的地方。作为区块链一部分的每个人都有资格获得奖励。第一个计算出加密数字的人会因为他的努力(比如消耗的CPU运算力和电力)获得免费的钱。
简单地想象一下,如果#5计算出了一个页面的加密数字,他会得到一些免费的钱,比如说1美元,这些钱是凭空而来的。换句话该加密数字,#5的账户余额增加1美元,但不会减少其他人的账户余额。
这就是比特币的存在的方式。它是第一个在区块链(即分布式记录)上进行交易的货币。作为回报,为了维持网络上的计算工作能够持续进行,人们被授予比特币。
当有足够多的人拥有比特币时,比特币的价值就会增长,从而使得其他人也想要获得比特币; 这又使比特币进一步增长; 再使得更多人想要比特币; 这又使其又进一步增值; 如此往复。
奖励使得每个人都持续在网络中工作。
一旦所有人都将页面收录到他们的文件夹中,就会产生出一个新的空白页面,并重复整个过程 - 这会永远继续下去。
Jargon Box将单个页面视为交易区块块,并将文件夹视为页面链(Blocks),这样它就变成了区块链。
而我的朋友们,这就是区块链的工作原理。