区块链,真的很火。好像没有什么不能用区块链解决,各行各业的公司都在推出与区块链相关的应用来提升公司估值。那么,到底什么是区块链呢?我学习了一些资料,尝试用相对简单的方法解释什么是区块链。本文仅适用于希望至少知道区块链是啥的读者,已经了解的用户可以直接到文末看参考链接获取更多信息。
区块链的定义是什么
wiki上的区块链定义是这样的:
“是用分布式数据库识别、传播和记载信息的智能化对等网络, 也称为价值互联网。”
-- https://zh.wikipedia.org/wiki/%E5%8C%BA%E5%9D%97%E9%93%BE
我从知乎上又找到了一个相对好理解一些的区块链描述:
“区块链本质上是一个去中心化的分布式账本数据库。其本身是一串使用密码学相关联所产生的数据块,每一个数据块中包含了多次比特币网络交易有效确认的信息。”
-- https://www.zhihu.com/question/37290469
综合上述两种说法,我们可以大概知道:区块链是一种数据存储的技术(这是比较好理解的一个方面,但区块链技术不局限于此)。而他与一些之前的存储技术不同之处在于,他是分布式的,是去中心化的。读到这里,其实我们就可以大概知道什么是区块链了,至少他不再是一种首饰或者某种建筑材料了。但如果想要继续了解区块链,我们还需要理解,什么是去中心化。
什么是去中心化
我发现市面上大多数介绍区块链技术的文章都会上手就是一个“去中心化”,然后以这个基础来进行解释,读完总有些不踏实的感觉。在这篇文章里我就尝试换个角度,先从“中心化”开始讲起,为理解“去中心化”打一个基础。接下来,我会以举几个交易的例子,来解释什么是“中心化”。
一般做任何交易都需要有一个第三方 :如果是向留学的学校汇款,办理汇款业务的银行就是第三方;如果是在淘宝上找卖家买东西,淘宝就是第三方;通过支付宝向小卖部付款,支付宝就是第三方。
上述几个例子都需要第三方为交易或者资金流转提供证明,只有这个第三方才有交易是否有效的数据。也就是说,这个交易数据是以“中心化”的方式存储的。如果第三方突然失效,比如支付宝突然所有服务器被外星黑客攻击集体宕机,比如银行老板带着小姨子逃跑直接把银行数据都删掉了,那么交易的有效性数据就消失了,就没人知道我买东西是否成功,或者我是不是汇款成功了。当然这里用的是比较极端的例子,但是我们可以通过这种例子我们可以理解中心化的不好的地方。
理解了中心化以后我们就可以进一步理解去中心化。
所谓的去中心化,并非跳过第三方,而是利用一种分布式的方法代替第三方,存储交易的信息。
区块链就是这样一种去中心化的技术,通过一些算法把交易数据存储在一个类似网络的结构中,这个结构可以验证交易的唯一性和有效性,并且是分布式存储的,不会因为个别节点损坏而导致交易数据的损坏。
参考资料:https://www.youtube.com/watch?v=r43LhSUUGTQ
区块链是怎么组成的
在对区块链实现的功能有一个宏观的理解以后,我们可以进一步对区块链的构成做一些了解。
上文我们提到区块链是一种去中心化存储数据的机制。区块链之所以叫做区块链(blockchain),是因为区块链是有若干个区块组成的链式的结构,确实像锁链一样,锁链上的每一个环都存储着一部分的交易数据。如果有不法分子损毁了其中的一个环,那么锁链就会遭到毁坏。
什么是区块
区块链由若干个区块(block)构成,一个区块存储着三个信息:
1、 交易数据,如是谁向谁汇款,汇了多少钱
2、 区块hash,就是这个区块的编号。(这里的hash是通过一种算法算出来的id,这种id和区块内的数据是一一对应的。可以笼统的理解为区块的id,一旦一个区块的具体内容确定,其编号也是确定的,如果区块本身内容被改变,其编号也会被对应改变)
3、 上一个区块的hash,就是指这个区块是和哪个区块链接起来的。
参考资料:https://www.youtube.com/watch?v=SSo_EIwHSd4
为了便于理解,我特别做了一些图示。
比如这就是一个很简陋的区块链,用以存储1到10的数字。每个区块的编号hash是通过区块所存储的数据的平方计算而得的。
- 后一个区块通过其Pre ID,也就是“前一个区块的编号”,与之前的区块链接起来,这样就形成了链式的结构,也就是区块链的由来。
- 第一个区块链是没有上一个区块链的,所以其上一个区块链编号为0,这个区块也被称为“创世区块”。
这仅仅只是举一个例子,实际上的区块链存储的信息更加复杂,比如比特币的交易信息,或者其他的内容与数据。编号hash的计算方法也更为复杂。事实上通过设计复杂的hash算法,可以提升区块链的安全程度,后文会详细介绍。
区块链的存储方式
区块链是分布式存储的,是所有人都可以参与的,一旦有用户加入了区块链的网络,那么他就会得到一个区块链的完整拷贝,有一万个人加入了网络,就有一百分拷贝。
所有参与区块链网络的人,会通过比对彼此的区块链数据来确认交易的有效性。
如果一个区块链中的交易数据和大多数人区块链中的交易数据不一致,那么久会被认定为不合法的数据,而不会被认可。这样就能保证即使有人篡改部分的区块链数据,也不会影响整体区块链数据的有效性。
事实上,为了加强这个网络的安全性,区块链还会通过增加计算数据修改的难度来防止被恶意篡改。我们不妨做一个思维实验:
假设我是一个黑客,我找到了一个区块链,里面存的信息如下:
这个区块链与之前举例的区块链类似,其hash编码也是通过存储数据的平方计算得出的。也就是其ID = 存储数据的平方。(这里再注释一下,因为是讲解概念,所以采用了高度简化的模型,真实的hash算法和存储数据会复杂的多。)
作为一个无恶不作的黑客,我决定搞点破坏。我知道这个区块4里面存储的数据实际上是我的年终奖数值,是4块钱。所以我决定把这个数据改的大一点,至少要10块。于是我把第四个区块链的存储数据改成了10。这样,其对应的hash编码,也就是ID就变成了100(由之前的计算公式可得,10的平方是100)。
我实现了修改区块数据的目的,但是没有想到这样这样的修改造成了区块链的断裂,因为区块5之前的区块本来应该是编号为16点区块,但是现在没有编号为16点区块了。这个区块链就出bug了。
我是不能让修改年终奖的事情被发现的,所以我决定把区块5的Pre ID从16改为100。
这样的话这个区块链就修改完了。但事情还没完,之前我们提到过,区块链的存储是去中心化的,也就是说,还有很多其他拷贝,如果我的这个区块链和所有的区块链拷贝都不一致,我改的这个区块链就不会被认可,我给自己加薪的目的也就没有实现。
所以,如果要实现加薪,我要把所有的拷贝都改完。
这样,我修改的记录就成为所有区块链拷贝都认可的记录了。我就可以光明正大的领十块钱年终奖了。
当然,这只是我的白日梦,因为区块链有一套机制可以防止人为的篡改,我们接下来就简单介绍一下这个机制。
每个区块的hash编码计算是十分复杂的,如果篡改一个区块数据并且要计算其对应的hash编码是要花费很多很多时间的。比如,我们举例中计算hash编码的方法是ID = 存储数据的平方。如果我们把这个算法改为,ID=存储数据的平方的阶乘,那以本黑客的算力就算不出来了。加上区块链的备份数量比较大,所以要同时修改所有的区块链,几乎是不可能的。所以,要增加这个区块链的安全性,就可以设计更加复杂的hash编码计算方法,并且邀请更多的人加入这个网络,增加区块链的拷贝数,这样就使篡改区块链内容变得几乎不可能。
如果理解了上述举例,我们就基本了解了区块链的存储原理了。在区块链的基础上,我们就可以进一步理解智能合约、挖矿、加密货币等一系列的概念了,这个以后会再找时间整理。
本文为了便于理解,所以举例和用语都不是特别科学规范。如果有兴趣继续了解的读者可以参考专业的文献。如果有任何表述有误的地方,请各位读者不吝指出。
文末汇总所有的参考文献:
维基百科区块链:
https://zh.wikipedia.org/wiki/%E5%8C%BA%E5%9D%97%E9%93%BE
知乎上的解释: https://www.zhihu.com/question/37290469
区块链视频:https://www.youtube.com/watch?v=r43LhSUUGTQ
介绍区块组成:https://www.youtube.com/watch?v=SSo_EIwHSd4
在本文成文不久,知乎日报刊登了一篇关于区块链的文章,也是从中心化开始讲起,讲解区块链和比特币的相关技术。而且写的比本文专业详细多了。如果大家想要了解更多关于区块链的文章,可以继续看这篇 http://daily.zhihu.com/story/9666826