区块链学习笔记:重新捋一捋区块链

区块链(blockchain),正如名字所言,区块链是包含信息的区块链。

我查了一下这区块链最初的描述是由一组研究人员在1991年的时候提出的类似的概念,其最初的描述是旨在为数字文档添加 时间戳,以便无法对其进行备份或篡改。这里面就提出了时间戳的概念了,时间戳能够确保事件发生的唯一性,是一个公证人一样的存在。

而到2009年中本聪改编后才对这个技术较充分的使用从未创建了比特币(Bitcoin)的数字货币。而经过11年后,时间戳的技术的发展扩展到区块链技术,这是一个完全开放的分布式账本(distributed ledger)。一旦有数据被记录在区块链中,这样就很难在区块链中改变这些数据。

这是为什么呢,是什么工作原理使得区块链中保存的数据有着很高的安全性呢?

首先,区块链是有一个一个区块(block)组成的,我们先从局部再到整体来分析。

在比特币区块链系统中,一个区块里面包含了:数据(data)、哈希值 【散列值】(hash)、前一个区块的哈希值(hash of previous block)。

数据(data):然后存储在区块中的数据就取决于区块链的类型,而我们所说的比特币区块链存储的数据(data)就是交易的详细信息,包括发款人,收款人,和交易金额。

哈希(hash):哈希就像是人的指纹一样,具有唯一性,它标识一个区块及其所有内容,一个区块被创建了,哈希值也会被计算出来,就相当于人一出生就拥有了唯一的指纹一样。如果改变区块的内容就会使哈希值发生改变。这就说明哈希值对于检测区块是否更改了的事情非常有效,这就如如果发现人的指纹不是之前的指纹,那就证明指纹对应的人已经不是之前的同一个人了,一样的道理。

前一个哈希(hash of previous block):正因为有了这前一个哈希值,才能把一个个区块串在一起,创造了有效的区块链,这才能使区块链那么安全。那为什么串起来形成区块链就能这么安全呢?我们画三个区块,无三不成几,画三个区块比较妥。

 由图可以知道区块的前一个哈希值对应前一个区块的哈希值,一一往后对应,连成链,而特殊的第一个区块则是应为链条的第一个区块没有前一个可以对应的区块,所以它并没有previous hash可以对应,我们称这个区块为创世区块(Genesis block)。

假如我们修改了区块的内容,该区块的哈希值就变了。图中我用不同颜色表示hash值改变了。

2号区块哈希值改变后,应为它跟3号区块对应的 previous hash 值不一样,所以这回使3号区块和其后面的所有区块无效,因为它们不再存储前一个区块的有效hash值。所以只要改变区块的内容将会是下面所有的区块无效。

事实上,想要防止篡改,单靠hash和previous hash是不够的,因为现在的电脑运算速度极快,每秒钟可以计算数十万次hash值,这样只要有一台电脑就能在数十秒内有效篡改并重新计算其他所有区块的hash值,然后形成篡改后的再次有效的区块链。

所以区块链还引用了一样东西:PoW (Proof-of-work)工作量证明。它是一个减慢新区块的创建和稳固原有区块的机制。

比特币区块链系统下,计算所需的工作量和时间约要10分钟计算修改一个区块,这是计算一个区块的时间,而PoW使得篡改变得很困难,因为若要篡改一个区块,则需重新计算这个区块以后的所有区块的工作量证明,成千上万个区块等着你去慢慢计算,还不知何时才计算完,所以区块链的安全性来自哈希的使用和工作量证明机制。

区块链保护自己的另一种方式是P2P网络(peer to peer)。在P2P网络中任何节点都可以加入,当有节点加入该网络,那这节点就会得到完整的区块链副本,节点可以使用它来验证所以内容仍然有序。

若有一个节点新建一个区块,那么该新区块将发送给整个网络上的每个节点,然后每个节点验证该新区块来确保它没被篡改,这个网络中所以节点达成共识(consensus),是这所有的节点来决定哪些区块有效,哪些区块不是有效,被篡改的区块会被网络中的其他节点拒绝。所有若想成功篡改区块链,则需要篡改者篡改区块链上的所有区块,重做每个区块的工作量证明,并控制至少51%的P2P网络节点。只有这样才能被其他节点接受。网络接入的节点巨多,想要控制这巨多的节点的51%以上,这并非常困难,所以区块链才会安全性高。

区块链自2009年,不断发展,智能合约是区块链发展中的产物。之前的文章也说过智能合约,它是一堆的程序代码,存储在区块链中,可根据特定条件自动触发事件。

 中本聪写的《比特币:一种点对点电子现金系统》定义了比特币这种数字货币系统,其底层技术就是区块链,里面写的内容我还有些不懂的地方(笑),但是这篇文章很有意思,很有趣,可以看看。