GetStateByPartialCompositeKey根据查询账中给定的部分复合键返回一个迭代器可用于遍历所有前缀匹配的复合键。 objectType和属性是预计只有有效的utf8字符串,不应该包含 U + 0000(零字节)和U + 10FFFF(最大和未分配的代码点)。请参阅相关函数SplitCompositeKey和CreateCompositeKey。(一般用于需要查询组合key中所有的信息)
func (sc *SimpleChaincode) queryAllOwner(stub shim.ChaincodeStubInterface) pb.Response {
coloredMarbleResultsIterator, err := stub.GetStateByPartialCompositeKey(INDEX, []string{})
if err != nil {
return shim.Error(err.Error())
}
defer coloredMarbleResultsIterator.Close()
var buffer bytes.Buffer
buffer.WriteString("[")
bArrayMemberAlreadyWritten := false
for coloredMarbleResultsIterator.HasNext() {
responseRange, err := coloredMarbleResultsIterator.Next()
if err != nil {
return shim.Error(err.Error())
}
_, compositeKeyParts, err := stub.SplitCompositeKey(responseRange.Key)
if err != nil {
return shim.Error(err.Error())
}
// name := compositeKeyParts[0]
// hashvalue := compositeKeyParts[1]
owner := compositeKeyParts[2]
// Add a comma before array members, suppress it for the first array member
if bArrayMemberAlreadyWritten == true {
buffer.WriteString(",")
}
buffer.WriteString("{\"owner\":")
buffer.WriteString("\"")
buffer.WriteString(owner)
buffer.WriteString("\"")
buffer.WriteString("}")
bArrayMemberAlreadyWritten = true
}
buffer.WriteString("]")
fmt.Printf("- getHistoryForMarble returning:\n%s\n", buffer.String())
return shim.Success(buffer.Bytes())
}
运行结果:
image.png
网友评论