区块链 · 数字资产知识 · 行业资讯
文章库关于本站

风险识别

区块链数据结构入门需要了解什么:区块、哈希与编码

摘要

区块链数据结构用于组织交易、连接区块并验证数据。入门时,可以先理解区块链和默克尔树,再认识键值树与序列化格式;不同链的具体设计并不相同。

盾牌保护透明数据核心的原创概念插画

先区分数据结构与数据编码

数据结构回答“数据如何组织、关联和查验”,编码则回答“数据如何表示和传输”。理解两者的区别,能帮助读者看懂区块、交易和状态数据之间的关系。区块链客户端需要按一致规则保存和处理数据;如果节点对同一内容的解释不一致,就难以形成可靠的共同记录。

理解区块链数据结构,不必一开始就钻研复杂实现。可以先把握数据之间的连接方式、哈希在校验中的作用,以及序列化格式如何让数据具有规范的表示。

区块如何连接成链

以比特币为例,区块包含交易数据和区块头,区块头中保存前一个区块头的哈希。这样,每个区块都通过哈希引用前一区块,形成有先后关系的链式记录。若过去区块的数据发生变化,其哈希也会改变,后续区块保存的引用便不再匹配,因此需要重新处理后续连接。

这里的哈希可以理解为对数据计算出的摘要:输入变化会导致摘要变化。它提供校验和关联的基础,但并不等同于加密,也不能单独说明数据是否合法。节点还需依照各自协议的规则验证区块和交易。

默克尔树与交易验证

默克尔树把多笔交易的哈希逐层组合,最终得到一个根哈希;在比特币区块结构中,这个根值保存在区块头里。交易内容若改变,对应哈希以及向上计算得到的根通常也会改变,因此根值可以用于检查交易集合是否与区块头相符。

树状组织还有一项实用特点:验证某笔交易是否包含在区块中时,可以提供相关的中间哈希,而不必把所有交易数据都交给验证者。这种证明仍依赖可信的区块信息及相应验证规则,不能把“提供了哈希”误认为已经验证了所有链上事实。

键值树与序列化格式

并非所有链都只靠区块之间的哈希引用来组织数据。以太坊执行层广泛使用 Patricia Merkle Trie 表示键值对,并通过密码学方式支持数据校验。键值对可以把某个键与对应的数据关联起来;树形结构则便于组织这些关联。它与按交易逐层汇总的默克尔树用途相关,但不能简单视为同一种结构。

数据在保存或传递前还需要序列化,也就是按约定转换成规范的字节表示。以太坊执行层广泛使用 RLP;共识层则以 SSZ 为主要序列化格式,且 SSZ 适配默克尔化。执行层与共识层承担不同部分的工作,因此采用的编码方式也不应混为一谈。

入门顺序与常见问题

建议先弄清区块、区块头、交易和哈希引用的关系,再学习默克尔树,之后再比较键值树及不同序列化格式。读技术资料时,先确认讨论的是哪条链、哪个层级和哪种数据,再判断某个结构的作用,避免把一个系统的实现直接套到另一个系统。

常见问题是:默克尔树是否等于区块链?不是,默克尔树用于组织并校验一组数据,区块链则通过区块之间的链接形成记录。另一个问题是:所有区块链是否都使用相同编码?不是,数据结构和编码取决于具体协议;本文举例说明的比特币与以太坊设计,不代表所有区块链的通用实现。

← 返回全部文章

延伸阅读 · 相关栏目

安全防护钱包与账户风险识别信息核验