Hyperledger fabric 限制在hyperledger结构中再次输入相同的关键数据

Hyperledger fabric 限制在hyperledger结构中再次输入相同的关键数据,hyperledger-fabric,hyperledger,Hyperledger Fabric,Hyperledger,我正在测试我的结构链码,在这里我创建了一个汽车记录。现在我可以用同一个键创建不同的记录,甚至在删除键记录之后,我也可以用同一个键创建条目。我想阻止它,所以我必须查询整个分类账数据,无论该键是否存在,但一旦数据增长,它将非常耗费资源和时间。除了查询所有块之外,还有其他有效的方法吗?我认为如果删除密钥,不迭代所有块是不可能的 再添加一个变量来指示键在结构上是否有效,而不是使用DelState,怎么样? ex) 然后检查这个变量 buffer, _ := APIstub.GetState(~~) i

我正在测试我的结构链码,在这里我创建了一个汽车记录。现在我可以用同一个键创建不同的记录,甚至在删除键记录之后,我也可以用同一个键创建条目。我想阻止它,所以我必须查询整个分类账数据,无论该键是否存在,但一旦数据增长,它将非常耗费资源和时间。除了查询所有块之外,还有其他有效的方法吗?

我认为如果删除密钥,不迭代所有块是不可能的

再添加一个变量来指示键在结构上是否有效,而不是使用DelState,怎么样? ex)

然后检查这个变量

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")
}

此限制可能应该是链码程序的一部分,而不必每次都查询分类账。维护当前输入钥匙的列表,在将传入钥匙放入分类账之前,检查列表以确保钥匙是新的。可能使用golang hashmap数据结构来实现此列表

好的,这意味着在删除记录时,我只需要将字段设为null,而不是使用DelstateAPI。@user9040429哦,是的。你是对的。您只需将字段设为null,而不必使用DelState。但是,在当前状态中还会有额外的记录。我在想是否可以有一个商店,我们可以维护密钥,并可以在那里交叉检查是否存在要输入的新记录的密钥。
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")
}