blockchain - : in memory , 存储在文件或数据库中的实际区 block 链状态数据在哪里?

标签 blockchain hyperledger ethereum bitcoin decentralized-applications

我有一个查询,每个节点中保存的区块链数据在哪里。在谷歌、StackOverflow 和一些博客上搜索了很长时间后,得到了很多答案:比如:它保存在像 level-DB 或 Rocks-DB 这样的数据库中,有人说它保存在内存中的变量中,有人说它保存在一个变量中文件(来自 hyperledger-fabric)。
我想知道,是否有一种特定的存储块的方法是大多数区块链框架所遵循的?
或者所有这些框架都选择不同的方法(如文件、内存或 DB)。
我知道有一个保存在数据库中的区块链的当前状态/世界状态。这种当前状态/世界状态与实际的区块链完全不同。在当前状态或世界状态下,数据是可以修改的,但在实际区块链中块/数据是不可变的。
简而言之,我的问题是:
数据(不可变块)如何存储在区块链中每个完整节点的分类账上?是在内存中、文件中(如 JSON、CSV 文件)还是数据库中

最佳答案

比特币节点将原始块数据保存在磁盘上的文件 .bitcoin/blocks/blk*.dat 中。每个 blknnnnnn.dat 的大小为 128MB,截至今天的数据总大小约为 300GB。
所有已知区块的元数据都保存在 .bitcoin/blocks/index/nnnnnn.ldb 文件中的 Level DB 文件中。

关于blockchain - : in memory , 存储在文件或数据库中的实际区 block 链状态数据在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63391758/

相关文章:

blockchain - 区 block 链如何安全?

blockchain - assert 和 require 的区别

hyperledger-fabric - Hyperledger 具有与 Fabric CA 不同的 PKI

blockchain - 限制函数访问仅限于 Solidity 中的另一特定合约

python - 如何将 JSON 树结构转换/转换为 Merkle 树

blockchain - 将一百万行从平面文件放入区 block 链

javascript - Testrpc 错误:在 Mac 上监听 EADDRINUSE:::8545

ethereum - key 错误 : 'mainnet-fork' when using brownie console --network mainnet-fork

hyperledger - 单元测试 super 账本结构链代码

hyperledger - 如何从 Hyperledger Fabric 链码打印和查看日志