完全披露,一些用户已经问过这个问题,但答案以某种方式转移了实际问题的答案。
因此,在 Hyperledger Fabric 中:
- 存储在对等实例上的物理 block 文件在哪里?
- 根据底层账本/区 block 链验证世界状态的频率或时间是多少?
我知道 LevelDB 用于世界状态,它可以切换到 CouchDB,我在某处读到分类帐也在 LevelDB 中编制索引,但同样可以引用世界状态,但似乎没有人知道它的位置分类帐。
我已经探索了对等实例和位置 /var/hyperledger/production/ledgersData
,它进一步包含诸如 chains、historyLeveldb、ledgerProvider、pvtdataStore 之类的目录,chains 目录确实包含 channel ,然后每个channel 目录有一个文件 blockfile_000000,根据我当前的配置,我执行了一些交易,中间有一些延迟,但我没有看到在我提到的位置下创建任何新 block 。
更让我吃惊的是,在每个节点上,我已经递归地完全删除了账本目录,而我的区 block 链仍然运行良好,这引出了一个问题,世界状态是否真的得到验证,或者我们是否必须提供我们自己的实现根据我们自己的需要根据分类账验证世界状态?
我的网络相关配置:
OrdererType: Kafka
BatchTimeout: 2s
BatchSize:
MaxMessageCount: 10
AbsoluteMaxBytes: 1 MB
PreferredMaxBytes: 512KB
PS:在 Ordering Service 的日志中,我确实看到日志说“要等待更新的 block ”。 maxAvailaBlockNumber=[7]、waitForBlockNum=[8] 和新 block 是根据配置创建的,但我没有在上面提到的 blockfile_000000 中更改任何文件大小。
最佳答案
区 block 链存储在 block 文件中的 ledgersData/chains 目录中。每次提交一个 block 时, block 文件将被写入并 fsynced。
状态数据库保存在 LevelDB(ledgersData/stateLeveldb 目录)或外部 CouchDB。每次提交 block 时, block 的状态更新将提交到状态数据库。
如果数据以某种方式被篡改或在区 block 链和状态数据库之间不同步,那么对该节点的背书请求将根据与其他节点的不一致来识别坏数据。如果对状态数据库的完整性有任何疑问,可以从区 block 链中删除并重建状态数据库。如需更深入的解释,请参阅 https://lists.hyperledger.org/g/fabric/message/4896 上的帖子.
关于hyperledger-fabric - 在 Hyperledger Fabric 中, block 位置和有效性标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49649527/