本文作者:咔咔

区块链究竟是如何实现数据分布式存储并确保安全性的?

区块链究竟是如何实现数据分布式存储并确保安全性的?摘要: 可以把它想象成一本“由全世界共同维护的、不可篡改的、分布式的账本”,下面我们从几个核心层面来拆解它的存储方式:核心存储单元:区块区块链存储数据的基本单位是“区块”(Block),你...

可以把它想象成一本“由全世界共同维护的、不可篡改的、分布式的账本”

下面我们从几个核心层面来拆解它的存储方式:

区块链究竟是如何实现数据分布式存储并确保安全性的?
(图片来源网络,侵删)

核心存储单元:区块

区块链存储数据的基本单位是“区块”(Block),你可以把每一个区块想象成账本中的一页。

一个区块主要由两部分组成:

  1. 区块头
  2. 区块体

区块体 - 数据的“仓库”

区块体非常简单,它就像一个数组或列表,用来存放实际的数据

  • 存什么数据?

    区块链究竟是如何实现数据分布式存储并确保安全性的?
    (图片来源网络,侵删)
    • 比特币这样的公有链中,它存储的是交易记录,张三转给李四 1 个比特币”。
    • 以太坊这样的公有链中,它存储的也是交易记录,但这些交易可以更复杂,比如调用智能合约、转账代币等。
    • 联盟链或私有链中,它可以存储各种信息,如供应链溯源信息、电子合同、医疗记录、身份证明等。
  • 数据格式

    • 这些数据被打包成一个一个的交易,然后所有这些交易会按照顺序排列在区块体中。

区块头 - 区块的“身份证”和“指纹”

区块头是区块链技术的精髓所在,它不存实际数据,而是存了关于这个区块的元信息,以及最重要的——指纹,它包含以下几个关键字段:

  • 版本号:记录区块链协议的版本。
  • 前一个区块的哈希值:这是链式结构的核心!它记录了上一个区块的“指纹”,通过这个字段,每个区块都指向前一个区块,形成了一条链条,如果有人想修改上一个区块的数据,那么这个区块的“指纹”(哈希值)就会改变,导致本区块的“前一个区块的哈希值”字段失效,链条就会断裂。
  • Merkle 树根哈希:这是区块链数据完整性的“大杀器”。
    • 什么是 Merkle 树? 它是一种数据结构,能高效地验证大量数据的完整性。
    • 工作原理:区块体里所有交易两两配对,分别计算它们的哈希值,然后把这些哈希值再两两配对,计算新的哈希值……如此递归,最终会生成一个唯一的、顶层的哈希值,这就是 Merkle 树根哈希。
    • 有什么用? 你只需要记住这个根哈希,就能验证区块体里任何一个交易是否存在且未被篡改,如果区块里任何一个交易数据被修改,它会导致其所有父级哈希值改变,Merkle 树根哈希也会改变,这使得验证数据完整性变得极其高效和安全。
  • 时间戳:记录这个区块被创建的大致时间。
  • 难度目标:与工作量证明机制相关,用于控制新区块的产生速度。
  • 随机数:矿工通过不断尝试不同的随机数来满足难度目标,这个过程就是“挖矿”。

总结一下区块头的作用: 它就像一个区块的“身份证”,包含了区块的指纹(前一个区块的哈希)、数据总览(Merkle 树根哈希)、时间戳等信息,这个“身份证”一旦生成,就几乎不可能被伪造。


核心存储结构:链式结构

区块链之所以叫“区块链”,就是因为它是由一个个区块通过哈希指针链接而成的链条。

区块链究竟是如何实现数据分布式存储并确保安全性的?
(图片来源网络,侵删)

工作流程:

  1. 创建新区块:矿工(或验证节点)收集新的交易数据,打包成一个新区块。
  2. 链接前驱:新区块的“区块头”中,必须填入上一个已确认区块的哈希值
  3. 计算指纹:计算新区块头所有内容的哈希值,得到这个新区块的唯一“指纹”。
  4. 添加到链上:这个新区块就被添加到了链的末端。

这种结构的威力在于“不可篡改性”: 假设有一个黑客想篡改链中间的某个区块(比如第 N 个区块)里的某笔交易。

  1. 他修改了第 N 个区块的数据。
  2. 这会导致第 N 个区块的“Merkle 树根哈希”发生改变。
  3. 这又会导致第 N+1 个区块的“前一个区块的哈希值”字段不匹配。
  4. 为了让链条看起来是连续的,黑客必须重新计算从第 N 个区块开始之后的所有区块(包括 N+1, N+2, N+3... 直到最新的区块)。
  5. 在公有链(如比特币)中,这需要拥有全网超过 51% 的算力,才能在短时间内完成这种“重算攻击”,这在经济上和计算上都是几乎不可能的。

核心存储方式:分布式存储

这是区块链区别于传统数据库(如 MySQL)的另一个核心特征,数据不是存储在单一的服务器上,而是存储在成千上万个参与网络的节点(Node)上。

  • 每个节点都存什么?

    • 一个完整的节点会存储从创世块(第一个区块)开始的整条区块链的所有数据,这是一个巨大的数据集,比特币和以太坊的全节点数据都已经超过几百 GB。
  • 有什么好处?

    1. 去中心化:没有单一的控制方,即使部分节点(甚至很多节点)因为故障或攻击而离线,只要还有一个节点在线,整个网络的数据就不会丢失。
    2. 高可用性:网络永远不会宕机,你可以随时从任何一个节点上读取数据或发起交易。
    3. 抗审查:没有任何一个中央机构可以轻易地删除或屏蔽链上的数据。
    4. 数据透明:任何人都可以下载并验证整个链上的数据。

核心存储补充:状态存储

除了上面讲的交易数据(通常被称为“链上数据”),区块链还需要存储一种更重要的数据:账户状态

  • 什么是账户状态?

    • 它是一个动态的、实时的快照,记录了每个账户的当前余额、代码(对于智能合约账户)等信息
    • 区块链上记录了 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 股讯

阅读
分享

发表评论

快捷回复:

评论列表 (暂无评论,1人围观)参与讨论

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