delState如何在Fabric中工作?

时间:2017-04-26 01:29:43

标签: blockchain hyperledger-fabric

我是IBM Hyperledger Fabric的新手。

在尝试查看文档时,我发现有几个州 getState,putState,delState。等

https://github.com/hyperledger/fabric/blob/master/core/chaincode/shim/chaincode.go

我想知道分类帐是否是不可变的和链接的,我们怎样才能删除'国家?

鉴于它是由每个交易或交易链接的分类账,是不是不可能删除状态或至少破坏哈希链?

谢谢!

1 个答案:

答案 0 :(得分:4)

有一个状态数据库存储密钥及其值。这与构成区块链的区块序列不同。可以使用DelState函数从状态数据库中删除密钥及其关联值。但是,这并不意味着区块链上的区块发生了变化。删除密钥和值将作为事务存储在区块链中,就像之前的添加一样,任何修改都作为事务存储在区块链上。

关于不同的哈希值,如果存在非确定性链码,则块哈希值可能会发散。应避免创建非确定性的链代码。这是一个讨论非确定性链码的documentation topic

删除密钥后,可以检索密钥的历史记录。有一个GetHistoryForKey()API可以检索历史记录,其部分响应是一个IsDeleted标志,指示密钥是否已被删除。可以创建一个密钥,删除密钥,然后再次创建密钥; GetHistoryForKey()API会跟踪这种情况。

状态数据库存储当前状态,因此从状态数据库中删除密钥及其值。 GetHistoryForKey()API检查链历史而不是状态数据库以查找先前的键值。

有一个example说明了GetHistoryForKey()API的使用。请参阅getHistoryForMarble函数。