ChaincodeStub.delState如何影响分类帐



我有一个关于org.hyperledger.fabric.shim.ChaincodeStub.delState(String key)如何影响分类账的具体问题。

我知道区块链上的数据几乎永远不会被删除,但根据这里的文档,有一种delState方法,

Records the specified key to be deleted in the writeset of the transaction proposal.
The key and its value will be deleted from the ledger when the transaction is validated and successfully committed.

据我所知,账本有两个组成部分——区块链和世界状态。此操作对这两个组件有什么影响?

在Hyperledger结构中,Ledger分为两个组件:

  1. 区块链/交易日志(LevelDB(
  2. 世界状态(LevelDB/CouchDB(

区块链账本将数据存储在LevelDB中,这是仅追加的,这意味着你只能向其中添加数据,但不能从中删除数据。由于区块链账本以仅追加模式工作,它会维护数据的历史记录。而"世界"状态仅存储当前状态。对于世界状态,您可以在LevelDB和CouchDB之间进行选择。

当你在链代码中使用getHistoryForKey((时,你会从区块链账本中获得数据,而不是从世界状态中获得数据。但是,当您在链代码中使用getState((时,您将从世界状态中获取数据。

因此,即使您使用delState删除数据,数据也会从世界状态中删除,但它会出现在区块链分类账中,您也可以使用getHistoryForKey((从区块链中检索数据,前提是您知道存储数据的密钥。

当你使用getHistoryForKey((时,你会得到这样的数据

[
{
"TxId" :"1121212d...."
"Timestamp" :"" ,
"IsDelete": true
"Record" : {
.......
}
},
{
"TxId" :"2221212d...."
"Timestamp" :"" ,
"IsDelete": false
"Record" : {
.......
}
},
]

最新更新