区块链究竟是如何实现数据分布式存储并确保安全性的?
摘要:
可以把它想象成一本“由全世界共同维护的、不可篡改的、分布式的账本”,下面我们从几个核心层面来拆解它的存储方式:核心存储单元:区块区块链存储数据的基本单位是“区块”(Block),你... 可以把它想象成一本“由全世界共同维护的、不可篡改的、分布式的账本”。
下面我们从几个核心层面来拆解它的存储方式:
(图片来源网络,侵删)
核心存储单元:区块
区块链存储数据的基本单位是“区块”(Block),你可以把每一个区块想象成账本中的一页。
一个区块主要由两部分组成:
- 区块头
- 区块体
区块体 - 数据的“仓库”
区块体非常简单,它就像一个数组或列表,用来存放实际的数据。
-
存什么数据?
(图片来源网络,侵删)- 在比特币这样的公有链中,它存储的是交易记录,张三转给李四 1 个比特币”。
- 在以太坊这样的公有链中,它存储的也是交易记录,但这些交易可以更复杂,比如调用智能合约、转账代币等。
- 在联盟链或私有链中,它可以存储各种信息,如供应链溯源信息、电子合同、医疗记录、身份证明等。
-
数据格式
- 这些数据被打包成一个一个的交易,然后所有这些交易会按照顺序排列在区块体中。
区块头 - 区块的“身份证”和“指纹”
区块头是区块链技术的精髓所在,它不存实际数据,而是存了关于这个区块的元信息,以及最重要的——指纹,它包含以下几个关键字段:
- 版本号:记录区块链协议的版本。
- 前一个区块的哈希值:这是链式结构的核心!它记录了上一个区块的“指纹”,通过这个字段,每个区块都指向前一个区块,形成了一条链条,如果有人想修改上一个区块的数据,那么这个区块的“指纹”(哈希值)就会改变,导致本区块的“前一个区块的哈希值”字段失效,链条就会断裂。
- Merkle 树根哈希:这是区块链数据完整性的“大杀器”。
- 什么是 Merkle 树? 它是一种数据结构,能高效地验证大量数据的完整性。
- 工作原理:区块体里所有交易两两配对,分别计算它们的哈希值,然后把这些哈希值再两两配对,计算新的哈希值……如此递归,最终会生成一个唯一的、顶层的哈希值,这就是 Merkle 树根哈希。
- 有什么用? 你只需要记住这个根哈希,就能验证区块体里任何一个交易是否存在且未被篡改,如果区块里任何一个交易数据被修改,它会导致其所有父级哈希值改变,Merkle 树根哈希也会改变,这使得验证数据完整性变得极其高效和安全。
- 时间戳:记录这个区块被创建的大致时间。
- 难度目标:与工作量证明机制相关,用于控制新区块的产生速度。
- 随机数:矿工通过不断尝试不同的随机数来满足难度目标,这个过程就是“挖矿”。
总结一下区块头的作用: 它就像一个区块的“身份证”,包含了区块的指纹(前一个区块的哈希)、数据总览(Merkle 树根哈希)、时间戳等信息,这个“身份证”一旦生成,就几乎不可能被伪造。
核心存储结构:链式结构
区块链之所以叫“区块链”,就是因为它是由一个个区块通过哈希指针链接而成的链条。
(图片来源网络,侵删)
工作流程:
- 创建新区块:矿工(或验证节点)收集新的交易数据,打包成一个新区块。
- 链接前驱:新区块的“区块头”中,必须填入上一个已确认区块的哈希值。
- 计算指纹:计算新区块头所有内容的哈希值,得到这个新区块的唯一“指纹”。
- 添加到链上:这个新区块就被添加到了链的末端。
这种结构的威力在于“不可篡改性”: 假设有一个黑客想篡改链中间的某个区块(比如第 N 个区块)里的某笔交易。
- 他修改了第 N 个区块的数据。
- 这会导致第 N 个区块的“Merkle 树根哈希”发生改变。
- 这又会导致第 N+1 个区块的“前一个区块的哈希值”字段不匹配。
- 为了让链条看起来是连续的,黑客必须重新计算从第 N 个区块开始之后的所有区块(包括 N+1, N+2, N+3... 直到最新的区块)。
- 在公有链(如比特币)中,这需要拥有全网超过 51% 的算力,才能在短时间内完成这种“重算攻击”,这在经济上和计算上都是几乎不可能的。
核心存储方式:分布式存储
这是区块链区别于传统数据库(如 MySQL)的另一个核心特征,数据不是存储在单一的服务器上,而是存储在成千上万个参与网络的节点(Node)上。
-
每个节点都存什么?
- 一个完整的节点会存储从创世块(第一个区块)开始的整条区块链的所有数据,这是一个巨大的数据集,比特币和以太坊的全节点数据都已经超过几百 GB。
-
有什么好处?
- 去中心化:没有单一的控制方,即使部分节点(甚至很多节点)因为故障或攻击而离线,只要还有一个节点在线,整个网络的数据就不会丢失。
- 高可用性:网络永远不会宕机,你可以随时从任何一个节点上读取数据或发起交易。
- 抗审查:没有任何一个中央机构可以轻易地删除或屏蔽链上的数据。
- 数据透明:任何人都可以下载并验证整个链上的数据。
核心存储补充:状态存储
除了上面讲的交易数据(通常被称为“链上数据”),区块链还需要存储一种更重要的数据:账户状态。
-
什么是账户状态?
- 它是一个动态的、实时的快照,记录了每个账户的当前余额、代码(对于智能合约账户)等信息。
- 区块链上记录了 100 万笔交易,但它不会直接告诉你“张三现在有多少钱”,它会告诉你一个状态:“张三的账户地址 A,当前余额是 10 ETH”。
-
状态存储在哪里?
- 这个状态数据通常存储在一种叫做Merkle Patricia Trie (MPT) 的数据结构中,这是一种结合了 Merkle 树和前缀树的高效数据结构,可以快速查询和更新账户状态。
- 当一个新的区块被确认后,它会包含一些交易,这些交易会改变一些账户的状态,网络会根据这些交易,更新 MPT 中的状态,生成一个新的状态根哈希,并把这个新的状态根哈希记录在新区块的区块头里。
-
交易数据 vs. 状态数据
- 交易数据:记录了“发生了什么”(What happened),这是历史记录,不可篡改,永久存储在链上。
- 状态数据:记录了“现在是什么样”(What it is now),这是基于所有历史交易计算出的当前结果,是动态变化的。
| 特性 | 描述 | 通俗比喻 |
|---|---|---|
| 存储单元 | 区块 | 账本的一页 |
| 区块体:交易等原始数据 区块头:指纹、元信息 |
区块体是页上的文字内容 区块头是页的页码、摘要和防伪标记 |
|
| 存储结构 | 链式结构:通过“前一个区块的哈希值”链接 | 用胶水一页一页粘起来的账本,撕掉中间任何一页,后面的页码都会错乱 |
| 存储方式 | 分布式存储:数据同步存储在成千上万个节点上 | 这本账本不是存在银行保险柜里,而是复印了无数份,分发给全世界每个参与者保管 |
| 数据类型 | 交易数据(历史记录) 状态数据(当前快照) |
账本记录了所有转账历史(交易数据),同时还有一个实时更新的总账本(状态数据),显示每个人现在有多少钱 |
通过这四个核心机制的结合,区块链实现了数据的高安全性、高透明度、高抗篡改性和高可用性,这也是它被誉为“信任机器”的根本原因。
文章版权及转载声明
作者:咔咔本文地址:https://jits.cn/content/23689.html发布于 01-19
文章转载或复制请以超链接形式并注明出处杰思科技・AI 股讯



还没有评论,来说两句吧...