You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

124 lines
11 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 03 | 技术特性:用“铁锁连环”直观理解区块链特点
你好,我是自游。
可能很多人都觉得区块链是一个多么新颖的技术,其实不然。它不过是旧瓶装新酒,本身并没有创造新的技术,只是将几种已经成熟的技术进行组合,是**融合性创新**。
而我们初步开始学习区块链的时候,最重要的就是把握其技术特点,并且了解它的技术基础。今天这一讲,我会通过一个现实中的例子带你探索区块链的技术基础,同时帮助你掌握区块链技术最重要的三个特性。
## 怎样理解区块链
经常有人问我什么是区块链一般情况下我的答案是不一样的。如果你是程序员我大概率会说区块链是一种分布式KV数据库。而如果你是小白我可能会用几个词回答你三人成虎人云亦云少数服从多数等等。
我的回答不一定准确,但一定最能符合当时受众的心理预期。而当我面对你们,面对拥有各行各业背景的受众时,为区块链概念下一个定义,我的内心是拒绝的。因为每个人理解不同,过于纠结定义反而会忽略本质,所以我们更应该把目光放在理解区块链技术基础和特性上。
其实,区块链技术发展到现在,尤其在以太坊将智能合约的概念与区块链技术融合之后,区块链已经变成了现实与网络的媒介,可以说**区块链是价值的载体,是一种新型的社会生产关系**。
怎么理解这句话呢?我个人的理解是基于区块链技术,我们可以打通现实世界与网络世界的屏障,将物质虚拟化,将价值实体化。未来的互联网流转的不是信息,而是活生生的价值。
未来可期,不过也要始于足下。我们不妨先回归现实世界,前段时间,网上有一张图引起了广泛传播,被网友戏称为“区块链技术实体化”。拿这个例子来说明区块链的技术特性,再适合不过了。
## 区块链技术实体化
这是辽宁沈阳一小区大门,业主用多把锁串联在一起,形成了一套简单的门禁系统。谁家有车谁就加锁,每把锁都有标识,小区车主只需拿钥匙打开对应锁头,就能打开大门。这样就防止了外来车辆占用小区车位,不得不说,高手在民间。
![](https://static001.geekbang.org/resource/image/1b/86/1bc414293efd753cf0552d5517b50186.png?wh=1080x773 "铁锁连环的具象化")
那这个例子是如何具象化表达区块链技术特性的呢首先我们需要明确区块链有哪些特性一般我们认为有3点分别是
* 去中心化
* 可追溯性
* 不可篡改
结合这个实例,我们来一一理解这几个概念。
## 去中心化
在这个小区门禁系统中,每把锁代表着一家小区业主,他们不需要物业公司统一管理,只需要管理维护自己的锁就能保证系统的正常运行。
每一把锁有大有小,有贵的有便宜的,业主也可能有多辆车,但在这个系统中他们没有地位上的差别。而且,当有新的业主加入或者有业主搬走,只需要增加或去掉相应的锁就好。
你有没有发现,这里面就蕴含了**去中心化**的概念,门禁不再由物业公司这个“第三方机构”统一管理,每把锁都是管理的一部分。
同样的道理,区块链存在的初衷就是去除中心化的第三方机构(可以回看[第1讲](https://time.geekbang.org/column/article/397650)),整个网络的数据及状态是由网络中所有的节点共同维护的,他们没有地位上的差别,有的只是可支配的资源的不同,且任一节点离线也不会影响系统的运作。
你可以自己试着先推演一下,想要实现去中心化,应该选取怎样的网络模型和存储模型呢?
没有中心节点的系统从某种角度来讲,可以说每一个节点都是中心,每一个节点都能对外提供服务,同样也能从其他节点请求服务,而这也正是点对点网络模型的特性,可以说,节点互为彼此的数据生产者及消费者。
![](https://static001.geekbang.org/resource/image/13/d1/133af3e917f926b269916d98e65d26d1.jpg?wh=2383x1389 "绝对去中心化示意图")
另一方面,因为节点角色对等,因此每一个节点存储的数据应该是一致的,都独立地维持一条完整的区块链链式结构,即便一些节点数据丢失,但只要还有一个节点完好,历史数据就不会丢失。这有效地避免了单点故障带来的系统崩溃,相较于传统的数据灾备模式,其可靠性可以说是万无一失。
当然,去中心化只是一个理想化的状态。现阶段来说区块链去中心化本质上是**相对去中心化**,我们也可以叫做多中心化。我们在理解概念的时候,不仅需要理性思维,更要学会使用感性思维去接受中间过程的渐变。
![](https://static001.geekbang.org/resource/image/78/81/7849b2283c43662f1c5a5858cf65bd81.jpg?wh=2383x1334 "相对去中心化示意图")
## 可追溯性
在门禁系统中,每把锁记录了业主的相关信息,是跟业主一一绑定的,这就可以在异常情况下对破坏规则的业主进行追责,比如忘记锁门而导致外来车辆进入小区,这体现了该系统的可追溯性。
在实际区块链运转中,同样是完成信息追溯这件事儿,道理虽然相通,但是更为复杂,我来给你说一说。
对单个节点来说,区块链可以被认为是一个**时序数据库**。每一次对系统的操作,实质是在每个节点数据库中存储了相应的数据及日志。且每一份数据都不是离散的存储,而是按时间顺序前后关联在一起,新的数据一定是从某一组之前已存在的数据派生而来。
依照这种关联,如果想回溯数据的状态变更历史是很容易的,只需要依次往前查找,一定会找到数据的初始状态。
而这一切都依赖于区块链存储技术,存储主要关注数据结构以及数据关系,包括交易以及区块的数据结构,交易与区块的关联关系,区块状态的存储模式等等。
## 不可篡改
另一个技术特点是不可篡改,这是一个比较容易被初学者搞混的概念,**所谓篡改,就是私自的不被认可的修改,而不是不能修改**。
我们回顾例子,可以发现业主手中的钥匙与锁是一一对应的,没有钥匙或者用错误的钥匙,车辆都是进不了小区的。
社会车辆要想进入小区,可能会采取盗用某一业主身份,多配一把钥匙或者添加一把锁,这就是篡改。而只要被业主委员会发现,就会及时纠正错误,将社会车辆清理出去,也就实现了不可篡改。
在区块链中,实现不可篡改需要两种技术来保障。**前面例子里“锁”的功能由密码学技术实现,而“业主委员会”的角色则是由共识算法来扮演。**
前面我们讲过,单个区块链节点中的数据是按时间的先后顺序串联存储的,而串联的关键就利用了密码学中的哈希算法。
哈希算法可以把一段数据变换成固定长度的数据指纹,而且只要数据有细微变化,得到的指纹也是大不一样的。通过这个方法,我们可以将前一时间段的数据指纹与后一时间段数据整合在一起。周而复始,后一时间段内的数据永远都会包含前一时间段的数据指纹,这样就形成了一条由数据指纹串联的信息链条。
![](https://static001.geekbang.org/resource/image/3c/y8/3cedff21457efa8c7899befd7816cyy8.jpg?wh=2248x577 "数据指纹串联示意图")
如果有一个作恶者想要修改中间某一时间段的数据,那么依照哈希算法原理,其对应的数据指纹则会改变。因此他不得不依次修改后续的每一个时间段的数据,否则数据链条就会在他修改的这一刻断掉,不再具备可追溯性。
![](https://static001.geekbang.org/resource/image/5f/26/5fbfbe964fa4dd0ff1fb9c75aaff4f26.jpg?wh=2248x577 "篡改数据指纹示意图")
我们可以把困难进一步放大,想一想如果作恶者真的把本地节点的所有数据都篡改一遍,又要怎么应对呢?
这时候就要让共识算法出马了,它可以保证整个系统的数据不被篡改。所谓共识,就是在一个分布式系统中保持数据的一致性,而如果出现数据不一致,大多数共识算法都遵循少数服从多数的原则。
区块链网络中的每一个节点的数据都是一致的,作恶者只是篡改了自己维护的单个节点,从整个网络的维度来看,依旧是以大多数节点的数据为正确数据。
最后,我想提醒你,看问题不能只看一面,不可篡改其实是一个辩证的特性。少数服从多数的规则意味着如果作恶者能够控制大多数的节点资源,那么篡改区块链是可能的。
在一个健壮且足够分散的网络中,篡改所要付出的成本是巨大的,几乎不可能成功。而一旦成功,剩下的少数派才是妄图破坏区块链共识的作恶者,以太坊的硬分叉(不熟悉可以回看[第1讲](https://time.geekbang.org/column/article/397650))就是一个典型。
## 总结
在这一讲中,我们用一个具象化的例子直观理解了区块链的技术特性,同时我们也在其中穿插着带入了区块链技术基础。
**如果从纯技术的角度讲,区块链是新一代信息技术的重要推动力,它利用了存储、密码学、点对点网络及共识算法等基础技术的融合,提供去中心化、可追溯以及不可篡改等特性,可以用来解决互联网中的信任及安全问题,从而推动互联网从信息传递向价值传递的变革。**
你可能觉得刚才的解读有点书面化,为了帮助你理解,我再给你分享一个通俗版本的:可以说存储是砖头,密码学是钢筋,点对点网络是混凝土,而共识算法是设计图纸,以他们为基础,揉和在一起,就构建了区块链这座精妙的上层建筑。
我想和你强调的是,区块链技术并不是教条主义地照本宣科。比特币是区块链,以太坊也是区块链,技术本身也并没有规定实现的唯一路径。
我更愿意将区块链技术理解为区块链协议,只要能满足其技术特性,人人都可以设计并实现属于自己的区块链。在后面的几讲中,我会着重为你剖析区块链技术基础,希望你知其然,更要知其所以然。
![](https://static001.geekbang.org/resource/image/c1/ec/c151d3217faf3330e75d4a0c554467ec.jpg?wh=1500x1798)
## 讨论
在此之前,你是如何理解区块链的呢,能否用一两句话简短地说明?这一讲以后,你对区块链概念的理解有何变化?
欢迎你在留言区跟我互动,主动思考、积极交流会让你更有收获。
## 扩展阅读
* 如果你要进一步了解关于区块链技术的定义,我推荐你阅读[Blockchain Technology Defined](https://builtin.com/blockchain)及[What is blockchain technology?](https://www.ibm.com/topics/what-is-blockchain)这两篇文章,里面有更详细的介绍。
好,我是自游,我们下一讲见!