区块链账本存储

Posted

技术标签:

【中文标题】区块链账本存储【英文标题】:Blockchain ledger storage 【发布时间】:2019-04-22 16:48:35 【问题描述】:

我研究区块链已经有一段时间了,我一直在寻找解释区块链分类账保存在哪里以及如何在本地保存的信息(例如,在完整节点中本地保存)。我大部分时间发现的是以太坊或 Hyperledger Fabric 使用 LevelDB 或 RocksDB 等来保存状态信息的状态数据库。当我正在研究用于存储新数据的 LinkedList 和 Merkle 树(哈希树)时,除了保存在某些磁盘键值存储/数据库中的状态之外,我一直在努力了解区块链分类帐的保存位置由全节点和半节点创建并被哈希并保存在默克尔树中以用于验证目的的块可以查询和验证是否存在交易。

谢谢,最好的,

罗希特

【问题讨论】:

【参考方案1】:

在比特币核心中,区块存储在数据目录下blocks 文件中的.dat 文件中(Linux 上默认为~/.bitcoin)。这些文件不一定以任何严格的方式编号或组织,因为它们是在可用时下载的,而不是等待每个顺序块变得可用于从对等点下载。由于这些原因,.dat 文件有一个 levelDB(在~/.bitcoin/blocks/index 中),它通过存储.dat 文件的名称和位置来索引区块链。

链表和默克尔树不是数据存储机制,而是抽象的数据类型,可以存在于数据库中,作为平面文件等。默克尔树可以使验证更快,因为它提高了验证算法的效率,通常是哈希函数。

【讨论】:

哦,好吧,如果有 100 个事务,那么将有 100 个 .dat 文件,每个事务一个 .dat 文件,每个事务都存储在 LevelDB 中? 不完全是,一个.dat 文件可以包含多个块,每个块包含许多事务。 LevelDB 包含对文件的引用。【参考方案2】:

在 Hyperledger Fabric 中,状态数据库不是用于存储所有块,它仅保存资产的当前状态,例如如果一个银行账户有一笔 10 借方的交易和另一笔 2 贷方的交易,则状态 DB 的当前值为 8。

实际区块保存在peer的本地文件中,可以通过SDK查询。

【讨论】:

以上是关于区块链账本存储的主要内容,如果未能解决你的问题,请参考以下文章

区块链扫盲

基于区块链技术的超级账本(Hyperledger) - 从理论到实战

区块链之旅以太坊超级账本公链联盟链

基于区块链技术的超级账本(Hyperledger) - 从理论到实战

区块链认知

区块链:Hyperledger Fabric账本存储