
先区分存什么、怎样组织和如何验证
区块链存储可以从三个问题入门:保存哪些数据,数据之间怎样关联,节点怎样检查数据可信。交易记录描述发生过的变化,状态数据反映处理交易后的结果;区块和树结构组织这些内容,验证规则约束哪些变化能够被接受。理解这些层次,有助于避免把区块链仅仅看成不断追加的文件。
比特币:区块连接历史,UTXO支持支出检查
比特币开发者指南介绍,区块保存交易,区块头通过前一区块头的哈希连接历史,并用默克尔根关联块内交易。节点独立验证区块;UTXO表示尚未花费的交易输出,用于检查后续支出。对于有效的竞争分支,节点遵循累计工作量最大的链。
这里需要分别理解历史记录与可用输出:前者用于追溯交易,后者帮助判断某个输出还能否被花费。防止重复支出既需要保存相关信息,也需要执行验证规则,单纯复制账本并不能完成这项检查。
以太坊:用树结构组织可验证的状态
以太坊开发文档介绍的Merkle Patricia Trie将键值数据组织为可验证的树,并通过路径压缩减少冗余层级。文档区分状态树、交易树与收据树,以及区块头中对应的根。逻辑上的树查询,可以涉及底层键值数据库的多次读取。
因此,学习存储机制时,要把逻辑结构与磁盘上的保存方式分开。树结构规定数据如何关联、如何形成证明;底层数据库负责实际保存和读取。知道一个根哈希,并不意味着已经拥有它所对应的全部数据。
哈希与证明能说明什么
哈希可以理解为数据的校验指纹。在密码学安全假设下,修改内容会使相关哈希发生变化,树结构还能把这种变化关联到根。根哈希不是可解压的数据副本,无法用它还原全部交易或状态。
默克尔证明适用于核验某项数据是否属于指定根所代表的数据集合。使用它的前提,是确认所依据的根具有可信的链上依据。证明某笔交易被某个区块收录,也不等于独立检查了该区块的全部交易和所有共识规则。
常见问题与适用范围
区块链是否绝对无法修改?哈希关联让修改能够被发现,共识机制进一步约束哪份历史被接受。比特币还通过工作量证明提高重写历史的成本,因此理解安全性时需要同时考虑数据结构与共识条件。
所有区块链都采用相同存储机制吗?不同系统可能采用不同的交易模型、状态结构和验证规则。UTXO与上述状态树应放在各自的技术背景下理解,不能直接推导为所有区块链的统一实现。