2017-04-26 187 views
0

我是IBM Hyperledger Fabric的新手。delState如何在Fabric中工作?

在试图走过去的文件,我看到有几个国家 的getState,putState,delState。等

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

我想知道如果总账是“不可改变的,链”,怎么能我们'删除'状态?

鉴于它是一个由每个事务或事务链接的分类帐,是不是不可能删除状态或至少破坏散列链?

谢谢!

+0

请阅读此[如何问](http://stackoverflow.com/help/how-to-ask)以改善您的问题。 – thewaywewere

+0

对不起...修正! – alwayscurious

回答

0

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

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

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

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

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

+0

谢谢! 我也查了一下代码。如果我正确读取它,是否意味着即使我使用delState删除密钥,以前的值仍然保留? – alwayscurious

+0

我通过编辑原始回复回答了此问题。 –