
账本存储包含哪些层次
区块链账本存储方法涉及哪些技术概念,可以从数据组织、状态表达、持久化存储和一致性验证四个层次理解。数据组织决定记录如何关联,状态表达描述执行交易后的结果,持久化存储负责保存字节,一致性验证则决定节点接受哪些记录。
这些层次相互配合,却不能彼此替代。数据库能保存数据,不代表数据符合共识规则;哈希能帮助核对内容,也不代表节点已经取得完整内容。

比特币示例:区块、哈希与UTXO
比特币开发者指南介绍了三组相关概念:区块头引用前一区块头的哈希,交易通过Merkle树汇总为根;UTXO表示尚未花费的交易输出;全节点独立验证区块,并在有效分支中依据累计工作量选择链。它们分别服务于历史关联、可花费状态判断和账本一致性。

以太坊示例:状态树与编码
以太坊开发文档描述的Merkle Patricia Trie结合了按键路径检索、路径压缩和哈希校验。相关节点通过RLP编码,较大节点可用编码内容的哈希作为数据库键,较小节点可嵌入父节点。文档还区分状态根、交易根和收据根,体现不同数据集合各自具有可验证摘要。
逻辑结构与物理存储如何区分
树结构描述数据之间的关系,底层键值数据库负责保存和取回具体内容。沿树路径查找一个值,可能需要多次访问数据库,因此不能把一次树查询等同于一次数据库读取。
序列化规定结构化数据如何变成字节,哈希再对这些字节计算摘要。需要跨节点核对数据时,编码规则必须明确,否则相同含义的数据可能因字节表达不同而得到不同摘要。
适用条件与常见问题
需要核对某条记录是否属于特定数据集合时,Merkle类证明很有用,前提是验证者已有可信或经过验证的根。证明能够支持包含关系判断,但不能单独证明交易满足全部执行规则,也不能保证完整数据始终可获取。
根哈希能替代原始账本吗?不能。它是用于核验的摘要,无法直接还原所有记录。区块高度能唯一标识区块吗?存在分叉时,同一高度可能对应多个区块。不同链是否采用相同存储方法?也不能这样推断;UTXO与账户状态树体现了不同设计,具体实现需要结合各自协议判断。