我们应该都对普通链表比较熟悉。链表中有许多个节点,节点之间通过指针保持连接。
指针指的是一个节点对象在内存中的首地址
顾名思义,区块链也是一种链表结构,不过它与普通链表不同的地方在于,连接节点的指针是哈希指针,哈希指针包含两个部分,一是其指向节点所占用内存的首地址,二是其指向节点所有内容的哈希值
如果其指向的节点内容发生了任何变化,那么哈希指针的哈希值也会发生变化。这样,我们就可以轻松感知到节点中的内容是否被修改。
可以用下图表达一个区块链
如图所示,哈希指针中的哈希值,是对应节点的全部内容算出来的哈希值。这里的全部内容自然也包括指向下一个节点的哈希指针,因此,当其中一个节点内容发生变化时,会导致上一个节点的哈希指针发生变化,也就意味着,上一个节点内容也发生了变化。
这样的影响是持续不断的,直到根节点。
任何节点的变化,最终都会导致根节点的哈希指针发生变化。因此,我们只需要在系统中记录根节点的变化,就可以感知并找到具体是哪一个节点发生了变化。
我们可以分析出这样的链表结构的一些特性。
任何一次变动都会牵一发而动全身,因此效率是非常低下的。但是他能够准确的记录每一次改动。因此这样的结构对于需要记录变动和防止篡改的场景非常有用
也正是由于这个特性,我们只需要在每个节点上保存好根节点的哈希值到底是多少,那么对于个人节点而言,就不需要完整的保存链上的所有的节点内容,只需要保存常用的附近几千个节点即可。
接下来一章,我们进一步介绍基于这种数据结构,如何做到分布式,以及会面临什么样的问题