区块链的基础数据结构

简介: 区块链的基础数据结构

我们应该都对普通链表比较熟悉。链表中有许多个节点,节点之间通过指针保持连接。


指针指的是一个节点对象在内存中的首地址

image.png

顾名思义,区块链也是一种链表结构,不过它与普通链表不同的地方在于,连接节点的指针是哈希指针,哈希指针包含两个部分,一是其指向节点所占用内存的首地址,二是其指向节点所有内容的哈希值

image.png

如果其指向的节点内容发生了任何变化,那么哈希指针的哈希值也会发生变化。这样,我们就可以轻松感知到节点中的内容是否被修改。


可以用下图表达一个区块链

image.png

如图所示,哈希指针中的哈希值,是对应节点的全部内容算出来的哈希值。这里的全部内容自然也包括指向下一个节点的哈希指针,因此,当其中一个节点内容发生变化时,会导致上一个节点的哈希指针发生变化,也就意味着,上一个节点内容也发生了变化。


这样的影响是持续不断的,直到根节点。

image.png

任何节点的变化,最终都会导致根节点的哈希指针发生变化。因此,我们只需要在系统中记录根节点的变化,就可以感知并找到具体是哪一个节点发生了变化。


我们可以分析出这样的链表结构的一些特性。


任何一次变动都会牵一发而动全身,因此效率是非常低下的。但是他能够准确的记录每一次改动。因此这样的结构对于需要记录变动和防止篡改的场景非常有用


也正是由于这个特性,我们只需要在每个节点上保存好根节点的哈希值到底是多少,那么对于个人节点而言,就不需要完整的保存链上的所有的节点内容,只需要保存常用的附近几千个节点即可。


接下来一章,我们进一步介绍基于这种数据结构,如何做到分布式,以及会面临什么样的问题

相关文章
|
存储 算法 安全
区块链概念介绍
介绍区块链及EOS的相关概念
136 0
数据结构循环链表之介绍和应用 | 第一套
数据结构循环链表之介绍和应用 | 第一套
58 0
|
安全 区块链 数据库
白话谈区块链和其应用场景
这篇文章半年前就写了,但是一直没有发表,今天对其进行简单的修改,主要是聊一聊区块链的一些原理(非技术层面)和应用场景,虽然自己不从事这一块,但是进行了解也是很有必要的,因为时代在发展,眼光也要看前嘛。
85 0
|
安全 区块链
图解区块链:14张图看懂什么是“区块链技术”?
图解区块链:14张图看懂什么是“区块链技术”?
2446 0
图解区块链:14张图看懂什么是“区块链技术”?
|
算法
410王道数据结构强化——算法题(三)
410王道数据结构强化——算法题
168 1
410王道数据结构强化——算法题(三)
|
算法
408王道数据结构强化——算法题(一)
408王道数据结构强化——算法题
394 1
408王道数据结构强化——算法题(一)
|
算法
409王道数据结构强化——算法题(二)
409王道数据结构强化——算法题
142 1
409王道数据结构强化——算法题(二)
|
存储 算法
攻克数据结构和算法——第四天:字典
字典有顺序存储,链式存储和散列表示三种存储方式,其中,链式存储又有跳跃链表和树形结构两种方式存储。
98 0
攻克数据结构和算法——第四天:字典
|
存储 区块链
区块链技术中的数据结构
比特币中的数据结构
109 0
|
存储 数据采集 Java
程序的基石——线性结构
2. 数据结构基础 2.1 什么是数组 2.1.1 概念 数组对应的英文是array, 是有限个相同类型的变量所组成的有序集合, 数组中的每一个变量被称为元素。 数组是最为简单、 最为常用的数据结构。 数组在内存中顺序存储(连续内存) 2.1.2 数组的基本操作 读取 由于数组在内存中顺序存储, 所以只要给出一个数组下标, 就可以读取到对应的数组元素。 输入的下标必须在数组的长度范 围之内, 否则会出现数组越界 更新 利用数组下标, 就可以把新值赋给该元素 插入 尾部插入:直接把插入的元素放
130 0
程序的基石——线性结构