区块链到底是什么?

原创
1899 天前
602

 如果我告诉你: 

区块链不存在。

或者区块链有两种完全不同的含义。

或者,区块链是三个完全不同的东西的别称。

觉得不对?听我把话说完。区块链是一个效率非常低的数据库,它作为比特币中拼图难题(jigsaw puzzle)正常运转必须的技术之一而被人们熟知。比特币技术是基于“区块链”技术实现的,而不是区块链技术基于比特币技术。“区块链技术”与“一个区块链”(A Blockchain)或“这个区块链”(The Blockchain)的概念是截然不同的。是不是感到很困惑?从技术角度来看,这些不同的术语有着细微的差别。在本文中,你将了解到每个术语的真正含义并深入理解区块链的工作原理。

让我们从“区块链技术”(Blockchain Technology)开始

区块链技术其实就是一个分散的不可信网络,它利用本地资产,分散账本和一些基于博弈论模型的算法来使网络中的每一方达成共识。

什么是“一个区块链”(A Blockchain)?

假想你现在有一个Excel电子表格,表格中的每一行都有包含着几列的数据,其中一列包含着“交易信息”。

现在,如果每一行中的特定列中包含着该行的所有数据加上上一行传递的哈希(Hash)值对应的唯一指纹(一个新的哈希值),此时这些行顺序串联起来就构成了一个“哈希链”。

一个哈希链的实例。所有的数据都具有唯一的哈希值,就像指纹一样,修改其中的任意一个数据都将打破这个链条

用户可以利用软件来检测这些哈希值。软件可以通过哈希链的计算方式来判断每一个哈希值的有效性。一旦出现了无效的哈希值,用户就可以知道有人在后来(哈希链创建后)伪造了某一行的数据。

哈希链可能有很大用处,但是并没有什么令人激动的特性。我们为什么要讲哈希链,哈希链与“一个区块链”又有什么联系呢?

再进一步,把上面电子表格中的行扩展为多个电子表格,每个电子表格中充满了交易信息。我们将通过这种方式组合起来的交易信息称为“交易块”。

如果你在一个电子表格中创建了所有数据的哈希值,然后在另一个电子表格中创建该表中所有数据的哈希值,通过上面的方式我们可以通过两表的哈希值组合计算得到新的哈希值。像下图一样串联起来,你就得到了一个电子表格组成的链。

请记住:由于这些表格包含着一个交易块,所以它们构成了一个简单有效的区块链。

那么“区块链”意味着什么?

最初,“区块链”是一项大型现代企业看来都很具有颠覆性的技术,即使不用“加密货币”或者“分散式账本”(Distributed ledger)这样听起来具有颠覆性的名称也是如此。

现在,你可能经常听到有人通过说“我们在做区块链”来吸引投资者的注意。“区块链”的概念也被广泛传播,此时的概念基本上是指“围绕分散式账本概念构建的开放式的计算机网络”。

我们甚至看到了不使用“一个区块链”来构建的“区块链”,取而代之的是其他的存储技术,比如说DAG(有向无环图)。

很多在职者提到“区块链”时,他们指的其实是“一个只与我们信任的人分享的共享式数据库(shared database)”。这并不是一个新鲜的事物,分布式数据库(distributed database)在比特币出现时已经存在了至少十年。

“区块链”的魅力在哪里?

区块链真正的魅力不是在于数据存储的技术,而是如何使网络中所有的不可信用户达成共识。

举例来说,通过“区块链”,可以让每个人都承认Alice支付且仅只支付给了Bob。通过她的交易信息可以证明她没有支付双倍的金额。(例:Alice在完全相同的精确时间同时支付了$5给Bob和John)。

双重支付问题是比特币所取得的主要突破。

交易信息将被存储在于网络绑定的“一个区块链”当中。网络中的任何用户都可以下载该区块链的副本(如果他们选择这样做的话),然后运行软件检验网络中加入的交易信息。

软件将拒绝任何形式的双重支付尝试。如果交易有效,软件将更新区块链中比特币(或其他资产)的所有权。

当用户使用“区块链”进行交易时,他们的软件实际上做了以下工作:

软件(用户的钱包)创建一个脚本。这个脚本是用所有计算机都可以处理、检验的计算机语言编写的。这个脚本通过私钥进行了签名,网络的用户可以通过他们的私钥来证明他们对某一区块链的所有权。

一旦通过数字签名证明所有权之后,网络就可以继续处理脚本内容。以上面提到的场景作为最简单的脚本实例——“Alice支付给Bob五美元”,此时网络中的计算机将检验Alice交易条目的真实性,如果交易有效,整个网络将同意更新信息,Alice的账户将减少5美元,Bob的账户将增加五美元。

一旦使用数字签名证明了所有权,网络就可以继续处理脚本。最简单的脚本将简单地说“给Alice 5美元”。然后网络上的计算机将验证Alice在区块链中有一个条目; 如果有效,整个网络将同意更新Alice的账户,减少5美元,而Bob的账户增加5美元。

这里还有一个有趣的现象:一个常见的误解是“比特币不提供合约”。实际上提供了!一个脚本就是一份合约。当你听到“智能合约”一词时应当意识到这是交易脚本的营销术语。

“区块链”的关键问题是双重支付问题——我上面解释的过程并不能解决这个问题。

如果世界各地的两台电脑同时收到来自Alice的不同脚本怎么办?一个脚本说:“给Bob五美元”,另一个脚本说:“给苏珊五美元”——网络如何达成共识?

你瞧,“区块链”的魅力不在于“区块链”,而在于工作量证明。

工作量证明是区块链网络用来确保网络分散性的计算机算法,它还可以防止网络中的计算机自己构建历史信息。

下面给出理解工作量证明的一个简单方法:

想象在网络中运行着一个彩票系统,每隔几分钟网络会随机选择一台计算机为获胜方。此时网络会说:“这台电脑是赢家!”

然后网络对获奖的电脑说:“把你最新的有效交易块和中奖彩票交给所有其他的电脑。如果你能证明你有中奖彩票,所有其它的计算机将检查你提供的交易块是否只包含有效的交易信息。如果确实如此的话我们会更新我们的区块链来获得你新创建的区块,相应地你会获得你的奖励。”

这是简化的加密货币挖掘(cryptocurrency mining)。通过仅允许一个用户提供一个交易块,我们可以确保Alice的双重支出尝试中只有单个记录进入交易块。

此时如果不同的计算机正在构建不同的交易块即Alice目前有双重支付的交易在网络中传递,Alice最终只能花一笔钱。这是因为会根据提供的之前最新的区块来完成他们的副本的更新,之后的更新会忽略任何与最新副本不匹配的区块。

现在每个人都拥有最新的区块链副本,之后创建的任何新区块都必须通过哈希链接在当前区块链之上。

什么是“区块链”(The Blockchain)?

通常来说,这个术语通常用来代表第一个区块链——比特币区块链。不过,在现在的营销环境下,它的概念已经很模糊了。