首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

区块链是怎么工作的?How Does Blockchain Work?

区块链(blockchain),顾名思义,就是由一个个区块(block)相连形成的链条。任何一个区块链都有一个创世区块(Genesis Block)也就是这个区块链的第一个区块。为了实现区块链的不可篡改性(immutability),每一个区块都必须与前一个区块紧紧相连,可谓牵一发而动全身。区块链的运行其实也是围绕这个特性展开的。

1

区块的结构

区块链当中的每一个区块都由两部分组成:区块头(header)和区块体(body)。区块头用于记录本区块的特征值,就像这个区块的身份证,包括前一区块区块头的哈希值(hash of the previous block)、默克根(Merkle root)和时间戳(timestamp)等。区块体则包含本区块携带的数据(data)。

是不是有点看不懂了?没关系,我们一起来把它们逐个击破!

2

区块数据

区块体中包含本区块的数据(data),不同的区块链应用拥有不同的数据。对于比特币区块链,这里所说的数据就是比特币交易信息;医疗领域使用的区块链可能被用来记录病人病例;用于钻石追踪的区块链则会记录每一颗钻石的颜色、克拉和透明度等等。

3

哈希函数

想要搞懂区块头中种种特征值,必须先了解什么是哈希。哈希其实可以对应两个概念,分别是哈希函数(hash function)和哈希值(hash value)。简单来说,哈希函数就是把一个不限长度的输入(input),通过算法,变为一个固定长度的输出(output)——哈希值。

什么,没听懂?那就来看个图!

(计算结果来自 SHA-256 hash calculator)

可以看到,两张图反映的都是一个输入(data)对应一个固定长度的哈希值(hash)。细心的同学可能已经发现了,在两张图中,虽然输入只改变了一个字(由“海棠社”改为“海鲜社”),但输出的哈希值却有天壤之别。再举个例子,你下了一部电影,把它作为输入算出了哈希值。你把硬盘借给了老王,老王看完后还了回来,但他是个不靠谱的人,你怀疑自己的电影可能被编辑了!没事,把电影再过一遍哈希函数,果然,哈希值对不上号了。打开文件一看,整整两个小时的《葫芦娃》。

可见,输入不同的数据,一定会得到不同的哈希值。

4

区块头

区块的另一部分便是区块头,如前所述,这里包含本区块的诸多特征值,包括前一区块区块头的哈希值、时间戳和默克根。

首先是前一区块区块头的哈希值(hash of the previous block),这是怎么算出来的呢?很简单,就是把前一个区块区块头的所有特征值信息过一遍哈希函数。由于每一个区块都包含前一个区块区块头的哈希值,所有的区块便首尾相连,不可分割。一个区块的变化,必然会导致之后所有区块的改变。

区块头中还包含时间戳,就是该区块被添加到链上的时间。

5

默克根

接下来是区块头中相对复杂的默克根(Merkle root),请准备好瓜子和辣条,我们细细道来。

首先,我们可以把默克根理解为本区块区块体中所有数据的浓缩,像是一座桥梁,连接区块头和区块体。以比特币区块链为例,请继续看图:

是不是很像一棵倒着的树?这就是传说中的默克树(Merkle tree),有时也被称为哈希树,而最顶端的哈希值就是默克根。作为支撑这颗参天大树的基础,默克根的重要性不言而喻。这个简单的例子只涉及四笔交易,但在真正的比特币区块链中,每个区块中都可能包含数百个交易信息,因此大树的“叶子”可是数也数不清的。

我们从下往上看,首先,每笔交易本身会经过一次哈希函数得到它们对应的哈希值(HASH(1) - HASH(4));随后,相邻的两个哈希值在合并后又一次经过哈希函数,得到两个新的哈希值(HASH(1,2)、HASH(3,4));最后,这两个子哈希值又被哈希函数转化为最终的哈希值(HASH(1,2,3,4)),也就是莫克根。通过这样的运算,最终必然会形成一棵倒着的树,而到了树根的位置,不管区块中存在多少笔交易,都将只剩下一个默克根。

当某个交易被篡改时,默克根将是找出那个间谍的必备利器,帮助我们层层筛查。首先,由于有数据被篡改,对比默克根肯定会发现不一致。接下来分别对比 HASH(1,2) 和 HASH(3,4),发现 HASH(1,2) 不一致,HASH(3,4) 一致。那么此时 HASH(3,4) 以下的所有数据就都脱离了嫌疑,我们要抓的区块藏在左边!继续对 HASH(1) 和 HASH(2) 进行分别对比,发现 HASH(1) 不一致,HASH(2) 一致,至此,确定交易1被篡改。

可以看到,运用默克树,可以层层溯源,找出链上的破坏因子。通过排除法,可以大大减少运算量!除了追根溯源,默克树的另一大用处就是验证数据:如果已知某个交易,要确定它是否在某个区块中,只要将它代入默克树,看看最终能不能得到已知的默克根就可以啦。

以上就是区块链工作的原理。区块链就像一串羊肉串,每个区块都是签上的一块肉。每个区块都包含前一区块的哈希值,就像签子一般把肉块一个个串起来。区块紧紧相连,牵一发而动全身,篡改信息变得比登天还难。同时,数据一旦上链就再也不会消失,随时可追溯。区块链不仅在金融领域潜力巨大,还将对钻石、药品、艺术品的溯源防伪发挥重要作用。

头图及正文图片来源:

Davidstankiewicz [CC BY-SA 4.0 (https://creativecommons.org/licenses/by-sa/4.0)], from Wikimedia Commons

pan xiaozhen on Unsplash

kai pilger on Unsplash

andre francois on Unsplash

北外高翻海棠社

用语言学习知识,探索更广阔的世界

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180520G1DER100?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券