2017-04-26 190 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

我通過編輯原始回覆回答了此問題。 –