我正在测试我的结构链代码,并在其中创建一个汽车记录。现在,我可以使用相同的密钥创建不同的记录,即使删除密钥记录后,也可以使用相同的密钥创建条目。我想阻止它,所以我必须查询整个分类帐数据,该密钥是否存在,但是一旦数据增长,它的资源和时间就非常浪费。还有其他有效的方法来执行此操作,而不是查询所有块吗?
答案 0 :(得分:0)
我认为,如果您删除密钥,那么不迭代所有块是不可能的。
再添加一个指示该键在您的结构上是否有效的变量而不是使用DelState怎么样? 例如)
type someStruct struct {
SomeMemeberVariable1 someType `json:"someMemberVar1"`
...
Deleted bool `json:"deleted"`
}
并稍后检查此变量
buffer, _ := APIstub.GetState(~~)
if len(buffer) == 0 {
return shim.Error("Not existing key")
}
something := someStruct{}
json.Unmarshal(buffer, &something)
if something.Deleted {
return shim.Error("Already delted key")
}
答案 1 :(得分:0)
此限制可能应该是chaincode程序的一部分,而不必每次都查询分类帐。维护当前输入密钥的列表,在将传入密钥放入分类帐之前,检查列表以确保密钥是新的。也许使用golang hashmap数据结构来实现此列表。