基于量子链的 Dapp 开发
什么是区块链?
什么是区块链?

第一节,我们先不讲比特币,而是先讲区块链。很多新人以前从来没听说过区块链的概念,觉得是比特币的发明人发明了区块链,其实这是不对的。区块链诞生,甚至是大规模应用都要比比特币早,不错,比特币是区块链技术的一个很有代表性的技术,也可以说,是比特币让区块链这个词进入大众的视野的,但是在比特币之前,开发者已经大规模使用的 Git 版本控制工具,底层就是区块链技术。

区块链的最基本构成

区块链,英文叫 Block Chain ,一个区块就是一个不是很大的数据块,一般就几兆。或者简化点,一个区块本身就是硬盘上的一个文件,里面随便记录点啥东西。慢点?“随便”,Peter 你是认真的么?是的,随后的讲解中,你会发现一个区块里面真的能存放各种东西的,这个咱们暂且不展开了。那你可能会说,哦,区块链是安全相关的概念,那么这个区块是不是那种本身经过加密,一般人不能读,也不能修改呢?也不是,区块本身就是要让任何人都可以读到的,至于修改,对于一个区块来说,也是随便可以改的。

那这个安全性咋保证呢?别急,区块本身是随便能改动的,但是别忘了还有链的概念呢?先说众多的区块是怎么连成一条链的吧。第一个区块不算,从第二个区块开始,每个区块中都保存着上一个区块的文件名,你想想看,这样,我拿到第1000个区块,是不是就很容易找到第999个区块了,有了 999 找 998 也就不难,如此反复,给我一个最新的区块,我都能拎起来一串区块,这一串区块,就是一个区块链了。如果你是程序员,了解链表的概念,道理也类似。

好,区块是文件,文件形成了链,这就是区块链的基本结构了。那咱们还是没明白,安全性是怎么达成的呢。如果区块中记录了我的比特币,同时又可以改,那我先给自己加一万个比特币再说。其实,魔鬼隐藏于细节之中,安全性的一个保证就体现在之前我们聊过的文件名上了。第三个区块中,保存了第二个区块的文件名,这个文件名可不是随便起的,每一个区块的文件名都是自己内容的哈希值。哈希,有点学术化了哈,可以把它简单的理解为一种算法公开的运算,运算的输入是一个数据,比如一个区块的内容,而输出的结果就是一个哈希值。哈希算法有个特点,就是如果输入的数据不变,那算出来的哈希值就不会变,输入如果变了,哪怕就变一点点,那哈希值也会变得面目全非。哈希算法如果去读相关资料会发现有好几个作用,但是其中最常见的一个作用就是完整性校验。啥意思?比如,我拿到了第二个区块的哈希值,同时拿到第二个区块数据,把数据传递给哈希函数做输入,输出跟我手中已有的哈希值做对比,如果哈希值变了,那么就可以断言第二个区块的内容已经有人修改过了。反之,如果哈希值不变,就证明区块数据是依旧完整的,这样咱们理解了啥是“完整性校验”。

所以,一条区块链上的如果中间某个块被人恶意修改过,那么他的文件名也就变了,它之后的区块也就找不到他了,也就意味着这条链也就断开了,所以这个特性就构成了保证数据安全的第一层屏障。

分布式网络

但是,断开的链子,我就不能再接上了吗?如果所有数据都只是受我自己控制,那我在链断开的位置,重新把之后的所有区块都修改一下,那么这条链也还是能连起来的。所以,仅仅有第一层屏障,不能达成真正的安全。

区块链的这个概念中,还包含另外一层,那就是分布式。分布式是个术语了,简单来说,分布式就是中心式的反义词。为了便于记住,我们把区块链做一个形象一点的比喻,一个区块链就是一个账本,一个区块就是账本上的一页。任何人,只要有个足够大的硬盘,就可以下载一份账本到自己的电脑上。全世界人的账本就构成了一个区块链网络。先说什么是中心化的网络,网络上只有一个老大,只有一个中心,数据如果存疑,那么就以老大的数据为准,这个挺好理解的。而区块链的网络是去中心化的,也就是所谓的分布式网络。特点就是没有老大,所有账本都是平等的,我如果对自己的账本数据存疑,那么就跟周围的几个朋友的账本对比一下,这样就可以确认数据是否可靠了。

中心化网络有个明显的弱点,就是一旦老大崩溃,整个网络就完蛋了。所以从这一点上分布式网络就有明显优势,如果我的数据损坏了,只需要找我信任的几个朋友,把他们的数据拿来,做一下交叉对比,然后就可以获得可信数据了。跟大家的数据都不一致的个别的区块链,也会自动被网络忽略。

所以,分布式网络,是保证数据安全可信的第二层屏障。

分布式网络中达成共识

但是分布式网络,似乎也不是万能的,它能工作的前提是我要有一个可信任的网络,我至少得相信我那几个朋友不会串通起来骗我。所以真正的在全球范围内,达成陌生人之间的完全可信的分布式网络。这一点,坦率的说,传统的区块链一直没有做到,所以可以说 Git 版本控制系统所用的区块链技术,在今天的标准来看是不完整的。

而比特币的出现之所以革命性,就是因为比特币实现了分布式网络中的达成共识机制,从此之后,全球人有了一个共同可信的账本,于是陌生人之间也可以在没有权威机构参与的情况下进行交易了。

比特币达成这种共识的方式就是 POW ,也就是”工作量证明“。工作量证明虽然不是比特币的原创,但是是在比特币系统下才发挥出了强大的威力。我们这套课程中主要还是讲 Dapp 开发,所以 POW 咱们只做简单介绍。工作量证明就是一种,通过运算能力竞争达成的一种投票机制。为啥大家要费很多电能拼命挖矿呢?其实挖矿的本质就是进行这个运算能力的竞争。最终达成的效果是啥呢?简单来说,就是整个比特币网络上有一半以上的人,联合起来撒谎,才有可能恶意修改数据。这个想想的确也是不太可能的事情了。事实也验证了这一点,比特币网络从 08 年到现在,已经安全运行十年了。

需要提一下的是 POW 不是唯一的达成共识的方式,另外一种共识方式叫 POS 也就是”股权证明“。总之,分布式网络中共识的达成,形成了区块链安全的第三层屏障,也是最终极的屏障。

总结

好,这节关于什么是区块链,我们就聊到这里。来总结一下咱们都有哪些收获。首先介绍了区块链的基本结构,知道了每个区块中都保存了前一个区块的文件名,所以各个区块能连成一条链。而每个文件名又都是对应文件的哈希值,这就保证了任何对区块的修改都会造成链的断裂,这一点形成了对安全性的第一层保证。接下来咱们聊的分布式网络,分布式网络中,数据的是否可信,可以通过各个节点之间进行交叉验证来达成,这个就构成了区块链网络安全性的第二层保证。最后,POW 和 POS 这种分布式网络中共识算法的出现,为区块链安全达成了第三层,也可以说是最终极的保证。下一节咱们开始聊比特币,相信可以加深对本节知识的理解。